FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Navigator am 27 Februar 2014, 15:38:45

Titel: Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 27 Februar 2014, 15:38:45
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.  :-\
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: betateilchen am 27 Februar 2014, 15:47:02
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"}}
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 27 Februar 2014, 15:54:00
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.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: marvin78 am 27 Februar 2014, 15:58:30
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.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: betateilchen am 27 Februar 2014, 16:00:40
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.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 27 Februar 2014, 16:08:28
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.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: betateilchen am 27 Februar 2014, 16:15:21
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...
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 27 Februar 2014, 16:29:50
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?
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: betateilchen am 27 Februar 2014, 19:02:38
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.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: dieda am 27 Februar 2014, 20:41:11
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.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 27 Februar 2014, 20:55:37
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.......
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: dieda am 27 Februar 2014, 21:22:58
Probier es so:

Erst das Structure
dann das Notify welches den IR-Befehl sendet auf eines der beiden, entweder der Lautsprecher  oder das Radio
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 27 Februar 2014, 21:34:15
...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...
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: dieda am 27 Februar 2014, 21:43:18
Mit Structure nimmst du den Ausschaltbefehl gleich mit. ;)
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: betateilchen am 27 Februar 2014, 21:46:49
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.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 28 Februar 2014, 00:00:25
jetzt abgesehen vom structure wo ich noch keinen durchblick habe, erscheint mit letzter variante von der lesbarkeit her im code am einfachsten.

...also nochmal zur irf, die hat 16 kanäle, jeder von ihnen kann zwei fs20 schaltzustande annehmen und in einmalig angelernte infrarotsignale umsetzen. ob das nun ein, aus, oder ein dimmwert ist, völlig egal, sie müssen innerhalb eines kanals nur verschieden sein. jedem kanal muss demzufolge ein neuer hauscode zugewiesen werden.

aber davon abgesehen baut fast alles in der alten anlage auf if, else, timer, zähler und schleifen auf und weil ich weiss wie schwer das ganze irgendwann zu lesen ist bzw. wieder nachzuvollziehen, versuche ich erst mal hier die einfachste syntax dafür zu finden. es gibt ja hier noch die neue if, else variante von demian, bin mir aber grad nicht sicher ob das schon offiziell abgesegnet ist.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: betateilchen am 28 Februar 2014, 09:25:30
Für Dein Grundverständnis als Umsteiger zu fhem würde ich Dir zu der Variante mit den einzelnen notify raten.

Wenn Du die Philosophie von fhem dann in einiger Zeit durchschaut haben wirst, wirst Du mit Sicherheit feststellen, dass es auch noch andere Lösungsansätze innerhalb fhem gibt. Es nützt Dir aber nix, jetzt mit dem komplexesten anzufangen und fertige Lösungen einfach mit copy&paste zu übernehmen, ohne wirklich zu verstehen, was dahintersteckt. Das führt erfahrungsgemäß relativ schnell zu Frust.

Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 28 Februar 2014, 15:05:53
Ja, den anfänglichen Frust hatte schon, aber ich habe mir jetzt mal mehr Zeit genommen und die Wiki für Einsteiger bis zur Hälfte konzentriert durchgearbeitet und nicht nur fragmentiert oder was ich gerade brauchte. Jetzt sehe ich auch kompliziertere Scripte nicht mehr ganz so kryptisch mit den ganzen Sonderzeichen etc.  Ja, das sollte man eigentlich gleich tun, aber die Ungeduld war eben stärker.  ;)

Danke an alle.
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: dieda am 28 Februar 2014, 16:42:23
Da du zwei FS20 Geräte schalten willst, gibt es noch die andere Möglichkeit mit globaler Master-Adresse oder lokaler Masteradresse

Zitatdefine <name> FS20 <housecode> <button> [fg <fgaddr>] [lm <lmaddr>] [gm FF]

Nicht das du nachher mit den 16 Befehlen, die dein Gerät kann nicht auskommst  ;)
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 28 Februar 2014, 18:06:19
Deswegen habe ich drei Stück von den IRF. Zwei sind komplett für den TV, eine steuert die Squezzebox.  ;)

Die globalen Master Adressen sind mir zwar bekannt, nutze ich aber nicht wirklich.  :(
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: dieda am 28 Februar 2014, 18:55:54
Hattest du schon LIRC plus Infrarot Extender probiert?
http://www.amazon.de/s/ref=nb_sb_ss_i_0_11?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&url=search-alias%3Daps&field-keywords=infrarot+extender&sprefix=infrarot+ex%2Caps%2C206&rh=i%3Aaps%2Ck%3Ainfrarot+extender (http://www.amazon.de/s/ref=nb_sb_ss_i_0_11?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&url=search-alias%3Daps&field-keywords=infrarot+extender&sprefix=infrarot+ex%2Caps%2C206&rh=i%3Aaps%2Ck%3Ainfrarot+extender)
Mir erschließt sich aber nicht wirklich, warum man alle Befehle der Original FB per Infrarot Modul über FHEM in FS20 und dann per Netzwerkbefehl  an den TV weitergeben sollte. Das macht meine Logitech...
Titel: Antw:Fehler in einfacher notify Bedingung
Beitrag von: Navigator am 28 Februar 2014, 20:35:25
Nun ja, wenn du alles auch über die Heimsteuerung bedienen willst und dein Fernsehr noch nicht die neumodischen Kommunikationsmethoden versteht, dann bleibt einem nix anderes übrig als über Infrarot. Meine "alte" Anlage versteht leider nur die Steuermodule von FS20 oder IRTrans und die FS20 sind einfach spottbillig  und habe gleichzeitug was zum löten  ::)

Bin aber für neues gerne offen, also beschreibe doch mal kurz dein LIRC.  ;)