Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

moonsorrox

mit dem Thema DOIF hast du natürlich vollkommen Recht  :-\
Trotzdem hast du mir geholfen  ;)
Vielen Dank
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

Bartimaus

#706
Sodele, hier mein Beispiel für meine vorderen Jalousien. Das DOIF soll 5*at ersetzen:
Massgabe:
Masterschalter = on
An Schultagen helligkeitsgesteuert "hochfahren", jedoch nicht vor 06:25 Uhr
Am Wochenende oder in den Schulferien "hochfahren" um 09:15 Uhr
In den Ferien oder Freitags/Samstags helligkeitsgesteuert runterfahren
An Schultagen oder Sonntags helligkeitsgesteuert runterfahren, spätestens jedoch um 21:15Uhr.
define RolloVorne DOIF (([myT:twilight_weather]>40 and [06:25|8] and fhem("get Schulferien today") eq "none") or ([09:15|7] or (fhem("get Schulferien today") ne "none")) and ([RolloVorne_Master:state] eq "on")) (set RolloVoDOIF on) DOELSEIF ((([myT:twilight_weather]<30 and fhem("get Schulferien tomorrow") ne "none") or ([22:30|56]) or ([21:15|0] and fhem("get Schulferien tomorrow") eq "none")) and ([Rollo_Master:state] eq "on")) (set RolloVoDOIF off)

Ich hoffe die Syntax mit Klammersetzung passt.....

Edit: Hm, irgendwas stimmt nicht, der RolloVo-Dummy hat sich gerade auf  "off" gestellt...

state cmd_2 2014-11-20 13:11:10
timer_1_c1 21.11.2014 06:25:00|8 2014-11-20 13:12:00
timer_2_c121.11.2014 09:15:00|72014-11-20 13:12:00
timer_3_c220.11.2014 22:30:00|562014-11-20 13:12:00
timer_4_c220.11.2014 21:15:002014-11-20 13:12:00


Edith2:
Habe das "or ([22:30|56])" durch "and  ([22:30|56])" ersetzt. Jetzt ist der State:initialized  ;)   
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Du kannst auch statt:

fhem("get Schulferien today") eq "none"

eleganter:

[Schulferien:today] eq "none"

angeben.

Das gleiche gilt für tomorrow.

Gruß

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

Bartimaus

Super, danke.
Leider hat mir heute irgendein Fehler das Logfile zugemüllt. Ich suche noch.
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Bartimaus

Hm, wenn ich (([myT:twilight_weather]>40 and [06:25|8] and fhem("get Schulferien today") eq "none") or ([09:15|7] or (fhem("get Schulferien today") ne "none")) and ([RolloVorne_Master:state] eq "on")) (set RolloVoDOIF on) DOELSEIF ((([myT:twilight_weather]<10 and fhem("get Schulferien tomorrow") ne "none") and ([22:30|56]) or ([21:15|0] and fhem("get Schulferien tomorrow") eq "none")) and ([Rollo_Master:state] eq "on")) (set RolloVoDOIF off)

durch



