DOIF neue Features (Sleep-Alternative)

Begonnen von Damian, 12 Juli 2015, 21:17:52

Vorheriges Thema - Nächstes Thema

moonsorrox

Zitat von: Steffen am 03 Oktober 2015, 10:35:09
Hallo,

Leider wird doch bei diesem define auch der Befehl zum "open" gegeben selbst wenn der state von einen von den 3 device als absent gegeben wird?!
ist ja auch richtig...!
([Liescha] eq "present" or [Steffen] eq "present" or [Doreen] eq "present") (set TuerSchloss open)

- ist Liescha da... zuhause oder was auch immer also (present) triggert er "set open..."
- ist Steffen da... zuhause oder was auch immer also (present) triggert er "set open..."
- ist Doreen da... zuhause oder was auch immer also (present) triggert er "set open..."

von der Logik her richtig
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Steffen

Ja aber wenn dann zb.:

- doreen "absent" getriggert wird dann macht er trotzdem "open" also zur zeit immer, das ist aber nur wenn "do always" aktiviert ist...so dachte ich mir das aber leider nicht!

Gibt es einen weg wo er wirklich nur bei "present" öffnet??

Mfg Steffen

Toto1973

Richtig, weil Du OR genommen hast.
Du könntest anstelle von OR AND nehmen, dann müssen aber alle 3 zu Hause sein, damit aufgemacht wird.

Weil ich weis sonst nicht, wie Du das sonst machen willst.
Es sollte doch aufgehen, wenn einer der 3 nach Hause kommt, und zu gehen, wenn alle 3 weg sind. Weil geht es schon zu, wenn z.B. Doreen geht (absent), dann wären ja die anderen eingesperrt!
Oder wie möchtest Du denn haben, das es schaltet?
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Steffen

Eigentlich ganz einfach  :o

Wenn Doreen oder Steffen oder Liescha kommt soll der befehl "open" ausglöst werden,  egal ob einer/zwei von uns drein schon da ist(present) und wenn gar keiner da ist dann "lock", wenn nur einer oder zwei gehen(absent) dann soll nichts passieren, das ist aber leider nicht der Fall denn komisch ist wenn alle present sind und dann einer "absent" wird dann schaltet er trotzdem "open" was ja eigentlich gar nicht im Code steht oder?!?

Wie gesagt das er "open" bei nur einen absent schaltet ist nur wenn ich "do always" aktiviert habe...

Hoffe finden noch ne lösung...trotzdem danke schonmal für eure geduld

Mfg Steffen

Toto1973

Bei Open muss OR genommen werden, damit dann geschaltet wird, wenn einer der 3 auf "present" steht und
bei Close muss AND stehen, damit es nur schließt, wenn alle 3 auf "absent" stehen.
Wenn Du natürlich do always stehen hast, dann wird immer getriggert, wenn sich ein Status ändert! Und das möchtest Du ja nicht.
do always ist zum Beispiel dann zu setzten, wenn nur eine Uhrzeit triggern soll und das nicht nur einmal, sondern immer dann, wenn diese Uhrzeit wieder erreicht wird.
Hast Du aber einen "Schalter" (hier dein present/absent), dann braucht man kein do always.
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Steffen

Das Problem ist aber leider wenn ich nicht "do always" aktiviere das er dann nur beim ersten "present" triggert und "open" als befehl raus gibt, die weiteren "present" werden zwar regestriert aber es wird kein befehl "open" rausgegeben?!?

Ich versuche es nochmal in einem notify oder mit 2 doif, wenn aber noch von euch einer eine idee hat, wäre ich sehr dankbar!

Mfg Steffen

Damian

Zitat von: Steffen am 03 Oktober 2015, 18:28:22
Eigentlich ganz einfach  :o

Wenn Doreen oder Steffen oder Liescha kommt soll der befehl "open" ausglöst werden,  egal ob einer/zwei von uns drein schon da ist(present) und wenn gar keiner da ist dann "lock", wenn nur einer oder zwei gehen(absent) dann soll nichts passieren, das ist aber leider nicht der Fall denn komisch ist wenn alle present sind und dann einer "absent" wird dann schaltet er trotzdem "open" was ja eigentlich gar nicht im Code steht oder?!?

Wie gesagt das er "open" bei nur einen absent schaltet ist nur wenn ich "do always" aktiviert habe...

Hoffe finden noch ne lösung...trotzdem danke schonmal für eure geduld

Mfg Steffen

Dann musst du mit Event- statt Statusabfrage arbeiten:

([Liescha:?present] or [Steffen:?present] or [Doreen:?present])...

DOELSEIF muss so bleiben und do always solltest du setzen.


Gruß

Damian

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

Steffen

