HMCCU: Wie am Besten off-for-timer umsetzen?

Begonnen von dadoc, 29 Juni 2018, 18:45:14

Vorheriges Thema - Nächstes Thema

dadoc

Hallo zusammen,
habe mich schon eine ganze Weile durch die umfasende Doku gearbeitet, aber noch nicht den Königsweg für eine banale Frage gefunden: wenn ich per DOIF nacch dem Eintreten einer bestimmten Situation, die eine bestimmte Zeit andauern muss (konkret: Stromverbrauch während 3 Minuten > x Watt) diverse Channels eines HM Wired I/O-Moduls für einen bestimmten Zeitraum ab- und dann wieder einschalten will : Was ist da die beste Lösung?
Derzeit jhabe ich das ohne den Timer so:


Internals:
   DEF        ([OWL:W:d]>4500)
(set HM_Aljibe_entrada_C150_ on)
(set Pool Pumpe off)
(set HM_Termo off)
(set Klima_Kueche_Schlafz_Arbeitsz_1 off)
(set Klima_Kueche_Schlafz_Arbeitsz_2 off)
(set Klima_Wohnz_Gaestez_1 off)
(set Klima_Wohnz_Gaestez_2 off)
(set aktueller_Verbrauch_Testdummy [OWL:W:d])
   MODEL      FHEM
   NAME       PowerControlDoif
   NR         269
   NTFY_ORDER 50-PowerControlDoif
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-06-29 18:40:17   Device          OWL
     2018-06-29 18:09:18   cmd             1.8
     2018-06-29 18:09:18   cmd_event       OWL
     2018-06-29 18:09:18   cmd_nr          1
     2018-06-29 18:09:18   cmd_seqnr       8
     2018-06-29 18:40:17   e_OWL_W         2012.50 Watt
     2018-06-29 12:03:42   mode            enabled
     2018-06-29 18:09:18   state           cmd_1
     2018-06-29 18:09:17   wait_timer      no timer
   Regex:
   attr:
     cmdState:
     wait:
       0:
         180
     waitdel:
   condition:
     0          ReadingValDoIf($hash,'OWL','W','','d')>4500
   devices:
     0           OWL
     all         OWL
   do:
     0:
       0          set HM_Aljibe_entrada_C150_ on
       1          set Pool Pumpe off
       2          set HM_Termo off
       3          set Klima_Kueche_Schlafz_Arbeitsz_1 off
       4          set Klima_Kueche_Schlafz_Arbeitsz_2 off
       5          set Klima_Wohnz_Gaestez_1 off
       6          set Klima_Wohnz_Gaestez_2 off
       7          set aktueller_Verbrauch_Testdummy [OWL:W:d]
     1:
   helper:
     event      W: 2012.50 Watt
     globalinit 1
     last_timer 0
     sleepdevice OWL
     sleepsubtimer -1
     sleeptimer -1
     timerdev   OWL
     timerevent W: 5135.90 Watt
     triggerDev OWL
     DOIF_eventas:
       cmd_nr: 1
       cmd_seqnr: 8
       cmd_event: OWL
       state: cmd_1
     timerevents:
       W: 5135.90 Watt
     timereventsState:
       W: 5135.90 Watt
     triggerEvents:
       W: 2012.50 Watt
     triggerEventsState:
       W: 2012.50 Watt
   internals:
   itimer:
   perlblock:
   readings:
     0           OWL:W
     all         OWL:W
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Energie
   wait       180

Danke & Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

Ellert

Welche Lösungen hast Du probiert und warum gefallen Sie Dir nicht?

dadoc

Mit wait und Bedingungen sowie mit Zeit-/Intervallangaben. Aber ich hatte die Hoffnung, es würde so etwas Schlichtes geben wie set off-for-timer...
Allerdings habe ich gerade festgestellt, dass sich der Hauptverbraucher (Pumpe) ohnehin nicht so ohne Weiteres ausschalten lässt, wenn deren eigener Controller (Poolcontroller) sie im Automatikmodus laufen lässt. Das muss ich nun zuerst mal lösen.
Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

Ellert

In DOIF ist wait die Standartlösung und funktioniert immer.
sleep ist auch möglich, kann verwendet werden wenn der Timer bei Statuswechsel nicht zurück gesetzt werden soll.
Wenn die Hardware es unterstützt kann on-for-timer... verwendet werden.
Oder wenn es im Modul implementiert ist, sollte der on-for-timer funktionieren.
Eine andere Lösung ist die Verwendung von structure.

Auf eine Bedingung wirst Du nicht verzichten können.

In Deinem DOIF gibt es 8 Sequenzen für set ...off, aber nur einen Timer der die erste Sequenz verzögert, die Verwendung der Sequenzen 2 bis 8 ohne Timer ist ineffektiv, die set- Befehle solltest Du zusammenfassen zu set A,B,C,<usw,> off siehe https://fhem.de/commandref_DE.html#devspec

dadoc

