FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fume am 29 Dezember 2014, 12:17:23

Titel: Warum wird so oft geschaltet.
Beitrag von: fume am 29 Dezember 2014, 12:17:23
Hallo

Ich bin gerade dabei mich durch die Doku zu wälzen und besitze noch keine Hardware. Darum habe ich zum Testen ein paar Dummies angelegt und meine Wetterstation eingebunden.
Zum Testen habe ich mir einen Dämmerungsschalter angelegt mit

define daemmerung { if(ReadingsVal("Wetterdaten","ws_Licht",100) < 10) { fhem("set au_licht on") } else
{ fhem("set au_licht off") } }


Läuft alles besten, doch als ich mir eine Logdatei für eine ein/aus Licht anlegte bemerkte ich dass der ein oder ausbefehl immer gleich 20x gesendet wird.
Ist das normal oder ein Fehler meinerseits. Bei set au_licht off/on wird nur 1mal geschaltet. (siehe um 18:02:30)

2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:43 au_licht on
2014-12-28_18:01:44 au_licht on
2014-12-28_18:01:44 au_licht on
2014-12-28_18:01:44 au_licht on
2014-12-28_18:01:44 au_licht on
2014-12-28_18:01:44 au_licht on
2014-12-28_18:01:44 au_licht on
2014-12-28_18:01:44 au_licht on
2014-12-28_18:01:44 au_licht on
2014-12-28_18:02:30 au_licht off
2014-12-28_18:06:43 au_licht on
2014-12-28_18:06:43 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on
2014-12-28_18:06:44 au_licht on


Grüsse Fume
Titel: Antw:Warum wird so oft geschaltet.
Beitrag von: Puschel74 am 29 Dezember 2014, 13:42:53
Hallo,

wenn ich deinen Code so in die FHEM-Befehlszeile eingebe bekomme ich logischerweise ein
ZitatUnknown module {
von FHEM angezeigt.

Du zeigst uns also nicht den ganzen Code da das Schlüsselwort notify (vermute ich mal) fehlt und das Device das das notify triggert.
Also frei Schnauze evtl. so:
define daemmerung notify Wetterdaten.* { if(ReadingsVal("Wetterdaten","ws_Licht",100) < 10) { fhem("set au_licht on") } else
{ fhem("set au_licht off") } }

oder auch so:
define daemmerung notify Wetterdaten:.* { if(ReadingsVal("Wetterdaten","ws_Licht",100) < 10) { fhem("set au_licht on") } else
{ fhem("set au_licht off") } }


Wenn du nun im EventMonitor schaust siehst du die Events vom Device Wetterdaten - und jedes dieser Events triggert dein notify und führt dazu das der Code ausgeführt wird.
Schlecht da unnötig - wie du schon richtig bemerkt hast.

Tipp:
Mach dich mit regexp vertraut - siehe Wiki, Forum und Perl.
Es gibt ja mehr als genug Seiten dazu und versuch mal sowas:
define daemmerung notify Wetterdaten:ws_Licht.* { if(ReadingsVal("Wetterdaten","ws_Licht",100) < 10) { fhem("set au_licht on") } else
{ fhem("set au_licht off") } }

so es das Device Wetterdaten mit dem Reading ws_Licht gibt (und dieses auch so geschrieben wird).

Daher auch als nächster Tipp:
Lies dir mal meinen angepinnten Beitrag durch - dort habe ich schonmal das nötigste an Infos beschrieben - das define von Wetterdaten fehlt und dessen Readings.
Weiters - lass die Finger von der fhem.cfg und schau auch mal ins FHEM-Logfile.
FHEM "spricht" mit dir wenn es richtig behandelt wird und meldet entweder sofort wenn was nicht passt (ein define z.B. ohne Schlüsselwort) oder schreibt auch mal was ins FHEM-Logfile.
Diese Infos wären auch noch nett gewesen.

Grüße

P.S.: Wenn du dich erstmal an die Befehlszeile und das DEF gewöhnt hast willst du nichts anderes mehr  ;)

Edith: Am Device Wetterdaten noch das attr event-on-change-reading .* setzen und das notify sollte nur noch getriggert werden wenn sich ws_Licht ändert.
Um dann immer noch ein nicht-nochmaliges schalten zu verhindern sollte im Code der Status des Device geprüft werden - das wird dann aber kein Einzeiler bei mir.
Oder du schaust dir mal DOIF an (in der commandref auch auf deutsch erhältlich  8) ).
Titel: Antw:Warum wird so oft geschaltet.
Beitrag von: fume am 29 Dezember 2014, 15:17:40
Hallo,

Ich hatte natürlich
define daemmerung notify Wetterdaten { if(ReadingsVal("Wetterdaten","ws_Licht",100) < 10) { fhem("set au_licht on") } else
{ fhem("set au_licht off") } }

in meiner Eingabe sonst hätte es ja gar nicht funktioniert. (Sorry habe "notify Wetterdaten" vergessen)

Habe es jetzt auf
define daemmerung notify Wetterdaten:ws_Licht.* { if(ReadingsVal("Wetterdaten","ws_Licht",100) < 10) { fhem("set au_licht on") } else
{ fhem("set au_licht off") } }

geändert und der Schaltbefehl wird nur mehr 1x agegeben.  :)

Der schaltbefehl erfolgt zwar alle 5 Minuten, da "Wetterdaten" alle 5min aktualisiert.
Ich werde mich dann mal weiter reinlesen, bezüglich DOIF..........

Erstmal Danke für die Hilfe