Zitat von: Damian am 03 Oktober 2015, 20:30:53
Dann musst du mit Event- statt Statusabfrage arbeiten:

([Liescha:?present] or [Steffen:?present] or [Doreen:?present])...

DOELSEIF muss so bleiben und do always solltest du setzen.


Gruß

Damian

Ach mensch danke...jetzt scheint es zu klappen, werde es die Tage testen aber die ersten Test haben geklappt!

Vielen Vielen dank nochmal an alle und Damian...

Mfg Steffen

hatamoto

Hallo Damian,

danke für die tollen neuen Funktionen.

Meine Rollladensteuerung wird langsam immer komplexer:
- Hoch/runter bei Sonnenauf/-untergang abhängig von Temperatur
- Beschattung abhängig von Sonnenstand, Helligkeit, Temperatur
- Lüftungssteuerung mit Fensterkontakten
- ...

Dadurch werden die DOIF's recht komplex und etwas unübersichtlich. Ich würde diese gerne etwas optimieren und vereinfachen.

Du hast Funktionen wie mehrere DOIF in einem Modul und mehrere Bedingungen angekündigt.
Wie ist der aktuelle Entwicklungsstand?

Danke
Gruß Chris

Damian

Zitat von: hatamoto am 11 Oktober 2015, 15:12:28
Hallo Damian,

danke für die tollen neuen Funktionen.

Meine Rollladensteuerung wird langsam immer komplexer:
- Hoch/runter bei Sonnenauf/-untergang abhängig von Temperatur
- Beschattung abhängig von Sonnenstand, Helligkeit, Temperatur
- Lüftungssteuerung mit Fensterkontakten
- ...

Dadurch werden die DOIF's recht komplex und etwas unübersichtlich. Ich würde diese gerne etwas optimieren und vereinfachen.

Du hast Funktionen wie mehrere DOIF in einem Modul und mehrere Bedingungen angekündigt.
Wie ist der aktuelle Entwicklungsstand?

Danke
Gruß Chris

Diese Erweiterungen habe ich zunächst zurückgestellt.

Module, die logisch zusammenhängen, kann man zwecks Übersicht in eine gemeinsame Gruppe packen. Bei umfangreichen Definitionen helfen Einrückungen in der Definition und Kommentierungen beginnend mit ##.

Gruß

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

dominik

Hi Damian,
kann es sein, dass bei einem wait der Status nicht gespeichert wird um einen Reboot zu überleben? Ich nutze wait um am Abend nach Sonnenuntergang die Außenbeleuchtung für 2,5h an zu haben. Nach 2,5h kommt dann der off Befehle. Funktioniert super.
Zuletzt hatte ich aber das Phänomen, dass ich den RPi rebootet habe und danach das DOIF wieder auf cmd_1 stand statt cmd_1_1. Daher vermute ich mal, dass wait nicht gespeichert wird?

Dann noch eine Frage für folgendes Szenario:
Ich möchte das in der Früh wenn ich aufstehe (Weckzeit in fhem + 10min) das Wakeuplight bis zum Sonnenaufgang+10min leuchtet. Aktuell kann ich das mit
[([Wecker_dummy]+[0:10:00])-([twilightHome:sr_indoor]+[0:10:00])|8]
lösen, aber was passiert wenn der Sonnenaufgang mal VOR der Weckzeit ist? Mir fällt da gerade keine schöne Lösung ein. Vielleicht hast du einen passenden Trick parat :)
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Damian

Zitat von: dominik am 17 Oktober 2015, 09:35:35
Hi Damian,
kann es sein, dass bei einem wait der Status nicht gespeichert wird um einen Reboot zu überleben? Ich nutze wait um am Abend nach Sonnenuntergang die Außenbeleuchtung für 2,5h an zu haben. Nach 2,5h kommt dann der off Befehle. Funktioniert super.
Zuletzt hatte ich aber das Phänomen, dass ich den RPi rebootet habe und danach das DOIF wieder auf cmd_1 stand statt cmd_1_1. Daher vermute ich mal, dass wait nicht gespeichert wird?

Dann noch eine Frage für folgendes Szenario:
Ich möchte das in der Früh wenn ich aufstehe (Weckzeit in fhem + 10min) das Wakeuplight bis zum Sonnenaufgang+10min leuchtet. Aktuell kann ich das mit
[([Wecker_dummy]+[0:10:00])-([twilightHome:sr_indoor]+[0:10:00])|8]
lösen, aber was passiert wenn der Sonnenaufgang mal VOR der Weckzeit ist? Mir fällt da gerade keine schöne Lösung ein. Vielleicht hast du einen passenden Trick parat :)