#4
Hallo Ellert,
vielen Dank für Deinen Rat. Ich konnte mittlerweile das Pumpenabschaltungsproblem mit reichlich Kabel und Hardware (HM 12/7 I/O-Schaltkanal an Hutschienenrelais an Digitaleingang des Poolcontrollers, dort Schaltregel "Pumpe aus") lösen und bin jetzt wieder beim DOIF.
Mein Ausgangspunkt war https://forum.fhem.de/index.php?topic=60926.0
Was ich erreichen möchte ist, dass wenn der Stromverbrauch über einen gewissen Zeitraum (z.B. 120 s) einen gewissen Wert (z.B. 5000 Watt) überschreitet, bestimmte Schaltaktionen zum An- und Abschalten von Verbrauchern ausgeführt werden. Nach wiederum einem bestimmten Zeitraum (z.B. 60 s) sollen bestimmte Verbraucher wieder eingeschaltet werden.
Ich habe das jetzt so:
([OWL:W:d]>5000)
(set HM_Aljibe_entrada_C150_ on)
(set HM_Rel_DigitalIn_Poolcontr on)
(set HM_Termo, Klima_Kueche_Schlafz_Arbeitsz_1, Klima_Kueche_Schlafz_Arbeitsz_2, Klima_Wohnz_Gaestez_1, Klima_Wohnz_Gaestez_2 off)
(set aktueller_Verbrauch_Testdummy [OWL:W:d])
DOELSE
(set HM_Rel_DigitalIn_Poolcontr off)
(set HM_Termo on)
(set aktueller_Verbrauch_Testdummy "PowerCut")

mit
wait 120,0,0,0:60,0
und
do always
also nicht do resetwait wie in o.g. Thread.
Das scheint auch so zu funktionieren - ist das die eleganteste Lösung?
Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

frank

warum willst du manche verbraucher kurzfristig abschalten?
unter umständen erreichst du dadurch genau das gegenteil, da viele verbraucher besonders beim einschalten extrem mehr strom ziehen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

dadoc

Hallo Frank,
das ist in der Tat erklärungsbedürftig. In Spanien (Ort dieser Installation) ist es so, dass Du mit Deinem Stromversorger einen Vertrag über ein bestimmtes Maximum an kW-Momentanverbrauch abschließen musst. Und die Grundgebühr pro kW in diesem Sinn ist recht hoch (ca. 4 Euro/Monat pro kW, zusätzlich zu x anderen Grundgebühr-Posten). Bislang war es kein Problem, wenn Du trotz eines Vertrags über (z.B.) 3,5 kW mal über die Stränge geschlagen hast und ein paar Stunden (z.B.) 5 kW ziehst, solange es die Kabel Deiner Hausinstallation aushielten.
Nun haben die Stromversorger die sogenannten "intelligenten Zähler" eingeführt. Diese bewirken, dass wenn Dein aktueller Verbrauch über einen gewissen Zeitraum (einstelliger Minutenbereich, exakte Daten habe ich nicht gefunden) über dem vertraglich Gebuchten liegt, Dein kompletter Hausstrom hart abgeschaltet wird. Dann musst Du a) den Hauptschalter ausschalten, und b) 5 Sekunden warten, bis Du ihn wieder einschaltest.
Das bedeutet, dass ein kurzzeitiger Verbrauchsanstieg (Einschaltphase der Verbraucher) irrelevant ist. Aber dass man halt über einen Zeitraum von geschätzten 2-4 Minuten im Durchschnitt nicht über dem gebuchten Maximum liegen sollte. Ist sehr mühsam, hier konkrete Werte experimentell zu ermitteln. Daher mein erster Ansatz, bei Überschreitung des Maximalwerts über den Zeitraum von 2 oder 3 Minuten die Hauptverbraucher erstmal abzuschalten und kurz darauf ein paar derselben, aber eben nicht alle, wieder zu aktivieren. Gleichzeitig soll aber mit diesem DOIF die Verbrauchsüberwachung weiterlaufen und bei Bedarf die verbleibenden Hauptverbraucher wieder abschalten.
Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods

frank

aha, sehr interessant.
wenn man pech hat, schaltet sich bei abwesenheit die drainage pumpe ein und 5min später gehen wegen "überlast" alle kühl- und gefriergeräte aus.  8)
so "überredet" man die leute, möglichst hohe gebühren auf den tisch zu legen, damit bloss immer alles an bleibt.
na, mahlzeit.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Ellert

Zitat...ist das die eleganteste Lösung?
Wäre es nicht eleganter, wenn die Geräte nach Bedarf, Wichtigkeit und Dringlichkeit an- und ausgeschaltet würden und so Leistungsspitzen vermieden werden.
Dann könnten immer optimal viele Geräte gleichzeitig betrieben werden. Ein weniger wichtiges und nicht dringliches Gerät könnte dann zu Gunsten eines wichtigeren und dringlicheren Gerätes abgeschaltet werden. 

dadoc

Ja, sehr gern, aber die im DOIF gelisteten Verbraucher sind zum einen die einzigen nennenswerten Stromschlucker, die ich derzeit per fhem schalten kann, zum anderen ist deren Eigenverhalten nicht immer vorhersehbar: Termo ist ein Wasserboiler, der sich nach Bedarf einschaltet, Klima sind Klimaanlagen, die - falls eingeschaltet - je nach Temperatur keinen, wenig oder viel Strom ziehen. All das kann ich mit dem Verbrauchsmesser nur in der Summe erfassen.
Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods