Geektool: Batteriestatus Bluetooth Maus

Avant18

Avant18

Aktives Mitglied
Thread Starter
Dabei seit
19.12.2010
Beiträge
133
Reaktionspunkte
5
Hat jemand einen Code für Geektool, mit dem ich mir den Batteriestatus meiner Apple Magic Maus anzeigen lassen kann?
 
*PUSH* Habe auch Interesse!
 
Die Systemeinstellung Bluetooth in der Menueleiste genügt euch nicht ?
 
Nein ;) Zu umständlich..
 
Also ich warte einfach ab, bis die Batterien/Akkus leer sind und wechsele sie dann :)
 
Up! Hat denn niemand einen Code oder einen Link zur Lösung???
 
O.k., mit viiiel suchen habe ich jetzt irgendwie das hier zusammengebaut:
ioreg -l | grep -i batterypercent | awk '{ print substr( $0, length($3) -1) , length ($3) }'

Das liefert zu Beginn der 2. Zeile das gewünschte Ergebnis. Aber wie werde ich den Rest los????
 
O.k., mit viiiel suchen habe ich jetzt irgendwie das hier zusammengebaut:
ioreg -l | grep -i batterypercent | awk '{ print substr( $0, length($3) -1) , length ($3) }'

Das liefert zu Beginn der 2. Zeile das gewünschte Ergebnis. Aber wie werde ich den Rest los????

Na wenn Du schon soweit gekommen bist, sollte der Rest jetzt nicht mehr sooo schwer sein...

Ich hab wirklich auch nicht allzuviel Ahnung von Terminal-Befehlen, aber ich weiss mittlerweile wie man sich Ahnung verschafft: durch lesen der man-pages ;)

Man sehe sich also den Code an und finde Schritt für Schritt heraus was er macht.

Beginnend mit:
man ioreg
schaut man sich die Optionen des Befehls an und findet da schon mal eine passende Einschränkung:
ioreg -r -n BNBMouseDevice

Mit grep holt man nun die gewünschte Zeile (man grep), also:
grep BatteryPercent

Das Output sieht jetzt so aus:
| "BatteryPercent" = 46

Nun müssen wir dieses eigentlich nur noch beim "="-Zeichen teilen und den 2. Teil ausgeben (man cut), also:
cut -d "=" -f 2

..und dann den ganzen Salat zusammensetzen:
ioreg -r -n BNBMouseDevice | grep BatteryPercent | cut -d "=" -f 2

..und schon hat Terminal-Noob madu die Aufgabe gelöst ;)

Hmm, das Leerzeichen vor der Zahl noch wegmachen?
Dann folgendes noch anhängen: | sed 's/ //g'

man-pages sind wirklich was tolles :)

Wenn's statt der Maus die Tastatur sein soll, ersetze 'BNBMouseDevice' durch 'IOAppleBluetoothHIDDriver'.


PS: gut möglich, dass es noch viel besser und einfacher geht... ;)
 
  • Gefällt mir
Reaktionen: MacPopey und Avant18

www.macosxtips.co.uk schrieb:
ioreg -c BNBMouseDevice | grep Percent | awk '{print $11}'
das funktioniert auch, und bestätigt mir, dass meine Lösung gar nicht so schlecht war, imho sogar besser, denn:

ioreg -c BNBMouseDevice
gibt viel zuviel aus
ioreg -r -n BNBMouseDevice
schränkt das Output schon massiv ein (gib mal beide Befehle im Terminal ein und beachte den Unterschied der ausgegebenen Datenmenge ;))

mit 'awk' (man awk) gehts natürlich auch, ich fand 'sed' aber hier passender, da sicherer und einfacher.
'awk' teilt den String bei jedem Leerzeichen und gibt (in obigem Code) die 11. Stelle aus.
Da wir ja aber das "=" an passender Stelle im String haben, fand ich das teilen dort mit 'sed' naheliegender :)
 
Ich werde beides heute abend mal parallel testen. Jetzt bin ich noch in der Firma und an einer Windose ;-)
 
@manu: Du hast recht, im Terminal wird nur die Prozentzahl (z.B. 81) angezeigt. Das ist, was ich möchte.
ABER im Geektool wird Folgendes angezeigt:
("Supermode"
81

Habe nach deinen Erklärungen versucht den Code zu verändern. Hat aber leider nichts gebracht.... :(

EDIT: Habe noch mal nachgesehen: die Ausgabe im Geektool ist, wenn man sie mal nicht "cutted" , zweizeilig.
In der ersten Zeile, die tierisch lang ist, steht hinter dem 2. "=" das "Supermode"; in der 2. Zeile eben die "81".
Man müsste also nur auf die 2. Zeile zugreifen und dafür die erste ausser Acht lassen.
Soweit die Theorie ;)
 
Zuletzt bearbeitet:
Ich schon wieder. Diesmal mit einer Erfolgsmeldung! :)
Folgender Befehl gibt genau das aus, was ich möchte:
mbatt=`ioreg -c BNBMouseDevice | grep BatteryPercent | tail -1|awk '{print $9}'`
echo "Mouse Battery: $mbatt%"

Ergibt: Mouse Battery: 81% !!!! FREU .....
 
