Hauptmenü

neues Modul DOIF

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

Vorheriges Thema - Nächstes Thema

igami

Hi,

momentan bin ich dabei der einfachheithalber Schaltzeiten und andere Vorgaben in Readingsggroups auszulagern, es stellt sich aber nicht so einfach wie gedacht.
Ist es möglich Readings als Zeitintervalle auszuwerten?

define di_Reklame DOIF ([[d_Reklame_Vorgabe:start]-[d_Reklame_Vorgabe:ende]] and ([EIB_6302] le [d_Reklame_Vorgabe:vorgabe]))(set struct_10_11010 on)

Funktioniert leider nicht. Ich bekomme den Fehler

di_Reklame DOIF: unknown expression format: 00

obwohl in der Forgabe Zeiten im viertelstunden Takt stehen.

Ich hoffe das Bild gibt eine Vorstellung davon, was ich Vorhabe. Vielleicht ist es ja möglich ohne ein notify mit der DEF

EIB_6302 {
if(ReadingsVal("d_Reklame_Vorgabe","modus","error") eq "auto")
{if
(
  (
   (
    (ReadingsVal("d_Reklame_Vorgabe","start","error") < ReadingsVal("d_Reklame_Vorgabe","ende","error")) and
    (($hour.":".$min) >= ReadingsVal("d_Reklame_Vorgabe","start","error"))and
    (($hour.":".$min) < ReadingsVal("d_Reklame_Vorgabe","ende","error"))
   )
   or
   (
    (ReadingsVal("d_Reklame_Vorgabe","start","error") > ReadingsVal("d_Reklame_Vorgabe","ende","error"))and
    (
     (
      (($hour.":".$min) >= ReadingsVal("d_Reklame_Vorgabe","start","error"))and
      (($hour.":".$min) <= "24:00")
     )
     or
     (
      (($hour.":".$min) >= "00:00")and
      (($hour.":".$min) < ReadingsVal("d_Reklame_Vorgabe","ende","error"))
     )
    )
   )
  )and
  (Value("EIB_6302") <= ReadingsVal("d_Reklame_Vorgabe","vorgabe","error"))
)
  {
   if(Value("struct_10_11010") ne 80)
    {fhem("set struct_10_11010 on")}
  }
else
  {
   if(Value("struct_10_11010") ne 5)
    {fhem("set struct_10_11010 off")}
  }
}}

zu benutzen.

Danke und Grüße
Igami
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

Brockmann

Zitat von: igami am 23 September 2014, 08:20:49
Ist es möglich Readings als Zeitintervalle auszuwerten?
Schau mal dieses Beispiel aus der Command-Ref:
[11:00-{sunset_abs()}]
Analog dazu sollte es gehen, also in geschweiften Klammern und nicht mit dem DOIF-Mechanismus zum Auswerten der Readings, sondern mit ReadingsVal.

igami

Das habe ich schon probiert, erfolgreich. Nur dann werden die Zeiten nicht sofort beim Ändern in das DOIF übernommen. Das wäre in diesem Fall nicht schlimm, ich habe aber auch noch eine andere Schaltung, die ich nur über Zeit und nicht zusätzlich noch über Helligkeit mache, da wird dann erst beim Schalten der alten Zeiten die neue Zeit übernommen.
Vielleicht ist es ja möglich, das Modul um die Auswertung zu erweitern?

Grüße
Igami
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

Brockmann

Zitat von: igami am 23 September 2014, 12:42:41
Nur dann werden die Zeiten nicht sofort beim Ändern in das DOIF übernommen. Das wäre in diesem Fall nicht schlimm, ich habe aber auch noch eine andere Schaltung, die ich nur über Zeit und nicht zusätzlich noch über Helligkeit mache, da wird dann erst beim Schalten der alten Zeiten die neue Zeit übernommen.
Du könntest versuchen, die Bedingung um die Teilbedingung
and [d_Reklame_Vorgabe:start]
zu erweitern. Dann wird getriggert, wann immer sich an d_Reklame_Vorgabe:start etwas ändert. Das müsstest Du dann mit dem Attribut do always kombinieren. Ich bin mir aber nicht sicher, ob das DOIF dann auch aktualisiert wird, wenn die andere Bedingung in dem Moment nicht erfüllt ist?

Damian

Die Berechnung der Zeit müsste in einer Perl-Routine stattfinden. Dann könnte man das in geschweiften Klammern angeben.

DOIF ([{anfang()}-{ende()}])(set...)

Die Routinen werden bei der Definition ausgeführt und danach, wenn der errechnete Timer zuschlägt und der nächste  Zeitpunkt bestimmt werden muss.