Timer werden nach dem Neustart neugesetzt, Wait-Timer gehen verloren.
Wenn die zweite Zeit vor der ersten liegt, dann gilt das Intervall über Mitternacht (siehe Beispiel in der Commandref zu DOIF).

Gruß

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

dancatt

Hallo zusammen,

ich würde gerne meinen Watchdog für die Fensterüberwachung durch DOIF ersetzen.
Folgendes habe ich aktuell definiert:


Internals:
   CFGFN
   DEF        ([2_02_KL_Fensterkontakt:?open] && [?Heizungmodus] eq "Winter")
({PushMassage("Fhem","doif 2_02_KL_Fensterkontakt ist offen","",0,"")})
({EximMail("test@test.de", "doif FHEM Überwachung: 2_02_KL_Fensterkontakt", "Fenster ist offen")})
DOELSEIF ([2_03_SZ_Fensterkontakt:?open] && [?Heizungmodus] eq "Winter")
({PushMassage("Fhem","doif 2_03_SZ_Fensterkontakt ist offen","",0,"")})
({EximMail("test@test.de", "doif FHEM Überwachung: 2_03_SZ_Fensterkontakt", "Fenster ist offen")})
DOELSEIF ([2_05_BZ_Fensterkontakt:?open] && [?Heizungmodus] eq "Winter")
({PushMassage("Fhem","doif 2_05_BZ_Fensterkontakt ist offen","",0,"")})
({EximMail("test@test.de", "doif FHEM Überwachung: 2_05_BZ_Fensterkontakt", "Fenster ist offen")})

...

Attributes:
   do         always
   group      Überwachung
   loglevel   6
   room       9_09_Einstellungen
   wait       900:900:900


Leider funktioniert das nicht so wie ich gerne hätte. Vielleicht habe ich auch etwas bzgl. "wait" etc. übersehen.

Problem ist folgendes:
- Wenn ich 2 Fenster offen habe kommt nach 15 Minuten nur die Meldung von einem.
- Wenn ich 1 Fenster innerhalb der 15 Minuten schließe kommt trotzdem eine Meldung.

Wo liegt mein Denkfehler? Oder gehen mehrere DOELSEIFs nicht?

Mein watchdog sieht folgendermaßen aus.

DEF        ([0123]).([0-9][0-9]).([A-Z][A-Z0-9])(.2)?.(Fensterkontakt):open 00:15:00 ([A-Z][A-Z0-9]).(Fensterkontakt):closed {
my $heizungmodus = ReadingsVal("Heizungmodus","state",undef);
  if ($heizungmodus eq "Winter") {
  PushMassage("Fhem","Fenster ist offen","",0,"");
    EximMail("test@test.de", "FHEM Überwachung: Fenster", "Fenster ist offen");
  fhem("setstate watchdog_Ueberwachung_Fenster defined");
  }


Vielen Dank.
Gruß Daniel
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

moonsorrox

Zitat von: dancatt am 18 Oktober 2015, 09:32:06
Wo liegt mein Denkfehler? Oder gehen mehrere DOELSEIFs nicht?

klar gehen mehrere DOELSEIF, aber was ich in einem DOIF noch nicht gesehen habe ist dieses"&&" soll das "und" sein - also "and"..?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 18 Oktober 2015, 12:02:03
..., aber was ich in einem DOIF noch nicht gesehen habe ist dieses"&&" soll das "und" sein - also "and"..?

Zitat aus der Commandref zu DOIF
ZitatVergleichende Abfragen werden, wie in Perl gewohnt, mit Operatoren ==, !=, <, <=, >, >= bei Zahlen und mit eq, ne, lt, le, gt, ge, =~, !~ bei Zeichenketten angegeben. Logische Verknüpfungen sollten zwecks Übersichtlichkeit mit and bzw. or vorgenommen werden. Selbstverständlich lassen sich auch alle anderen Perl-Operatoren verwenden, da die Auswertung der Bedingung vom Perl-Interpreter vorgenommen wird.

Da in der Bedingung 100% Perl gilt, kannst du auch noch all das verwenden:

++ -- (Inkrementieren, Dekrementieren)
** (Potenzierung)
! ~ (logische und bitweise Negation)
=~ !~ (Bindung an reguläre Ausdrücke)
* / % x (Multiplikation, Division, Modulo-Operation, Zeichenkettenwiederholung)
<< >> (Verschieben von Bits)
< > <= >= lt gt le ge (Vergleich größer/kleiner)
== != <=> eq ne cmp ~~ (Gleichheit/Ungleichheit)
& (bitweises UND)
| ^ (bitweises ODER - inklusiv/exklusiv)
&& (logisches UND)
|| (logisches ODER)
not (logische Negation)
and (logisches UND)
or xor (logisches ODER (inklusiv/exklusiv)


Gruß

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