FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: wendeling am 05 Mai 2017, 20:10:57

Titel: Mehrfachbedingungen
Beitrag von: wendeling am 05 Mai 2017, 20:10:57
Hallo ,
Wie und was muss ich machen wenn ich die ventilpositionen von mehreren max Thermostaten abfragen möchte . Das wenn ein Thermostat aufmacht die Pumpe anläuft .

Wer kann mir helfen ?

Gruß
Wendelin
Titel: Antw:Mehrfachbedingungen
Beitrag von: Puschel74 am 05 Mai 2017, 20:36:31
Das Regexp passend wählen.

Du willst mehr Hilfe?
Dann liefer mehr Infos.

Edith: Oder anders gesagt - du definierst dir ein notify (oder DOIF) das als Regexp die Ventilposition aller deiner Thermostate beinhaltet und somit auf diese triggert.
Im weiteren Code legst du dann fest was wann passieren soll.
Beispiel von meiner FHT und HM-Mischung:
.*_Heizung:actuator.* {
Die Geräte mit der relevanten Ventilposition heissen alle irgendwas_Heizung und das Reading heisst actuator.

Edith1: Um das notify nicht immer zu triggern wenn die Ventilposition gesendet wird habe ich an jedem Thermostaten (resp. Channel bei HM) das attribut event-on-change-reading passend gesetzt.
So wird das notify nur getriggert wenn sich die Ventilposition ändert.
Weiters stelle ich das notify mit dem Attribut disable auf 1 wenn ich "das Haus" in den Sommermodus setze.
Titel: Antw:Mehrfachbedingungen
Beitrag von: Beta-User am 05 Mai 2017, 22:55:31
Ergänzend sagt meine Glaskugel noch:

Evtl. könnte auch das Modul Valves für Dich interessant sein; das macht aus allen eine virtuelle Zusammenfassung, wobei Du die Gewichtung beinflussen kannst.

Kommt aber auf den usecase an, ansonsten ist die regex-Frage vorrangig zu bearbeiten...

Gruß, Beta-User
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 05 Mai 2017, 23:03:42
Hab jetzt folgendes eingestellt, aber irgendwie funktioniert das nicht so richtig

defmod Pumpe_A DOIF (["^MAX:^valveposition"]> 0 ) (set HMW_IO_12_Sw7_DR_LEQ0117043_19 on) DOELSE (set HMW_IO_12_Sw7_DR_LEQ0117043_19 off)
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 05 Mai 2017, 23:19:49
Zitat von: wendeling am 05 Mai 2017, 23:03:42
Hab jetzt folgendes eingestellt, aber irgendwie funktioniert das nicht so richtig

defmod Pumpe_A DOIF (["^MAX:^valveposition"]> 0 ) (set HMW_IO_12_Sw7_DR_LEQ0117043_19 on) DOELSE (set HMW_IO_12_Sw7_DR_LEQ0117043_19 off)

defmod Pumpe_A DOIF (["^MAX:^valveposition",0]> 0 ) (set HMW_IO_12_Sw7_DR_LEQ0117043_19 on) DOELSE (set HMW_IO_12_Sw7_DR_LEQ0117043_19 off)
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 05 Mai 2017, 23:21:43
In welchen Zyklen wird Doif ausgeführt ?
Wenn die Bedingung nicht erfüllt ist wird doch doelse ausgeführt , oder ?

Aber das funktioniert nicht !
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 05 Mai 2017, 23:29:41
Zitat von: wendeling am 05 Mai 2017, 23:21:43
In welchen Zyklen wird Doif ausgeführt ?
Wenn die Bedingung nicht erfüllt ist wird doch doelse ausgeführt , oder ?

Aber das funktioniert nicht !
DOIF arbeitet nicht mit Zyklen, sondern ereignisgesteuert. Dein DOELSE-Fall sollte kommen, wenn das passende Event kommt und die Angabe hinter dem Doppelpunkt Null ist.
Titel: Antw:Mehrfachbedingungen
Beitrag von: Thorsten Pferdekaemper am 06 Mai 2017, 08:02:56
Zitat von: Damian am 05 Mai 2017, 23:19:49
defmod Pumpe_A DOIF (["^MAX:^valveposition",0]> 0 ) (set HMW_IO_12_Sw7_DR_LEQ0117043_19 on) DOELSE (set HMW_IO_12_Sw7_DR_LEQ0117043_19 off)
Würde das nicht die Pumpe abschalten, sobald auch nur ein Ventil zugeht? Ich glaube nicht, dass es so gewünscht ist.
Gruß,
   Thorsten
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 06 Mai 2017, 09:00:20
Zitat von: Thorsten Pferdekaemper am 06 Mai 2017, 08:02:56
Würde das nicht die Pumpe abschalten, sobald auch nur ein Ventil zugeht? Ich glaube nicht, dass es so gewünscht ist.
Gruß,
   Thorsten

ja, dafür gibt es neuerdings die Aggregationsfunktion, siehe https://fhem.de/commandref_DE.html#DOIF_aggregation

hier also:

defmod Pumpe_A DOIF ([#"^MAX:^valveposition":valveposition:$number >0] > 0 ) (set HMW_IO_12_Sw7_DR_LEQ0117043_19 on) DOELSE (set HMW_IO_12_Sw7_DR_LEQ0117043_19 off)

Übersetzt heißt das, wenn das passende Event zu "^MAX:^valveposition" kommt, werden alle Devices im System gezählt, die zu "^Max" passen und im  Reading "valveposition" ein Wert größer 0 haben. Wenn deren Anzahl größer Null ist, wird auf on geschaltet ansonsten auf off.
Titel: Antw:Mehrfachbedingungen
Beitrag von: Thorsten Pferdekaemper am 06 Mai 2017, 09:17:41
Das widerspricht jetzt aber Deiner eigenen Doku. MAX sollte den Maximalwert und nicht die Anzahl zurückgeben, oder?
Gruß,
   Thorsten
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 06 Mai 2017, 09:23:02
Zitat von: Thorsten Pferdekaemper am 06 Mai 2017, 09:17:41
Das widerspricht jetzt aber Deiner eigenen Doku. MAX sollte den Maximalwert und nicht die Anzahl zurückgeben, oder?
Gruß,
   Thorsten

Dann hast du nicht genau gelesen.

Du meinst die Aggregationsfunktion #max, hier ist aber nur die Zählfunktion # angegeben. In Anführungszeichen wird die Regex für das Device angegeben und hier waren offenbar die Max-Devices "^Max" gewünscht. ;)
Titel: Antw:Mehrfachbedingungen
Beitrag von: Thorsten Pferdekaemper am 06 Mai 2017, 09:46:46
Aaaaargh...
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 06 Mai 2017, 18:46:03
Funktioniert leider nicht 😪
DeviceOverview
Pumpe_HK
initialized
Pumpe_HK Internals
CFGFN
DEF


NAME
Pumpe_HK
NR
65367
NTFY_ORDER
50-Pumpe_A1
STATE
initialized
TYPE
DOIF
Readings
cmd
0
2017-05-06 18:43:41
state
initialized
2017-05-06 18:43:41
timer_01_c01
error: Wrong timespec #"^MAX:^valveposition":valveposition:$number>0: either HH:MM:SS or {perlcode}
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 06 Mai 2017, 20:16:08
Hast du auch die aktuelle Version von DOIF?
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 06 Mai 2017, 21:08:44
Wie überprüfe ich das und wie hole ich mir die neue ?

Gruß
Wendelin
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 06 Mai 2017, 21:48:35
Per FHEM-Update hat man sie automatisch.

mit "Version DOIF.pm" in der Kommandozeile siehst du deine Version.

Die aktuelle lautet:

# $Id: 98_DOIF.pm 14112 2017-04-26 16:09:48Z Damian $#
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 06 Mai 2017, 22:00:51
Habe jetzt letzte Version , aber dennoch das gleiche Problem
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 06 Mai 2017, 22:46:21
Zitat von: wendeling am 06 Mai 2017, 22:00:51
Habe jetzt letzte Version , aber dennoch das gleiche Problem

tja, dann machst du wohl etwas falsch.


ich kann bei mir das Beispiel:

defmod Pumpe_A DOIF ([#"^MAX:^valveposition":valveposition:$number >0] > 0 ) (set HMW_IO_12_Sw7_DR_LEQ0117043_19 on) DOELSE (set HMW_IO_12_Sw7_DR_LEQ0117043_19 off)

mit copy und paste über die Kommandozeile ohne Probleme definieren.
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 06 Mai 2017, 23:14:02
Hab ich gemacht , gleiche Problem!
Was ist das mit der Zeit ?
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 06 Mai 2017, 23:15:13
error: Wrong timespec #"^MAX:^valveposition":valveposition:$number>0: either HH:MM:SS or {perlcode}
Titel: Antw:Mehrfachbedingungen
Beitrag von: Thorsten Pferdekaemper am 06 Mai 2017, 23:16:37
Hi,
zeig am Besten mal ein list Deines DOIF.
Gruß,
   Thorsten
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 06 Mai 2017, 23:27:06
Internals:
   CFGFN
   DEF        ([#"^MAX:^valveposition":valveposition:$number >0] > 0 ) (set HMW_IO_12_Sw7_DR_LEQ0117043_19 on) DOELSE (set HMW_IO_12_Sw7_DR_LEQ0117043_19 off)
   NAME       Pumpe_A
   NR         75266
   NTFY_ORDER 50-Pumpe_A
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-05-06 22:58:34   cmd             0
     2017-05-06 22:58:34   state           initialized
     2017-05-06 22:58:34   timer_01_c01    error: Wrong timespec #"^MAX:^valveposition":valveposition:$number>0: either HH:MM:SS or {perlcode}
   Condition:
     0          DOIF_time_once($hash,0,$wday) > 0
   Devices:
   Do:
     0:
       0          set HMW_IO_12_Sw7_DR_LEQ0117043_19 on
     1:
       0          set HMW_IO_12_Sw7_DR_LEQ0117043_19 off
   Helper:
     globalinit 1
     last_timer 1
     sleeptimer -1
   Itimer:
   Localtime:
   Regexp:
   State:
   Time:
     0          #"^MAX:^valveposition":valveposition:$number>0
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
Attributes:
   room       KG Heizung
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 07 Mai 2017, 08:14:59
und jetzt noch mal Output von "Version DOIF.pm"
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 07 Mai 2017, 08:19:16
98_DOIF.pm 14112 2017-04-26 16:09:48Z Damian
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 07 Mai 2017, 08:33:21
Zitat von: wendeling am 07 Mai 2017, 08:19:16
98_DOIF.pm 14112 2017-04-26 16:09:48Z Damian

Hast du das System durchgestartet? So verhält sich eigentlich nur das alte Modul. So sieht bei mir die Definition mit der obigen Version aus:
Internals:
   CFGFN
   DEF        ([#"^MAX:^valveposition":valveposition:$number >0] > 0 ) (set HMW_IO_12_Sw7_DR_LEQ0117043_19 on) DOELSE (set HMW_IO_12_Sw7_DR_LEQ0117043_19 off)
   NAME       Pumpe_A
   NR         501
   NTFY_ORDER 50-Pumpe_A
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-05-07 08:28:21   cmd             0
     2017-05-07 08:28:21   state           initialized
   Condition:
     0          AggregateDoIf($hash,'#','^MAX','valveposition','$number >0') > 0
   Devices:
   Do:
     0:
       0          set HMW_IO_12_Sw7_DR_LEQ0117043_19 on
     1:
       0          set HMW_IO_12_Sw7_DR_LEQ0117043_19 off
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Itimer:
   Regexp:
     0:
       0          ^MAX:^valveposition
     All:
       0          ^MAX:^valveposition
   State:
     State:
Attributes:


Unter "Condition" ist die neue Aggregationsfunktion zu sehen.
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 07 Mai 2017, 13:49:30
!!!! Genau das war mein Fehler !!!!!
Jetzt funktioniert es super !

Vielen lieben Dank an die Spezialisten !!

Danke

Gruß
Wendelin
Titel: Antw:Mehrfachbedingungen
Beitrag von: Damian am 07 Mai 2017, 14:15:59
Zitat von: wendeling am 07 Mai 2017, 13:49:30
!!!! Genau das war mein Fehler !!!!!
Jetzt funktioniert es super !

Vielen lieben Dank an die Spezialisten !!

Danke

Gruß
Wendelin

Dann teste es ausgiebig. Dieser Fall ist ein typischer Anwendungsfall für die Steuerung einer Umwälzpumpe abhängig der Ventil-Öffnungen. Wenn es sich bewährt, werde ich es als Beispiel in die Commandref zu DOIF aufnehmen. Jede andere Lösung des Problems dürfte mehr als eine Definitionszeile brauchen ;)
Titel: Antw:Mehrfachbedingungen
Beitrag von: wendeling am 07 Mai 2017, 15:03:36
Mach ich , und Danke noch einmal .
Habe jetzt sogar ein zweites mit alias Name , und das funktioniert genauso
Gut

Gruß
Wendelin