Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

Damian

Zitat von: Bennemannc am 26 Mai 2014, 19:30:19
Hallo Damian,
Warum lagerst Du den Code, der in beiden Module gebraucht wird nicht in ein eigenes Modul aus?
Das würde die Sache strukturierter machen und das ausgelagerte Modul könnte auch von anderen Programmierern genutzt werden.

Gruß Christoph

Das kann ich später noch machen, falls Interesse besteht. Ich werde allerdings die Parser-Routinen noch umschreiben müssen, denn IF baut den kompletten if-String zusammen. DOIF wird dagegen nicht perl-if nutzen, sondern die einzelnen Bedingungen und dazugehörigen Ausführungsteile selbst verwalten und zum gegebenen Zeitpunkt über eval abfragen und über entsprechende fhem-Routine ausführen. Hinzukommt noch die Zeitkomponente, die es ja bei IF nicht gibt.

Gruß

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

b4r7

Kanns kaum erwarten :DDDDDD
IF ist schon der Hammer ^^ DOIF wirds um ein vielfaches übertrumpfen!
FHEM auf Debian VM (FreeNAS bhyve)
HMUart + ZME-UZB1 über RPi2/ser2net

Damian

#17
Ich habe fertig!

Bitte die aktualisierte Doku zum Modul im ersten Post beachten, dort habe ich das Modul zum download angehängt.

Habe mal zum Testen zwei at-Befehle und zwei notifys mit IF-Befehlen durch ein DOIF-Modul ersetzt:

define DI_Rollo_Licht DOIF ([06:25] and !$we and [Helligkeit] eq "off")
  (set Lampeflur on, set Lampekueche on)
DOELSEIF((([Helligkeit] eq "on" and $hms gt "06:25") or [08:00]) and !$we)
  ((set R_W_S,R_W_W[1-3] on), sleep 900, set Wandleuchten_W off, sleep 1,set Lampekueche off, set Lampeflur off)
DOELSEIF ([Helligkeit] eq "off")
  ((set Lampekueche,Lampeflur on), sleep 1800, (set R_W_S,R_W_W[1-3] off))
DOELSEIF ([23:00])
  (set Lampekueche off)
DOELSEIF ([23:30])
  (set Lampeflur off)


Mal schauen, ob das Haus morgen noch steht :)

Zum Installieren Modul 98_DOIF.pm ins FHEM-Verzeichnis kopieren und in der Kommandozeile reload 98_DOIF.pm eingeben.

Ansonsten viel Spaß beim Ausprobieren.

Gruß

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

Invers

Gratulation und danke.
Gerade heute wollte ich mal nachfragen. Kann ich mir ja dann sparen. Werde gleich testen.

Vielen Dank!
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

kermi

Hallo Damian,

das sieht ja super aus, da werde ich mich gleich mal ranmachen.
Wenn ich das richtig verstanden habe kann könnte ich damit meine Jalousiesteuerung, die aus vielen Dummys, noch mehr notify´s und je 4 watchdogs, Heating_Control und THRESHOLD besteht, ja komplett vereinfacht umbauen.

Da ich ein lichtliebender Mensch bin fahre ich die Jalousieen wirklich nur runter wenn es draussen heiss ist und die Sonne ballert, das ganze dann noch zeitgesteuert und das wars schon.

Das wird ne lustige Denksportaufgabe ...

Vielen Dank für das Modul und deine Arbeit!!

Gruß
Stephan
FB 7390 mit FHEM 5.5
2x CUL V2
HM-Sec-RHS, HM-ES-PMSw1-Pl, HM-PB-4Dis-WM, HM-LC-Dim1TPBU-FM, HM-LC-Sw1-FM, HM-PB-2-WM55, KFM 100, HM-OU-LED16,
EM 1000 WZ ... und div. Quatsch

Invers

ich hab mal eine Variante getestet:
define DI_Kuehlschrank DOIF ([TMP_Kuehl:temperature] >= 7.5) (set Kuehlschrank on) DOELSEIF ([TMP_Kuehl:temperature] <= 6.5)  (set Kuehlschrank off)

Funktioniert auch. Auch die Fehlermeldungen bei falscher Definition kommen. Ich hatte temperature versehentlich gross geschrieben und das wurde brav gemeldet.

Nun bekomme ich Statusmeldungen vom DOIF:
DI_Kuehlschrank cmd_3
DI_Kuehlschrank cmd_1
DI_Kuehlschrank cmd_2

ich denke, DI_Kuehlschrank cmd_1 ist die erste Bedingung erfüllt u.s.w.
DI_Kuehlschrank cmd_3, was ist das?


