MacBook Akku Ladeanzeige

Begonnen von fhainz, 18 November 2014, 18:22:42

Vorheriges Thema - Nächstes Thema

fhainz

Hallo!

Ich würde gerne über die aktuelle Akku Ladung meines MacBook Air mit FHEM die Ladesteckdose ein/ausschalten.

Mit diesem Befehl bekomme ich schon mal die Akku Ladung.
ioreg -l | grep -i capacity | tr '\n' ' | ' | awk '{printf("%.2f%%", $10/$5 * 100)}'

Hat jemand eine Idee wie ich diese Ausgabe in mein FHEM, läuft auf einem MacMini, bekomme? Eigentlich müsste ich nur die Ausgabe des Scripts in eine Variable speichern und damit die URL eines Dummys aufrufen. Das dann später in einen CronJob gepackt und fertig. So ist zumindest der Plan ;D

Jemand eine Idee wie ich das hinbekomme?

Grüße

rudolfkoenig


fhainz

#2
Funktioniert mittlerweile. Ich stell morgen ein Anleitung hier rein.


Grüße

Edit:
Mittlerweile gibt es ja ein Mac Forum. Könnte es Moderator bitte dahin schubsen?

Zrrronggg!

Nur: Warum? Wegen der Leerlaufleistung des Netzteils?
Für den Akku bringt das nix würde ich denken. Es sei denn du schaltest bei 70% schon ab.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

fhainz

Zitat von: Zrrronggg! am 20 November 2014, 05:19:55
Für den Akku bringt das nix würde ich denken. Es sei denn du schaltest bei 70% schon ab.
Mein Plan ist es von 40-80% zu laden. Das ist angeblich sehr gut für ein Lithium Ionen Akku.

Zrrronggg!

Stimmt.

Ich gehe allerdings davon aus, dass Apple selber schon "nur" zu 80% lädt (das entspricht dann der Anzeige "100%" unter OS X) denn sonst wären die Standzeiten gar nicht zu erreichen.  Mein MacBook Pro ist z.b. 46 Monate alt, hat 490 Zyklen auf dem Buckel und noch 81% Restkapazität.

Früher hättest du einen fast 4 Jahre alten LiIo Akku der täglichen in Gebrauch ist nur noch als Briefbeschwerer oder Brandbeschleuniger verwenden können.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

fhainz

Zitat von: Zrrronggg! am 20 November 2014, 14:29:42
Ich gehe allerdings davon aus, dass Apple selber schon "nur" zu 80% lädt
Kann schon sein, das mit 40/80 kenn ich von hier: http://www.ifun.de/macbook-akku-richtig-laden-53046/
Zitat von: Zrrronggg! am 20 November 2014, 14:29:42
Früher hättest du einen fast 4 Jahre alten LiIo Akku der täglichen in Gebrauch ist nur noch als Briefbeschwerer oder Brandbeschleuniger verwenden können.
Stimmt :D

Mein MacBook Air ist mittlerweile 37 Monate alt, der Akku hat 859 Ladezyklen und immer noch 74% Kapazität. 


Andy89

Zitat von: fhainz am 18 November 2014, 21:50:56
Funktioniert mittlerweile. Ich stell morgen ein Anleitung hier rein.

Grüße

Servus,
ich geh mal davon aus, dass es bei dir läuft, deswegen wollte ich mal nachfragen, ob es eine kleine Anleitung geben wird?

Beste Grüße
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

fhainz

#8
Hallo!

Sry, die Mailbenachrichtung ist irgendwo untergegangen.

Ich hab das derzeit relativ kompliziert gelöst, aber es funktioniert.

Als erstes legst du eine Datei batLog.sh mit diesem Inhalt an.
akku=$(/usr/sbin/ioreg -l | grep -i capacity | tr '\n' ' | ' | awk '{printf("%.0f", $10/$5 * 100)}')
cCapacity=$(/usr/sbin/ioreg -n AppleSmartBattery -r | awk 'BEGIN { ORS = ":" } /"CurrentCapacity"/{ print $3}')
mCapacity=$(/usr/sbin/ioreg -n AppleSmartBattery -r | awk 'BEGIN { ORS = ":" } /MaxCapacity/{ print $3}')
dCapacity=$(/usr/sbin/ioreg -n AppleSmartBattery -r | awk 'BEGIN { ORS = ":" } /DesignCapacity/{ print $3}')
temp=$(/usr/sbin/ioreg -n AppleSmartBattery -r | awk 'BEGIN { ORS = ":" } /Temperature/{ print $3/100}')
cycle=$(/usr/sbin/ioreg -n AppleSmartBattery -r | awk 'BEGIN { ORS = ":" } /CycleCount/{ print $3}')
charging=$(/usr/sbin/ioreg -n AppleSmartBattery -r | awk 'BEGIN { ORS = ":" } /IsCharging/{ print $3}')
fullyCharged=$(/usr/sbin/ioreg -n AppleSmartBattery -r | awk 'BEGIN { ORS = ":" } /FullyCharged/{ print $3}')

curl -k "http://IP:PORT/fhem?cmd=set%20macbookairTrigger%20$akku%20$charging%20$fullyCharged%20$cycle%20$cCapacity%20$mCapacity%20$dCapacity%20$temp"


IP und PORT musst du ersetzen.

In FHEM legst du dir 2 dummys und ein notify an.
define macbookair dummy
attr macbookair event-on-change-reading .*
attr macbookair stateFormat akku %

define macbookairTrigger dummy

define n_macbookairTrigger notify macbookairTrigger.* { macbookair($EVENT);; }


