Hauptmenü

actuator mit DOIF auswerten

Begonnen von rud0815, 10 Dezember 2024, 20:16:04

Vorheriges Thema - Nächstes Thema

rud0815

Hallo,
ich habe noch viele FHT und drei Homatic Heizungsventile. Ich möchte die Ventilstellungen auswerten und habe folgende DOIF Abfrage gemacht.
define Ventilsteuerung_2 DOIF ([HZ_DB_v_r_Clima:ValvePosition] or [HZ_DB_h_r_Clima:ValvePosition] or [HZ_DB_T_F_Clima:ValvePosition] or [Bad_Heizung:actuator:d] or [Hobby_Heizung:actuator:d] or [Ich_Heizung:actuator:d] or [SZ_Heizung:actuator:d] or [WC_Heizung:actuator:d] or [WG_Heizung:actuator:d] or [WZ_Heizung:actuator:d] > 4) (set Ventilsteuerung_1 on)Leider ist Das ergebnis nicht wie gewünscht.
Folgendes Ergenis wird angezeigt:
Device                           HZ_DB_T_F_Clima   2024-12-10 20:02:58
cmd                              1                 2024-12-10 18:16:35
cmd_event                        HZ_DB_h_r_Clima   2024-12-10 18:16:35
cmd_nr                           1                 2024-12-10 18:16:35
e_Bad_Heizung_actuator           0%                2024-12-10 19:11:47
e_HZ_DB_T_F_Clima_ValvePosition  0                 2024-12-10 20:02:58
e_HZ_DB_h_r_Clima_ValvePosition  0                 2024-12-10 20:01:47
e_HZ_DB_v_r_Clima_ValvePosition  1                 2024-12-10 20:01:32
e_WC_Heizung_actuator            0%                2024-12-10 19:19:59
mode                             enabled           2024-12-10 18:01:45
state                            cmd_1             2024-12-10 18:16:35
und
Bad_Heizung (Bad Heizung)                 20.7 C                          FHT
DOIFtools                                 initialized                     DOIFtools
HZ_DB_T_F_Clima (Flur Tür)                T: 13.8 desired: 6.0 valve: 0   CUL_HM
HZ_DB_h_r_Clima (Fenster hinten rechts)   T: 14.2 desired: 14.0 valve: 0  CUL_HM
HZ_DB_v_r_Clima (Fenster vorne rechts)    T: 14.0 desired: 14.0 valve: 1  CUL_HM
Hobby_Heizung (Hobbyraum Heizung)         measured-temp: 18.1             FHT
Ich_Heizung (Ich-Zimmer Heizung)          measured-temp: 18.7             FHT
SZ_Heizung (Schlafzimmer Heizung)         18.2 C                          FHT
Ventilsteuerung_1 (Ventilsteuerung)       off                             dummy
WC_Heizung (WC Heizung)                   18.4 C                          FHT
WG_Heizung (Wintergarten Heizung)         7.9 C                           FHT
WZ_Heizung (Wohnzimmer Heizung)           19.1 C                          FHT

Die Ventilstellung wird mir nicht angezeigt.
Laut den Beschreibungen ist der Aufruf richtig:
[Hobby_Heizung:actuator:d]
Was habe ich übersehen?
Gruß
Wilhelm
Eine FS20/HomeMatic Anlage (gemischt) und eine HomeMatic Anlage, beide mit Raspberry Pi und FHEM

rabehd

Das >4 gehört vor jedes OR.
Hier fände ich ein notify auch sinnvoller.
Auch funktionierende Lösungen kann man hinterfragen.

rud0815

Habe ich eingebaut, das Ergebnis hat sich nicht geändert.
den DOIF Aufbau habe ich aus einer älteren Auswertung abgeschrieben.
Eine FS20/HomeMatic Anlage (gemischt) und eine HomeMatic Anlage, beide mit Raspberry Pi und FHEM

sash.sc

Dann setze deine ganze OR Verknüpfung mal in eine runde Klammer, dann sollte es funktionieren.
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Damian

