Fehler in einfacher notify Bedingung

Begonnen von Navigator, 27 Februar 2014, 15:38:45

Vorheriges Thema - Nächstes Thema

Navigator

Hallo,

habe gerade meine erste Bedingung angelegt. FHEM hat diese in die Config anstandslos übernommen, führt diese aber nicht aus.

define N_Lautsprecher notify if (Internetradio eq "PLAY") {fhem "set Lautsprecher on"} else {fhem "set Lautsprcher off"};;

Wäre um Hilfe dankbar, auch wenns vllt ein bisschen lächerlich anmutet.  :-\
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

betateilchen

erstens hast Du vergessen, anzugeben, worauf das notify überhaupt reagieren soll, zweitens fehlen die umschließenden Klammern, drittens ist "Internetradio" nichts definiertes.

define N_Lautsprecher notify ????? {if ( ??? Internetradio eq "PLAY") {fhem "set Lautsprecher on"} else {fhem "set Lautsprcher off"}}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Navigator

Hallo betateilchen...

also mein Vorhaben wird glaube ersichtlich. Mein erstes Script sah so aus.

define N_Lautsrpcher notify Internetradio:PLAY set Lautsprecher on

Dort fehlte mir die else Anweisung.

Wie muss es denn richtig heissen? Internetradio und Lautsprecher sind definierte Geräte.
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

marvin78

define N_Lautsprecher notify Internetradio {if ( Value("Internetradio") eq "PLAY") {fhem ("set Lautsprecher on")} else {fhem ("set Lautsprecher off")}}

ist aber bloß geraten, weil ich nicht genau weiß, ob und welches Reading abgefragt werden soll.

betateilchen

Wenn Du ohnehin nur darauf triggerst, dass das Internetradio PLAY signalisiert, kann es überhaupt kein ELSE geben, weil das Triggern des notify bereits eindeutig bestimmt ist.

Beschreibe doch einfach mal genau, was Du unter welcher Bedingung machen möchtest, dann kann man Dir auch helfen.

Denkbar wäre zum Beispiel sowas:

define N_Lautsprecher notify Internetradio.* { if(Value('Internetradio'} eq 'PLAY') { fhem('set Lautsprecher on') } else { fhem('set Lautsprecher off') } }

Aber ob das wirklich Sinn macht, wage ich zu bezweifeln.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Navigator

Danke, funktioniert...

aber noch mal zum Verständnis.

Internetradio und Lautsprecher sind Devices. Internetradio wird über eine FS20 IRF gehandelt. Ich habe bisher nur die Knöpfe off und on angelegt. Den "on" Schalter habe ich in per Eventmap mit PLAY ,den "off" als OFF bezeichnet. Lautsprecher ist eine FS20st und hat nur die Schalter on"ON" off"OFF". Mit den readings hab ich noch nicht so den Duchblick. Ich wollte erst mal nur eine einfache Bedingung testen.

In meiner denkweise bin ich vllt etwas verkehrt, bzw. vorbelastet druch ein anders System und es ist da schwer ganz bei 0 anzufangen.
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

betateilchen

Zitat von: Dittel am 27 Februar 2014, 16:08:28Ich wollte erst mal nur eine einfache Bedingung testen.

die Du aber bei fhem in diesem Fall überhaupt nicht benötigst...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Navigator

Zitat von: betateilchen am 27 Februar 2014, 16:15:21
die Du aber bei fhem in diesem Fall überhaupt nicht benötigst...

...was meinst genau? Wie hätte ich es anders machen können, müssen?
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

betateilchen

Du hattest es doch anfangs schon richtig: Du hattest ein notify auf Internetradio:PLAY Damit ist die Bedingung bereits abgebildet.

Mit dem if...else  weißt du im else-Zweig natürlich, dass NICHT PLAY der Auslöser war, aber Du weisst immer noch nicht, welche andere Taste gedrückt wurde. Zumindest ab dem Moment nicht mehr, wenn Du mehr als zwei Möglichkeiten zur Auswahl hast.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dieda

Du sendest also im Prinzip zwei FS20-Telegramme? Ein Telegramm an die IRF-Schnittstelle, eines direkt. Dann würde sich doch ein Structure anbieten. FHEM lauscht ja mit.
Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

Navigator

In meinem ersten Beispiel fehlt mir eben die zweite Schaltzuweisung des off(eventmap OFF), hätt ich diese auch noch einfach mit implentieren können ohne if, else?

Oder kann ich auch ein zweites notify dafür anlegen?

Im Grunde genommen werden zwei Telegramme an die IRF gesendet mit einem Hauscode. on und off, die IRF setzt das dann entprechend um. Andere Funktionen sind mit anderen Hauscodes verknüpft, aber ich kann eben immer nur zwei Telegramme auf einem Hauscode senden. Dies funktioniert mit der alten Anlage auch gut, aber habe ich dort eben einfache If, else Scripte benutzt.

if(Iradio==100){Lautsprecher=100;}else{Lautsprecher=0;}

So einfach war das... die ganzen Sonderzeichen und Klammern können in Pearl einen schon verrückt machen.

Also könnte ich auch hier gleich den off Befehl mit hinterhier "schieben" oder muss ich immer die "umständlichere" und scherer zu lesende Klammersyntax nehmen?.
define N_Lautsrpcher notify Internetradio:PLAY set Lautsprecher on.......
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

dieda

Probier es so:

Erst das Structure
dann das Notify welches den IR-Befehl sendet auf eines der beiden, entweder der Lautsprecher  oder das Radio
Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

Navigator

...ich muss gestehen mit den structures noch nicht beschäftigt zu haben, aber ich werde mich mal ransetzen. Allerdings brauche ich viele if else Bedingunen für meine alten Scripte und versuche gerade die Syntax so einfach wie möglich zu halten um zu verstehen. Es gibt ja auch noch die Erweiterung...
Gruß aus Sachsen. FHEM auf Cubietruck. Vormals EZControl XS1 User.

dieda

Mit Structure nimmst du den Ausschaltbefehl gleich mit. ;)
Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs

betateilchen

ich weiß auch grade nicht, was eine structure hier zu suchen hat...

Theoretisch kannst Du einfach für jeden Button, den Du definiert hast, ein notify anlegen.


define n_inetradio_1 notify Internetradio.PLAY {tue irgendwas}

define n_inetradio_2 notify Internetradio.OFF {tue irgendwas anderes}

define n_inetradio_3 notify Internetradio.Button3 {tue nochmal irgendwas anderes}

usw.


Wobei: wäre es nicht einfacher, die FS20 Telegramme zu verwenden und für jeden Code eine FS20 Definition in fhem anzulegen?
So ganz habe ich Deine Konstellation noch nicht verstanden. Ich weiß, was die IRF ist, aber ich hab noch nicht verstanden, woher sie ihre Befehle bekommt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!