Nabend,
vermutlich versteh ich mal wieder irgendwas nicht. Ich habe einen Temperatursensor der mir auch schön Temp und Feuchte anzeigt. Nun hab ich ein wenig mit stateFormat gespielt und es wird auch wie gewünscht angezeigt:
Temperatur: x.x °C Luftfeuchte: x.x %
Nur hab ich dann Sorgen mit meinen Pilight Steckdosen ... da haut dann die schalterei nicht mehr hin. Aus gehen sie noch, ändern den Staus aber nicht, einzeln über Icon anschalten nicht mehr.
attr HM_Sensor_Aussen stateFormat {sprintf('Temperatur: %.1f °;C Luftfeuchte: %.1f %%',ReadingsVal($name,'temperature','0'),ReadingsVal($name,'humidity','0'))}
Kann mir das jemand erklären, bitte?
Danke Th.
Hallo,
stateFormat verändert den STATE eines Devices. Viele Devices benötigen ein korrektes STATE um zu funktionieren. Also Vorsicht mit stateFormat. Es sollte immer so genutzt werde, wie das Device es erwartet und nicht wie man es möchte.
Grüße Jörg
Kannst du mir sagen warum es auch Auswirkungen hatte auf andere Devices?
Wo kann ich sehen was ein Device "erwartet" ?
Danke, Th.
Deine erste Frage verstehe ich nicht. Bei der zweiten, entweder es steht in der Commander.ref oder durch Ausprobieren. Bei aktiven Devices, also Devices die etwas an Aktoren senden würde ich stateFormat nur einsetzen, wenn ich wirklich den STATE verändern möchte und weiß was ich tue. Bei passiven Devices sollte unkritisch sein.
Grüße Jörg
Gesendet von iPhone mit Tapatalk
Hi,
ZitatKannst du mir sagen warum es auch Auswirkungen hatte auf andere Devices?
Ich meine damit dass, wenn ich das so wie im ersten Beitrag beschrieben nutze dann gehen meine Steckdosen nicht mehr anzusteuern. Völlig anderes Device als das was ich mit dem Stateformat ändern möchte.
Ich bekomme dann die Anzeige wie gewünscht nur kann ich dann über die Weboberfläche andere Devices nicht mehr schalten. Kommentiere ich das aus dann gehts sofort wieder.
Das was ich ändern will ist nur die Anzeige von einem Temperatur/Feuchte Sensor (Homematic). Also nix was irgendwas schalten muss oder Befehle entgegennimmt.
Lagere den Perl-Code mal in eine sub der myUtils aus und schaue, ob es dann wieder funktioniert.
Nimm doch mal anstatt:
attr HM_Sensor_Aussen stateFormat {sprintf('Temperatur: %.1f °;C Luftfeuchte: %.1f %%',ReadingsVal($name,'temperature','0'),ReadingsVal($name,'humidity','0'))}
folgendes:
attr HM_Sensor_Aussen stateFormat {sprintf('Temperatur: %.1f °;C Luftfeuchte: %.1f %%',ReadingsVal('HM_Sensor_Aussen','temperature','0'),ReadingsVal('HM_Sensor_Aussen','humidity','0'))}
Mir ist nämlich nicht klar, welchen Inhalt $Name zum Zeitpunkt des Aufrufs hat.
Grüße Jörg
Zitat von: JoWiemann am 25 April 2015, 19:14:10
Mir ist nämlich nicht klar, welchen Inhalt $Name zum Zeitpunkt des Aufrufs hat.
Grüße Jörg
IdR sollte $NAME
hier (und nur hier) HM_Sensor_Aussen als Inhalt haben da es das auslösende Device ist.
$name sollte auch $NAME geschrieben werden da $name nicht belegt ist - gibt es im Logfile keine Fehlermeldung dazu :o.
$NAME ist eine FHEM-gültige Variable.
@Puschel74: Das ist leider hier quatsch. In den userReadings enthält $name und nur $name den Namen des Devices ;) $NAME ist dort nicht gesetzt. $NAME gibt es nur in notifies, so weit mir bekannt ist.
Zitat von: marvin78 am 25 April 2015, 19:25:08
@Puschel74: Das ist leider hier quatsch. In den userReadings enthält $name und nur $name den Namen des Devices ;) $NAME ist dort nicht gesetzt.
Man könnte man probieren, $name hier in ' ' zu setzen.
Daher verwende ich keine UserReadings dafür :P
in einer sub klappt das
my ($DEVICE,$READING,$VALUE) = @_;
nämlich einwandfrei - ok, $NAME kommt dort auch nicht vor da es dort $DEVICE ist (hab ich mit notify verwechselt - mea culpa tut mir leid).
Ich wollte nicht damit sagen, dass man hier userReadings verwenden sollte ;) Aber dadurch kommt der Threadersteller vermutlich darauf.
Eine sub habe ich ja oben schon empfohlen.
nun bin ich vollends verwirrt :o
Ich hab mir jetzt auch nochmal die Anfängerdoku vorgenommen ... finde da aber weder eine Erklärung (wann, wieso, weshalb) zu userReadings noch was es mit den Subs auf sich hat und wann die warum einzusetzen sind :o :o
Ich versuch mich weiter durchzukämpfen 8)
Th.
Hast du das hier probiert?
attr HM_Sensor_Aussen stateFormat {sprintf('Temperatur: %.1f °;C Luftfeuchte: %.1f %%',ReadingsVal('HM_Sensor_Aussen','temperature','0'),ReadingsVal('HM_Sensor_Aussen','humidity','0'))}
Hi,
ja, hab ich grade mal gemacht und es scheint zu funktionieren. Wenn aber doch $name eigentlich HM_Sensor_Aussen enthält was ist daran denn jetzt anders?
Danke, Th.
Das stimmt so nicht. $name enthält den Devicenamen in userReadings, offenbar aber nicht in stateFormat (siehe oben).
ah ok,
wenn ich aber $name verwende bekomme ich auch die korrekten Werte angezeigt nur gab es dann mit andern Devices Fehler. Also scheint $name doch den Devicenamen zu beinhalten??
irgendwann versteh ich es bestimmt auch :)
Das kann schon sein. Ich bin da nicht so sicher. Eigentlich sollte es. Was passiert wenn du $name in einfache Anführungszeichen setzt?
Was soll ich sagen ... dann gehts auch :)
Dann waren die Hochkommas der Fehler?
Ja. Darauf hätte ich auch vorher kommen können. Wir sind ja hier innerhalb der sprintf Funktion.
Kommando zurück, geht nicht! Es werden zwar die Formatierungen korrekt angezeigt aber die Werte sind 0.0.
Hab jetzt man Testweise 1 Wert mit $name und einen mit HM_Sensor_Aussen gemacht dann kommt der 1. mit 0.0 und der Zweite korrekt.
Geht so also doch nicht.
Dann bleibt dir nur der Weg über eine sub oder eben direkt mit dem Devicenamen.
Mit dem Devicenamen scheint es ja zu gehen. Von daher ist es ja schon mal was :)
Danke dir für dein Mühe!
Th.