Was möchtest du mit den or-Bedingungen bezwecken?

[HZ_DB_h_r_Clima:ValvePosition]

ohne einen Vergleich mit etwas, ist die Angabe genau dann wahr, wenn der Inhalt des Readings ungleich Null ist - sonst nicht.

Möchtest du das?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rud0815

Mit der zusätzlichen runden Klammer scheint es zu funktionieren.
Ich möchte mit der Abfrage bezwecken, dass wenn ein Ventil über 5% geöffnet ist, die Pumpe eingeschaltet wird und wenn nicht, soll sie aus sein.
Eine FS20/HomeMatic Anlage (gemischt) und eine HomeMatic Anlage, beide mit Raspberry Pi und FHEM

Per

Schon mal mit nur einer Heizung probiert?
Im übrigen hatte ich das gleiche Problem, aber auf der CCU direkt, gelöst, indem ich die Werte addiert habe. Wenn viele Ventile nur ein wenig geöffnet sind, lief der Brenner an.

rud0815

Aktuell ist es so, dass die Pumpe abgeschaltet wird, wenn die einstelligen Ventilwerte unter 5 sinken. Zweistellige Werte werden nicht berücksichtigt.
Eine FS20/HomeMatic Anlage (gemischt) und eine HomeMatic Anlage, beide mit Raspberry Pi und FHEM

Damian

Zitat von: rud0815 am 11 Dezember 2024, 08:10:09Mit der zusätzlichen runden Klammer scheint es zu funktionieren.
Ich möchte mit der Abfrage bezwecken, dass wenn ein Ventil über 5% geöffnet ist, die Pumpe eingeschaltet wird und wenn nicht, soll sie aus sein.

Dann musst du bei jedem Ventil den Vergleich anstellen also:

[HZ_DB_v_r_Clima:ValvePosition] > 5 or [HZ_DB_h_r_Clima:ValvePosition] > 5 ...

Das ist nicht DOIF spezifisch, sondern Perl und funktioniert auch bei alle anderen mir bekannten Programmiersprachen, übrigens auch in Excel

alles andere funktioniert sonst "zufällig".



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

rabehd

Zitat von: rud0815 am 11 Dezember 2024, 08:10:09dass wenn ein Ventil über 5% geöffnet ist
Wieso steht dann ein >4 im DOIF?

Zitat von: rud0815 am 10 Dezember 2024, 20:32:27Habe ich eingebaut, das Ergebnis hat sich nicht geändert.
Will ich sehen. Mein Vorschlag ist auch identisch mit dem von Damian.

Auch funktionierende Lösungen kann man hinterfragen.

rud0815

Mein Aufruf siehtnun wie folgt aus:
define Ventilsteuerung_2 DOIF (([HZ_DB_v_r_Clima:ValvePosition] > 4 or [HZ_DB_h_r_Clima:ValvePosition] > 4 or [HZ_DB_T_F_Clima:ValvePosition] > 4 or [Bad_Heizung:actuator:d] > 4 or [Hobby_Heizung:actuator:d] > 4 or [Ich_Heizung:actuator:d] > 4 or [SZ_Heizung:actuator:d] > 4 or [WC_Heizung:actuator:d] > 4 or [WG_Heizung:actuator:d] > 4 or [WZ_Heizung:actuator:d]) > 4) (set Ventilsteuerung_1 on) DOELSE (set Ventilsteuerung_1 off)
Leider funktioniert es nicht so wie ich will.
Bad_Heizung:actuator steht auf 6 und
WC_Heizung:actuator auf 16.
Ventilsteuerung_1 wird nicht auf on geschaltet. Im Logfile steht nichts dazu.
langsam bin ich ratlos.
Wilhelm
Eine FS20/HomeMatic Anlage (gemischt) und eine HomeMatic Anlage, beide mit Raspberry Pi und FHEM

Damian

Dann poste mal die Ausgabe von list von diesem Device in diesem Zustand.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tobi01001

