Hauptmenü

Code Problem

Begonnen von Schronk, 25 Oktober 2020, 18:53:34

Vorheriges Thema - Nächstes Thema

Schronk

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


Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Schronk

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")}}

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz