Probleme mit Notify und UND-Verknüpfung

Begonnen von jensdipo, 21 Oktober 2017, 10:40:34

Vorheriges Thema - Nächstes Thema

jensdipo

Hallo Zusammen,
vielleicht kann mir hier jemand einen Tipp geben?
Ich würde gerne bei meiner Heizung die umwälzpumpe Temperaturabhängig steuern.
Im Nachfolgenden Code habe ich versucht das Notify so zu programmieren, das wenn "Input0" ein "on" liefert und "temp8" (ein 1-wire Sensor) mehr als 60 Grad liefert, "Relais0" angesteuert wird.

#Steuerung RWE
#define Heizung_Pumpe_RWE notify Inputp0 set Relais0 $EVENT
define Heizung_Pumpe_RWEneu notify (Input0|temp8) {
my $i1 = Value("input0");;
my $t8 = Value("temp8:temperature");;
if ($i1 eq "on" && $t8 eq ">60") { fhem "set Relais0 on" } else { fhem "set Relais0 off" }}

In der zweiten Zeile habe ich das ganze vorher ohne Temperaturüberprüfung programmiert und getestet.(Funktioniert auch)
Wenn ich allerdings den Code unten in der fhem.cfg abspeichern möchte kommt folgender Fehler:
Unknown command my, try help. Unknown command my, try help. IF: no left bracket: { fhem "set Relais0 on" } else { fhem "set Relais0 off" }}
Oder kann man das ganze Vielleicht auch anders lösen so das ich auf dem falschen Weg bin?

Für eure Hilfe wäre ich Dankbar.
MFG
Jens

rudolfkoenig

Dein Code-Ausschnitt ist seltsam:
- entweder verwendet man ;; mit \ am Zeilenende (wenn man fhem.cfg direkt editiert, oder man editiert in Detail-Ansicht eines FHEM-Geraetes, und klickt auf "Raw Definition").
- oder man verwendet nur ; und \ am Zeilenende ist unnoetig (wenn man in der Detailansicht auf DEF geklickt hat, und die Aenderung mit modify aktiviert).


Bleibt also die Frage: wie hast du diese Zeile eingegeben?

Wenn du zugibst, dass fhem.cfg direkt editierst, dann solltest du einen gesunden Selbstvertrauen haben, da wird es naemlich hier Kommentare hageln. Erst recht, wenn du auch noch zugibst, dass du https://fhem.de/commandref.html#command nicht gelesen hast. :)

Otto123

Hallo Jens,

das notify durch zwei völlig unterschiedliche Signale zu triggern halte ich für unglücklich.
Der Ausdruck Value("temp8:temperature") ist falsch. Value("temp8") würde den State von temp8 liefern. Dein Konstrukt entstammt "set magic" [temp8:temperature] - das ist aber hier falsch. ReadingsVal("temp8","temperature","") wäre richtig.
Die Abfrage $t8 eq ">60" ist falsch - richtig wäre $t8 > 60

Ich würde für Deine Aufgabe eher ein DOIF empfehlen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

jensdipo

Danke an euch beide,
@Rudolf
Danke für den Hinweis.
auch auf das ich jetzt gesteinigt werde, muss ich zugeben das ich die meisten Befehle bis jetzt immer in die fhem.cfg kopiert habe.
Die Commandref habe ich gelesen, allerdings finde ich ist die fhemwiki für einen Anfänger verständlicher.
Daher stammt auch so grob der Befehl. Auszug aus FhemWiki:
Durch das Atribut dummy werden keine Schaltfunktion angeboten. Es kann nur Werte anzeigen.
notify Befehl

define nt.allerolloszu notify (R1ZU|R2ZU|R3ZU) {
my $r1 = Value("R1ZU");;
my $r2 = Value("R2ZU");;
my $r3 = Value("R3ZU");;
if ($r1 eq "on" && $r2 eq "on" && $r3 eq "on") {
  fhem "set LEDalleRolloZu on"
} else {
  fhem "set LEDalleRolloZu off"
}
}

Bin davon ausgegangen das ich mir das so in die fhem.cfg eintragen kann.
Beim zweitenmal drüberlesen über die Commandref habe ich jetzt Verstanden was du mit dem \ meinst.
Ich habe in der DEF jetzt alles in eine Zeile geschrieben.

(Input0|temp8) {my $i1 = Value("input0");;my $t8 = Value("temp8:temperature");;if ($i1 eq "on" && $t8 > 60) { fhem "set Relais0 on" } else { fhem "set Relais0 off" }}

Werde es gleich so mal testen.
@Otto
Danke für die Info das er sowieso das state ausliest.
Ich werde das mit dem DOIF mal ausprobieren, prinzipiell wäre es aber nicht unmöglich mit notify zu arbeiten oder?
MFG
Jens

rudolfkoenig

Zitatauch auf das ich jetzt gesteinigt werde, muss ich zugeben das ich die meisten Befehle bis jetzt immer in die fhem.cfg kopiert habe.
Mach sowas lieber in der "Raw definition" oder in "DEF", zu den Nachteilen von fhem.cfg editieren siehe https://forum.fhem.de/index.php/topic,77792.msg698256.html#msg698256

