Hallo,
kurz die Rahmenbedingungen: Ich schalte über einen LM-Air von JBMEDIA alle meine Intertechno / FS20 Aktoren. Über einen Raspberry mit CUL 868 möchte ich im Laufe der Zeit über FHEM in die übrige Smarthomeaktoren-Welt einsteigen. Zusätzlich möchte ich mit den Möglichkeitn von FHEM etwas mehr Logik für die Schaltung des LM-Air aufbauen. DIe Aktoren des LM-Air können alle mittels HTTP-Request geschaltet werden.
Jetzt die aktuelle Problemlage: Ich möchte den Eingangsbereich mit EInbaustrahlern erleuchten und parallel dazu den daran anschließenden Weg mit einem Strahler. Beide Lampen hängen jeweils an einem Intertechno-Aktor. Sobald ich die Eingangstüre öffne, schickt mir der Tür-Sensor in ein Hilfs-Dummy (myLichtVordach) eine 1. Zusätzlich wird der Weg mit einem Bewegungsmelder überwacht. Der ist ebenfalls aus dem Low-Cost-Bereich (SH5-TSO-A von Smartwares ) und läuft über einen nanoCul433 der ebenfalls am Raspberry hängt.
Alle Geräte sind ordnungsgemäß in FHEM eingerichtet. Die Lampen schalte ich dann mit einem DOIF der wie folgt aussieht:
define di_LichtVordach DOIF
( [myLichtVordach] eq "1" and [myTwilight:light] < 4 and [LichtVordach] eq "off" and [LichtDachbalken] eq "off" )
(set LichtVordach on-for-timer 180,
{ GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=12&user=user&pass=pass') },
set LichtDachbalken on-for-timer 90, { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=13&user=user&pass=pass') },
set myLichtVordach 0)
DOELSEIF
( [myLichtVordach] eq "1" and [myTwilight:light] < 4 and [LichtVordach] eq "on" and [LichtDachbalken] eq "off" )
(set LichtDachbalken on-for-timer 120, { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=13&user=user&pass=pass') },
set myLichtVordach 0)
DOELSEIF
( [myLichtVordach] eq "1" and [myTwilight:light] < 4 and [LichtVordach] eq "off" and [LichtDachbalken] eq "on" )
(set LichtVordach on-for-timer 180, { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=12&user=user&pass=pass') },
set myLichtVordach 0)
DOELSE
(set myLichtVordach 0)
Die Logik dahinter: Wenn der Schalter myLichtVordach auf 1 gesetzt wird und Twilight:light kleiner 4 ist und beide Lampen sind nicht an, werden beide Lampen angeschaltet. Die übrigen DOELSEIF behandeln die Situation wo die eine Lampe noch an ist und die andere evtl. schon aus, weil unterschieldiche Timer laufen.
Jetzt das Problem: In der Hauptsache kommt ja cmd1 zum Tragen. Wird der Schalter myLichtVordach durch den Tür-Sensor oder per "Hand" mit set auf 1 gesetzt, laufen beide HTTP-Request ordnungsgemäß durch und beide Lampen werden angeschaltet. Sobald der Schalter aber über den notify des Bewegungsmelders auf 1 gesetzt wird, define n_bewegungsmelder notify Bewegungsmelder_AB:on set myLichtVordach 1
wird der HTTP-Request mit ....scene=13 nicht ausgeführt. Ich habe den Doif auch schon in allen Versionen abgeändert/-gespeckt, sodass letztztlich nur noch der eine HTTP-Request übrig blieb und hatte immmer dasselbe Resultat. Sobald der notify des Bewegungsmelders die 1 setzt (wird auch tatsächlich gesetzt - habe das alles geprüft) schaltet dieser Aktor nicht. Da ich ja einen CUL433 habe bin ich auch hingegangen und habe die Lampe über den nanoCul direkt angesprochen. Auch hier erfolgt kein Schaltvorgang im DOIF. Ich habe auch die Hauscodes der beiden Geräte (Bewegungsmelder und Schaltaktor - CMR1000) geprüft. SIe unterscheiden sich. Hat hier jemand eine Erklärung?
Poste bitte ein vollständiges "list di_LichtVordach", am besten wenn deiner Meinung nach es sich in einem falschen Zustand befindet.
Ausserdem solltest Du nachdenken, welche Bedingungen triggern müssen, und welche nur bewertet werden müssen. Die, die nicht triggern müssen, sollten mit einem "?" anfangen. Siehe CommandRef
Ich habe zwar auch keine Lösung - aber von der Logik her:
Wenn sich der DOIF anders verhält wenn Du den Dummy myLichtVordach manuell oder über den Bewegungsmelder setzt, dann liegt der Unterschied im notify und nicht im DOIF.
Vermutung durch den Bewegungsmelder wird der dummy mehrfach getriggert und immer wieder auf 1 gesetzt?
Das würde heissen, Du müsstest mal im Eventmonitor schauen was da passiert
Das liesse sich aber einfach abstellen, wenn dass das problem ist per event-on am Bewegungsmelder...
Anmerkung: Ich verstehe nicht wofür der Dummy überhaupt gut ist?
Hallo,
wann schlaft Ihr ;). Vielen Dank für die Antworten.
@amenomade: Also die Funktion List ist mir bekannt und werde ich durchführen. Leider kann ich ja nur nach Anbruch der Dunkelheit testen, weil ich den Bewegungsmelder jetzt nicht mehr abnehmen will und auf einen andere Helligkeitsschwelle stellen will. Ich melde mich dann wieder, denn es kommt jetzt ja Wochenende und Frau fordert ihr Recht. Mit dem Hinweis auf das "?" bin ich etwas überfordert. Mache erst seit Weihnachten (mein Sohn hat mir einen Raspberry geschenkt) FHEM
@viegener: Nehme deinen Beitrag aber als Anregung, den DOIF ohne "Zwischenschalter" und notify zu benutzen. Du hast recht, eigentlich brauch es das Dummy garnicht. Ist als alte Programmiererweisheit eingeflossen "Fällt dir keine Logik ein, baue einen (Programm)Schalter ein". Neben der Fehleranalyse ändere ich die DOIF. Ich such gerade noch einen Hinweis wie das logische oder aufgelöst wird. Müsste ja jetzt sowas wie "Eingangstür geöffnet oder Bewegungsmelder was bemerkt" und "dunkel" und Licht1 noch aus und Licht2 noch aus dann schalte. Alternativ könnte ich auch 2 DOIF auf jedes Ereignis legen. Ich weiß, dass das irgendwo steht. Vielleicht ist jemand schneller. Vielen Dank erstmal bis hierher. Melde mich wieder (wird aber erst Montag wieder was)
Gruß Peter
Der hinweis mit dem Fragewzeichen bezieht sich auf folgenden Teil der DOIF commandref:
ZitatZeitintervalle, Readings und Status ohne Trigger
https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger (https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger)
setze mal beim DOIF-Modul das Attribut checkReadingEvent
siehe auch https://forum.fhem.de/index.php/topic,82523.0.html
Hallo,
meine Frau hat mich doch noch was testen lassen. Habe jetzt mal alles zurückgedreht und zwei ganz einfach notifys gebastelt:
Define n_LichtDachbalkenET notify EG_Eingang_Tuer:offen {GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=12&user=user&pass=pass') }; { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=13&user=user&pass=pass') }
also Eingangs Tür offen. Beide HTTP-Request funktionieren. List:
Internals:
CFGFN
DEF EG_Eingang_Tuer:offen { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=12&user=user&pass=pass') }; { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=13&user=user&pass=pass') }
NAME n_LichtDachbalkenET
NOTIFYDEV EG_Eingang_Tuer
NR 2390
NTFY_ORDER 50-n_LichtDachbalkenET
REGEXP EG_Eingang_Tuer:offen
STATE 2018-02-02 22:13:18
TYPE notify
READINGS:
2018-02-02 21:40:18 state active
Attributes:
Define n_LichtDachbalkenBM notify Bewegungsmelder_AB:on {GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=12&user=user&pass=pass') }; { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=13&user=user&pass=pass') }
also Bewegungsmelder on, funktioniert nur ein HTTP-Request. EventMonitor: 2018-02-02 22:22:15 IT Bewegungsmelder_AB on
Der List:
Internals:
CFGFN
DEF Bewegungsmelder_AB:on { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=12&user=user&pass=pass') }; { GetFileFromURL('http://192.xxx.xxx.xx:xxxx/control?scene=13&user=user&pass=pass') }
NAME n_LichtDachbalkenBM
NOTIFYDEV Bewegungsmelder_AB
NR 2387
NTFY_ORDER 50-n_LichtDachbalkenBM
REGEXP Bewegungsmelder_AB:on
STATE 2018-02-02 22:22:14
TYPE notify
READINGS:
2018-02-02 21:44:05 state active
Attributes:
Auch wennn ich den Bewegungsmelder von "Hand" auf on stelle geht nur der eine HTTP-Request. Ich weiß nicht mehr weiter.
Gruß Peter
ich glaube immer noch, dass das Problem nicht an den Bedingungen oder den notifies liegt.
Vielleicht solltest Du mal genauer beschreiben, was hinter diesen URLs liegt, lässt sich das anders als durch einen blockierenden Zugriff erledigen (HTTPMOD ?)
Steht etwas im FHEMlog?
Wenn nicht kannst Du mal einen höheren loglevel setzen?
Den geturl brauche ich um über einen Lightmanager Air von Jbmedia die dort eingebundenen Aktoren anzustoßen. Das ganze ist z.Zt nur ein Behelf, weil ich nach und nach diese Aktoren über den nanocul 433 ansprechen will. Ich habe dabei aber schon bemerkt, dass die Reichweite vom Cul nicht so berühmt ist. Daher wird evtl. der LM Air weiterhin für die 433 Aktoren genutzt werden. Ich haber mir jetzt so beholfen, dass ich einen Doif für das Vordachlicht mit Türöffnung und einen für den Melder habe. Im doif schalte ich mit geturl nur das Licht im Vordach (also das, was immer funktioniert und im einen notify den Wegstrahler au das Event Vordachlicht geht an. Dann müssen wir uns keine Gedanken mehr machen warum das im Zusammenspiel eines Doif nicht funktioniert. Trotzdem Danke für Unterstützung
Gruß Peter
Schön, dass Du es gelöst hast, ich verstehe zwar nicht wirklich wie, aber das ist ja auch nicht so wichtig.
Im grunde gehe ich aber davon aus, dass die http-requests von Deimnem Lightmanager nicht ausgeführt oder angenommen werden, wenn sie so kurzfristig hintereinander ausgeführt werden. Das kann an ganz vielen Dingen liegen - Mögliche Ansätze - Verzögerung zwischen den Requests einbauen, http-request so aufrufen, dass verbindung wieder geschlossen wird, debulevel für getfilefromurl erhöhen, ...
Ja, ich teile deine Annahme, denn jetzt wo die beiden Request durch den notify etwas zeitversetzt ablaufen, funktionieren sie ja auch.
Im DOIF lässt sich über wait recht einfach eine Verzögerung von Kommandoblöcken einrichten
Alternativ geht natürlich auch ein FHEM-sleep (Achtung: kein perl-sleep !)
Hallo,
es geht bei mir immer einen Schritt weiter und einen zurück. Habe jetzt den Lightmanager Air aus der Hausautomation aufgelöst und alles in FHEM eingebunden. Beleuchtung und Rolladen laufen jetzt wunschgemäß bis auf die eine Ausnahme, die in diesem Thread angesprochen wurde. Ich zeige noch einmal die neue Entwicklung:
([EG_Eingang_Tuer] eq "offen" and [?myTwilight:light] < 4
and [?LichtVordachStrahler_IT] eq "off" and [?LichtDachbalken_IT] eq "off" )
( set LichtVordachStrahler_IT on-for-timer 120,
set LichtDachbalken_IT on-for-timer 75
)
Tür wird geöffnet und Licht im Eingangsbereich und ein Strahler für den Weg gehen an.
([Bewegungsmelder_AB] eq "on" and [?myTwilight:light] < 4
and [?LichtVordachStrahler_IT] eq "off" and [?LichtDachbalken_IT] eq "off" )
(set LichtVordachStrahler_IT on-for-timer 120)(set LichtDachbalken_IT on-for-timer 75)
Internals:
DEF ([Bewegungsmelder_AB] eq "on" and [?myTwilight:light] < 4
and [?LichtVordachStrahler_IT] eq "off" and [?LichtDachbalken_IT] eq "off" )
(set LichtVordachStrahler_IT on-for-timer 120)(set LichtDachbalken_IT on-for-timer 75)
NAME di_LichtVordachStrahlerMelder
NR 85
NTFY_ORDER 50-di_LichtVordachStrahlerMelder
STATE cmd_2
TYPE DOIF
READINGS:
2018-02-16 04:36:20 Device Bewegungsmelder_AB
2018-02-16 04:36:20 cmd 2
2018-02-16 04:36:20 cmd_event Bewegungsmelder_AB
2018-02-16 04:36:20 cmd_nr 2
2018-02-16 04:36:20 e_Bewegungsmelder_AB_STATE off
2018-02-14 22:07:42 mode enabled
2018-02-16 04:36:20 state cmd_2
2018-02-15 23:33:57 wait_timer no timer
Regex:
condition:
0 InternalDoIf($hash,'Bewegungsmelder_AB','STATE') eq "on" and ReadingValDoIf($hash,'myTwilight','light') < 4 and InternalDoIf($hash,'LichtVordachStrahler_IT','STATE') eq "off" and InternalDoIf($hash,'LichtDachbalken_IT','STATE') eq "off"
devices:
0 Bewegungsmelder_AB
all Bewegungsmelder_AB
do:
0:
0 set LichtVordachStrahler_IT on-for-timer 120
1 set LichtDachbalken_IT on-for-timer 75
1:
helper:
DOIF_Readings_events
DOIF_eventas
event off
globalinit 1
last_timer 0
sleepdevice Bewegungsmelder_AB
sleepsubtimer -1
sleeptimer -1
timerdev Bewegungsmelder_AB
timerevent off
triggerDev Bewegungsmelder_AB
timerevents:
off
timereventsState:
state: off
triggerEvents:
off
triggerEventsState:
state: off
internals:
0 Bewegungsmelder_AB:STATE LichtVordachStrahler_IT:STATE LichtDachbalken_IT:STATE
all Bewegungsmelder_AB:STATE LichtVordachStrahler_IT:STATE LichtDachbalken_IT:STATE
itimer:
readings:
trigger:
uiState:
uiTable:
Attributes:
group Licht draussen
room 97_Logik
wait 0,5
Bewegungsmelder meldet Bewegung und es sollen ebenfalls beide Strahler angehen. Es geht aber nur LichtVordachStrahler an und LichtDachbbalken nicht. Allerdings wird in FHEM der Schalter auf on gesetzt. Habe schon wait genutzt aber es funktioniert nicht. Die beiden Aktoren unterscheiden sich in der Bauart. EIner hat Protokoll V1, der andere V3. Der mit V1 geht nicht. Beide sind von Intertechno und werden über einen nanocul 433 mit alternativer Firmware geschaltet. Dank für jede Hilfe
Gruß Peter
Zitat von: Damian am 02 Februar 2018, 12:48:19
setze mal beim DOIF-Modul das Attribut checkReadingEvent
siehe auch https://forum.fhem.de/index.php/topic,82523.0.html
Diese kleine Anmerkung übersehen.. Habe das eingesetzt und jetzt geht es tatsächlich, sogar ohne wait :)
Also gelöst