Hallo zusammen,
ich möchte ein paar Zeilen aus der fhem.conf in 99_myUtils übertragen. Es funktioniert nicht 100%ig!
Ich möchte den Batteriestatus von Z-Wave Sensoren irgendwie auf der fhem Seite grafisch anzeigen.
sub my_batteriestatus($) {
my ($batteryState) = @_;
fhem "define ZW.Batterie readingsGroup WD.Eingangstuer:battery.*:[Bb]atteryLevel";; #----> Es funktioniert
fhem "attr ZW.Batterie notime 1";; ----> Es funktioniert
fhem "attr ZW.Batterie room ZWave";; ----> Es funktioniert
#Ab hier funktioniert es nicht mehr.
fhem "attr ZW.Batterie valueFormat {return "0" if( $batteryState eq 0 );; return "100" if( $batteryState eq 100 );; return "25" if( $batteryState < 2.1 );; return "50" if( $batteryState < 2.3 );; return "75" if( $batteryState < 2.5 );; return "100"}";;
fhem "attr ZW.Batterie valueIcon {'battery.0' => 'measure_battery_0@red','battery.100' => 'measure_battery_100@green','Battery.0' => 'measure_battery_0@red','Battery.100' => 'measure_battery_100@green','batteryLevel.0' => 'measure_battery_0@red','batteryLevel.25' => 'measure_battery_25@red','batteryLevel.50' => 'measure_battery_50@orange','batteryLevel.75' => 'measure_battery_75@green','batteryLevel.100' => 'measure_battery_100@green'}";;
}
Vielen Dank im Voraus. :)
Besser mal posten wie es vorher war, also was du von wo nach wo schieben willst.
Besser noch:
was du hast und was du erreichen willst...
Und natürlich nicht nur schreiben: funktioniert nicht, sondern auch was nicht funktioniert und evtl. Logausgaben etc.
Gruß, Joachim
Und wozu überhaupt eine readingsGroup per Sub definieren?
Gruß
Dan
OK. Jetzt kommt die ganze Geschichte:
Also, ich habe JeeLink im Einsatz. Die Sensoren, die ich mit JeeLink betreibe sind: Technoline TX 29 DTH. Ich wollte den Batteriestatus von Technoline Sensoren grafisch darstellen. Aus diesem Grund habe ich folgender Code von der meintechblog.de übernommen und es funktioniert sehr gut.
Der Code ist bei mir in der Datei fhem.cfg
define ZE.Batterie readingsGroup .*:[Bb]attery\
.*:[Bb]atteryLevel
attr ZE.Batterie notime 1
attr ZE.Batterie room Zentral
attr ZE.Batterie valueFormat {return "0" if( $VALUE eq "low" );; return "100" if( $VALUE eq "ok" );; return "25" if( $VALUE < 2.1 );; return "50" if( $VALUE < 2.3 );; return "75" if( $VALUE < 2.5 );; return "100"}
attr ZE.Batterie valueIcon {'battery.0' => 'measure_battery_0@red','battery.100' => 'measure_battery_100@green','Battery.0' => 'measure_battery_0@red','Battery.100' => 'measure_battery_100@green','batteryLevel.0' => 'measure_battery_0@red','batteryLevel.25' => 'measure_battery_25@red','batteryLevel.50' => 'measure_battery_50@orange','batteryLevel.75' => 'measure_battery_75@green','batteryLevel.100' => 'measure_battery_100@green'}
Der Batteriestatus von Technoline zeigt keinen Wert an, sondern "low" oder "ok". Soweit so gut. Jetzt habe ich mittlerweile Z-Wave Sensoren im Einsatz. Der Batteriestatus vom Z-Wave Sensor zeigt einen Wert an. Ich möchte nun irgendwie den vorhandenen Code, der für Technoline funktioniert für die Z-Wave Sensoren verwenden, falls überhaupt möglich ist! Ich habe eine Funktion in der Datei 99_myUtils.pm. Ich rufe diese Funktion in der Datei fhem.cfg, um den Batteriewert von einem Z-Wave Sensor zu übergeben. Bevor ich mir zu viel Arbeit mache, um den Code in 99_myUtils zu übertragen, möchte ich gerne wissen, ob man den Code überhaupt für diesen Zweck anpassen kann!?!
Oder habt ihr eine andere Idee, wie man die Batterien der Z-Wave Sensoren grafisch auf der fhem Seite darstellen kann?
Warum machst du für dasselbe/verbundene Problem mehrere Threads auf? ;)
https://forum.fhem.de/index.php/topic,71694.0.html
Und warum nicht eine von den dort gegebenen Lösungen mal ausprobieren? Oder getan und nicht zurückgemeldet?
Wie willst du übrigens eine Funktion in myUtils aus der fhem.cfg aus aufrufen??
Was geht (und ich auch mache u.a.) ist z.B. den Code der bei dir in der valueFormat/stateFormat in der cfg steht durch einen sub-Aufruf ersetzen und dann eine Funktion/Sub in der myUtils aufrufen, die dann prüft welcher Wert, welches Reading, welches Gerät etc. von der ReadingsGroup gerade "bearbeitet" wird (dargestellt werden soll) und dann entsprechende Formate zurück gibt...
Bei den Batteriewerten gehe ich (wie im anderen Thread beschrieben) den Umweg über einen Dummy. (jaja schon wieder ein Dummy / könnte man auch anders lösen: userReading / aber wie ich das gemacht habe habe ich mich nicht getraut vorhandene Geräte durch userReadings etc. zu "verändern", daher der Umweg über Dummy, da kann nicht groß was passieren ;) / und da es läuft habe ich es auch gelassen)
D.h. Notify auf .*battery.* und dann Aufruf einer Funktion/Sub die dann feststellt welches Gerät etc. und dann entsprechend "berechnet" was ich für dieses Gerät etc. haben will und das dann in einen Dummy schreibt.
Diesen kann ich dann einfach darstellen, da dieser befüllt ist wie ich es brauche und halt einheitlich für alle Gerätetypen die ich so habe...
Gruß, Joachim
> Warum machst du für dasselbe/verbundene Problem mehrere Threads auf? ;)
Sorry. Du hast vollkommen Recht.
>Und warum nicht eine von den dort gegebenen Lösungen mal ausprobieren? Oder getan und nicht zurückgemeldet?
Ne. :o
>Wie willst du übrigens eine Funktion in myUtils aus der fhem.cfg aus aufrufen??
define EingangstuerBatteriestatus notify WD.Eingangstuer:battery.* {my_batteriestatus(ReadingsNum('WD.Eingangstuer','battery','default'))}
Zitat von: pi-user am 12 Mai 2017, 12:25:03
> Warum machst du für dasselbe/verbundene Problem mehrere Threads auf? ;)
Sorry. Du hast vollkommen Recht.
>Und warum nicht eine von den dort gegebenen Lösungen mal ausprobieren? Oder getan und nicht zurückgemeldet?
Ne. :o
>Wie willst du übrigens eine Funktion in myUtils aus der fhem.cfg aus aufrufen??
define EingangstuerBatteriestatus notify WD.Eingangstuer:battery.* {my_batteriestatus(ReadingsNum('WD.Eingangstuer','battery','default'))}
Aha ;)
Ja, dann hierzu die Antwort von Dan beachten!
Weil Defines macht man (normalerweise) nicht in einer Sub (evtl. mal ein defmod bzgl. 'at' oder so)...
Und dann halt wie gesagt entweder wie ich (hier und im anderen Thread) vorgeschlagen habe dort (also in der Sub die dann aufgerufen wird, wenn sich am battery Reading des Gerätes 'WD.Eingangstuer' etwas ändert bzw. ein entspr. Event kommt) dann die "Berechnungen/Wandlungen" anstellen und halt dann in userReadings oder einem Dummy oder oder oder speichern/ablegen.
Direkt das dann in die Readingsgroup geben geht nicht.
Dafür ginge der andere Weg, also in der ReadingsGroup (wenn du beispielweise eine für alle battery-Readings etc. hast) bei z.B. valueStyle eine Sub aufrufen, die dann entsprechende Berechnungen/Wandlungen anhand der übergebenenen Werte (Gerätename, Wert, Reading, ...) durchführt und dann eben den für dich (und das jeweilige Gerät) passenden valueStyle zurück gibt.
(die Sub wird bei Readingsgroup für jeden Eintrag aufgerufen, den die Readingsgroup erstellt...)
Hier ist zu sehen was ich meine (ist halt für Temperatur etc. aber sollte ja nur zeigen was ich meine):
https://forum.fhem.de/index.php/topic,69460.msg609651.html#msg609651
Oder halt commandref readingsGroup, Wiki, ...
Und natürlich auch mal bzgl. myUtils kucken!
Gruß, Joachim
Vielen Dank für die Antwort. :)
Zitat von: pi-user am 12 Mai 2017, 13:57:26
Vielen Dank für die Antwort. :)
Gerne!
Äh, welche? Hier oder dort? ;)
Viel Erfolg, Joachim
Überall. ;)
Können wir das Thema dann als gelöst betrachten?
>Können wir das Thema dann als gelöst betrachten?
Ja. Vielen Dank. :)