Zitatprinzipiell wäre es aber nicht unmöglich mit notify zu arbeiten oder?
Wenn du "prinzipiell" ernst meinst, dann kann ich darauf mit "ja" Antworten: du kannst im notify perl aufrufen, und perl ist eine Turing-Vollstaendige Sprache :) Sonst gibt es hier zwei Lager: die einen bevorzugen DOIF, die anderen notify/at/watchdog/etc. Man kann mit beiden Methoden alles loesen (in DOIF kann man auch perl aufrufen), die unterscheiden sich nur, welche ist eleganter, oder leichter verstaendlich. Und beide Kriterien sind schwer subjektiv.

Otto123

Hallo Jens,

primär musst Du die Doku (commandref) lesen, nur die stammt vom Entwickler und ist aktuell.
Das Wiki enthält Artikel von Anwendern mit Lösungsbeispielen und Ansätzen. Die können teilweise Jahre alt sein und müssen nicht mher funktionieren.

Du hast meine Hinweise leider nur teilweise verstanden. Probiere mal bitte aus was Du bei Eingabe dieses Ausdruck ist der FHEM Kommandozeile erhältst:
{Value("temp8:temperature")}

Das Beispiel im Wiki triggert ein notify mit drei Schaltern. Du willst das notify mal auf einen Schalter und mal mit einem immer wiederkehrenden Temperaturwert triggern.
Ob das sinnvoll ist kannst aber nur Du wissen.

THRESHOLD wäre eventuell auch eine sinnvolle Lösung für Deine Aufgabe.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

jensdipo

@Rudolf,
werde mich dran halten und die fhem.cfg in ruhe lassen.
@Otto,
O.K. werde die Commandref ab jetzt als erstes durchsuchen.
Und Sorry, hatte es Richtig verstanden habe nur den falschen Code gepostet.
Trotzdem Danke für den Hinweis hab den Code folgendermaßen:

(Input0|temp8) {my $i1 = Value("input0");;my $t8 = Value("temp8");;if ($i1 eq "on" && $t8 > 60) { fhem "set Relais0 on" } else { fhem "set Relais0 off" }}

Mit DOIF werde ich gleich auch mal testen.
MFG
Jens


CoolTux


(Input0.on|temp8.*) { fhem("set Relais0 " . ( Value("input0") eq "on" and Value("temp8") > 60 ? "on" : "off") }


Könnte auch eine elegante Lösung sein.
Leider ungetestet.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

jensdipo

Hy CoolTux,
Funktioniert leider nicht da kommt eine Fehlermeldung:
syntax error at (eval 8065) line 1, at EOF
Leider funktioniert der Code den ich habe auch nicht.
Mir ist jetzt aufgefallen das wenn ich den Befehl {Value("temp8")} eingebe bekomme ich die Temperatur zurück.
Gebe ich aber jetzt {Value("Input0")} ein kommt nichts.
sollte hier nicht jetzt on oder off erscheinen?
MFG
Jens

Otto123

input0 oder Input0 ? Es ist nicht egal.

Wenn Dein Code der Inhalt der DEF ist sind die ;; falsch, da darf nur ein ; stehen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

jensdipo

Hy Otto,
Danke für den Hinweis und sorry das ich nicht genau hingesehen habe.
Es ist definitiv Input0 und in der DEF steht auch nur 1 ";", habe im letzten Post den Befehl genommen den ich zum Erstellen des notify benutzt habe.
Hier aber jetzt nochmal die DEF wie es Richtig aussieht und auch Funktioniert:

(Input0|temp8) {my $i1 = Value("Input0");my $t8 = Value("temp8");if ($i1 eq "on" && $t8 > 60) { fhem "set Relais0 on" } else { fhem "set Relais0 off" }}

Schon mal Danke an alle, werde es aber trotzdem nochmal mit DOIF und ReadingsVal ausprobieren und es hier reinschreiben.
MFG
Jens

Otto123

Und {Value("Input0")} bringt jetzt Werte? Warum ging das weiter oben nicht? Oder schaltet  es jetzt bloß wegen der Temperatur?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux


(input0.on|temp8:temperature.*) { fhem("set Relais0 " . ( Value("input0") eq "on" and ReadingsVal("temp8","temperature",30) > 60 ? "on" : "off") ) }


So geht es auf meinem Testsystem. Habe mich da an Deine Vorgabe gehalten vom ersten Post.
temp8:temperature soll triggern, ich bin davon ausgegangen das es auch ausgelesen werden soll. Also ging Value da nicht bei temp8 sondern muß ReadingsVal heißen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Zitat von: jensdipo am 21 Oktober 2017, 13:54:49
Hy CoolTux,
Mir ist jetzt aufgefallen das wenn ich den Befehl {Value("temp8")} eingebe bekomme ich die Temperatur zurück.
Gebe ich aber jetzt {Value("Input0")} ein kommt nichts.
Naja war scheinbar nicht so....
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Also es wäre schön gut wenn du weißt wie genau Deine Geräte heißen. Ich habe mich da nur verschrieben und jetzt mehr drauf geachtet bei meinem Code. Mein letzter Codeeintrag hält sich an deinn ersten Post.

Ansonsten Gib uns ein list von allen 3 Devices die es betrifft
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net