Hauptmenü

neues Modul DOIF

Begonnen von Damian, 21 Mai 2014, 15:53:18

Vorheriges Thema - Nächstes Thema

Brockmann

Zitat von: blueberry63 am 10 Januar 2015, 18:28:45
die Lösung mit den 3 DOIFs werde ich ausprobieren. Ursprünglich hatte ich es mit einem Watchdog probiert, aber das funktionierte nicht.
Drei DOIFs sind mindestes zwei zuviel.  ;)

Folgende Variante müsste es eigentlich auch alleine schaffen, indem sie sich über den cmdstate noch zweimal selbst triggert:

define di_Bad DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N1")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N2")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
DOELSEIF ([FensterBadU] eq "closed")
attr di_Bad cmdState N1|N2|N3|N0
attr di_Bad wait 420:420:420

Damian

Zitat von: Brockmann am 11 Januar 2015, 08:28:24
Drei DOIFs sind mindestes zwei zuviel.  ;)

Folgende Variante müsste es eigentlich auch alleine schaffen, indem sie sich über den cmdstate noch zweimal selbst triggert:

define di_Bad DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N1")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N2")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
DOELSEIF ([FensterBadU] eq "closed")
attr di_Bad cmdState N1|N2|N3|N0
attr di_Bad wait 420:420:420


ja, ist ein schönes Beispiel, wie man mit DOIF einen endlichen Automaten bauen kann. :)


Gruß

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

Michi240281

Hallo,

ist es möglich, in Verbindung mit dem DOIF Modul jeden 1. eines Monats ein KOmmando zu triggern?

Ich habe folgendes als Ausgangsbasis genommen:

define Licht_25_Januar_an at *07:15:00 {if($year==2011 && $month==1 && $mday==25) {fhem("set Licht1 on")} }

Also habe ich mir das &mday==25 rausgepickt und folgendes getestet:

define test99 DOIF ([{$mday==1}]) (set Vitrine an)

Habe gedacht, das müsste vllt gehen, weil in der command ref zum DOIF Modul folgendes steht:

+ Zeitangaben in der Bedingung: [HH:MM:SS] oder [HH:MM] oder [{<perl-function>}]

Aber irgendwie tuts das nicht!

Jmd ne Idee?
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

Zitat von: Michi240281 am 11 Januar 2015, 16:40:37
Hallo,

ist es möglich, in Verbindung mit dem DOIF Modul jeden 1. eines Monats ein KOmmando zu triggern?

Ich habe folgendes als Ausgangsbasis genommen:

define Licht_25_Januar_an at *07:15:00 {if($year==2011 && $month==1 && $mday==25) {fhem("set Licht1 on")} }

Also habe ich mir das &mday==25 rausgepickt und folgendes getestet:

define test99 DOIF ([{$mday==1}]) (set Vitrine an)

Habe gedacht, das müsste vllt gehen, weil in der command ref zum DOIF Modul folgendes steht:

+ Zeitangaben in der Bedingung: [HH:MM:SS] oder [HH:MM] oder [{<perl-function>}]

Aber irgendwie tuts das nicht!

Jmd ne Idee?

Soll $mday==1 eine Perlfunktion sein? Und wann soll das Modul getriggert werden?

$mday ist eine Variable, die du abfragen willst und die wird dein Modul mit Sicherheit nicht triggern.

Wenn schon, dann eher so:

define test99 DOIF ([07:15] and $mday==1) (set Vitrine an)

Gruß

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

Spartacus

Hallo,
überlege gerade, wie ich eine Steckdose in einem bestimmten Zeitraum mit Dauersaft versorge. Wenn man den Trigger nicht auf den perl code legen kann!

Der Verbraucher soll zwischen 01.02. und 31.11. dauernd auf "on" sein. Danach schaltet er ab!

das macht man dann ja so...
.....
and (($mday>=01 and $month==2) or ($mday<=11 and $month==30))

nur wo lege ich den Trigger hin?
muss ich das dann mit [00:00-24:00] and ... lösen?
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

blueberry63

