FHEM Forum

FHEM - Hardware => Server - Mac => Thema gestartet von: fhainz am 18 November 2014, 18:22:42

Titel: MacBook Akku Ladeanzeige
Beitrag von: fhainz am 18 November 2014, 18:22:42
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
Titel: Antw:Shell Script ausgabe -> FHEM Server
Beitrag von: rudolfkoenig am 18 November 2014, 19:10:34
Guter Plan :)
Titel: Antw:Shell Script ausgabe -> FHEM Server
Beitrag von: fhainz am 18 November 2014, 21:50:56
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?
Titel: Antw:MacBook Akku Ladeanzeige
Beitrag von: Zrrronggg! am 20 November 2014, 05:19:55
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.
Titel: Antw:MacBook Akku Ladeanzeige
Beitrag von: fhainz am 20 November 2014, 06:38:48
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.
Titel: Antw:MacBook Akku Ladeanzeige
Beitrag von: Zrrronggg! am 20 November 2014, 14:29:42
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.
Titel: Antw:MacBook Akku Ladeanzeige
Beitrag von: fhainz am 20 November 2014, 17:10:57
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/
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. 

Titel: Antw:Shell Script ausgabe -> FHEM Server
Beitrag von: Andy89 am 04 Januar 2015, 14:48:05
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
Titel: Antw:MacBook Akku Ladeanzeige
Beitrag von: fhainz am 18 Januar 2015, 09:47:30
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 -eeingeben 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
Titel: Antw:MacBook Akku Ladeanzeige
Beitrag von: Andy89 am 18 Januar 2015, 11:39:41
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
Titel: Antw:MacBook Akku Ladeanzeige
Beitrag von: fhainz am 18 Januar 2015, 12:04:50
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.

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
Titel: Antw:MacBook Akku Ladeanzeige
Beitrag von: Andy89 am 18 Januar 2015, 13:45:25
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!!