Hallöle,
lange gesucht im Forum, da dieses Phänomen nicht neu ist.
Nur meins habe ich nicht entdecken können.
Klassiches Problem. Bewegungsmelder schaltet Lampe an und wieder aus.
Gelöst über ein Notify und auch schon über DOIF. Funktioniert auch soweit, nur halt nicht immer.
Nach ansicht des Eventmonitors löst der Bewegungsmelder immer ordentlich aus und erzeugt das besagte Event.
Nach Prüfung mit Logeinträgen habe ich nun herausgefunden, dass das Notify sowie auch das DOIF nicht immer auf das Event reagieren.
Die Last auf meinen FHEM ist jetzt nicht wirklich groß, da fast alle Akteure mit event-on-change readiing laufen.
Außer den OBIS Zählern die bei jeder Änderung Events schreiben, läuft sonst nicht viel. Nun ist es mir ein Rätsel warum das Notify resp. DOIF mal auslösen und mal nicht.
Der Vollständigkeit halber hier ein List des Notifys.
Internals:
DEF sensor_motion_Flur_EG:occupancy:.* {
if ("$EVTPART1" eq "true") {
if(ReadingsVal("bulb_licht_flur_eg", "uState", "") eq "OFF" and ReadingsVal("sensor_motion_Flur_EG", "lux", "") < 43)
{fhem('set bulb_licht_flur_eg on');
Log 3, "Flur EG Licht an - Signal gesendet";
}
}
if ("$EVTPART1" eq "false") {
fhem('set bulb_licht_flur_eg off';
Log 3, "Flur EG Licht aus - Signal gesendet";
}
}
}
FUUID 5dab4cad-f33f-de9d-da61-4cd0cd1a29150d8d
NAME notify_sensor_motion_Flur_EG
NOTIFYDEV sensor_motion_Flur_EG
NR 184
NTFY_ORDER 50-notify_sensor_motion_Flur_EG
REGEXP sensor_motion_Flur_EG:occupancy:.*
STATE 2019-11-05 18:04:35
TRIGGERTIME 1572973475.23522
TYPE notify
READINGS:
2019-11-05 17:49:04 state active
Attributes:
DbLogExclude .*
alias Licht bei Bewegung Flur EG (Notify)
group Licht
room X_Logik
PS: Gibt es eine Möglichkeit ein Reading nur max alle 30 Sek. ein Event zu erzeugen. Mit event-on-change reading oder event-on-update bei einem OBIS Stromzähler kommt leider sonst immernoch recht häufig ein Eintrag.
VG
Chris
Zitat von: dogas am 05 November 2019, 18:10:55
PS: Gibt es eine Möglichkeit ein Reading nur max alle 30 Sek. ein Event zu erzeugen. Mit event-on-change reading oder event-on-update bei einem OBIS Stromzähler kommt leider sonst immernoch recht häufig ein Eintrag.
VG
Chris
event-min-interval
Bau doch mal eine Logausgabe in das Notiy ein und zwar OHNE eine if-Bedingung...
Vielleicht stimmen nur die Bedingungen nicht...
...glaube nicht, dass das Notify an sich nicht triggert...
Und ein Auszug aus dem Eventmonitor zum Gerät wäre noch hilfreich damit man sieht was da so "gefeuert" wird...
Gruß, Joachim
Zitat von: MadMax-FHEM am 05 November 2019, 19:10:53
Bau doch mal eine Logausgabe in das Notiy ein und zwar OHNE eine if-Bedingung...
Vielleicht stimmen nur die Bedingungen nicht...
...glaube nicht, dass das Notify an sich nicht triggert...
Und ein Auszug aus dem Eventmonitor zum Gerät wäre noch hilfreich damit man sieht was da so "gefeuert" wird...
Gruß, Joachim
Ich habe log Einträge in das Notify ohne die IF Anweisungen eingebaut. Im Eventmonitor kann ich sehen, dass der Bewegungsmelder immer ein Event feuert bei Bewegung unddas Notify auch immer reagiert.
Es scheint wohl so das die Information über den Zustand der Lampe nicht rechtzeitig bei FHEM ankommt (IKEA Lampe über MQTT). Habe jetzt ein sleep 0.5 vorgeschaltet. Damit funktioniert es wohl.
Ich beobachte das mal.
Zitat von: amenomade am 05 November 2019, 18:57:03
event-min-interval
Leider funzt das nicht. Ist ein min, kein max.
Naja... Du hast geschrieben:
ZitatPS: Gibt es eine Möglichkeit ein Reading nur max alle 30 Sek. ein Event zu erzeugen. Mit event-on-change reading oder event-on-update bei einem OBIS Stromzähler kommt leider sonst immernoch recht häufig ein Eintrag.
Ich habe gedacht, Du möchtest die Anzahl Events reduzieren, auf max. ein Event je 30 Sek.
event-min-interval macht genau das:
Zitat von: CommandRefEin Event wird nur dann generiert, falls seit dem letzten Auftreten des gleichen Events mindestens minInterval Sekunden vergangen sind.
min / max ist nur eine Frage von Satzaufbau...
Ein sleep innerhalb von Perlcode blockiert FHEM für die angegebene Zeit komplett.
Zitat von: amenomade am 05 November 2019, 20:37:54
Naja... Du hast geschrieben:
Ich habe gedacht, Du möchtest die Anzahl Events reduzieren, auf max. ein Event je 30 Sek.
event-min-interval macht genau das:min / max ist nur eine Frage von Satzaufbau...
habe ja noch ein event-on-change auf den OBIS Zählern und die feuern halt auch unterhalb dieser Zeitspanne, weil sich halt was ändert, wie ist das lösbar?
Zitat von: CoolTux am 05 November 2019, 20:38:43
Ein sleep innerhalb von Perlcode blockiert FHEM für die angegebene Zeit komplett.
Da steht aber nur, das FHEM nur blockiert wird, wenn es von keinem Befehl gefolgt wird.
Dann poste doch was du jetzt hast...
...dann kann man kucken...
Und halt auch mal Ausgaben vom Eventmonitor...
Sonst können wir nur raten...
Gruß, Joachim
Zitat von: dogas am 05 November 2019, 20:43:06
Da steht aber nur, das FHEM nur blockiert wird, wenn es von keinem Befehl gefolgt wird.
Diese Aussage bezieht sich auf das FHEM sleep. Ich gehe davon aus das Du ein Perl sleep verwendest.
Zitat von: MadMax-FHEM am 05 November 2019, 20:53:38
Dann poste doch was du jetzt hast...
...dann kann man kucken...
Und halt auch mal Ausgaben vom Eventmonitor...
Sonst können wir nur raten...
Gruß, Joachim
Das Notify sieht jetzt so aus. Wie gesag, der Notify triggert wirklich jedes mal wie ich durch die Logs sehen konnte, nur die IF Anweisungen scheinen ab und an einfach zu fix zu sein. Mit dem sleep ging es jetzt immer. Der Eventmonitor zeigt nichts weiter, ist also nicht weiter relevant.
Internals:
DEF sensor_motion_Flur_EG:occupancy:.* { sleep 0.2;
if ("$EVTPART1" eq "true") {
if(ReadingsVal("bulb_licht_flur_eg", "uState", "") eq "OFF" and ReadingsVal("sensor_motion_Flur_EG", "lux", "") < 43)
{fhem('set bulb_licht_flur_eg on');
Log 3, "Flur EG Licht an";
}
}
if ("$EVTPART1" eq "false") {
if(ReadingsVal("bulb_licht_flur_eg", "uState", "") eq "ON")
{fhem('set bulb_licht_flur_eg off');
Log 3, "Flur EG Licht aus";
}
}
Log 3, "Bewegungsmelder Flur EG Änderung Anwesenheit";
}
FUUID 5dab4cad-f33f-de9d-da61-4cd0cd1a29150d8d
NAME notify_sensor_motion_Flur_EG
NOTIFYDEV sensor_motion_Flur_EG
NR 184
NTFY_ORDER 50-notify_sensor_motion_Flur_EG
REGEXP sensor_motion_Flur_EG:occupancy:.*
STATE 2019-11-05 20:36:00
TRIGGERTIME 1572982560.56198
TYPE notify
READINGS:
2019-11-05 20:31:01 state active
Attributes:
DbLogExclude .*
alias Licht bei Bewegung Flur EG (Notify)
group Licht
room X_Logik
Wenn loggen, dann würde ich halt auch EVTPRT1 mit loggen, dann siehst du den "Input" in deine Abfragen/Bedingungen...
Vielleicht sind die anders als "gedacht"...
Gut, wenn du keine Eventmonitorausgaben posten willst, dann kann/will ich nicht mehr weiterhelfen...
Relevanz liegt immer im Auge des Betrachters...
...und selbst wenn auch ich/wir nichts "Relevantes" finden/sehen sollten hilft es auch das selbst festzustellen...
EDIT: das sleep blockiert... Daher denke ich liegt der Grund warum es mit sleep funktioniert woanders, da in der Zeit in fhem nichts weiter passiert... Max Dinge "von außen" laufen weiter... Allerdings ohne fhem als "Abnehmer"... ;)
Gruß, Joachim
Relevant ist aber was CoolTux gesagt hat. Somit wird fhem bei jeder Triggerung 0.2 Sek komplett blockiert...
Zitat von: amenomade am 05 November 2019, 21:15:09
Relevant ist aber was CoolTux gesagt hat. Somit wird fhem bei jeder Triggerung 0.2 Sek komplett blockiert...
Was für eine Alternative habe ich?
Zitat von: MadMax-FHEM am 05 November 2019, 20:53:38
Dann poste doch was du jetzt hast...
...dann kann man kucken...
Und halt auch mal Ausgaben vom Eventmonitor...
Sonst können wir nur raten...
Gruß, Joachim
Infos liefern...
...damit wir mitkucken können... ;)
Und Logausgaben, die auch zeigen "womit" die "Entscheidungen" getroffen werden...
...damit du/wir sehen können warum wie entschieden wurde und dann hoffentlich warum das so ist/kam...
Gruß, Joachim
Zitat von: dogas am 05 November 2019, 21:58:12
Was für eine Alternative habe ich?
Einen Timer zu setzen, der nach 0.2 Sekunden die Ausführung durchführt, das kann at, FHEM-sleep, InternalTimer oder beim DOIF set_Exec sein ;)
Bevor man ein Problem lösen kann sollte man erstmal das Problem kennen.
Bedeutet Du musst erstmal schauen was er denn da genau ausliest zum Zeitpunkt Deiner Bedingung.
Bau ganz oben eine Logausgabe ein welche Dir die Ergebnisse Deiner Bedingungsabfragen aus gibt.
So, heute Morgen war es wieder soweit, das Licht ging nicht an.
Den EVTPART1 habe ich nun in der Log Ausgabe drin. Ist aber immer nur "true" oder "false". Also passt das schon mal. Wie ich ja schon sagte triggert der Notify ja immer ordentlich.
Ich werde wohl die Ergebnisse der Bedingungen noch ausgeben müssen, da passt wohl was nicht.
Und nun für Euch hier die Ausgabe des EM und der Log von heute früh. ::)
Zitat von: dogas am 06 November 2019, 07:52:17
So, heute Morgen war es wieder soweit, das Licht ging nicht an.
Den EVTPART1 habe ich nun in der Log Ausgabe drin. Ist aber immer nur "true" oder "false". Also passt das schon mal. Wie ich ja schon sagte triggert der Notify ja immer ordentlich.
Ich werde wohl die Ergebnisse der Bedingungen noch ausgeben müssen, da passt wohl was nicht.
Und nun für Euch hier die Ausgabe des EM und der Log von heute früh. ::)
So wir haben wohl den Übeltäter. Wie man in der EM1.jpg sehen kann benutze ich eine Umsetzung des State auf Upper-Case. uState. Diese Umsetzung ist Zeitweise so verzögert, das der uSTATE der Lampe nicht zur Abfrage passt. Da aber STATE mal Groß und mal Klein vom Device im EM ausgegeben wird, muss ich die Abfrage auf STATE machen und in der Abfrage direkt auf Groß sowie Kleinschreibung prüfen.
Da fehlt mir aber etwas Know-How, wie diese Bedingung formuliert werden kann. ???
Kann das Funktionieren???
if(uc[bulb_licht_flur_eg:state] eq "OFF" and ReadingsVal("bulb_licht_flur_eg", "lux", "") < 43)
if(uc[bulb_licht_flur_eg:state] eq "OFF" and ReadingsVal("bulb_licht_flur_eg", "lux", "") < 43)
Dieser Code ist absoluter Unsinn. Und so lange Du nicht anfängst auf die Helfenden zu hören und weiter hier mit Bildern kommst statt einem vernünftigen list des Notify nach jeder Änderung von Dir und einem Auszug aus dem Log hier in Code Tags wird das wohl auch nichts werden.
Ich weiß schon warum ich das Forum meide, weil der Ton einfach überheblich ist. Nichts für Anfänger. Ich hoffe die Adaptieren die LUXTRONIK2 bald zu ioBroker, dann muss ich mich nicht mehr damit rumärgen.
Am Ende finde ich die meisten Sachen dann immer selbst heraus, das muss ich mir nicht antun.
Danke für nichts.
Zitat von: dogas am 06 November 2019, 10:55:41
Ich weiß schon warum ich das Forum meide, weil der Ton einfach überheblich ist. Nichts für Anfänger. Ich hoffe die Adaptieren die LUXTRONIK2 bald zu ioBroker, dann muss ich mich nicht mehr damit rumärgen.
Am Ende finde ich die meisten Sachen dann immer selbst heraus, das muss ich mir nicht antun.
Danke für nichts.
hmm, habe den thread jetzt kurz überflogen. Der einzige der im Ton daneben liegt bist gerade du.
du vergisst irgendwie, das andere ihre Zeit opfern um zu helfen.... solltest du überdenken!
und wieder ein Name mehr auf meiner Pers. ignoreliste [emoji4]
gruss Byte09
Gesendet von meinem ELE-L29 mit Tapatalk
Was heißt hier überheblich!?
Du suchst Hilfe...
...wir wollen helfen (in Freizeit)...
...können aber halt nicht hellsehen und nicht zaubern...
Wenn du keine bzw. nicht die "gewünschten" /notwendigen Infos liefern willst...
...bzw. nicht im "gewünschten" /benötigten Format...
...oder "vorgefiltert"...
Was erwartest du...
Immer eine Freude (unter solchen "Bedingungen") zu helfen...
Gruß, Joachim
Zitat von: dogas am 06 November 2019, 08:09:31
So wir haben wohl den Übeltäter. Wie man in der EM1.jpg sehen kann benutze ich eine Umsetzung des State auf Upper-Case. uState. Diese Umsetzung ist Zeitweise so verzögert, das der uSTATE der Lampe nicht zur Abfrage passt. Da aber STATE mal Groß und mal Klein vom Device im EM ausgegeben wird, muss ich die Abfrage auf STATE machen und in der Abfrage direkt auf Groß sowie Kleinschreibung prüfen.
Da fehlt mir aber etwas Know-How, wie diese Bedingung formuliert werden kann. ???
Kann das Funktionieren???
if(uc[bulb_licht_flur_eg:state] eq "OFF" and ReadingsVal("bulb_licht_flur_eg", "lux", "") < 43)
Angenommen, dass Du es syntaxisch korrekt schreiben würdest, was wird es bringen?
Laut deinem Bild wurden state sowohl auch uState um 06:44:34 gesetzt (das nenne ich nicht "verzörgert"), und dein Bewegungsmelder hat um 06:44:45 occupancy true gemeldet und damit nw. dein notify getriggert.
Es sei denn, es passiert inzwischen etwas anderes... aber das können wir nicht sehen, da Du die gewünschte Information gar nicht oder nicht vollständig liefern willst.
Wenn Du aber meinst, Du kriegst bessere Hilfe im ioBroker Forum, ohne die gewünschte Informationen zu liefern, dann... viel Spaß im ioBroker Forum. Ich hoffe für dich, die ioBroker Leute haben effizientere Kristallkugeln.
Wenn Du hier doch weitere Hilfe brauchst, dann:
1 - keep cool
2 - lies hier: https://forum.fhem.de/index.php/topic,71806.0.html
3 - Gib uns die schon mehrmals angeforderte Informationen (Form, Siehe 2.)