(([myT:twilight_weather]>40 and [06:25|8] and [Schulferien:today] eq "none") or ([09:15|7] or [Schulferien:today] ne "none")) and ([RolloVorne_Master:state] eq "on")) (set RolloVoDOIF on) DOELSEIF ((([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or ([21:15|0] and [Schulferien:tomorrow] eq "none")) and ([Rollo_Master:state] eq "on")) (set RolloVoDOIF off)


via DEF ersetze, erhalte ich:


RolloVorne DOIF: expected DOELSEIF or DOELSE: and ([RolloVorne_Master:state] eq "on")) (set RolloVoDOIF on) DOELSEIF ((([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or ([21:15|0] and [Schulferien:tomorrow] eq "none")) and ([Rollo_Master:state] eq "on")) (set RolloVoDOIF off)

Und natürlich erhalte ich bei jedem Reading von Twilight einen Logeintrag mit fhem get ...today...: none...
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Ich würde dir empfehlen bei komplexeren Definitionen mit Zeilenumbrüchen im DEF-Editor zu arbeiten:

Ich habe deinen fehlerhaften Ausdruck eingerückt:

(
  ([myT:twilight_weather]>40 and [06:25|8] and [Schulferien:today] eq "none") or
  ([09:15|7] or [Schulferien:today] ne "none")
) and ([RolloVorne_Master:state] eq "on")
)
  (set RolloVoDOIF on)
DOELSEIF
(
( ([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or
   ([21:15|0] and [Schulferien:tomorrow] eq "none")
) and ([Rollo_Master:state] eq "on")
)
(set RolloVoDOIF off)


Es sollte dir jetzt auffallen, dass eine Klammer zu viel ist.

Gruß

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

Bartimaus

Zitat von: Damian am 20 November 2014, 19:04:19
Ich würde dir empfehlen bei komplexeren Definitionen mit Zeilenumbrüchen im DEF-Editor zu arbeiten:

Ich habe deinen fehlerhaften Ausdruck eingerückt:

(
  ([myT:twilight_weather]>40 and [06:25|8] and [Schulferien:today] eq "none") or
  ([09:15|7] or [Schulferien:today] ne "none")
) and ([RolloVorne_Master:state] eq "on")
->)<- Zuviel
  (set RolloVoDOIF on)
DOELSEIF
(
( ([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or
   ([21:15|0] and [Schulferien:tomorrow] eq "none")
) and ([Rollo_Master:state] eq "on")
)
(set RolloVoDOIF off)


Es sollte dir jetzt auffallen, dass eine Klammer zu viel ist.

Gruß

Damian


Ja, die markierte Klammer ist zuviel, habe ich auch in Notepad++ geprüft, aber wenn ich diese entferne (egal ob via DEF oder fhem.cfg) erhalte ich die nächste Fehlermeldung beim speichern: Define RolloVorne first  :-[


Ich suche weiter...
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Zitat von: Bartimaus am 20 November 2014, 19:18:00

Ja, die markierte Klammer ist zuviel, habe ich auch in Notepad++ geprüft, aber wenn ich diese entferne (egal ob via DEF oder fhem.cfg) erhalte ich die nächste Fehlermeldung beim speichern: Define RolloVorne first  :-[


Ich suche weiter...
Das ist falsch:

(
  ([myT:twilight_weather]>40 and [06:25|8] and [Schulferien:today] eq "none") or
  ([09:15|7] or [Schulferien:today] ne "none")
)<- hiermit hast du deine Bedingung bereits abgeschlossen      and ([RolloVorne_Master:state] eq "on")
)
  (set RolloVoDOIF on)
DOELSEIF
(
( ([myT:twilight_weather]<10 and [Schulferien:tomorrow] ne "none") and ([22:30|56]) or
   ([21:15|0] and [Schulferien:tomorrow] eq "none")
) and ([Rollo_Master:state] eq "on")
)
(set RolloVoDOIF off)


Gruß

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

Bartimaus

 :-[ ::) :-*


bei [Schulferien:today] eq "none"


erhalte ich im Log diese Meldung: 2014.11.20 18:51:58 2: RolloVorne: reading does not exist: [Schulferien:today]

Bug oder Feature ?

der alte "fhem{get....." Befehl liefert ein korrektes "none" zurück....
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Damian

Zitat von: Bartimaus am 20 November 2014, 19:47:19
:-[ ::) :-*


bei [Schulferien:today] eq "none"


erhalte ich im Log diese Meldung: 2014.11.20 18:51:58 2: RolloVorne: reading does not exist: [Schulferien:today]

Bug oder Feature ?

der alte "fhem{get....." Befehl liefert ein korrektes "none" zurück....

ok. Dann probier einfach mal:

([myT:twilight_weather]>40 and ([06:25|8] or  [09:15|7]) and [RolloVorne_Master:state] eq "on")
  (set RolloVoDOIF on)
DOELSEIF
...


Ich habe alles rausgeschmissen, was bei dir in der ersten Bedingung falsch bzw. bedeutungslos und damit überflüssig war.

Gruß

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

Bartimaus

Hi,


Schulferien.holiday ist NICHT mit $WE verheiratet, deswegen muss ich die separat abfragen.
Feiertag.holiday ist bei mir mit $WE verheiratet, da ich dort MEINE Urlaubstage eingetragen habe. D.h. morgen habe ich frei, meine Jungs aber nicht. Darum sollen deren Rollos mit Helligkeitssteuerung hochgehen, meine Rollos jedoch erst um 8:30....
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Inputsammler

Hallo zusammen,

Also dein Modul ist echt einfach und universell.
Das hat bei mir schon einige notify und at Befehle ersetzt.

Leider bin ich jetzt an einen Punkt angekommen wo ich nicht mehr weiter weis.

Frage 1:
Ich habe mir die Funktion (def) angelegt
([FBDECT_17:power]<25) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 off, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off)

Dieser soll bewirken wenn die Leistung an der Steckdose unter 25 Watt fällt er die 2 Homatic ausschaltet.

Leider habe ich im LOG immer stehen
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<) at (eval 5055) line 1.
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<) at (eval 5057) line 1.
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<).....


Aber das ist mir nun auch zu erklären weil der AVM Steckdose als Reading das zurück liefert
e_FBDECT_17_power         16.37 W            2014-11-20 20:28:19

Jetzt meine Frage gibt es da ein Lösung wie ich den Werk konvertiere oder so.

Frage 2:
Diese Funktion arbeitet sehr gut
([22:00-00:00|5]) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 on, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on)
jetzt meine Frage warum geht das nicht wenn ich es vereinfache wie in der WIKI und in der Referenz gezeigt wird nicht
nur mit einen on befehl und mit Komma getrennt.
([22:00-00:00|5]) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on)


