Hauptmenü

Mehrfachbedingungen

Begonnen von wendeling, 05 Mai 2017, 20:10:57

Vorheriges Thema - Nächstes Thema

wendeling

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

Puschel74

#1
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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

wendeling

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)

Damian

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)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

wendeling

In welchen Zyklen wird Doif ausgeführt ?
Wenn die Bedingung nicht erfüllt ist wird doch doelse ausgeführt , oder ?

Aber das funktioniert nicht !

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Thorsten Pferdekaemper

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
FUIP

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Thorsten Pferdekaemper

Das widerspricht jetzt aber Deiner eigenen Doku. MAX sollte den Maximalwert und nicht die Anzahl zurückgeben, oder?
Gruß,
   Thorsten
FUIP

Damian

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. ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Thorsten Pferdekaemper

FUIP

wendeling

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}

Damian

Hast du auch die aktuelle Version von DOIF?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

wendeling

Wie überprüfe ich das und wie hole ich mir die neue ?

Gruß
Wendelin