Hallo zusammen,
bin Anfänger und das DOIF bringt mich zur Verzeiflung:
([08:31 - 01:00] and [ESPEasy_ESP_Easy_BH1750:Lux] < 800 and [Anwesenheit] eq "Anwesend") (set AmbilightSchl on) DOELSE (set AmbilightSchl off)
Das DOIF schaltet immer nur einmal. Wenn die Lichtstärke über 800 geht schaltet es nicht das Licht aus. Setze ich über das frontend checkall wird es genau einmal geschaltet. Sinkt die Lichtstärke wieder unter 800 passiert wieder nichts. Mit checkall schaltet es wieder. Was ist daran falsch?
attr = do allways
Mal versucht?
yup hab ich gesetzt:
defmod di_AmbilightSchl DOIF ([08:31 - 23:00] and [ESPEasy_ESP_Easy_BH1750:Lux] < 400 and [Anwesenheit] eq "Anwesend") (set AmbilightSchl on) DOELSE (set AmbilightSchl off)
attr di_AmbilightSchl do always
attr di_AmbilightSchl event-on-update-reading .*
attr di_AmbilightSchl group C) Kombinierte Ereignis- und Zeitsteuerung
attr di_AmbilightSchl initialize 1
attr di_AmbilightSchl room Licht
attr di_AmbilightSchl startup set $SELF checkall
Liefert der ESP regelmäßig Events, zeig mal was im Eventmonitor passiert.
macht er glaube ich:
2018-11-11 18:41:13 dummy fp_time 18:41
2018-11-11 18:41:13 at at_fp_time Next: 18:41:22
2018-11-11 18:41:23 dummy fp_time 18:41
2018-11-11 18:41:23 at at_fp_time Next: 18:41:32
2018-11-11 18:41:33 dummy fp_time 18:41
2018-11-11 18:41:33 at at_fp_time Next: 18:41:42
2018-11-11 18:41:43 dummy fp_time 18:41
2018-11-11 18:41:43 at at_fp_time Next: 18:41:52
2018-11-11 18:41:53 dummy fp_time 18:41
2018-11-11 18:41:53 at at_fp_time Next: 18:42:02
2018-11-11 18:42:03 dummy fp_time 18:42
2018-11-11 18:42:03 at at_fp_time Next: 18:42:12
2018-11-11 18:42:04 ESPEasy ESPEasy_ESP_Easy_BH1750 Lux: 0
2018-11-11 18:42:04 ESPEasy ESPEasy_ESP_Easy_BH1750 Lux: 0
2018-11-11 18:42:13 dummy fp_time 18:42
2018-11-11 18:42:13 at at_fp_time Next: 18:42:22
das komische ist, ich habe noch ein Rolladen DOIF laufen da schaltet er ohne Probleme:
([ESPEasy_ESP_Easy_BH1750:Lux] < 1) (set Rolladenerd zu, set Rolladen_1OG zu) DOELSEIF ([Anwesenheit] eq "Anwesend" and [Urlaub] eq "Nein" and [ESPEasy_ESP_Easy_BH1750:Lux] > 1 and ([07:45|8] or [08:30|7])) (set Rolladenerd auf, set Rolladen_1OG auf) DOELSEIF ([08:30] and [Anwesenheit] eq "Anwesend" and [Urlaub] eq "Ja") (set Rolladenerd auf, set Rolladen_1OG auf) DOELSEIF ([Anwesenheit] eq "Abwesend") (set Rolladenerd zu, set Rolladen_1OG zu)
: :o
attr di_AmbilightSchl event-on-update-reading .*
Der Sinn dieses Attributes in diesem DOIF erschliesst sich mir nicht, würdest Du mich aufklären?
Ebenso dieses Attributattr di_AmbilightSchl do always
Entweder ist die 1.Bedingung wahr, dann ist sie es bis sie unwahr wird, wozu benötigst Du always?
Und wozu ist dies notwendigattr di_AmbilightSchl initialize 1
wenn Du ohnehin bei jedem Start die Bedingung prüfen lässt?
Wie oft werden die Events ESPEasy_ESP_Easy_BH1750 Lux erzeugt und warum 2x direkt hintereinander?
Es fehlt jetzt noch ein Listing vom Fehlerfall.
Und nebebei, ein at das alle 10s auslöst und einen Dummy setzt, erscheint mir nicht sehr ökonomisch, es generiert letztlich 2 Events.
Erst mal danke für die Anrwort und die Hinweise!
Das Atr. Do always habe rein genommen, weil es nicht funktioniert hat ebenso das Atr. Event-on-update.
Nehme ich wieder raus!
Das ESPeasy erzeugt glaube zwei events, weil sich einmal der state ändert "Lux : 20" und einmal das Reading (ESPeasy:Lux) . Ich schaue heute Abend mal das ich die Events bekomme, wenn es nicht funktioniert. Bin auf der Arbeit und schreibe vom Handy.
Die Leerzeichen in der Zeitspanne könnten stören, bin aber nicht sicher.
Ok, die Leerzeichen lasse ich mal weg ... das wäre natürlich der Hammer :o
Zitat von: Josh303 am 12 November 2018, 20:29:02
Ok, die Leerzeichen lasse ich mal weg ... das wäre natürlich der Hammer :o
Die Leerzeichen kannst du drin lassen, die stören nicht.
Wenn ich bei Konstrukten mit mehreren Bedingungen nicht weiter weiss, packe ich diese in DOIF_Readings (sollte ich mir langsam in die Signatur eintragen ;) ) und kann diese ganz einfach tracken. Wenn es dort passt, kann ich es zusammenfassen und danach ins DOIF übernehmen.
ZitatWenn ich bei Konstrukten mit mehreren Bedingungen nicht weiter weiss, packe ich diese in DOIF_Readings (sollte ich mir langsam in die Signatur eintragen ;) ) und kann diese ganz einfach tracken. Wenn es dort passt, kann ich es zusammenfassen und danach ins DOIF übernehmen.
das mit den DOIF_Readings verstehe ich noch nicht ganz ... muss ich mich mal mit beschäftigen.
Dennoch glaube ich, dass ich das Problem gefunden habe. Ich habe das Attr. CheckReadingEvent auf 0 gesetzt. Muss ich aber noch final testen...sehe ich aber erst Morgen wenn es hell wird ;-)
yup, das war es: Attr. CheckReadingEvent auf 0 ;)
Ist wohl seit neuestem nicht mehr standardmaßig auf 0.... ::) egal hauptsache es funzt jetzt :D
DOIF_Readings würde wohl auch funktionieren:
DOIF ([Anwesenheit] eq "Anwesend" and [$SELF:licht] eq "on") (set AmbilightSchl on) DOELSE (set AmbilightSchl off)
attr DOIF_Readings licht:([ESPEasy_ESP_Easy_BH1750:Lux] < 800 ? "on" : "off")
@Moderatoren: Bitte als gelöst markieren
Es wundert mich jetzt, dass DOIF_Readings ohne CheckReadingEvent 0 reagiert, denn es sollte sich genau so verhalten, wie die Bedingung.
Gelöst kannst du selbst in Betreff ändern. Auf wenn diese Vorgehensweise hier im Forum immer wieder gefordert wird, sehe ich es nicht als erforderlich, denn fast alle Anfragen werden früher oder später beantwortet und sind dann positiv oder negativ gelöst. Und es gibt nichts Schlimmeres als Threads, die als gelöst gezeichnet sind und sich dann noch über Wochen und Monate durch weitere Beiträge als nicht zufriedenstellend gelöst herausstellen.
Zitat von: Josh303 am 14 November 2018, 20:19:47DOIF_Readings würde wohl auch funktionieren
Ja, aber warum so umständlich?
DOIF ([Anwesenheit] eq "Anwesend" and [$SELF:licht]) (set AmbilightSchl on) DOELSE (set AmbilightSchl off)
attr DOIF_Readings licht:([ESPEasy_ESP_Easy_BH1750:Lux] < 800)
sollte es auch tun.
Jetzt fehlt aber noch deine Zeit.
man lernt nie aus ;)