Gruß

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

det.

Hallo Damian,
habe eine Weile gebraucht um festzustellen, das Dein Modul mit readings die über FHEM2FHEM von einem Childserver kommen, nichts anfangen kann. Habe mir dann über cloneDummy geholfen. Gibt es dafür einen leicht zu erklärenden Grund?
LG
det.

Damian

Zitat von: det. am 23 September 2014, 19:26:51
Hallo Damian,
habe eine Weile gebraucht um festzustellen, das Dein Modul mit readings die über FHEM2FHEM von einem Childserver kommen, nichts anfangen kann. Habe mir dann über cloneDummy geholfen. Gibt es dafür einen leicht zu erklärenden Grund?

Wahrscheinlich wird bei Änderung dieser Readings kein Event erzeugt.

Gruß

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

det.

Zitat von: Damian am 23 September 2014, 19:45:44
Wahrscheinlich wird bei Änderung dieser Readings kein Event erzeugt.
da es bei notifys funktioniert - müssen doch mMn Events erzeugt werden. Irgendwie setzt Dein Modul das physische Vorhandensein der Sensordefinition vor Eintritt des Events voraus?
LG
det.

Damian

Zitat von: det. am 23 September 2014, 19:55:41
da es bei notifys funktioniert - müssen doch mMn Events erzeugt werden. Irgendwie setzt Dein Modul das physische Vorhandensein der Sensordefinition vor Eintritt des Events voraus?

Das war mal so bei den ersten Versionen vor dem Einchecken.

Wenn du die aktuelle Version hast, dann ist z. B.

define di_test DOIF ([blabla:blabla]) (set bla on)

möglich, obwohl nichts davon existiert.

Gruß

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

dancatt

Hallo zusammen,

ich versuche mich gerade an meinem ersten DOIF.


define Heizung_Schalter dummy
attr Heizung_Schalter group Global.Schalter.Heizung
attr Heizung_Schalter icon max_heizungsthermostat
attr Heizung_Schalter room Global
attr Heizung_Schalter setList state:Anwesend,Arbeit,Pfalz,Abwesend
attr Heizung_Schalter webCmd state

define di_Kinderzimmer_Heizung_Schalter DOIF (Kinderzimmer_Heizung_Schalter eq "Anwesend")\
  (set Kinderzimmer_Heizung_Schalter Anwesend, set Wohnzimmer_Heizung_Schalter Anwesend)\
DOELSEIF (Kinderzimmer_Heizung_Schalter eq "Arbeit")\
  (set Kinderzimmer_Heizung_Schalter Arbeit, set Wohnzimmer_Heizung_Schalter Arbeit)\
DOELSEIF (Kinderzimmer_Heizung_Schalter eq "Pfalz")\
  (set Kinderzimmer_Heizung_Schalter Pfalz, set Wohnzimmer_Heizung_Schalter Pfalz)\
DOELSEIF (Kinderzimmer_Heizung_Schalter eq "Abwesend")\
  (set Kinderzimmer_Heizung_Schalter Abwesend, set Wohnzimmer_Heizung_Schalter Abwesend)

#####################################################################

define Kinderzimmer_Heizung_Schalter dummy
attr Kinderzimmer_Heizung_Schalter group Kinderzimmer.Schalter.Heizung
attr Kinderzimmer_Heizung_Schalter icon max_heizungsthermostat
attr Kinderzimmer_Heizung_Schalter room Kinderzimmer
attr Kinderzimmer_Heizung_Schalter setList state:Anwesend,Arbeit,Pfalz,Abwesend
attr Kinderzimmer_Heizung_Schalter webCmd state

define di_Kinderzimmer_Heizung_Schalter DOIF (Kinderzimmer_Heizung_Schalter eq "Anwesend" or Kinderzimmer_Heizung_Schalter eq "Arbeit" or Kinderzimmer_Heizung_Schalter eq "Pfalz")\
  ({HeizungTemperaturlisteSetzen("Kinderzimmer_Heizung_Schalter", "Kinderzimmer_Heizung_Clima")})\
DOELSEIF (Kinderzimmer_Heizung_Schalter eq "Abwesend")\
  (set Kinderzimmer_Heizung_Clima controlManu off)

#####################################################################

define Wohnzimmer_Heizung_Schalter dummy
attr Wohnzimmer_Heizung_Schalter group Wohnzimmer.Schalter.Heizung
attr Wohnzimmer_Heizung_Schalter icon max_heizungsthermostat
attr Wohnzimmer_Heizung_Schalter room Wohnzimmer
attr Wohnzimmer_Heizung_Schalter setList state:Anwesend,Arbeit,Pfalz,Abwesend
attr Wohnzimmer_Heizung_Schalter webCmd state

