Hallo steh mal wieder vor einer Herausforderung
Würde gerne aus mehreren readings aus einem dev ein reading erstellen
bekomme als reading
Pool_Pumpe_100
0
Pool_Pumpe_40
0
Pool_Pumpe_70
1
Pool_Pumpe_90
0
Es sollte am Ende mit "Pumpe 70% Lauf" ercheinen, wenn dies möglich ist
gibt es überhaupt eine möglichkeit dies zu schaffen
Würde mich über Hilfe feuen
Zitat von: ChrisA4 am 07 Mai 2024, 20:42:18gibt es überhaupt eine möglichkeit dies zu schaffen
Natürlich, am einfachsten per userReading.
Aber mich würde interessieren, wie diese vier readings an sich entstehen? Es macht doch wenig Sinn, drei readings überhaupt erst zu erzeugen, die gar nicht gebraucht werden.
defmod p dummy
attr p stateFormat Pumpe running% Lauf
attr p userReadings running:Pool_Pumpe_\d+:.* { $event =~ m/(\d+)/;; return $1}
doch werden sie
das sind meldungen von einer poolpumpe mit verschiedenen Leistungsstufen über einen Frequenzumformer
daß ich nicht 4x "Pumpe ......."
würde ich gerne 1x "Pumpe 100% lauf" oder "Pumpe 40% lauf" stehen haben
Zitat von: ChrisA4 am 07 Mai 2024, 21:12:10doch werden sie
Aha....
Eigentlich willst du doch nur
"Pumpe=0", oder "Pumpe=40", oder ....
Aber wenn man nicht weiß, was wie geliefert wird und was ggf. für die Weiterverarbeitung gebraucht wird, ist es Kaffeesatz, womit wir bei https://forum.fhem.de/index.php?topic=71806.0 wären...
Es scheitert halt mal wieder an der möglichst einfachen Formulierung der eigentlichen Aufgabe.
Ich habe oben in meiner ersten Antwort eine der vielen möglichen Lösungen ergänzt.
Zitat von: betateilchen am 07 Mai 2024, 21:18:35Es scheitert halt mal wieder an der möglichst einfachen Formulierung der eigentlichen Aufgabe.
Ja, aber nur "bedingt""Eigentlich" hat der TE schon "irgendwie verständlich durchblicken lassen", was er "sehen" möchte - nur halt praktisch alle technischen Details nicht erwähnt, die man bräuchte, um eine tatsächlich "einfache" Lösung anzubieten.
Zitat von: betateilchen am 07 Mai 2024, 21:04:32Natürlich, am einfachsten per userReading.
Ob das nämlich "am einfachsten" (ggf. einfach nur im Sinne von "übersichtlichsten") ist, kann man m.E. erst in etwa abschätzen, wenn man weiß, wo bzw. wie die erwähnten Basisdaten in den Readings eigentlich herkommen.
Vermutlich irgendwas, was einen JSON-Blob schickt (oder seine Infos blödsinnig via MQTT auf mehrere Topics verteilt)...
Und _vermutlich_ will der User auch einen Regelkreis schaffen, also "irgendwas" an sein Device senden... (Bin mal gespannt, was es eigentlich ist, ggf. bitte auch neben dem "list/copy for forum" als "immerwährende Basis-Bringschuld" auch den Link zur Homepage des Projekts liefern...?).
Sorry hatte gedacht ich hätte es einfach gemacht in meinem ersten beitrag tsja dann wol doch nicht
Also fang ich nochmals an
Habe folgenden dev erzeugt von einer CMI der Technischen Alternative
define COE_Node_cmi_2 COE_Node 2
attr COE_Node_cmi_2 alias Poolsteuerung
attr COE_Node_cmi_2 group Pool
attr COE_Node_cmi_2 readingsConfigAnalog 1=Kollektor_Temperatur_Pool_Solar 2=Pool_Wasser_Temperatur 3=Pool_Aussen_Temperatur
attr COE_Node_cmi_2 readingsConfigDigital 1=Pool_Pumpe_100 2=Pool_Pumpe_90 3=Pool_Pumpe_70 4=Pool_Pumpe_40 5=SchachtVentil_Gartenhaus 6=Schachtventil_Pool 7=Pos_Meldung_SchachtVentil_Gartenhaus 8=Pos_Meldung_Schachtventil_Pool 9=Wasserstand_Sensor 10=Ventile_Wasserzuleitung 11=Umschaltung_Wassermessung_1 12=Umschaltung_Wassermessung_2 13=Umschaltung_Solar_Ladung_1 14=Umschaltung_Solar_Ladung_2 15=T_Max_Begrenzung
attr COE_Node_cmi_2 room Pool
attr COE_Node_cmi_2 stateFormat {"Pool Temperatur: ".ReadingsVal($name,"Pool_Wasser_Temperatur",0)." °C<br> "}
# CFGFN
# DEF 2
# FUUID 663a6e9f-f33f-c95d-2fa7-7c8ff2808c2edf05
# IODev cmi
# LASTInputDev cmi
# MSGCNT 177
# NAME COE_Node_cmi_2
# NR 711
# STATE Pool Temperatur: 22.4 °C<br>
# TYPE COE_Node
# cmi_MSGCNT 177
# cmi_TIME 2024-05-07 21:39:14
# eventCount 130
# READINGS:
# 2024-05-07 21:35:41 Kollektor_Temperatur_Pool_Solar 12.4
# 2024-05-07 20:57:40 PoolPumpe Error evaluating COE_Node_cmi_2 userReading PoolPumpe: Can't modify non-lvalue subroutine call of &main::ReadingsVal in scalar assignment at (eval 94947200) line 1, near "1 "100""
#syntax error at (eval 94947200) line 1, near "1 "100""
#
# 2024-05-07 21:27:40 Pool_Aussen_Temperatur 13.8
# 2024-05-07 20:11:08 Pool_Pumpe_100 0
# 2024-05-07 20:11:08 Pool_Pumpe_40 1
# 2024-05-07 20:11:08 Pool_Pumpe_70 1
# 2024-05-07 20:11:08 Pool_Pumpe_90 0
# 2024-05-07 21:38:41 Pool_Wasser_Temperatur 22.4
# 2024-05-07 20:11:08 Pos_Meldung_SchachtVentil_Gartenhaus 0
# 2024-05-07 20:11:08 Pos_Meldung_Schachtventil_Pool 1
# 2024-05-07 20:11:08 SchachtVentil_Gartenhaus 0
# 2024-05-07 20:11:08 Schachtventil_Pool 0
# 2024-05-07 20:57:40 Schachtventilstellung Gartenhaus
# 2024-05-07 20:11:08 T_Max_Begrenzung 0
# 2024-05-07 20:11:08 Umschaltung_Solar_Ladung_1 0
# 2024-05-07 20:11:08 Umschaltung_Solar_Ladung_2 0
# 2024-05-07 20:11:08 Umschaltung_Wassermessung_1 0
# 2024-05-07 20:11:08 Umschaltung_Wassermessung_2 0
# 2024-05-07 20:11:08 Ventile_Wasserzuleitung 0
# 2024-05-07 20:11:08 Wasserstand_Sensor 1
# 2024-05-07 20:11:07 state defined
# helper:
# CAN_NODE_ID 2
# hmccu:
#
setstate COE_Node_cmi_2 Pool Temperatur: 22.4 °C<br>
setstate COE_Node_cmi_2 2024-05-07 21:35:41 Kollektor_Temperatur_Pool_Solar 12.4
setstate COE_Node_cmi_2 2024-05-07 20:57:40 PoolPumpe Error evaluating COE_Node_cmi_2 userReading PoolPumpe: Can't modify non-lvalue subroutine call of &main::ReadingsVal in scalar assignment at (eval 94947200) line 1, near "1 "100""\
syntax error at (eval 94947200) line 1, near "1 "100""\
setstate COE_Node_cmi_2 2024-05-07 21:27:40 Pool_Aussen_Temperatur 13.8
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Pool_Pumpe_100 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Pool_Pumpe_40 1
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Pool_Pumpe_70 1
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Pool_Pumpe_90 0
setstate COE_Node_cmi_2 2024-05-07 21:38:41 Pool_Wasser_Temperatur 22.4
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Pos_Meldung_SchachtVentil_Gartenhaus 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Pos_Meldung_Schachtventil_Pool 1
setstate COE_Node_cmi_2 2024-05-07 20:11:08 SchachtVentil_Gartenhaus 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Schachtventil_Pool 0
setstate COE_Node_cmi_2 2024-05-07 20:57:40 Schachtventilstellung Gartenhaus
setstate COE_Node_cmi_2 2024-05-07 20:11:08 T_Max_Begrenzung 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Umschaltung_Solar_Ladung_1 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Umschaltung_Solar_Ladung_2 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Umschaltung_Wassermessung_1 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Umschaltung_Wassermessung_2 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Ventile_Wasserzuleitung 0
setstate COE_Node_cmi_2 2024-05-07 20:11:08 Wasserstand_Sensor 1
setstate COE_Node_cmi_2 2024-05-07 20:11:07 state defined
ich würde mir gerne div werte anzeigen lassen wie zb
die Pooltemperatur die ich ja geschaft habe
zustand der wassermessung, Sola Ladung, Wasserzufuhr usw
Unteranderem auch den Zustand der Pumpe bzw mit welcher Leistung diese läuft
Aber nicht 4x Pumpe sondern nur einmal Pumpe mit der jeweiligen lauf Leistung
Ich weis es sind noch kleinere fehler ind den readings der CMI bin noch dabei diese zu beseitgen
aber mir ging es halt um die ansicht
Danke für eure bemühungen
Bin nach Blick in den Code der Module völlig einig mit betateilchens Vorschlag mit dem userReadings-Vorschlag. Die Werte werden "komisch" angeliefert, was aber in der Übertragungs-Variante begründet ist....
Zitat von: Beta-User am 07 Mai 2024, 21:51:33kann man m.E. erst in etwa abschätzen, wenn man weiß, wo bzw. wie die erwähnten Basisdaten in den Readings eigentlich herkommen.
Das ist mir inzwischen völlig wurscht. Oben habe ich eine Lösung gepostet, die auf den eingangs gelieferten Informationen beruht und das gewünschte Ergebnis liefert. Mission completed.
Jetzt hole ich mir Popcorn und setze mich als stiller Beobachter aufs Sofa.
Sehe ich das anhand von deinem Listing richtig, es kann mehr als 1 Pool_Pumpe_XX Reading auf 1 stehen? Also bei dem Beispiel sind ja sowohl Pool_Pumpe_40 als auch Pool_Pumpe_70 auf 1. Heisst das, die Pumpe läuft mit 70% (und alle tieferen Prozentwerte stehen auch auf 1, also Reading Pool_Pumpe_40 ist zu verstehen mit "Pumpe läuft mindestens auf 40%)?
Falls die Kombination wichtig wäre für deine Auswertung wäre es eventuell sinnvoll, alle Readings miteinander zu verketten und als binäre Zahl zu interpretieren?
Falls nicht bin ich eher ein Fan von "einfachem Code, welchen ich auch in 2 Jahren noch verstehen werde". Das wäre für mich hier ein if-elsif-else, also Pseudocode:
if (Pool_Pumpe_100 == 1)
set Pumpe=100;
elsif (Pool_Pumpe_70 == 1)
set Pumpe=70
etc.etc.
Zitat von: Aurel_B am 08 Mai 2024, 09:36:07Sehe ich das anhand von deinem Listing richtig, es kann mehr als 1 Pool_Pumpe_XX Reading auf 1 stehen? Also bei dem Beispiel sind ja sowohl Pool_Pumpe_40 als auch Pool_Pumpe_70 auf 1. Heisst das, die Pumpe läuft mit 70% (und alle tieferen Prozentwerte stehen auch auf 1, also Reading Pool_Pumpe_40 ist zu verstehen mit "Pumpe läuft mindestens auf 40%)?
Falls die Kombination wichtig wäre für deine Auswertung wäre es eventuell sinnvoll, alle Readings miteinander zu verketten und als binäre Zahl zu interpretieren?
Falls nicht bin ich eher ein Fan von "einfachem Code, welchen ich auch in 2 Jahren noch verstehen werde". Das wäre für mich hier ein if-elsif-else, also Pseudocode:
if (Pool_Pumpe_100 == 1)
set Pumpe=100;
elsif (Pool_Pumpe_70 == 1)
set Pumpe=70
etc.etc.
So in der richtung meinte ich es
Könntest du mir noch den befehl vervollständigen ich steh grad voll am schlauch und bekomm immer nur fehler im reading oder gar nichts
PS das mit Pumpe_40 1 und Pumpe_70 1 sind noch verdrahtungsfehler die ich erst am abend ändern kann
ZitatPS das mit Pumpe_40 1 und Pumpe_70 1 sind noch verdrahtungsfehler die ich erst am abend ändern kann
Sollte man nicht erst das lösen und dann sich mit Folgeschritten beschäftigen?
Habs mir mit dem Code von Aurel_B (Danke für den Anstoß) schon etwas gebastelt
Pumpe {if (ReadingsVal("$name","Pool_Pumpe_100","") eq "1") {return 100} elsif (ReadingsNum("$name","Pool_Pumpe_90","") eq "1") {return 90} elsif (ReadingsNum("$name","Pool_Pumpe_70","") eq "1") {return 70} elsif (ReadingsNum("$name","Pool_Pumpe_40","") eq "1") {return 40} elsif ([ReadingsNum("$name","Pool_Pumpe_100","")] and [ReadingsNum("$name","Pool_Pumpe_90","")] and [ReadingsNum("$name","Pool_Pumpe_70","")] and [ReadingsNum("$name","Pool_Pumpe_40","")] eq "0") {return "Aus"}}
Pumpen lauf wird mir schon richtig gegeben aber wenn die Pumpe steht also Pumpe_40, _70, _90 und 100 auf null ist bekomme ich mit meinem code nichts bzw keine änderung vom letzten stand
da steh ich am schlauch und würde um hilfe bitten
Wenn der "0"-Fall gebraucht wird, ginge das ungetestet ggf. so:
Pumpe:Pool_Pumpe_.* {return 100 if ReadingsNum($name,'Pool_Pumpe_100',0); return 90 if ReadingsNum($name,'Pool_Pumpe_90',0); return 70 if ReadingsNum($name,'Pool_Pumpe_70',0); return 40 if ReadingsNum($name,'Pool_Pumpe_40',0); return 0;}
Wird nur getriggert, wenn eines der relevanten Readings aktualisiert wird (eigentlich müßte sogar 'Pool_Pumpe_100' ausreichen, da bulk update; da es aber noch ein analog-Bulk gibt, wird bei diesen Readings nicht nochmal ausgewertet...), und kaskadiert dann einfach die Abfrage. Sollte einigermaßen lesbar sein...
Danke euch Allen auch wenn es anfangs schwierigkeiten gegeben hat
Aber ich bin mit eurer hilfe am arbeiten
werd das end ergebniss posten
So hier mein userReadings
Pumpe:Pool_Pumpe_.* {return "Ein" if ReadingsNum($name,'Pool_Pumpe_Ein',0); return "100 %" if ReadingsNum($name,'Pool_Pumpe_100',0); return "80 %" if ReadingsNum($name,'Pool_Pumpe_80',0); return "60 %" if ReadingsNum($name,'Pool_Pumpe_60',0); return "Aus";}, Schacht_Ventil_Stellung {if (ReadingsVal("$name","Pos_Meldung_SchachtVentil_Gartenhaus","") eq "1") {return "Gartenhaus"} elsif (ReadingsVal("$name","Pos_Meldung_Schachtventil_Pool","") eq "1") {return "Pool"} els {return "Drehung"}},Messung_PH_Chlor {if (ReadingsVal("$name","Umschaltung_Wassermessung_1","") eq "1" && ReadingsVal("$name","Umschaltung_Wassermessung_2","") eq "1") {return "Aktiv"} elsif (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "0" && ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "0") {return "Aus"}},Solar_Ladung {if (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "1" && ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "1") {return "Aktiv"} elsif (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "0" && ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "0") {return "Aus"}},Wasser_Zulauf {if (ReadingsVal("$name","Ventile_Wasserzuleitung","") eq "1") {return "Aktiv"} els {return "Aus"}}
Jetzt hab ich alle Werte die ich wollte
Danke für eure hilfe und eure Anstöße um mir die codes zu basteln
Zitat von: ChrisA4 am 09 Mai 2024, 19:42:06Pumpe:Pool_Pumpe_.* {
return "Ein" if ReadingsNum($name,'Pool_Pumpe_Ein',0);
return "100 %" if ReadingsNum($name,'Pool_Pumpe_100',0);
return "80 %" if ReadingsNum($name,'Pool_Pumpe_80',0);
return "60 %" if ReadingsNum($name,'Pool_Pumpe_60',0);
return "Aus";},
Schacht_Ventil_Stellung {
if (ReadingsVal("$name","Pos_Meldung_SchachtVentil_Gartenhaus","") eq "1") {return "Gartenhaus"}
elsif (ReadingsVal("$name","Pos_Meldung_Schachtventil_Pool","") eq "1") {return "Pool"}
els {return "Drehung"}},
Messung_PH_Chlor {
if (ReadingsVal("$name","Umschaltung_Wassermessung_1","") eq "1"
&& ReadingsVal("$name","Umschaltung_Wassermessung_2","") eq "1") {return "Aktiv"}
elsif (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "0"
&& ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "0") {return "Aus"}},
Solar_Ladung {
if (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "1"
&& ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "1") {return "Aktiv"}
elsif (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "0"
&& ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "0") {return "Aus"}},
Wasser_Zulauf {
if (ReadingsVal("$name","Ventile_Wasserzuleitung","") eq "1") {return "Aktiv"} els {return "Aus"}
}
Und ich behaupte, das kann nicht funktionieren, weil da mehrere Syntaxfehler enthalten sind.
Der Code ist einfach nur gruslig, von der Performance mal ganz abgesehen.
Außerdem fehlen bei 4 von 5 userReadings vernünftige Trigger.
define COE_Node_cmi_2 COE_Node 2
attr COE_Node_cmi_2 alias Pool Steuerung
attr COE_Node_cmi_2 group Pool
attr COE_Node_cmi_2 icon scene_pool
attr COE_Node_cmi_2 readingsConfigAnalog 1=Kollektor_Temperatur_Pool_Solar 2=Pool_Wasser_Temperatur 3=Pool_Aussen_Temperatur
attr COE_Node_cmi_2 readingsConfigDigital 1=Pool_Pumpe_Ein 2=Pool_Pumpe_100 3=Pool_Pumpe_80 4=Pool_Pumpe_60 5=SchachtVentil_Gartenhaus 6=Schachtventil_Pool 7=Pos_Meldung_SchachtVentil_Gartenhaus 8=Pos_Meldung_Schachtventil_Pool 9=Wasserstand_Sensor 10=Ventile_Wasserzuleitung 11=Umschaltung_Wassermessung_1 12=Umschaltung_Wassermessung_2 13=Umschaltung_Solar_Ladung_1 14=Umschaltung_Solar_Ladung_2 15=T_Max_Begrenzung
attr COE_Node_cmi_2 room Pool
attr COE_Node_cmi_2 stateFormat {"Pool Temperatur: ".ReadingsVal($name,"Pool_Wasser_Temperatur",0)." °C<br>Solar Temperatur: " .ReadingsVal($name,"Kollektor_Temperatur_Pool_Solar",0)." °C<br>Aussen Temperatur: ".ReadingsVal($name,"Pool_Aussen_Temperatur",0)." °C<br>Pumpe: ".ReadingsVal($name,"Pumpe",0)." <br>Solar Ladung: ".ReadingsVal($name,"Solar_Ladung",0)." <br>PH und Chlor Messung: ".ReadingsVal($name,"Messung_PH_Chlor",0)." <br>Schacht Ventil Stellung: ".ReadingsVal($name,"Schacht_Ventil_Stellung",0)." <br>Wasser Zulauf: ".ReadingsVal($name,"Wasser_Zulauf",0)." <br>"}
attr COE_Node_cmi_2 userReadings Pumpe:Pool_Pumpe_.* {return "Ein" if ReadingsNum($name,'Pool_Pumpe_Ein',0);; return "100 %" if ReadingsNum($name,'Pool_Pumpe_100',0);; return "80 %" if ReadingsNum($name,'Pool_Pumpe_80',0);; return "60 %" if ReadingsNum($name,'Pool_Pumpe_60',0);; return "Aus";;}, Schacht_Ventil_Stellung {if (ReadingsVal("$name","Pos_Meldung_SchachtVentil_Gartenhaus","") eq "1") {return "Gartenhaus"} elsif (ReadingsVal("$name","Pos_Meldung_Schachtventil_Pool","") eq "1") {return "Pool"} els {return "Drehung"}},Messung_PH_Chlor {if (ReadingsVal("$name","Umschaltung_Wassermessung_1","") eq "1" && ReadingsVal("$name","Umschaltung_Wassermessung_2","") eq "1") {return "Aktiv"} elsif (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "0" && ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "0") {return "Aus"}},Solar_Ladung {if (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "1" && ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "1") {return "Aktiv"} elsif (ReadingsVal("$name","Umschaltung_Solar_Ladung_1","") eq "0" && ReadingsVal("$name","Umschaltung_Solar_Ladung_2","") eq "0") {return "Aus"}},Wasser_Zulauf {if (ReadingsVal("$name","Ventile_Wasserzuleitung","") eq "1") {return "Aktiv"} els {return "Aus"}}
# CFGFN
# DEF 2
# FUUID 663c63f8-f33f-c95d-d985-ba31385ffa172ca8
# IODev cmi
# LASTInputDev cmi
# MSGCNT 2797
# NAME COE_Node_cmi_2
# NR 714
# STATE Pool Temperatur: 22.8 °C<br>Solar Temperatur: 5.6 °C<br>Aussen Temperatur: 8.5 °C<br>Pumpe: 100 % <br>Solar Ladung: Aus <br>PH und Chlor Messung: Aktiv <br>Schacht Ventil Stellung: Gartenhaus <br>Wasser Zulauf: Aus <br>
# TYPE COE_Node
# cmi_MSGCNT 2797
# cmi_TIME 2024-05-10 06:09:50
# eventCount 2796
# READINGS:
# 2024-05-10 06:06:36 Kollektor_Temperatur_Pool_Solar 5.6
# 2024-05-10 06:09:50 Messung_PH_Chlor Aktiv
# 2024-05-10 06:09:36 Pool_Aussen_Temperatur 8.5
# 2024-05-10 03:31:30 Pool_Pumpe_100 1
# 2024-05-09 17:01:44 Pool_Pumpe_60 0
# 2024-05-09 11:05:45 Pool_Pumpe_80 0
# 2024-05-09 07:51:14 Pool_Pumpe_Ein 0
# 2024-05-10 06:09:36 Pool_Wasser_Temperatur 22.8
# 2024-05-10 03:31:50 Pos_Meldung_SchachtVentil_Gartenhaus 1
# 2024-05-10 03:31:40 Pos_Meldung_Schachtventil_Pool 0
# 2024-05-10 03:31:30 Pumpe 100 %
# 2024-05-10 03:31:40 SchachtVentil_Gartenhaus 1
# 2024-05-10 06:09:50 Schacht_Ventil_Stellung Gartenhaus
# 2024-05-10 03:31:40 Schachtventil_Pool 0
# 2024-05-10 06:09:50 Solar_Ladung Aus
# 2024-05-09 07:51:14 T_Max_Begrenzung 0
# 2024-05-09 07:51:14 Umschaltung_Solar_Ladung_1 0
# 2024-05-09 07:51:14 Umschaltung_Solar_Ladung_2 0
# 2024-05-09 08:18:40 Umschaltung_Wassermessung_1 1
# 2024-05-09 07:51:14 Umschaltung_Wassermessung_2 1
# 2024-05-09 07:51:14 Ventile_Wasserzuleitung 0
# 2024-05-10 06:09:50 Wasser_Zulauf Aus
# 2024-05-10 03:31:40 Wasserstand_Sensor 0
# 2024-05-09 07:49:44 state defined
# helper:
# CAN_NODE_ID 2
# hmccu:
#
setstate COE_Node_cmi_2 Pool Temperatur: 22.8 °C<br>Solar Temperatur: 5.6 °C<br>Aussen Temperatur: 8.5 °C<br>Pumpe: 100 % <br>Solar Ladung: Aus <br>PH und Chlor Messung: Aktiv <br>Schacht Ventil Stellung: Gartenhaus <br>Wasser Zulauf: Aus <br>
setstate COE_Node_cmi_2 2024-05-10 06:06:36 Kollektor_Temperatur_Pool_Solar 5.6
setstate COE_Node_cmi_2 2024-05-10 06:09:50 Messung_PH_Chlor Aktiv
setstate COE_Node_cmi_2 2024-05-10 06:09:36 Pool_Aussen_Temperatur 8.5
setstate COE_Node_cmi_2 2024-05-10 03:31:30 Pool_Pumpe_100 1
setstate COE_Node_cmi_2 2024-05-09 17:01:44 Pool_Pumpe_60 0
setstate COE_Node_cmi_2 2024-05-09 11:05:45 Pool_Pumpe_80 0
setstate COE_Node_cmi_2 2024-05-09 07:51:14 Pool_Pumpe_Ein 0
setstate COE_Node_cmi_2 2024-05-10 06:09:36 Pool_Wasser_Temperatur 22.8
setstate COE_Node_cmi_2 2024-05-10 03:31:50 Pos_Meldung_SchachtVentil_Gartenhaus 1
setstate COE_Node_cmi_2 2024-05-10 03:31:40 Pos_Meldung_Schachtventil_Pool 0
setstate COE_Node_cmi_2 2024-05-10 03:31:30 Pumpe 100 %
setstate COE_Node_cmi_2 2024-05-10 03:31:40 SchachtVentil_Gartenhaus 1
setstate COE_Node_cmi_2 2024-05-10 06:09:50 Schacht_Ventil_Stellung Gartenhaus
setstate COE_Node_cmi_2 2024-05-10 03:31:40 Schachtventil_Pool 0
setstate COE_Node_cmi_2 2024-05-10 06:09:50 Solar_Ladung Aus
setstate COE_Node_cmi_2 2024-05-09 07:51:14 T_Max_Begrenzung 0
setstate COE_Node_cmi_2 2024-05-09 07:51:14 Umschaltung_Solar_Ladung_1 0
setstate COE_Node_cmi_2 2024-05-09 07:51:14 Umschaltung_Solar_Ladung_2 0
setstate COE_Node_cmi_2 2024-05-09 08:18:40 Umschaltung_Wassermessung_1 1
setstate COE_Node_cmi_2 2024-05-09 07:51:14 Umschaltung_Wassermessung_2 1
setstate COE_Node_cmi_2 2024-05-09 07:51:14 Ventile_Wasserzuleitung 0
setstate COE_Node_cmi_2 2024-05-10 06:09:50 Wasser_Zulauf Aus
setstate COE_Node_cmi_2 2024-05-10 03:31:40 Wasserstand_Sensor 0
setstate COE_Node_cmi_2 2024-05-09 07:49:44 state defined
Ich behaupte daß es funktioniert
Ich bin leider kein profi in den sprachen von perl usw
und bin auch deswegen ins forum gegangen um hilfe zu bekommen "Anfängerfragen"
aber immer nur kritik zu ernten hab ich nicht erwartet
@betateilchen wenns besser geht dann zeigs doch, aber bitte nicht immer so negative kommentare
Zitat von: ChrisA4 am 10 Mai 2024, 06:20:21Ich behaupte daß es funktioniert
Glaube ich nicht, jedenfalls nicht vollständig.
Mach mal ein
attr global perlSyntaxCheck 1
und rufe dann die def noch einmal auf und drück auf modify zum Abspeichern.
Dann kannst Du Deine Definition nicht abspeichern, da Fehler ausgeworfen werden.
Aus der commandref:
ZitatperlSyntaxCheck
by setting the global attribute perlSyntaxCheck, a syntax check will be executed upon definition or modification, if the command is perl and FHEM is already started.
z.B. 'els' ist falsch und muss 'else' heißen.
Zitat von: ChrisA4 am 10 Mai 2024, 06:20:21aber immer nur kritik zu ernten hab ich nicht erwartet
@betateilchen wenns besser geht dann zeigs doch, aber bitte nicht immer so negative kommentare
- "Kritik" muss nicht per se etwas negatives sein.
- meine letzte Antwort war nicht als "negativer Kommentar" gedacht, sondern als ernstgemeinter Hinweis, das Ganze nochmal zu prüfen und ggf. zu verbessern.
- es heißt "else" und nicht "els"
- es ist besser, mit ReadingsNum() zu arbeiten anstatt mit ReadingsVal() wenn man Werte nur auf 0 oder 1 prüfen möchte.
- Variablennamen wie $name muss man nicht in Anführungszeichen setzen
- Man sollte für jedes userReading einen Trigger verwenden (nur bei "Pumpe" gibt es einen)
Wo ich noch Zweifel habe:
- Ist es richtig, bei "Messung_PH_Chlor" auf "Umschaltung_Solar_Ladung_1" zu prüfen? Erscheint mir einigermaßen unlogisch.
- Was passiert in den Fällen, die in Deinen Abfragen nicht berücksichtigt sind? Zum Beispiel, wenn "Umschaltung_Solar_Ladung_1"==1 und "Umschaltung_Solar_Ladung_2" ==0?
...
Zitat von: betateilchen am 10 Mai 2024, 09:04:55es ist besser, mit ReadingsNum() zu arbeiten anstatt mit ReadingsVal() wenn man Werte nur auf 0 oder 1 prüfen möchte.
Dann aber konsequent den Vergleich von 'eq' (Zeichenkette) auf '==' (numerisch) mit ändern.
Was heißt hier eigentlich "immer nur Kritik"? Das ist in Anbetracht der erhaltenen Hilfe ziemlich daneben.
Betateilchen hat vollkommen Recht: Der unten gepostete Perl-Code ist fehlerhaft und wird so nicht laufen, die Behauptung "dass es funktioniere", ist einfach absurd. Dass er darüber hinaus wirklich gruselig schlecht ist, ist Nebensache - jeder hat das Recht auf schlechten Code.
LG
pah
Zitat von: Nobbynews am 10 Mai 2024, 09:09:07Dann aber konsequent den Vergleich von 'eq' (Zeichenkette) auf '==' (numerisch) mit ändern.
Oder komplett weglassen.
Siehe Beispiel bei "Pumpe".
Wenn ein Wert ohnehin nur 1 oder 0 liefert, dann ergibt
if (ReadingsNum(<device>,<reading>,0))
das gleiche Ergebnis wie
if (ReadingsNum(<device>,<reading>,0) == 1)
und
if (!ReadingsNum(<device>,<reading>,0))
das gleiche Ergebnis wie
if (ReadingsNum(<device>,<reading>,0) == 0)
Zitates heißt "else" und nicht "els"
Hatte mir aber bei diese Zeile
ZitatWasser_Zulauf {if (ReadingsVal("$name","Ventile_Wasserzuleitung","") eq "1") {return "Aktiv"} els {return "Aus"}}
komischer weise ein "Aus" gegeben
Zitates ist besser, mit ReadingsNum() zu arbeiten anstatt mit ReadingsVal() wenn man Werte nur auf 0 oder 1 prüfen möchte.
hab deinen rat befolgt und verbessert
ZitatVariablennamen wie $name muss man nicht in Anführungszeichen setzen
Wußte ich nicht habs bis jetzt immer so nachkopiert
ZitatMan sollte für jedes userReading einen Trigger verwenden (nur bei "Pumpe" gibt es einen)
Hoffe habs im folgenden besser gemacht
ZitatIst es richtig, bei "Messung_PH_Chlor" auf "Umschaltung_Solar_Ladung_1" zu prüfen? Erscheint mir einigermaßen unlogisch.
Stimmt hab ich glatt übersehen
ZitatWas passiert in den Fällen, die in Deinen Abfragen nicht berücksichtigt sind? Zum Beispiel, wenn "Umschaltung_Solar_Ladung_1"==1 und "Umschaltung_Solar_Ladung_2" ==0?
Hab ich jetzt berücksichtigt
Zitat"Kritik" muss nicht per se etwas negatives sein.
meine letzte Antwort war nicht als "negativer Kommentar" gedacht, sondern als ernstgemeinter Hinweis, das Ganze nochmal zu prüfen und ggf. zu verbessern.
Hat mich angestoßen um es nochmal zu überarbeiten
hier das ergebniss
Pumpe:Pool_Pumpe_.* {return 'Ein' if ReadingsNum($name,'Pool_Pumpe_Ein',0); return '100 %' if ReadingsNum($name,'Pool_Pumpe_100',0); return '80 %' if ReadingsNum($name,'Pool_Pumpe_80',0); return '60 %' if ReadingsNum($name,'Pool_Pumpe_60',0); return 'Aus';}, Schacht_Ventil_Stellung:Pos_Meldung_SchachtVentil_.* {return 'Gartenhaus' if ReadingsNum($name,'Pos_Meldung_SchachtVentil_Gartenhaus',0); return 'Pool' if ReadingsNum($name,'Pos_Meldung_SchachtVentil_Pool',0); return 'Drehung';}, Ventil_Lauf:Umschaltung_.* {return 'PH und Chlor Messung' if (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0); return 'Solar Ladung' if (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1); return 'Fehler' if (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1); return 'Stop' if (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0);}, Wasser_Zulauf:Ventile_Wasserzuleitung.* {return 'Aktive' if ReadingsNum($name,'Ventile_Wasserzuleitung',0); return 'Aus';}, Umschaltung {return 'Solar Ladung' if ReadingsNum($name,'Solar_Ladung',0); return 'PH und Chlor Messung' if ReadingsNum($name,'Wasser_Messung',0); return 'Fehler';}
Könntest du mal drüber schauen ob noch fehler drin sind oder ob man was besser machen könnte
Bedanke mich schon mal im vorhinein
Warum formatierte Zahlenwerte? Warum (deutschen!?!) Text? Hindert nur bei der Visualisierung und ggf. Integration in Sprachsteuerung etc....
wie könnte man sonst rausfinden um fehler in der schaltung raus zu filtern als mit 1,1,1,0 oder 1,0,1,1 oder 1,1,1,1 usw
Formuliere doch bitte mal die eigentliche Aufgabenstellung.
Und zwar vollständig und möglichst einfach.
Offenbar versteht niemand, was Du eigentlich erreichen möchtest.
Und offenbar weißt Du selbst nicht genau, was Du eigentlich tun willst.
Zitat von: Beta-User am 11 Mai 2024, 11:10:07Warum formatierte Zahlenwerte? Warum (deutschen!?!) Text? Hindert nur bei der Visualisierung und ggf. Integration in Sprachsteuerung etc....
Damit meintest du ja diese zeile
Zitatreturn 'Fehler' if (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1);
da ich sie mit "== 0" und "== 1" geschrieben habe
ich wollte einfach nur wissen wie und ob man es anders schreiben könnte
hierbei geht es darum wie die relais rückmeldungen ankommen damit es mir einen schaltungsfehler aufzeigt
der rest passt so für mich , denke ich
Zitat von: ChrisA4 am 11 Mai 2024, 12:44:20Zitatreturn 'Fehler' if (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) &&
etc. etc. etc.
Boah, das ist heftig, ich denke, das geht wesentlich eleganter:
- Du solltest redundante Funktionsausrufe wie z.B. ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) vermeiden da das immer mit sehr viel Overhead für dein System verbunden bist. Besser du weisst den Wert einer Variablen zu: my $Umschaltung_Solar_Ladung_1 = ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0);
- Du hast 9 OR Anweisungen bei total 16 Möglichkeiten (4 binäre Zustände die du überprüfen willst, ergo 2^4 == 16. Es ist wohl einfacher, du überprüfst die restlichen 5 möglichen Zustände, dann wird es schonmal massiv übersichtlicher.
- Wenn du uns sagst, was du genau mit deiner Logik erreichen willst, so finden wir sicherlich noch eine viel elegantere Lösung zusammen. Man kann solche Verkettungen von AND und OR Anweisungen i.d.R. entweder zusammenfassen oder auf mehrere ifs Aufteilen etc.
Edit: Kann es sein, dass für dich alles ein Fehler ist sobald irgendeines deiner Reading == 1 ist?
Zitat von: Aurel_B am 11 Mai 2024, 13:45:52viel elegantere Lösung
Da gibt es eigentlich nur eine: Die vier getesteten Werte (jeweils 1 oder 0) mit 1,2,4,8 multiplizieren und addieren => Jeder Zustand entspricht einer Zahl von 0..15.
Allerdings sollte der TE soviel über die FHEM-Basics und Perl bitte selbst lernen, statt immer andere anzuheuern.
LG
pah
Zitat von: Aurel_B am 11 Mai 2024, 13:45:52Wenn du uns sagst, was du genau mit deiner Logik erreichen willst,
Das versuche ich seit mehreren Tagen herauszufinden.
Aber meine diesbezüglichen Fragen werden komplett ignoriert.
Stattdessen bekommt man "negative Kommentare" und "immer nur Kritik" unterstellt - das macht einfach alles keinen Spaß, wenn man eigentlich nur helfen möchte.
Ich weiß einfach nicht mehr wie ich es erklären kann
möcht einfach nur den momentanen zustand der poolsteuerung abfragen und mit den daten die ich von der uvr1611 bekomme zusammenfassen und es etwas übersichtlicher zu sehen
hab ausdruck der seite angehängt wie der derzeitige und, denkemal, funktionierender aufbau ist
warscheinlich bin ich zu doof um es besser zu erklären[attach
id=178210]pool.pdf[/attach]
Zitat von: ChrisA4 am 11 Mai 2024, 12:44:20Zitat von: Beta-User am 11 Mai 2024, 11:10:07Warum formatierte Zahlenwerte? Warum (deutschen!?!) Text? Hindert nur bei der Visualisierung und ggf. Integration in Sprachsteuerung etc....
Damit meintest du ja diese zeile
Zitatreturn 'Fehler' if (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 0) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 0) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 0) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1) || (ReadingsNum($name,'Umschaltung_Wassermessung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Wassermessung_2',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0) == 1) && (ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0) == 1);
da ich sie mit "== 0" und "== 1" geschrieben habe
ich wollte einfach nur wissen wie und ob man es anders schreiben könnte
hierbei geht es darum wie die relais rückmeldungen ankommen damit es mir einen schaltungsfehler aufzeigt
der rest passt so für mich , denke ich
Nein. Sowas wie "70 %" und "Aus"....
Ich kann das Gejammer nicht mehr ertragen. Mit der Auflage, wenigstens mal ein paar Grundlagen zu lernen:
my $sta=ReadingsNum($name,'Umschaltung_Wassermessung_1',0)+2*ReadingsNum($name,'Umschaltung_Wassermessung_2',0)+
4*ReadingsNum($name,'Umschaltung_Solar_Ladung_1',0)+8*ReadingsNum($name,'Umschaltung_Solar_Ladung_2',0);
return ( $sta !~ /^(3|5|6|9|(10)|(12))$/)?"Fehler":"OK";
LG
pah
Zitat von: ChrisA4 am 11 Mai 2024, 14:19:09Ich weiß einfach nicht mehr wie ich es erklären kann
möcht einfach nur den momentanen zustand der poolsteuerung abfragen und mit den daten die ich von der uvr1611 bekomme zusammenfassen und es etwas übersichtlicher zu sehen
Hi Chris, ich denke, das wird so nicht wirklich befriedigend für uns alle. Wir wissen nicht, was "zusammenfassen" und "übersichtlicher" in deinem Fall bedeutet. Wie von anderen vorgeschlagen: ich würde mal ein Tutorial o.Ä. durchgehen mit den Grundlagen von Perl. Und dann versuchen, klare und begrenzte Fragestellungen zu posten. z.B.: "ich habe diese 4 Werte, eine gewisse Kombination (welche?) aus diesen 4 Werten soll als Fehler interpretiert werden, die restlichen Kombinationen (again: welche?) als korrekt. Das ist mein Code den ich mir erarbeitet habe, wie kann ich den noch verbessern?".
Weil wenn wir für dich irgendwelchen Code zusammenbauen sollen ist das weder für uns noch für dich wirklich hilfreich weil a) wir wissen nicht, was du genau möchtest und b) für dich bleibt das ganze weiterhin eine Blackbox...
ZitatHi Chris, ich denke, das wird so nicht wirklich befriedigend für uns alle. Wir wissen nicht, was "zusammenfassen" und "übersichtlicher" in deinem Fall bedeutet. Wie von anderen vorgeschlagen: ich würde mal ein Tutorial o.Ä. durchgehen mit den Grundlagen von Perl. Und dann versuchen, klare und begrenzte Fragestellungen zu posten. z.B.: "ich habe diese 4 Werte, eine gewisse Kombination (welche?) aus diesen 4 Werten soll als Fehler interpretiert werden, die restlichen Kombinationen (again: welche?) als korrekt. Das ist mein Code den ich mir erarbeitet habe, wie kann ich den noch verbessern?".
Werd ich mir zu Herzen nehmen
Danke trotzdem an alle