Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

flurin

Hallo,

Beim Beispiel aus der Dokumentation
Anwendungsbeispiel: Meldung beim Ausbleiben eines Events

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait


wird eine Meldung beim Ausbleiben eines Events ausgelöst. Das ist Ok.
Ich möchte jedoch, dass alle 1800 sec eine Meldung ausgelöst wird, solange bis der Tempsensor wieder sendet.

Ist das mit DOIF machbar?

Gruss
flurin

Damian

Zitat von: flurin am 18 Februar 2015, 15:09:31
Hallo,

Beim Beispiel aus der Dokumentation
Anwendungsbeispiel: Meldung beim Ausbleiben eines Events

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait


wird eine Meldung beim Ausbleiben eines Events ausgelöst. Das ist Ok.
Ich möchte jedoch, dass alle 1800 sec eine Meldung ausgelöst wird, solange bis der Tempsensor wieder sendet.

Ist das mit DOIF machbar?

Gruss
flurin

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again",trigger Tempsensor)
attr di_push wait 1800
attr di_push do resetwait



Gruß

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

flurin

Zitat von: Damian am 18 Februar 2015, 16:06:50
define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again",trigger Tempsensor)


Perfekt, Danke!

Gruss
flurin

flurin

Hallo Damian

Bei der Ausführung von mehreren Subs ist mir Folgendes aufgefallen (Auszüge aus fhem.cfg)

Diese Variante (die wäre für mich naheliegend) führt zu einem Fehler:

define di_test DOIF ([test_switch1])( { mySub("A");; mySub("B") } )

so ist Ok:

define di_test DOIF ([test_switch1])( { mySub("A");;;; mySub("B") } )

oder so:

define di_test DOIF ([test_switch1])( { mySub("A") }, { mySub("B") } )

aber auch so:

define di_test DOIF ([test_switch1])( { mySub("A"), mySub("B") } )

Welche Variante soll man bevorzugen?

Gruss
flurin

Damian

Zitat von: flurin am 19 Februar 2015, 11:49:06
Hallo Damian

Bei der Ausführung von mehreren Subs ist mir Folgendes aufgefallen (Auszüge aus fhem.cfg)

Diese Variante (die wäre für mich naheliegend) führt zu einem Fehler:

define di_test DOIF ([test_switch1])( { mySub("A");; mySub("B") } )

so ist Ok:

define di_test DOIF ([test_switch1])( { mySub("A");;;; mySub("B") } )

oder so:

define di_test DOIF ([test_switch1])( { mySub("A") }, { mySub("B") } )

aber auch so:

define di_test DOIF ([test_switch1])( { mySub("A"), mySub("B") } )

Welche Variante soll man bevorzugen?

Gruss
flurin

Die letzte dürfte auch nicht funktionieren, ich würde die dritte nehmen.

Gruß

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

flurin

#1415
Zitat von: Damian am 19 Februar 2015, 12:10:03
define di_test DOIF ([test_switch1])( { mySub("A"), mySub("B") } )

Die letzte dürfte auch nicht funktionieren

doch jedoch nicht immer! also am besten nicht verwenden.

Edit: nochmals getestet > diese Variante funktioniert bei mir.

Gruss
flurin

Damian

Zitat von: flurin am 19 Februar 2015, 13:06:57
doch jedoch nicht immer! also am besten nicht verwenden.

Edit: nochmals getestet > diese Variante funktioniert bei mir.

Gruss
flurin

Dann ist das eine Sache von fhem und nicht von DOIF, dann muss in der Eingabezeile ohne DOIF auch:

{ mySub("A"), mySub("B") }

funktionieren. Warum hier Komma als Trennzeichen funktioniert kann nur Rudi sagen.

Gruß

Damian

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

flurin

Zitat von: Damian am 19 Februar 2015, 18:01:52
Dann ist das eine Sache von fhem und nicht von DOIF, dann muss in der Eingabezeile ohne DOIF auch:

{ mySub("A"), mySub("B") }

funktionieren. Warum hier Komma als Trennzeichen funktioniert kann nur Rudi sagen.


Es geht auch aber es stört mich nicht.

Allzu oft liest man "Es geht nicht!" also freuen wir uns, wenn es funktioniert.  :)

Gruss
flurin

Spartacus

Hallo,
ich habe noch ein Problem mit meiner Weckersteuerung
(([state.NRW.FerienClone.dum] or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "ein")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Volume => 2, Enabled => 1}))
DOELSEIF
([OG.kz.AL.Wecker.dum] eq "aus")
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))


