Hauptmenü

Doif zurücksetzen

Begonnen von Sebastian84, 15 Mai 2023, 10:58:51

Vorheriges Thema - Nächstes Thema

Sebastian84

Guten Tag
Ich hab eine Steckdose die nach 5 Stunden Interval sich ausschaltet. Ich habe ein Doif das um 22 Uhr die Steckdose bis zum nächsten Tag 8 Uhr ausschaltet und um 8 Uhr wieder an.
Jetzt hab ich das Problem das wenn die 5 Stunden Interval vor 22 Uhr die Steckdose ausschaltet, das das Doif den Schaltzustand nicht um 22 Uhr auf cmd_2 schaltet sondern auf cmd_1 lässt. Dadurch wird am nächsten Morgen die Steckdose nicht um 8 Uhr eingeschaltet, weil es denkt es ist auf cmd_1. Kann man in doif über Atribute das duif um 22 Uhr a
DOIF_time($hash,0,1,$wday,$hms) or (::ReadingValDoIf($hash,'Multisensor4','humidity')<(::ReadingValDoIf($hash,'di_humidity_GZ','desired')-::ReadingValDoIf($hash,'di_humidity_GZ','hysterese')/2) and ::ReadingValDoIf($hash,'Kellersteckdose','state') ne "off")
     1          ::ReadingValDoIf($hash,'Multisensor4','humidity')>(::ReadingValDoIf($hash,'di_humidity_GZ','desired')+::ReadingValDoIf($hash,'di_humidity_GZ','hysterese')/2) and ::ReadingValDoIf($hash,'Kellersteckdose','state') ne "on"
   days:
uf cdm_2  schalten.




Damian

Du musst ein list von dem DOIF-Device posten.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sebastian84

#2
Zitat
nals:
   DEF        ([22:00-08:00] or ([Multisensor4:humidity]<([$SELF:desired]-[$SELF:hysterese]/2) and [?Kellersteckdose:state] ne "off"))
(set Kellersteckdose off)
DOELSEIF ([Multisensor4:humidity]>([$SELF:desired]+[$SELF:hysterese]/2) and [?Kellersteckdose:state] ne "on")
(set Kellersteckdose on)
   FUUID      620fd583-f33f-cdd4-d638-f8aabcf0541fb691
   MODEL      FHEM
   NAME       di_humidity_GZ
   NOTIFYDEV  di_humidity_GZ,Multisensor4,global
   NR         386
   NTFY_ORDER 50-di_humidity_GZ
   STATE      on
   TYPE       DOIF
   VERSION    26444 2022-09-25 16:29:19
   eventCount 1
   READINGS:
     2023-05-15 15:49:24   Device          Multisensor4
     2023-05-15 08:12:18   cmd             2
     2023-05-15 08:12:18   cmd_event       di_humidity_GZ
     2023-05-15 08:12:18   cmd_nr          2
     2023-05-15 08:12:18   desired         62
     2023-05-15 15:49:24   e_Multisensor4_humidity 67.01
     2023-05-15 08:12:18   e_di_humidity_GZ_desired 62
     2022-10-12 16:12:12   e_di_humidity_GZ_hysterese 2
     2022-10-12 16:12:12   hysterese       2
     2022-02-19 11:23:02   mode            enabled
     2023-05-15 08:12:18   state           on
     2023-05-15 08:00:00   timer_01_c01    15.05.2023 22:00:00
     2023-05-15 08:00:00   timer_02_c01    16.05.2023 08:00:00
   Regex:
     accu:
     collect:
     cond:
       Multisensor4:
         0:
           humidity   ^Multisensor4$:^humidity:
         1:
           humidity   ^Multisensor4$:^humidity:
       di_humidity_GZ:
         0:
           desired    ^di_humidity_GZ$:^desired:
           hysterese  ^di_humidity_GZ$:^hysterese:
         1:
           desired    ^di_humidity_GZ$:^desired:
           hysterese  ^di_humidity_GZ$:^hysterese:
   attr:
     cmdState:
       0:
         off
       1:
         on
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) or (::ReadingValDoIf($hash,'Multisensor4','humidity')<(::ReadingValDoIf($hash,'di_humidity_GZ','desired')-::ReadingValDoIf($hash,'di_humidity_GZ','hysterese')/2) and ::ReadingValDoIf($hash,'Kellersteckdose','state') ne "off")
     1          ::ReadingValDoIf($hash,'Multisensor4','humidity')>(::ReadingValDoIf($hash,'di_humidity_GZ','desired')+::ReadingValDoIf($hash,'di_humidity_GZ','hysterese')/2) and ::ReadingValDoIf($hash,'Kellersteckdose','state') ne "on"
   days:
   do:
     0:
       0          set Kellersteckdose off
     1:
       0          set Kellersteckdose on
     2:
   helper:
     NOTIFYDEV  di_humidity_GZ,Multisensor4,global
     event      humidity: 67.01
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   Multisensor4
     timerevent humidity: 67.01
     triggerDev Multisensor4
     timerevents:
       humidity: 67.01
     timereventsState:
       humidity: 67.01
     triggerEvents:
       humidity: 67.01
     triggerEventsState:
       humidity: 67.01
   internals:
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1684180800
     1          1684216800
   perlblock:
   readings:
     all         Multisensor4:humidity di_humidity_GZ:desired di_humidity_GZ:hysterese
   realtime:
     0          22:00:00
     1          08:00:00
   time:
     0          22:00:00
     1          08:00:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
   triggertime:
     1684180800:
       localtime  1684180800
       hash:
     1684216800:
       localtime  1684216800
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   off|on
   readingList desired,hysterese
   room       Keller
   setList    desired:56,58,60,62,64,66,68,70 hysterese:2,5,10
   webCmd     desired:hysterese




