[gelöst] DOIF mit unterschiedlicher Auflösung

Begonnen von elektrikpe2, 01 Februar 2018, 23:48:04

Vorheriges Thema - Nächstes Thema

elektrikpe2

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 1wird 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?

amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

viegener

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?




Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

elektrikpe2

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

viegener

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
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

elektrikpe2

#6
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

viegener

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?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

elektrikpe2

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

viegener

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


Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

elektrikpe2

Ja, ich teile deine Annahme, denn jetzt wo die beiden Request durch den notify etwas zeitversetzt ablaufen, funktionieren sie ja auch.

viegener

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 !)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

elektrikpe2

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

elektrikpe2

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