warum da in Geektool 2 Zeilen ausgegeben werden weiss ich grad nicht (und mag das auch grad nicht via Geektool testen)
das "Supermode" kommt offenbar von ca. 15 Zeilen weiter oben (siehe Ausgabe von 'ioreg -r -n BNBMouseDevice' im Terminal)
offenbar wird das irgendwie falsch gegreped.

Dein letzter Code nimmt mit 'tail' nur die letzte Zeile und dann mit 'awk' das 9. Objekt. Ich fand 'cut' halt die sauberere Lösung da "eindeutiger" (steht ja auch in dem von Dir verlinkten Artikel, dass die Objektnummer evt. nicht immer gleich ist).
Aber wenn's passt ist ja gut. ;)

Ich habe mir bei meinen Geektool-Spielereien aber eh angewöhnt, (fast) alle Codes als einzelne Skripte (.sh) in einem Ordner zu sichern und dann von Geektool jeweils dieses Skript aufzurufen, statt ellenlange Codes in Geektool einzugeben. Lässt sich dann auch einfacher ändern, anpassen und ist halt übersichtlicher. :)
 
Kann man denn alle Geektool Comands 1:1 als Script abspeichern, oder muss man diese vorher irgendwie noch anpassen?
 
Grundsätzlich schon, klar.
Sind ja Shell-Scripts, einfach als "One-Liner" auf 1 Befehls-Zeile "komprimiert".

Hat halt den Vorteil, dass man's einfacher anpassen und testen kann, den Code übersichtlicher gestalten und Kommentare einfügen kann.

Bei kurzen Befehlen wie der Ausgabe des Datums od. ähnlich machts weniger Sinn, bei längeren Aktionen wie Daten irgendwo auslesen und dann aufbereiten, oder Zusammensetzen mehrerer Outputs aber schon.
 
wenn du fertig bist kannst du bitte den genauen Code posten?
Mich nervt es tierisch nicht zu wissen wie lang die Maus noch durchhält...
 
Bei mir erscheint nur: Mouse Battery: =% Wo ist die Zahl? Refresh habe ich auf 10 Sekunden gesetzt...
 
Bei mir erscheint nur: Mouse Battery: =% Wo ist die Zahl? Refresh habe ich auf 10 Sekunden gesetzt...

Das ist eben genau das von mir erwähnte Problem mit 'awk'...
Die Stelle ist nicht 100% fix. Daher meine Lösung mit 'cut'.

im Geektool wird Folgendes angezeigt:
("Supermode"
81
Geektool gibt das wirklich anders aus als das Terminal. K.A. wieso...
Ich habs jetzt einfach mit 'sed' rausgeschnitten. :noplan:
Nicht wirklich schön aber was soll's...

Hier ein "quick&dirty"-Script zum lokal abspeichern und selber anpassen:

Code:
#!/bin/sh

# Batteriezustand von Bluetooth-Geräten auslesen
# formatiert fuer Geektool


# Einstellungen:

# Gerät: Maus = BNBMouseDevice / Tastatur = IOAppleBluetoothHIDDriver

device="BNBMouseDevice"

# Ausgabe: pretxt / endtxt

pretxt="Batterie:"
endtxt="%"


# Auslesen und aufbereiten:

if [ "$device" = "BNBMouseDevice" ] ; then
percent=$(ioreg -r -n $device | grep 'BatteryPercent' | cut -d '=' -f 2 | sed 's/{"SuperMode"//g')
fi

if [ "$device" = "IOAppleBluetoothHIDDriver" ] ; then
percent=$(ioreg -r -n $device | grep 'BatteryPercent' | cut -d '=' -f 2 | sed 's/{"FactoryDefault"//g')
fi


# Ausgabe:

echo $pretxt $percent $endtxt

Irgendwo abspeichern als z.B. 'battery.sh'
Im Terminal ausführbar machen mit chmod 755 /pfad/zum/script/battery.sh
In Geektool neues Shell-Fenster mit /pfad/zum/script/battery.sh

Im Script könnt ihr den Ausgabetext vor und nach der Zahl anpassen (pretxtx / endtxt) sowie bei 'device' statt der Maus die Tastatur wählen.

Viel Spass damit ;)

Refresh habe ich auf 10 Sekunden gesetzt
Ich würd mal sagen, jede Viertelstunde (900 sec) reicht bei weitem.
Ich würde es sogar auf 1 h (3600 sec) setzen.
Refreshed eure Tools nicht häufiger als nötig, das belastet nur sinnlos das System.
 
wenn du fertig bist kannst du bitte den genauen Code posten?
Mich nervt es tierisch nicht zu wissen wie lang die Maus noch durchhält...

Hier ist der Code:
mbatt=`ioreg -c BNBMouseDevice | grep BatteryPercent | tail -1|awk '{print $9}'`
echo "Mouse Battery: $mbatt%"

Ich habe mit der PRINT Angabe etwas probiert. Im Original stand $11, bei mir war es aber unter $9 zu finden. Habe Geektool Refresh solange auf 2 Sekunden gestellt, bis ich es hatte. Jetzt steht es auf 3600 ;)
Im Prinzip eben alles so wie madu es schon einige Male hier ausführlich erklärt hat.

P.S: Ich habe das Gefühl, viele nutzen das Geektool, aber einen richtigen aktuellen Thread zum Posten von Codes gibt es irgendwie nicht, oder? Bei macrumors.com gibt es einen, der immer mal einen Blick für Neues lohnt ;)
 
Zurück
Oben Unten