Über das Wecker-Dummy Device "OG.kz.AL.Wecker.dum" (Fhem-Schalter) will ich die Weck-Automatik des Weckers "OG.kz.SON.ZP_S1 " ein, bzw ausschalten.
Wenn die Automatik aktiv ist (Wecker.dum="ein"), und das Ferien-oder Feiertags-Ereignis eintritt, schaltet die Automatik auch brav den Wecker über cmd1 ab. Allerdings sollte der Wecker bei "OG.kz.AL.Wecker.dum = ein" auch wieder einschalten, wenn die Feiertage oder Ferien beendet sind.. Allerdings fehlt hier offenbar ein Trigger! Wo habe ich hier den Fehler?
Mit oder ohne  "do always", es funzt nicht.
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

Brockmann

Zitat von: Spartacus am 19 Februar 2015, 21:28:27
(([state.NRW.FerienClone.dum] or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))

Wo habe ich hier den Fehler?

Wenn [OG.kz.AL.Wecker.dum] auf "ein" wechselt, ist die Bedingung für cmd1 IMMER erfüllt, denn der Ausdruck [state.NRW.FerienClone.dum] ist immer wahr. Deshalb kann cmd2 nie zum Zuge kommen.

Meinst Du an der Stelle vielleicht:
(([state.NRW.FerienClone.dum] ne "none" or [hl.01.Feiertag.cdm:today] ne "none")  and [OG.kz.AL.Wecker.dum] eq "ein" )
((set OG.kz.SON.ZP_S1 Alarm Update 674 {Enabled => 0}))


Spartacus

Hallo Brockmann,
danke für den Tipp! Aber das "none" bei state.NRW.FerienClone.dum kann ich nicht nachvollziehen. state.NRW.FerienClone.dum ist ein Dummy,  welches "1" oder "0" annimmt. Bei den Feiertagen ist das schon korrekt! Da muss das "none" drinstehen, das kommt ja direkt aus dem holiday-Modul.

Oder mache ich hier einen Gedankenfehler?

Soweit geht das ja auch! Wenn ich state.NRW.FerienClone.dum  auf "1" setze, wird der Wecker abgeschaltet. Aber das Einschalten funzt halt nicht mehr, wenn ich state.NRW.FerienClone.dum  wieder auf "0" setze! Sind beide Events (Feiertag und Ferien) ungültig ("0" or "none") und schalte das Wecker-Dummy (ein,aus) funzt alles perfekt!
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

holzwurm83

Hallo zusammen,

ich möchte gerne mit meinem Handsender der immer ein reading state toggle erzeugt meine Jalousie steuern. Dabei soll auch der aktuelle Stand (zu,auf oder Stop) der Jalousie berücksichtigt werden.

Ich habe das nun so hinbekommen
define di_Handsender_1 DOIF ([Handsender_1:state:sec] < 0.5 and [test_Hansender] eq "zu") (set test_Hansender auf)\
DOELSEIF\
([Handsender_1:state:sec] < 0.5 and [test_Hansender] eq "auf") (set test_Hansender stop)\
DOELSEIF\
([Handsender_1:state:sec] < 0.5 and [test_Hansender] eq "stop") (set test_Hansender zu)
attr di_Handsender_1 do always
attr di_Handsender_1 room test

bin mir allerdings nicht siecher ob das der Beste und einfachste Weg ist?
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

daschauher

Hallo,

ich überwache einen Temperatursensor auf Funktion mittels:
define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait

Jetzt würde ich gerne auch eine Nachricht bekommen wenn der Sensor wieder in Betrieb geht, also doch wieder sendet.
Stehe aber gerade voll auf dem Schlauch wie ich das machen könnte.
Hat jemand eine Idee oder einen Tip?

gruss
markus

flurin

Zitat von: daschauher am 21 Februar 2015, 01:11:32
Hallo,

ich überwache einen Temperatursensor auf Funktion mittels:
define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait

Jetzt würde ich gerne auch eine Nachricht bekommen wenn der Sensor wieder in Betrieb geht, also doch wieder sendet.
Stehe aber gerade voll auf dem Schlauch wie ich das machen könnte.
Hat jemand eine Idee oder einen Tip?

gruss
markus

Mit einem Dummy den Tempsensor-Ausfall speichern und entsprechend setzen/löschen.

define sensor_failure dummy
attr sensor_failure setList on off


define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again", set sensor_failure on)
attr di_push wait 1800
attr di_push do resetwait


Nachricht senden, wenn der Tempsensor wieder sendet.

define di_sensor_alive DOIF ([Tempsensor] and [?sensor_failure] eq "on") ({set pushmsg "sensor alive") }, set sensor_failure off)


Gruss
flurin

daschauher

Hallo flurin, vielen dank!!
Gruss Markus