Frage 3:
Und noch eine kleine Frage das Modul von dir auf der ersten Seite ist immer das aktuelle?
Denn im Modul steht immer noch die alte Version und das alte Datum?

Danke

Gruß Gerd
Rpi's und Bpi's und Hw von Dirk und locutus
CCU2,F20,Ks300,1-Wire,Homematic usw ...
vitodens 300 & IstrkrM372 auslesen über USB und FHEM
RUHE IN FRIEDEN AHA1805 RIP Mallorca +29.08.16
I miss you and your Family H.H.L.L.

igami

Zitat von: Inputsammler am 20 November 2014, 20:40:14
Jetzt meine Frage gibt es da ein Lösung wie ich den Werk konvertiere oder so.
Zitat von: commandref
http://fhem.de/commandref_DE.html#DOIF]
Mögliche Formatangaben für <format> sind:

'd' zum Filtern von positiven und negativen Dezimalzahlen.

[<device>:<reading>:d] entspricht [<device>:<reading>:[(-?\d+(\.\d+)?)]]

Zitat von: Inputsammler am 20 November 2014, 20:40:14
jetzt meine Frage warum geht das nicht wenn ich es vereinfache wie in der WIKI und in der Referenz gezeigt wird nicht
nur mit einen on befehl und mit Komma getrennt.
hinter dem Komma steht noch ein set, das gehört da nicht hin, es sei denn du hast ein Device mit dem Namen set und möchtest beiden den Zustand 'CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off' geben

Zitat von: Inputsammler am 20 November 2014, 20:40:14
Und noch eine kleine Frage das Modul von dir auf der ersten Seite ist immer das aktuelle?
Denn im Modul steht immer noch die alte Version und das alte Datum?
das Modul ist doch mittlerweile ofiziell eingecheckt und wird per update verteilt, ich denke nicht, dass das im ersten Beitrag noch aktuell ist, aber da kann nur Damian was zu sagen ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Damian

Zitat von: Inputsammler am 20 November 2014, 20:40:14

2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<) at (eval 5055) line 1.
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<) at (eval 5057) line 1.
2014.11.20 20:16:19 1: PERL WARNING: Argument "16.30 W" isn't numeric in numeric lt (<).....


Aber das ist mir nun auch zu erklären weil der AVM Steckdose als Reading das zurück liefert
e_FBDECT_17_power         16.37 W            2014-11-20 20:28:19

Im Reading ist W als Einheit daher filtern nach Zahlen einsetzen, siehe commandref von DOIF

also

([FBDECT_17:power:d]<25) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01 off, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 off)

Zitatjetzt meine Frage warum geht das nicht wenn ich es vereinfache wie in der WIKI und in der Referenz gezeigt wird nicht
nur mit einen on befehl und mit Komma getrennt.
([22:00-00:00|5]) (set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01, set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on)

kann man so mit einem set lösen:

([22:00-00:00|5]) ((set CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_01, CUL_HM_HM_LC_SW4_BA_PCB_529FF4_Sw_02 on))


Warum das so ist steht ebenfalls in der Commandref von DOIF.


ZitatUnd noch eine kleine Frage das Modul von dir auf der ersten Seite ist immer das aktuelle?
Denn im Modul steht immer noch die alte Version und das alte Datum?

Das Modul ist eingecheckt (steht im ersten Post) und ist immer aktuell per FHEM-Update.

Gruß

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

Damian

Zitat von: Bartimaus am 20 November 2014, 20:07:52
Hi,


Schulferien.holiday ist NICHT mit $WE verheiratet, deswegen muss ich die separat abfragen.
Feiertag.holiday ist bei mir mit $WE verheiratet, da ich dort MEINE Urlaubstage eingetragen habe. D.h. morgen habe ich frei, meine Jungs aber nicht. Darum sollen deren Rollos mit Helligkeitssteuerung hochgehen, meine Rollos jedoch erst um 8:30....
ok, na dann:
(
   [myT:twilight_weather]>40 and
   ([06:25|8] and [Schulferien:today] eq "none" or  [09:15|7] or [Schulferien:today] ne "none") and
   [RolloVorne_Master:state] eq "on"
)
  (set RolloVoDOIF on)
DOIF
....


sollte zumindest syntaktisch korrekt sein.

Gruß

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