FHEM Forum

FHEM => Automatisierung => Thema gestartet von: tm am 19 November 2016, 18:13:47

Titel: if else ...
Beitrag von: tm am 19 November 2016, 18:13:47
Liebes Forum,

Wahrscheinlich nur eine Kleinigkeit - aber ich komm nicht weiter.

Relais sollen von einer Fernbedienung über eine I²C Schnittstelle geschaltet werden. Ein/Aus soll über die selbe Taste geschaltet werden. Einzeln geht das:


RC_KLEIN:cSceneSet:.5 set relais PortA1 on


ausschalten:


RC_KLEIN:cSceneSet:.5 set relais PortA1 off


In Abhängigkeit vom aktuellen Zustand jeweils:


RC_KLEIN:cSceneSet:.5 {if ("relais PortA1" == "off") {fhem("set relais PortA1 on")} }



RC_KLEIN:cSceneSet:.5 {if ("relais PortA1" == "on") {fhem("set relais PortA1 off")} }



Jetzt zum Problem - Soll beides miteinander verknüpft werden, funktioniert nur die Anweisung _vor_ dem else:


RC_KLEIN:cSceneSet:.5 {if ("relais PortA1" == "off") {fhem("set relais PortA1 on")} else {fhem("set relais PortA1 off")}}


Hab ich da einen Denk- oder Schreibfehler?

Vielen Dank vorab,
Thomas
Titel: Antw:if else ...
Beitrag von: Hans Franz am 19 November 2016, 18:54:53
Besser:
{if ("relais PortA1" eq "off")...
Hoffentlich reicht das.

Gruß
Hans
Titel: Antw:if else ...
Beitrag von: tm am 19 November 2016, 19:14:04
Servus Hans,

Danke für Deine Hilfe.
Damit hatte ich es schon versucht - und es läuft nicht ...

also

RC_KLEIN:cSceneSet:.5 {if ("relais PortA1" =="off") {fhem("set relais PortA1 on")}}

funktioniert, wohingegen

RC_KLEIN:cSceneSet:.5 {if ("relais PortA1" eq "off") {fhem("set relais PortA1 on")}}

ohne Wirkung bleibt.
Titel: Antw:if else ...
Beitrag von: Prof. Dr. Peter Henning am 19 November 2016, 20:21:26
Natürlich kann das nicht funktionieren. Mit diesem Code
"relais PortA1" eq "off"
werden zwei Strings verglichen - und der erste String ist nun einmal nicht gleich dem Zweiten.

Entweder Perl - dann schlage ich vor, die Konzepte Strings, Variable, Kontrollstrukturen etc. in Perl anzuschauen. Siehe Ausgabe von "man perl".

Oder FHEM - dann schlage ich vor, sich die Comandref zu DOIF anzusehen.

LG

pah
Titel: Antw:if else ...
Beitrag von: Hans Franz am 19 November 2016, 22:41:25
Zapperlot, zu blind.
pah hat natürlich ;) recht.
Wahrscheinlich geht's so:
{if (ReadingsVal("relais","PortA1","") eq "off")...

Gruß
Hans
Titel: Antw:if else ...
Beitrag von: tm am 20 November 2016, 16:53:01
OK


RC_KLEIN:cSceneSet:.5 {if (ReadingsVal("relais","PortA1","") eq "off") set relais PortA1 on}


geht schon mal nicht ...
Titel: Antw:if else ...
Beitrag von: CoolTux am 20 November 2016, 17:05:47
Zitat von: tm am 20 November 2016, 16:53:01
OK


RC_KLEIN:cSceneSet:.5 {if (ReadingsVal("relais","PortA1","") eq "off") set relais PortA1 on}


geht schon mal nicht ...

Kann ja auch nicht. Schaue dir bitte noch mal Hans sein Beispiel an. Der Bedingungsteil war fehlerhafte aber nicht der Ausführungsteil.
Titel: Antw:if else ...
Beitrag von: Prof. Dr. Peter Henning am 20 November 2016, 17:47:56
@tm: Das erscheint mir etwas experimentell - so lange tippen, bis etwas funktioniert. Bitte erst einmal die Anfängerdoku lesen.

Eine gute Einführung in Perl findet man hier: https://wiki.selfhtml.org/wiki/Perl

LG

pah
Titel: Antw:if else ...
Beitrag von: tm am 20 November 2016, 23:00:57
Lieber Herr Kollege,

Vielen Dank für diesen wertvollen Hinweis.

LG,
TM