Wäre es nicht übersichtlicher, die Schaltbedingung anzuzeigen?
Also statt DI_Kuehlschrank cmd_1 - Anzeige = 7.5
DI_Kuehlschrank cmd_2 - Anzeige = 6.5

Oder ist da jetzt von mir was falsch interpretiert worden?

Ansonsten - tolle Sache!!!
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Groby

Ich denke cmd_3 ist die Lücke zwischen 6.6-7.4

Tolles Modul!!!

kkoeniger

#22
Super Modul !! Herzlichen Dank.

Ich habe Probleme mit device.names bei Definitionen wie ([netatmo_M02:00:00:01:38:78:temperature] > 27) (set markise on). Es erscheint dann eine Fehlermeldung: DI_markise DOIF: unknown Device: netatmo_M02.

Gleiches bei einem Reading wie [Solar:AC.Power.Fast]. Sorry - das funktioniert, hatte mich in FHEM vertippt. :(
LG,
Karl

Bennemannc

Hallo,

hast Du das über die Befehlszeile eingegeben oder von Hand in die fhem.cfg geschrieben ? Ich denke, das es analog zum THRESHOLD Modul sein muss, das der DOIF nach den define des Devices stehen muss - also ziemlich am Ende der cfg stehen.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

kkoeniger

Hatte ich auf der Befehlszeile eingegeben bzw dann bei den Internals weitergearbeitet.

In der config sieht es wie folgt aus, wobei nach dem DOIF anstelle der wetterstation stehen sollte [netatmo_M02:00:00:01:38:78:temperature] :

define DI_markise DOIF ([wetterstation:temperature] > 20 and ($hms gt "11:15" and $hms lt "18:35" and !$we)) (set markiese 70) DOELSEIF\
([wetterstation:rain] > 0 or [wetterstation:windSpeed] > 10) (set markiese off) DOELSE\
(set markiese off)

LG,
Karl

Damian

Zitat von: kkoeniger am 25 Juni 2014, 12:38:11
Hatte ich auf der Befehlszeile eingegeben bzw dann bei den Internals weitergearbeitet.

In der config sieht es wie folgt aus, wobei nach dem DOIF anstelle der wetterstation stehen sollte [netatmo_M02:00:00:01:38:78:temperature] :

define DI_markise DOIF ([wetterstation:temperature] > 20 and ($hms gt "11:15" and $hms lt "18:35" and !$we)) (set markiese 70) DOELSEIF\
([wetterstation:rain] > 0 or [wetterstation:windSpeed] > 10) (set markiese off) DOELSE\
(set markiese off)

Da Doppelpunkt bei Readingangaben als Trennzeichen gilt, darf es nicht im Namen des Devices vorkommen. In solchen Fällen bitte das Device umbenennen.

Gruß

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

Damian

#26
Zitat von: Invers am 25 Juni 2014, 10:20:52

DI_Kuehlschrank cmd_3, was ist das?

Wäre es nicht übersichtlicher, die Schaltbedingung anzuzeigen?
Also statt DI_Kuehlschrank cmd_1 - Anzeige = 7.5
DI_Kuehlschrank cmd_2 - Anzeige = 6.5

Oder ist da jetzt von mir was falsch interpretiert worden?


cmd_3 ist bei dir der imaginäre DOELSE-Fall (dritter Fall bei dir), den du nicht definiert hast, dieser wird auch angezeigt - steht so in der Doku.

Das Modul soll universell einsetzbar sein. Man kann jetzt schon das Attribut cmdState nutzen, siehe Doku. Später werde ich im Status vielleicht noch Readings wie in der Bedingung in eckigen Klammern im cmdState vorsehen.

Gruß

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

kkoeniger

Danke, das umbenennen des device half :)
LG,
Karl

Invers

Zitatcmd_3 ist bei dir der imaginäre DOELSE-Fall (dritter Fall bei dir), den du nicht definiert hast, dieser wird auch angezeigt - steht so in der Doku.

Meinst du mit Doku den Post 1? oder hab ich was verschlafen?


Ansonsten verstanden, danke.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

kkoeniger

Sorry - wieder der Lästige ;)

Jedesmal wenn ich händische Änderungen an der fhem.cfg (natürlich an anderer Stelle) vornehme, sind die DOIF-Defines in Fehm verschwunden. Fehlermeldung zB nach einem rereadcfg:

"0
DI_qion DOIF: unknown reading: strommess:energy
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
Please define DI_qion first
DI_markise DOIF: unknown reading: netatmo_ter:temperature
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
Please define DI_markise first
"

Auch nach einem shutdown+restart oder einem reboot meines Raspi sind die Defines verschwunden.
LG,
Karl