define di_Wohnzimmer_Heizung_Schalter DOIF (Wohnzimmer_Heizung_Schalter eq "Anwesend" or Wohnzimmer_Heizung_Schalter eq "Arbeit" or Wohnzimmer_Heizung_Schalter eq "Pfalz")\
  ({HeizungTemperaturSetzen("Wohnzimmer_Heizung_Schalter", "Wohnzimmer_Wandthermostat_Climate")})\
DOELSEIF (Wohnzimmer_Heizung_Schalter eq "Abwesend")\
  (set Wohnzimmer_Wandthermostat_Climate controlManu off)


Dabei kommt folgender Fehler wenn ich FHEM neu starte:

Error messages while initializing FHEM:
configfile: di_Kinderzimmer_Heizung_Schalter DOIF: no state, reading or time in condition: Kinderzimmer_Heizung_Schalter eq "Anwesend"
di_Kinderzimmer_Heizung_Schalter DOIF: no state, reading or time in condition: Kinderzimmer_Heizung_Schalter eq "Anwesend" or Kinderzimmer_Heizung_Schalter eq "Arbeit" or Kinderzimmer_Heizung_Schalter eq "Pfalz"
di_Wohnzimmer_Heizung_Schalter DOIF: no state, reading or time in condition: Wohnzimmer_Heizung_Schalter eq "Anwesend" or Wohnzimmer_Heizung_Schalter eq "Arbeit" or Wohnzimmer_Heizung_Schalter eq "Pfalz"



Was mir noch aufgefallen ist, dass wenn ich "save config" ausführe, dass alle DOIF's in der cfg-Datei verschwinden.

Was mache ich da falsch?

Vielen Dank.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

Damian

Zitat von: dancatt am 25 September 2014, 15:36:24

Was mache ich da falsch?

Du musst schon in der Bedingung, so wie es in der Doku des Moduls steht und in den vielen Beispielen aufgezeigt ist, deine Devices in eckige Klammern setzen, also:

define di_Kinderzimmer_Heizung_Schalter DOIF ([Kinderzimmer_Heizung_Schalter] eq "Anwesend")...


Gruß


Damian

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

dancatt

Ja, na sowas, danke, da sitzt man ewig davor und dann sieht man sowas nicht.
Danke
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

Steffen

Hallo!

Es geht um diese Code versuch:
([06:00-08:00] and [SamsungTv] eq "disconnected") ({HueOffSofa}) DOELSE ({HueOffSideBoard})
attr wait 0:10

ich möchte das zu erst HueOffSofa(ausgeführt/aus) geht und dann etwas Zeit verzögert(ca.30sek) die HueOffSideBoard aber irgendwie klappt das so nicht richtig, die "HueOffSofa" wird ordentlich wie in der 99.pm angelegt ausgestellt aber bei der "HueOffSideBoard" will es einfach nicht funktionieren?!

Beide .pm werden korrekt ausgeführt wenn ich sie in Fhem direkt ausführe.

Hat jemand vielleicht eine Idee?

Mfg Steffen

Damian

Zitat von: Steffen am 01 Oktober 2014, 07:04:24
Hallo!

Es geht um diese Code versuch:
([06:00-08:00] and [SamsungTv] eq "disconnected") ({HueOffSofa}) DOELSE ({HueOffSideBoard})
attr wait 0:10

ich möchte das zu erst HueOffSofa(ausgeführt/aus) geht und dann etwas Zeit verzögert(ca.30sek) die HueOffSideBoard aber irgendwie klappt das so nicht richtig, die "HueOffSofa" wird ordentlich wie in der 99.pm angelegt ausgestellt aber bei der "HueOffSideBoard" will es einfach nicht funktionieren?!

Beide .pm werden korrekt ausgeführt wenn ich sie in Fhem direkt ausführe.

Hat jemand vielleicht eine Idee?

Mfg Steffen

"else" heißt auf deutsch "sonst". Der Fall DOELSE wird nur ausgeführt, wenn deine Bedingung nicht! wahr ist, also sonst.

Gruß

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

Steffen

Zitat von: Damian am 01 Oktober 2014, 07:51:13
"else" heißt auf deutsch "sonst". Der Fall DOELSE wird nur ausgeführt, wenn deine Bedingung nicht! wahr ist, also sonst.

Gruß

Damian

Das hatte ich mir auch schon gedacht und war nur ein versuch von vielen aber bekommt man denn zwei Befehle mit einer Verzögerung(wait) unter gebracht??

Mfg Steffen