In deine 99_myUtils.pm kommt:
sub macbookair($){
  my ($event) = @_;
  my $device  = "macbookair";
  my $hash    = $main::defs{$device};
  my ($akku, $charging, $fullyCharged, $cycle, $cCapacity, $mCapacity, $dCapacity, $capacity, $temp );
  my @split;
 
  my @a = split( / /, $event );
 
  $akku         = $a[0];
  @split = split(/:/, $a[1]);
  $charging     = $split[0];
  @split = split(/:/, $a[2]);
  $fullyCharged = $split[0];
  @split = split(/:/, $a[3]);
  $cycle        = $split[0];
  @split = split(/:/, $a[4]);
  $cCapacity    = $split[0];
  @split = split(/:/, $a[5]);
  $mCapacity    = $split[0];
  @split = split(/:/, $a[6]);
  $dCapacity    = $split[0];
  @split = split(/:/, $a[7]);
  $temp         = $split[0];
  $temp =~ s/,/./g;
 
  $capacity = sprintf("%i", $mCapacity * 100 / $dCapacity);
 
  readingsBeginUpdate($hash);
   readingsBulkUpdate($hash, "akku", $akku );
   readingsBulkUpdate($hash, "charging", $charging );
   readingsBulkUpdate($hash, "fullyCharged", $fullyCharged );
   readingsBulkUpdate($hash, "cycle", $cycle );
   readingsBulkUpdate($hash, "currentCapacity", $cCapacity );
   readingsBulkUpdate($hash, "maxCapacity", $mCapacity );
   readingsBulkUpdate($hash, "designCapacity", $dCapacity );
   readingsBulkUpdate($hash, "capacity", $capacity );
   readingsBulkUpdate($hash, "temp", $temp );
  readingsEndUpdate($hash, 1);

}


Jetzt muss nur noch ein CronJob eingerichtet werden, damit die batLog.sh regelmäßig aufgerufen wird. Dazu Terminal aufrufen und
crontab -e
eingeben und bestätigen.

Es öffnet sich eine neue Datei.
- Mit i kommt man in den insert-mode.
- Mit ESC wird dieser wieder verlassen.
- Mit :quit wird die Datei wieder geschlossen.

In diese Datei kommt zB
* * * * * sh /Pfad/zur/batLog.sh

Dieser Befehl ruft die batLog.sh jede Minute auf.
Anschließend sollten in dem macbookair dummy die Readings abgebildet sein.


Grüße

Andy89

Servus,
also erstmal Danke!
Es funktioniert zwar, aber ich hätte dennoch 2 Fragen:
1.) als Port habe ich jetzt den 8083 genommen. Es kommen Daten an und werden angezeigt. Ist das aber der richtige Port?

2.) Da ich auf dem MacBook noch nie ein Shell Skript ausgeführt habe, habe ich dazu nun eine Frage. Wird das Skript automatisch im Hintergrund ausgeführt, wenn sich der Akku ändert? Oder muss ich dies nun durch ein anderes Skript(oder ähnliches) alle 5-10 Minuten starten lassen? Beim LogIn muss ich das auch noch irgendwie starten lassen^^

Beste Grüße und schönes Weekend!
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

fhainz

Zitat von: Andy89 am 18 Januar 2015, 11:39:41
1.) als Port habe ich jetzt den 8083 genommen. Es kommen Daten an und werden angezeigt. Ist das aber der richtige Port?
Einfach einen FHEMWEB Port nehmen, welcher ist egal.

Zitat von: Andy89 am 18 Januar 2015, 11:39:41
2.) Da ich auf dem MacBook noch nie ein Shell Skript ausgeführt habe, habe ich dazu nun eine Frage. Wird das Skript automatisch im Hintergrund ausgeführt, wenn sich der Akku ändert? Oder muss ich dies nun durch ein anderes Skript(oder ähnliches) alle 5-10 Minuten starten lassen? Beim LogIn muss ich das auch noch irgendwie starten lassen^^
Klar, sry auf das hab ich vergessen. Ich habs oben reineditiert.

Grüße

Andy89

zu 2.) habe ich noch eine kleine Ergänzung. Da ich noch kein crontab initialisiert hatte, konnte ich es mit :quit nicht speichern, denn es kam immer der Fehler: "E37: No write since last change (add ! to override)"

durch googlen habe ich den Fehler beheben können. Die Lösung für mein Problem war, statt :quit zu benutzen,
einfach die Shift-Taste halten und zweimal die Z-Taste drücken.

Danke trotzdem für deine Unterstüzung. Es funktioniert nun perfekt bei mir =)

Schönes Weekend!!
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

zentis666

Hallo,

ich muss den alten Thread leider aufwärmen, vielleicht kann mir jemand helfen der das am Laufen hat:

das Ganze hat bei mir lange genau so wie hier beschrieben funktioniert,
allerdings hat das Ende April letzten Jahres aufgehört
(zumindest kam da die letzte Reading-Aktualisierung im macbook dummy an).

Die Daten vom MacBook kommen bei mir zwar noch im
"macbookTrigger" an (State wird regelmässig aktualisiert, da steht momentan
state        77 Yes: No: 5107: 6600: 6600: 0:          2021-03-02 09:06:03),
werden aber nicht mehr in das "macbook" dummy Device übertragen.
Ich finde den Fehler nicht, hab das Ganze schon jahrelang nicht mehr angefasst, hat sich da irgendwas am Syntax im Script in der 99_myutils.pm geändert?

Grüße
Sven
--
FHEM auf Debian VM - ESXi 6.0 Intel Nuc i5 4th Gen, Homematic auf HMCCU - RaspberryMatic auf Raspberry PI 3,
EM1000 & FS20 über CUNO,  IT über Arduino Firmata, MiLight über WLAN-nRF Gateway, Ebus, 1Wire, diverse Squeezeboxen, Dreambox 920UHD, Homebridge