Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

kumue

#690
Hallo Damian,
anbei der list-output
Der Dummy DU_Temp.... liefert die gewünschte Temp. Sonntags, wenn die gewünschte Temp. kleiner als die vom Sensor ist, dann mach den Strahler an und ab 23′C wieder aus.
Funktioniert soweit, nur eben auch an allen Wochentagen.

Internals:
   DEF        ([18:30-20:00|0] and [SE_TH_Bad:temperature] < [DU_Temp_Bad]) (set SW_Strahler_Bad on) DOELSEIF ([18:30-20:00|0] and [SE_TH_Bad:temperature] > 23) (set SW_Strahler_Bad off)
   NAME       DO_TH_Bad
   NR         258
   NTFY_ORDER 50-DO_TH_Bad
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2014-11-10 18:47:19   cmd_event       SE_TH_Bad
     2014-11-10 18:47:19   cmd_nr          2
     2014-11-07 13:52:14   e_DU_Temp_Bad_STATE 21
     2014-11-11 13:56:48   e_SE_TH_Bad_temperature 21.2
     2014-11-10 18:47:19   state           cmd_2
     2014-11-11 09:29:39   timer_1_c1      11.11.2014 18:30:00
     2014-11-11 09:29:39   timer_2_c1      11.11.2014 20:00:00
     2014-11-11 09:29:39   timer_3_c2      11.11.2014 18:30:00
     2014-11-11 09:29:39   timer_4_c2      11.11.2014 20:00:00
   Condition:
     0          DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ReadingValDoIf('SE_TH_Bad','temperature','') < InternalDoIf('DU_Temp_Bad','STATE','')
     1          DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and ReadingValDoIf('SE_TH_Bad','temperature','') > 23
   Days:
   Devices:
     0           SE_TH_Bad DU_Temp_Bad
     1           SE_TH_Bad
     all         SE_TH_Bad DU_Temp_Bad
   Do:
     0          set SW_Strahler_Bad on
     1          set SW_Strahler_Bad off
   Helper:
     last_timer 4
     sleeptimer -1
   Internals:
     0           DU_Temp_Bad:STATE
     all         DU_Temp_Bad:STATE
   Readings:
     0           SE_TH_Bad:temperature
     1           SE_TH_Bad:temperature
     all         SE_TH_Bad:temperature
   Realtime:
     0          18:30:00
     1          20:00:00
     2          18:30:00
     3          20:00:00
   State:
   Time:
     0          18:30:00
     1          20:00:00
     2          18:30:00
     3          20:00:00
   Timecond:
     0          0
     1          0
     2          1
     3          1
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
Attributes:
   do         always
   group      Services
   icon       celsius
   room       Bad


Gruß Kai

##################
Edit:
Habe gerade ein Test-DOIF angelegt,,,
Mit ([18:00-20:00|0]) wurde geschaltet, mit ([18:02-20:00|06]) nicht...
Steht die 0, der Sonntag also allein da, gibts bei mir Probleme...

Damian

Zitat von: kumue am 11 November 2014, 14:04:36

Habe gerade ein Test-DOIF angelegt,,,
Mit ([18:00-20:00|0]) wurde geschaltet, mit ([18:02-20:00|06]) nicht...
Steht die 0, der Sonntag also allein da, gibts bei mir Probleme...

ja, its not a feature it´s a bug  :(
Korrektur morgen per Update  :)

Gruß

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

moonsorrox

@Damian

ich habe da mal eine Frage zu deinem DOIF Modul. Ich habe vor eine Beleuchtungssteuerung für mein Aussenlicht zu erstellen, so nach dem Muster "Aus, Dämmerungsschaltung und Zufall".. wobei hier für mich interessant ist die sogenannte Zufallsschaltung z.B. bei nicht Anwesenheit.
Kann ich dieses mit dem DOIF Modul erstellen, dass wenn ich in einer Setlist auf Zufall schalte das die Beleuchtung z.B sich immer mal zu vollkommen unbestimmten Zeiten ein-/ausschaltet für eine gewisse Zeit mal 1 Std. oder auch 30min. usw. wobei auch die Ein und Ausschaltzeiten variieren sollten und diese auch nur ab und bis zu einer Zeit, also eben abends ab Dämmerung bis morgens Dämmerung.

