Hallo,
Ich brauche mal Hilfe, denn ich sehe es seit zwei Tagen einfach nicht:
Schwimmen.on {if(Value("Daemmerungssensor") ne "off" ) {fhem ("set Daemmerungssensor off ; attr DaemmerungCheck disable 1 ; define Schwimm_off at +00:30:00 set Daemmerungssensor on; set Schwimmen off ; define DeamCheckOn at +00:30:00 attr DaemmerungCheck disable 0")} else { fhem ("set Schwimmen off")}}
Es funktioniert bis auf eine Sache alles, wie es soll:
Wenn der Daemmerungssensor nicht aus ist (es also dunkel ist) und Schwimmen auf on geht, wird Schwimmen sofort wieder ausgeschaltet und der DaemmerungCheck für 30 Minuten deaktiviert und danach wieder aktiviert.
Nur der Daemmerungssensor bleibt an und geht nicht auch für 30 Minuten aus. Das Dumme ist, ich hatte die Funktion für Monate am Laufen und hab den Daemerungscheck vor zwei Tagen eingebaut. Seit dem funktioniert der Teil wie er soll, der alte mit dem Dammerungssensor aber nicht mehr.
Was übersehen ich hier?
Danke...
Hi,
kannst Du mal bitte die Ausgabe von list Daemmerungssensor
liefern?
Ich vermute Dein Code ist Teil eines notify.
Du fragst Value() ab, das heisst den STATE.
Du setzt im Code das gleiche Gerät was Du abfragst, der set Befehl muss aber nicht automatisch STATE setzen.
Die beiden at in deinem code werden mMn zur gleichen Zeit gesetzt, die Bedeutung der Semikolon an der Stelle ist Dir klar? Siehe die Codebeispiele hier:
https://fhem.de/commandref_DE.html#command
Gruß Otto
Hi Otto,
Korrekt, es ist ein notify (und zwar der komplette).
Der Daemmerungssensor ist ein FS20 Gerät, dessen state ich manuell mit Set on/off ändern kann. Hier der list Auszug:
ZitatInternals:
BTN 00
DEF 2d42 00
FUUID 5c7a5e60-f33f-ee9b-270b-0be0813f159bb089
IODev FHZ1300PC
NAME Daemmerungssensor
NR 81
STATE off
STILLDONETIME 0
TYPE FS20
XMIT 2d42
CODE:
1 2d42 00
READINGS:
2020-10-26 09:13:46 state off
Attributes:
IODev FHZ1300PC
room Draußen
Alles was unten im ersten fhem {} steht, soll auch zur gleichen Zeit passieren, wobei die definierten at-s natürlich nach ihrer Zeit agieren sollen - aber der erste Teil, dass der Sensor auf off gesetzt wird, funktioniert nicht. Ist im Code irgendwo ein Stolperfalle, womit ich ihn direkt wieder einschalte? Folgender Teil kreiert ja einen temporären at, welcher das Einschalten erst nach 30 Minuten durchführt; ;
define Schwimm_off at +00:30:00 set Daemmerungssensor on
und sonst kann ich nicht sehen, was den Sensor wieder einschaltet. Auch keine andere Funktion in FHEM macht dies.
Schwimmen.on {if(Value("Daemmerungssensor") ne "off" ) {fhem ("set Daemmerungssensor off ; attr DaemmerungCheck disable 1 ; define Schwimm_off at +00:30:00 set Daemmerungssensor on; set Schwimmen off ; define DeamCheckOn at +00:30:00 attr DaemmerungCheck disable 0")} else { fhem ("set Schwimmen off")}}
Also dann ich versuch mal die Analyse:
Ein komplettes notify wäre ein list NameDesNotify, so ist es nur die DEF, die den Helfer etwas raten lässt. ;)
Das Ganz wird getriggert von dem regEx Schwimmen.on. Das ist suboptimal, es "quält" Dein FHEM. Besser wäre Schwimmen:on. Siehe dazu auch die Doku und das Wiki von notify
{Wenn STATE nicht off {}} - wenn Du auf on testen willst, dann teste mit eq on. ne irgendwas ist meist suboptimal: weil alles andere.
- dann fhem() läuft alles parallel ab.
-- set Daemmerungssensor off
-- attr DaemmerungCheck disable 1 (suboptimal weil config Änderung)
-- define Schwimm_off at +00:30:00 set Daemmerungssensor on
-- set Schwimmen off
-- define DeamCheckOn at +00:30:00 attr DaemmerungCheck disable 0
{else}Wenn STATE gleich off dann set Schwimmen off.
Triggert er denn das notify? Also werden die temporären at angelegt? Steht was im Log?
Gruß Otto