Dummy auf Undefiniert abfragen

Begonnen von sylvester, 24 Februar 2014, 21:30:01

Vorheriges Thema - Nächstes Thema

sylvester

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

franky08

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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

sylvester

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

franky08

Normalerweise ist das in der state gespeichert, aber beim neueinrichten wird da nichts drinn sein. Da bin ich auch überfragt.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

sylvester

Ginge so etwas?


#{if (! (Value("WZ_Deckenfluter")               eq ("on"|"On"|"off"|"Off"))) { fhem("set WZ_Deckenfluter off") }}

franky08

Probier es aus   8)
Wenn nicht Wert Deckenfluter gleich on ODER! ON ODER!.... denke mal das geht nicht aber ich bin kein Perl Experte  :-\
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

gero

So sollte es gehen:

{if(ReadingsVal("Licht","state","undef") eq "undef"){Log 3, "Licht state not set";;fhem("set Licht off")}}

Gruß,
Gero

Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

sylvester

#7
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

gero

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
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

sylvester

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

gero

Kann ich leider erst morgen machen. Bin heute den ganzen Tag unterwegs.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

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
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

sylvester

Hallo Gero,

vielen Dank für das Beispiel.
Habe es gerade eingebaut. :)

Viele Grüße

Stephan