In den Fall ist es jetzt so das die Steckdose aus ist. Da der Interval von 5 Stunden beendet ist. Und das Dofi heute nicht mehr an geht und morgen früh um 8 Uhr auch nicht einschaltet, weil es ja noch auf An steht.

rabehd

Da steht doch nirgendwo das um 08:00 die Kellersteckdose auf on gehen soll.
Das on wird nur durch Änderung Deines Sensors ausgelöst (wenn Bedingung wahr).
Auch funktionierende Lösungen kann man hinterfragen.

Sebastian84

Ja nur wenn der Feuchtigkeitssensor sagt es wähhre zu feucht.

rabehd

ZitatIch habe ein Doif das um 22 Uhr die Steckdose bis zum nächsten Tag 8 Uhr ausschaltet und um 8 Uhr wieder an.
Hast Du nicht.


ZitatIch hab eine Steckdose die nach 5 Stunden Interval sich ausschaltet.
Zwei unabhängige Automatismen sind immer problematisch.
Da Du den Zustand der Steckdose aber abfragen kannst, ist sie ja in FHEM.
Warum reagierst Du nicht auf das Event Steckdose off?

Zitatdas das Doif den Schaltzustand nicht um 22 Uhr auf cmd_2 schaltet sondern auf cmd_1 lässt
Ich lese cmd_1 wird 22 Uhr ausgeführt. cmd_2 nur wenn der Sensor sich mit erfüllter Bedingung meldet.
Auch funktionierende Lösungen kann man hinterfragen.

Otto123

Der Code sieht verdammt nach meinem Entwurf für eine Feuchtigkeitsabhängige Trocknung aus. Der ist aber dafür, dass der Trockner wirklich dann schaltet wenn das DOIF schaltet. Wieso und wo gibt es ein 5 Stunden Intervall?

Hinweise: dieses DOIF funktioniert nicht wenn jemand manuell eingreift, also die Steckdose per Hand an oder aus schaltet. Diesen Fall abzufangen habe ich mich noch nicht bemüht. :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Ich denke, du willst tagsüber entfeuchten. Dann würde ich die Logik wie bei beim Heizen entkoppeln.

Ein DOIF für die zeitliche Vorgabe der Steuerung und eins zum Regeln der Feuchte:

DOIF ([08:00-22:00]) (setreading di_humidity_GZ desired 62) DOELSE (setreading di_humidity_GZ desired 80)
und dann nur noch

DOIF ([Multisensor4:humidity]<([$SELF:desired]-[$SELF:hysterese]/2) and [?Kellersteckdose:state] ne "off"))
(set Kellersteckdose off)
DOELSEIF ([Multisensor4:humidity]>([$SELF:desired]+[$SELF:hysterese]/2) and [?Kellersteckdose:state] ne "on")
(set Kellersteckdose on)

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

Per

Das erste DOIF könnte man als DOIFreading machen.

Sebastian84

Danke für die schnelle Hilfe
Ich hab das jetzt getrennt voneinander gemacht. Den Interval von der Steckdose habe ich ausgestellt. Jetzt klappt das super.