Ich habe in der commandref schon so einiges gelesen über dein Modul, aber ob dieses was ich möchte so zu bewerkstelligen ist habe ich nicht raus finden können. Evtl. sagst du ja sofort ja das geht oder mit Einschränkung oder eben nicht.

Vielen Dank für deine Hilfestellung vorab
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 November 2014, 12:06:18
@Damian

ich habe da mal eine Frage zu deinem DOIF Modul. Ich habe vor eine Beleuchtungssteuerung für mein Aussenlicht zu erstellen, so nach dem Muster "Aus, Dämmerungsschaltung und Zufall".. wobei hier für mich interessant ist die sogenannte Zufallsschaltung z.B. bei nicht Anwesenheit.
Kann ich dieses mit dem DOIF Modul erstellen, dass wenn ich in einer Setlist auf Zufall schalte das die Beleuchtung z.B sich immer mal zu vollkommen unbestimmten Zeiten ein-/ausschaltet für eine gewisse Zeit mal 1 Std. oder auch 30min. usw. wobei auch die Ein und Ausschaltzeiten variieren sollten und diese auch nur ab und bis zu einer Zeit, also eben abends ab Dämmerung bis morgens Dämmerung.

Ich habe in der commandref schon so einiges gelesen über dein Modul, aber ob dieses was ich möchte so zu bewerkstelligen ist habe ich nicht raus finden können. Evtl. sagst du ja sofort ja das geht oder mit Einschränkung oder eben nicht.

Vielen Dank für deine Hilfestellung vorab

Das sollte kein Problem sein. Den Zufall müsstest du aber dir selbst in myUtils als Routine programmieren.
Deine Funktion muss dann immer nur die errechnete Zeit der Form "SS:MM" liefern. Dann kannst du definieren:

define di_schalten_mit_Zufall DOIF ([{einschaltfunktion()}-{ausschaltfunktion()}])(set ...)

Hier hat jemand schon etwas mit rand() als Zufallsfunktion programmiert: http://forum.fhem.de/index.php/topic,28856.msg217251.html#msg217251

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

moonsorrox

Ich werde mal schauen was ich hier so finde, dachte aber es geht ohne die Programmierung in der 99_myUtils, denn das wird mir nicht gelingen.
Werde dann dazu einen Beitrag unter Beleuchtung anfangen zu schreiben denn da passt es besser hin...
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

Brockmann

Zitat von: moonsorrox am 18 November 2014, 16:51:31
Ich werde mal schauen was ich hier so finde, dachte aber es geht ohne die Programmierung in der 99_myUtils, denn das wird mir nicht gelingen.
Werde dann dazu einen Beitrag unter Beleuchtung anfangen zu schreiben denn da passt es besser hin...
Schau Dir mal das Modul RandomTimer an. Das macht im Prinzip das, was Du suchst, denke ich.
Ich kenne es auch nur von da, habe also selbst keine praktische Erfahrung damit. Das Feintuning des switchmode (also quasi die Definition der "Zufälligkeit") klingt etwas komplex bzw. man muss da vielleicht etwas probieren, bis man die optimalen Werte findet. Ist aber vielleicht einen Versuch wert.

moonsorrox

@Damian
vllt kannst du mal in diesem Posting schauen ob ich das richtig verstanden habe

@Brockmann
das schaue ich mir dann einmal an, betrifft jetzt die Konditionen für das define welches ich jetzt erst mal mit Zeiten gemacht habe.
Das DEF werde ich dann später mit den Zufallszeiten befüllen wenn es mir gelingt
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