Hi, du fragst ob deiner Klammersetzung ob ein logischer Vergleich > 4 ist (meistens nicht...)
(([HZ_DB_v_r_Clima:ValvePosition]  ... [WZ_Heizung:actuator:d]) > 4)

Das funktioniert nicht.

Außerdem müsste doch ein

define Ventilsteuerung_2 DOIF  ([*.Clima:Valveposition:d] > 4 or [*.Heizung:actuator:d] > 4)  (set Ventilsteuerung_1 on) DOELSE (set Ventilsteuerung_1 off)
Für deine Anwendung ausreichen?

Ansonsten noch:
Zitat von: Damian am 12 Dezember 2024, 13:16:37Dann poste mal die Ausgabe von list von diesem Device in diesem Zustand.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

rud0815

damian: hier der Listausdruck:
nternals:
   CFGFN      ./FHEM/Testarea.cfg
   DEF        (([HZ_DB_v_r_Clima:ValvePosition] > 4 or [HZ_DB_h_r_Clima:ValvePosition] > 4 or [HZ_DB_T_F_Clima:ValvePosition] > 4 or [Bad_Heizung:actuator:d] > 4 or [Hobby_Heizung:actuator:d] > 4 or [Ich_Heizung:actuator:d] > 4 or [SZ_Heizung:actuator:d] > 4 or [WC_Heizung:actuator:d] > 4 or [WG_Heizung:actuator:d] > 4 or [WZ_Heizung:actuator:d]) > 4) (set Ventilsteuerung_1 on) DOELSE (set Ventilsteuerung_1 off)
   FUUID      675872c4-f33f-a974-b7ee-83e918915f0c8fad
   MODEL      FHEM
   NAME       Ventilsteuerung_2
   NOTIFYDEV  global,Ich_Heizung,SZ_Heizung,HZ_DB_T_F_Clima,WG_Heizung,HZ_DB_h_r_Clima,Bad_Heizung,WC_Heizung,WZ_Heizung,HZ_DB_v_r_Clima,Hobby_Heizung
   NR         2267
   NTFY_ORDER 50-Ventilsteuerung_2
   STATE      cmd_2
   TYPE       DOIF
   VERSION    28546 2024-02-23 20:11:05
   READINGS:
     2024-12-12 15:36:23   Device          HZ_DB_T_F_Clima
     2024-12-11 16:50:35   cmd             2
     2024-12-11 16:50:35   cmd_event       WZ_Heizung
     2024-12-11 16:50:35   cmd_nr          2
     2024-12-12 02:51:44   e_Bad_Heizung_actuator 6%
     2024-12-12 15:36:23   e_HZ_DB_T_F_Clima_ValvePosition 0
     2024-12-12 15:35:30   e_HZ_DB_h_r_Clima_ValvePosition 0
     2024-12-12 15:35:33   e_HZ_DB_v_r_Clima_ValvePosition 0
     2024-12-12 02:54:29   e_Ich_Heizung_actuator 4%
     2024-12-12 03:09:03   e_WC_Heizung_actuator 0%
     2024-12-12 04:51:28   e_WG_Heizung_actuator 0%
     2024-12-12 15:14:13   e_WZ_Heizung_actuator 4%
     2024-12-10 18:01:45   mode            enabled
     2024-12-11 16:50:35   state           cmd_2
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       Bad_Heizung:
         0:
           actuator   ^Bad_Heizung$:^actuator:
       HZ_DB_T_F_Clima:
         0:
           ValvePosition ^HZ_DB_T_F_Clima$:^ValvePosition:
       HZ_DB_h_r_Clima:
         0:
           ValvePosition ^HZ_DB_h_r_Clima$:^ValvePosition:
       HZ_DB_v_r_Clima:
         0:
           ValvePosition ^HZ_DB_v_r_Clima$:^ValvePosition:
       Hobby_Heizung:
         0:
           actuator   ^Hobby_Heizung$:^actuator:
       Ich_Heizung:
         0:
           actuator   ^Ich_Heizung$:^actuator:
       SZ_Heizung:
         0:
           actuator   ^SZ_Heizung$:^actuator:
       WC_Heizung:
         0:
           actuator   ^WC_Heizung$:^actuator:
       WG_Heizung:
         0:
           actuator   ^WG_Heizung$:^actuator:
       WZ_Heizung:
         0:
           actuator   ^WZ_Heizung$:^actuator:
   attr:
     waitdel:
   condition:
     0          (::ReadingValDoIf($hash,'HZ_DB_v_r_Clima','ValvePosition') > 4 or ::ReadingValDoIf($hash,'HZ_DB_h_r_Clima','ValvePosition') > 4 or ::ReadingValDoIf($hash,'HZ_DB_T_F_Clima','ValvePosition') > 4 or ::ReadingValDoIf($hash,'Bad_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'Hobby_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'Ich_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'SZ_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'WC_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'WG_Heizung','actuator','','d') > 4 or ::ReadingValDoIf($hash,'WZ_Heizung','actuator','','d')) > 4
   do:
     0:
       0          set Ventilsteuerung_1 on
     1:
       0          set Ventilsteuerung_1 off
   helper:
     NOTIFYDEV  global,Ich_Heizung,SZ_Heizung,HZ_DB_T_F_Clima,WG_Heizung,HZ_DB_h_r_Clima,Bad_Heizung,WC_Heizung,WZ_Heizung,HZ_DB_v_r_Clima,Hobby_Heizung
     event      ValvePosition: 0,boostTime: -,controlMode: auto,desired-temp: 6.0,measured-temp: 13.6,partyEnd: -,partyStart: -,partyTemp: -,T: 13.6 desired: 6.0 valve: 0
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   HZ_DB_T_F_Clima
     timerevent ValvePosition: 0,boostTime: -,controlMode: auto,desired-temp: 6.0,measured-temp: 13.6,partyEnd: -,partyStart: -,partyTemp: -,T: 13.6 desired: 6.0 valve: 0
     triggerDev HZ_DB_T_F_Clima
     timerevents:
       ValvePosition: 0
       boostTime: -
       controlMode: auto
       desired-temp: 6.0
       measured-temp: 13.6
       partyEnd: -
       partyStart: -
       partyTemp: -
       T: 13.6 desired: 6.0 valve: 0
     timereventsState:
       ValvePosition: 0
       boostTime: -
       controlMode: auto
       desired-temp: 6.0
       measured-temp: 13.6
       partyEnd: -
       partyStart: -
       partyTemp: -
       state: T: 13.6 desired: 6.0 valve: 0
     triggerEvents:
       ValvePosition: 0
       boostTime: -
       controlMode: auto
       desired-temp: 6.0
       measured-temp: 13.6
       partyEnd: -
       partyStart: -
       partyTemp: -
       T: 13.6 desired: 6.0 valve: 0
     triggerEventsState:
       ValvePosition: 0
       boostTime: -
       controlMode: auto
       desired-temp: 6.0
       measured-temp: 13.6
       partyEnd: -
       partyStart: -
       partyTemp: -
       state: T: 13.6 desired: 6.0 valve: 0
   internals:
   perlblock:
   readings:
     all         HZ_DB_v_r_Clima:ValvePosition HZ_DB_h_r_Clima:ValvePosition HZ_DB_T_F_Clima:ValvePosition Bad_Heizung:actuator Hobby_Heizung:actuator Ich_Heizung:actuator SZ_Heizung:actuator WC_Heizung:actuator WG_Heizung:actuator WZ_Heizung:actuator
   trigger:
   uiState:
   uiTable:
Attributes:
Eine FS20/HomeMatic Anlage (gemischt) und eine HomeMatic Anlage, beide mit Raspberry Pi und FHEM

rud0815

tobi01001:
[*.Clima:Valveposition:d] den könnte ich verwenden.
Vom FS20 werden mir sachen angezeigt, die ich nicht möchte.
Wilhelm
Eine FS20/HomeMatic Anlage (gemischt) und eine HomeMatic Anlage, beide mit Raspberry Pi und FHEM