Hallo!
Kann mir jemand verraten, wie ich einen dummy oder auch fs20 auf undefiniert abfrage?
Also so etwas wie:
{if (Licht == ???) set Licht off}
Vielen Dank im voraus
Stephan
Hallo, ein dummy hat doch einen definierten Zustand, entweder on oder off oder hell/dunkel ..., wenn dein angelegter dummy einen undefinierten Zustand hat, dann setz ihn doch einfach auf definiert. set <name> dummy on oder was du brauchst.
VG
Frank
Hallo Frank,
ja, das kann ich natürlich machen.
Ich fände es aber deutlich sauberer, wenn das FHEM beim Neustart prüft, ob für alle Geräte / Dummies Werte vorliegen. Falls nicht, soll es einen von mir definierten Zustand schalten.
(Ich musste gerade mein FHEM neu einrichten. Dann waren natürlich alle Zustände weg und ich musste alle von Hand wieder eingeben. Das muss doch auch eleganter gehen.)
Ich habe eh am Ende der Config eine Initialisierung, die zum Beispiel die Watchdogs antriggert und die Wochentimer und Heizungstimer ansteuert.
Viele Grüße
Stephan
Normalerweise ist das in der state gespeichert, aber beim neueinrichten wird da nichts drinn sein. Da bin ich auch überfragt.
VG
Frank
Ginge so etwas?
#{if (! (Value("WZ_Deckenfluter") eq ("on"|"On"|"off"|"Off"))) { fhem("set WZ_Deckenfluter off") }}
Probier es aus 8)
Wenn nicht Wert Deckenfluter gleich on ODER! ON ODER!.... denke mal das geht nicht aber ich bin kein Perl Experte :-\
So sollte es gehen:
{if(ReadingsVal("Licht","state","undef") eq "undef"){Log 3, "Licht state not set";;fhem("set Licht off")}}
Gruß,
Gero
Hallo Gero,
vielen Dank für den Tipp. Das scheint in der Tat zu funktionieren. Man muss allerdings vorher die fhem.save per Hand einbinden, da dies in der cfg-Datei immer als letztes passiert.
Ich habe allerdings ein seltsames Phänomen:
Wenn ich den Befehl einmal eintrage, klappt es.
Stehen zwei Befehle der gleichen Art hintereinander, bekomme ich eine leere Fehlermeldung???? Dabei sind die Befehle einzeln aber richtig.
Hat dafür jemand eine Erklärung?
Viele Grüße
Stephan
Eine Erklärung dafür habe ich auch nicht. Aber es wäre insgesamt sauberer, wenn du das initialisieren deiner Devices an ein notify für global INITIALIZED hängst und den Perl-Code in die myUtils auslagerst.
Gruß,
Gero
Hallo Gero,
jetzt hast du mich abgehängt. Kannst du vielleicht ein kurzes Beispiel für die cfg und myUtils machen?
Der Ablauf muss doch eigentlich folgender sein:
1. Configuration laden
2. fhem.save laden
3. fs20 Steckdosen, dummies, ... initialisieren, falls sie keinen gültigen Wert haben
4. Wochen-Timer, Heizungs-Timer aktualisieren (hier werden teilweise dummies als Bedingung verwendet
5. Watchdogs einmalig antriggern
Viele Grüße
Stephan
Kann ich leider erst morgen machen. Bin heute den ganzen Tag unterwegs.
Gruß,
Gero
Zitat von: sylvester am 26 Februar 2014, 07:50:07
Hallo Gero,
jetzt hast du mich abgehängt. Kannst du vielleicht ein kurzes Beispiel für die cfg und myUtils machen?
Der Ablauf muss doch eigentlich folgender sein:
1. Configuration laden
2. fhem.save laden
3. fs20 Steckdosen, dummies, ... initialisieren, falls sie keinen gültigen Wert haben
4. Wochen-Timer, Heizungs-Timer aktualisieren (hier werden teilweise dummies als Bedingung verwendet
5. Watchdogs einmalig antriggern
Viele Grüße
Stephan
Hier wie versprochen ein kurzes Beispiel:
fhem.cfg:
define Licht.dummy dummy
attr Licht.dummy setList state:on,off
attr Licht.dummy webCmd state
define UserInit.notify notify global:INITIALIZED {myInit()}
in 99_myUItils.pm
sub myInit()
{
fhem("set Licht.dummy off") if(ReadingsVal("Licht.dummy","state","undef") eq "undef");
}
Vielleicht geht es auch einfacher und schöner.
Zu deinem Ablauf:
1. und 2. wird automatisch erledigt.
3. wird nach global INITIALIZED getriggert (siehe Beispielcode)
4. und 5. kannst du ebenfalls dort dranhängen.
Gruß,
Gero
Hallo Gero,
vielen Dank für das Beispiel.
Habe es gerade eingebaut. :)
Viele Grüße
Stephan