Zitat
define di_Bad DOIF ([FensterBadU] eq "open")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N1")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!)
DOELSEIF ([FensterBadU] eq "open" and [di_Bad] eq "N2")
  (set WLANAP2 ring 610 20 Alert show:Fenster zumachen!")
DOELSEIF ([FensterBadU] eq "closed")
attr di_Bad cmdState N1|N2|N3|N0
attr di_Bad wait 420:420:420

Das werde ich heute mal ausprobieren. Kann man eigentlich "Wildcarts" verwenden? In diesem Fall würde ich gerne auf "Fenster*" abfragen.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

MaJu

Probiere mal:
Fenster.*
(Mit Punkt vorm Stern)
Erlebnisreiche Grüße aus Leipzig!

Brockmann

Zitat von: MaJu am 12 Januar 2015, 10:55:48
Probiere mal:
Fenster.*
(Mit Punkt vorm Stern)
Hä? Was soll das denn sein?  :o

Prinzipiell sind "Wildcards" bei DOIF nicht möglich.
Seit kurzem kann man DOIFs von einem Ereignis triggern lassen und dabei RegEx verwenden. Aber nach meinen Verständnis (hab es selbst noch nicht getestet) muss man dabei auch ein konkretes Device angeben, auf dessen Events die RegEx angewendet werden soll.
Alternative wäre eine Structure für alle Fenstersensoren, die jeweils den Status des zuletzt geänderten Mitglieds annimmt.

blueberry63

ZitatHä? Was soll das denn sein?

Du hast Recht: das war eine blöde Idee. Natürlich geht das nur über Trigger  :-[ :-[ :-[

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

MaJu

Die blöde Idee kam von mir, da brauchst du dich doch nicht entschuldigen ;-)

Grundsätzlich habe ich eine Fenster-offen-Warnung auch in Planung, aber noch nicht umgesetzt. Ich möchte dir das nur als Denkanstoß mitgeben.

Eine Warnung stur nach Zeit halte ich bei meinem Einsatzzweck nicht für sinnvoll, denn dann würde es im Sommer irgendwann anfangen mit nerven, wenn man einfach länger am Abend frische Luft in die Wohnung lässt. Wenn du im Bad auch die Raumtemperatur misst, würde ich es damit verbinden (das ist bei mir zumindest der Plan).
Denn bei -20 Grad Außentemperatur ist die Lüftungszeit doch eine andere als bei über +20 Grad.

Das müsste dann ungefähr so aussehen: Wenn die Temperatur im Bad unter 12 Grad ist UND das Fenster ist offen, dann sende eine Nachricht.

Mit do=always müsste dann eigentlich bei jedem erneuten Empfang eines Temperaturwertes die Warnung ausgegeben werden, jedes Mal, bis das Fenster geschlossen wurde.
Erlebnisreiche Grüße aus Leipzig!

Damian

#1105
Zitat von: Spartacus am 12 Januar 2015, 09:38:50
Hallo,
überlege gerade, wie ich eine Steckdose in einem bestimmten Zeitraum mit Dauersaft versorge. Wenn man den Trigger nicht auf den perl code legen kann!

Der Verbraucher soll zwischen 01.02. und 31.11. dauernd auf "on" sein. Danach schaltet er ab!

das macht man dann ja so...
.....
and (($mday>=01 and $month==2) or ($mday<=11 and $month==30))

nur wo lege ich den Trigger hin?
muss ich das dann mit [00:00-24:00] and ... lösen?
Christian

Wie in der commandref bereits erwähnt, sollte man Intervalle über mehrere Tage in einen Einschaltzeitpunkt und einen Ausschaltzeitpunkt aufsplitten, hier z. B.:

DOIF ([08:00] and $mday == 1 and $month==2) (set lamp on) DOELSEIF ([20:00] and $mday ==30 and $month==11) (set lamp off)

Gruß

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

Spartacus

Hi Damian,
danke! Das ist logisch! Hätte ich auch selber drauf kommen müssen! Habe die Beschreibung in der commandRef diesbezüglich nicht mit meinem Anwendungsfall in Verbindung gebracht.

Vielen Dank,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Mitch

#1107
Hallo,

ich bin gerade dabei Stück für Stück meine notifys mit DOIF zusammen zu fassen und zu vereinfachen.

Bei meiner Batterieüberwachung hänge ich gerade  :(

Folgenden notify habe ich:
.*:[Bb]attery:.* { if(($EVENT !~ m/ok/) && (time > $main::NewMailtime)) {
my $alias = AttrVal($NAME,"alias",$NAME);
fhem ("set Pushover msg 'FHEM-WARNUNG' '$alias $EVENT'");
$main::NewMailtime = time + 14400;
Log 3, "$NAME: Batteriewarnung $EVENT";
}
}


Folgendes habe ich probiert:
define BatterieCheck DOIF ([*:[Bb]attery.*]) !=~ "ok") (set Pushover msg 'FHEM-WARNUNG' '$NAME $EVENT')

Wird aber, vermutlich wegen den Klammern, nicht angenommen.

Fehler:
BatterieCheck DOIF: expected DOELSEIF or DOELSE:  !=~ "ok") (set Pushover msg 'FHEM-WARNUNG' '$NAME $EVENT')

Kann ich mit DOIF überhaupt alle Devices überwachen?
FHEM im Proxmox Container

Brockmann

Zitat von: Mitch am 12 Januar 2015, 16:08:51
Folgendes habe ich probiert:
define BatterieCheck DOIF ([*:[Bb]attery.*]) !=~ "ok") (set Pushover msg 'FHEM-WARNUNG' '$NAME $EVENT')

Wird aber, vermutlich wegen den Klammern, nicht angenommen.

Kann ich mit DOIF überhaupt alle Devices überwachen?
Wie wenige Posts zuvor gerade schon mal geschrieben: "Wildcards" sind bei DOIF nicht möglich.
Man könnte statt dessen eine Structure verwenden, die jeweils den Status des zuletzt geänderten Device annimmt.
Ich meine auch, das Thema Batterieüberwachung ist hier im Thread schon mal behandelt worden - Suchfunktion?

Mitch

Danke - SuFu hatte nichts gefunden  ???
FHEM im Proxmox Container