#697
Hallo,
tolles Modul, vielen Dank hierfür !!
Ich versuche mich gerade daran (Testweise an einem Dummy). Inspiriert durch den WiKi-Eintrag
Rollläden sollen an Arbeitstagen nach 6:25 Uhr hochfahren, wenn es hell wird, am Wochenende erst um 9:00 Uhr, herunter sollen sie wieder, wenn es dunkel wird:

define di_shutters DOIF ([sensor:brightness]>100 and [06:25-09:00|8] or [09:00|7]) (set shutters up) DOELSEIF ([sensor:brightness]<50) (set shutters down)


will ich jetzt versuchen meine komplizierte Jalosiensteuerung von x-at-Befehlen auf wenige DOIFs umzustellen.
Ich muss dabei zwischen speziellen Wochentagen (Mo und Di) sowie !$we abfragen. Dh Mo+Di nur wenn = !$we
geht das mit [14:00|128] oder [14:00|12] and !$we ?
Die die übrigen Wochentage (Mi-Fr) kann man doch noch mit weiteren geschachtelten and/or-bedingungen mit separatem Timer in die eine DOIF-Bedingung einfügen ,oder  ?  Also "Mo+Di um 14:00 Uhr", "Mi-Fr Twilight_weather>30" und am Wochenende ($we) nicht vor 8:30 ?

so zum Beispiel: (RolloDOIF ist mein Testdummy, Rollo_Master ein Dummy zum deaktivieren des Timers)

define RolloHinten DOIF (([14:00|12] and (!$we)) or ([myT:twilight_weather]>30 and [06:25-09:00|345] or [08:30-09:00|7]) and [Rollo_Master:state] eq "on") (set RolloDOIF on) DOELSEIF ([myT:twilight_weather]<30 and [Rollo_Master:state] eq "on") (set RolloDOIF off)
LG
B.


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

Damian

#698
Zitat[14:00|128]
8 steht für Arbeitstage und wird mit anderen Zahlen mit or verknüpft und nicht mit and, daher musst du auf  [14:00|12] and !$we ausweichen.

ZitatDie die übrigen Wochentage (Mi-Fr) kann man doch noch mit weiteren geschachtelten and/or-bedingungen mit separatem Timer in die eine DOIF-Bedingung einfügen ,oder  ?  Also "Mo+Di um 14:00 Uhr", "Mi-Fr Twilight_weather>30" und am Wochenende ($we) nicht vor 8:30?
Je nach dem, wie du es definierst, kannst du das in weitere DOELSEIF-Fälle packen. Wenn es der gleiche Ausführungscode ist, kannst du es evtl. sogar in die gleiche Bedingung mit or verknüpft einbauen.

Gruß

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

Bartimaus

Hi Damian,


Danke für die schnelle Antwort. Ich hatte meinen Beitrag zwischenzeitlich editiert, und mal einen Testcode eingesetzt. Hoffe die Klammern sind richtig. Hans auch zum testen in meine FHEM.cfg gepackt. Bin mal gespannt  :)


Lg
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 19 November 2014, 16:29:34
Hi Damian,


Danke für die schnelle Antwort. Ich hatte meinen Beitrag zwischenzeitlich editiert, und mal einen Testcode eingesetzt. Hoffe die Klammern sind richtig. Hans auch zum testen in meine FHEM.cfg gepackt. Bin mal gespannt  :)


Lg

ich habe meinen Beitrag auch gerade noch angepasst.

define RolloHinten DOIF (([14:00|12] and (!$we)) or ([myT:twilight_weather]>30 and [06:25-09:00|345] or [08:30-09:00|7]) and [Rollo_Master:state] eq "on") (set RolloDOIF on) DOELSEIF ([myT:twilight_weather]<30 and [Rollo_Master:state] eq "on") (set RolloDOIF off)

sollte funktionieren, allerdings hast du deine twilight-Abfrage nur mit Tagen 345 über and verbunden nicht mit Wochenende, wahrscheinlich meinst du aber:

define RolloHinten DOIF (([14:00|12] and (!$we)) or ([myT:twilight_weather]>30 and ([06:25-09:00|345] or [08:30-09:00|7])) and [Rollo_Master:state] eq "on") (set RolloDOIF on) DOELSEIF ([myT:twilight_weather]<30 and [Rollo_Master:state] eq "on") (set RolloDOIF off)

and bindet stärker als or (nicht nur in Perl, sondern in allen Programmiersprachen)

Gruß

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

moonsorrox

@Damian

ich habe bisher die Zeiten in einer RSS Übersicht dargestellt mit diesem Code

text x y { InternalVal('WegLampe1_Ein','STATE','') }
text x y { InternalVal('WegLampe1_Aus','STATE','') }


jetzt habe ich ja wie im anderen Beitrag schon geschrieben die Steuerung der Außenbeleuchtung (noch nicht komplett, brauche noch etwas Hilfe) mit deinem DOIF Modul gemacht, wie kann ich jetzt die Zeiten/Timer darstellen. Habe schon einige Definitionen probiert bisher kein Erfolg. Ich sehe die ganzen Zeiten ja in den Readings, aber ich möchte sie alle in einer Übersicht haben.
Getestet habe ich schon cmd_1, cmd_2, timer_1_c1,timer_2_c1 usw. mit Readingsval und auch "state" schon probiert aber ich bekomme keine Zeitanzeige hin.. :-\
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

@Damian,


vielen lieben Dank. Deine Hilfsbereitschaft ist wie immer vorbildlich.  :-*
Jetzt kann ich aus 9 '*at' 2 DOIF machen. Und das nur für meine beiden Jalousien. Für Pool und Aussenlampe kann ich jetzt auch was abspecken  :)
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: moonsorrox am 19 November 2014, 17:43:58
@Damian

ich habe bisher die Zeiten in einer RSS Übersicht dargestellt mit diesem Code

text x y { InternalVal('WegLampe1_Ein','STATE','') }
text x y { InternalVal('WegLampe1_Aus','STATE','') }


jetzt habe ich ja wie im anderen Beitrag schon geschrieben die Steuerung der Außenbeleuchtung (noch nicht komplett, brauche noch etwas Hilfe) mit deinem DOIF Modul gemacht, wie kann ich jetzt die Zeiten/Timer darstellen. Habe schon einige Definitionen probiert bisher kein Erfolg. Ich sehe die ganzen Zeiten ja in den Readings, aber ich möchte sie alle in einer Übersicht haben.
Getestet habe ich schon cmd_1, cmd_2, timer_1_c1,timer_2_c1 usw. mit Readingsval und auch "state" schon probiert aber ich bekomme keine Zeitanzeige hin.. :-\

Wenn du irgendwo den Wert eines Timers anzeigen willst, z. B. timer_1_c1, dann musst du das nur korrekt angeben, hier also:

{ReadingsVal("dein DOIF-Modul Name","timer_1_c1","")}

das hat aber nichts mit DOIF zu tun, sondern mit Funktionen, wie ReadingsVal die der Anwender in FHEM nutzen kann.

Gruß

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

Damian

Zitat von: Bartimaus am 19 November 2014, 18:06:10
@Damian,


vielen lieben Dank. Deine Hilfsbereitschaft ist wie immer vorbildlich.  :-*
Jetzt kann ich aus 9 '*at' 2 DOIF machen. Und das nur für meine beiden Jalousien. Für Pool und Aussenlampe kann ich jetzt auch was abspecken  :)

Das war auch meine Intention bei diesem Modul. Wie ich schon in der Commandref geschrieben habe: "Wer die Lampe an macht, soll sie auch wieder aus machen", alles Andere ist vergleichbar mit dem Spagetticode, den man vor 30 Jahren mit gotos produziert hatte, und man selbst nachher nicht mehr wusste, wie alles zusammenhängt und jede Änderung zu unvorhergesehenen Nebeneffekten an ganz anderer Stelle führte.

Gruß

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