Hallo zusammen,
ich versuche seit Tagen einen Temperaturwert aus FHEM an Loxone zu übergeben.
Die Loxone Seite sollte soweit passen (virtueller Eingang analog).
ich müsste also als FHEM folgenen Http befhéhl absetzen:
http://user:password@192.168.100.240/dev/sps/io/VI7/XXXXX
Wobei XXXX der Temperaturwert sein soll (diesen liest Loxone dann ein)
Veruscht hab ich:
über einen notify "wget -q -O - 'http://user:passwor@192.168.100.240/dev/sps/io/VI7/"ReadingsVal("ELW_Therm_Eingang_links","state","18:00")}""'
Mach ich zum Testen:
wget -q -O - 'http://user:passwor@192.168.100.240/dev/sps/io/VI7/20'"
So kommt der Wert 20 in Loxone an.
Aber irgendas mache ich falsch bei der Übergabe des Temperaturwerts.
Es handelt sich um ein HomeMatic Heizkörpertermostat.
Bin für jeden Tipp dankbar.
Markus
Also zumindest musst du wohl die vielen Anführungszeichen "escapen" wobei ich jetzt nicht ganz genau sehen kann wo du "Einzelhochkomme" und wo "Anführungszeichen" hast...
...bei Verwendung von Variablen keine "Einzelhochkomma" verwenden, denn dadurch wird die Variable nicht ausgewertet sondern als Text übergeben, also "$Value" statt "InhaltDerVariablen"...
Und ReadingsVal wird so nicht funktionieren, dazu musst du nach Perl wechseln...
Evtl. in etwa so
define nNotifyLoxon notify RegEx {my $Value=ReadingsVal("ELW_Therm_Eingang_links","state","18:00");fhem("wget -q -O - \"http://user:passwor@192.168.100.240/dev/sps/io/VI7/$Value\"");}
Wbei ich mir wie gesagt nicht sicher bin, ob "um" den "Inhalt" des wget Anführungsszeichen müssen.
Sonderzeichen musst du evtl. "urlEncoden" (evtl. bei Passwort/User).
Gruß, Joachim
Vielen Dank schon mal.
Hab grad noch etwas probiert...
Also:
define nf_Temperatur notify Licht_Kueche_klein:on "wget -q -O - 'http://benutzer:passwort@192.168.100.240/dev/sps/io/VI7/66'"
Funktioniert (wenn ich Licht Küche einschalte wird hier der Wert 66 gesendet an Loxone.
Versuche ich testweise:
define nf_Temperatur notify Licht_Kueche_klein:on {my $Value=ReadingsVal("ELW_Therm_Eingang_links","state","25:00"){fhem("wget -q -O - 'http://benutzer:passwort@192.168.100.240/dev/sps/io/VI7/66'")}}
passiert leider nichts (auch kein Fehler), aber auch der feste Wert 66 wird nicht gesendet. Der wget wird als nicht ausgeführt.
Steh grad voll auf der Leitung...
LG
Wenn du kopierst, dann schon korrekt ;)
Es fehlt mindestens ein Strichpunkt...
...und auch die Klammern beachten...
...und auch das "escapen"...
Evtl. zuerst mal das hier testen:
define nf_Temperatur notify Licht_Kueche_klein:on {fhem("wget -q -O - \"http://benutzer:passwort@192.168.100.240/dev/sps/io/VI7/66\"")}
Gruß, Joachim
Gerade getestet:
define nf_Temperatur notify Licht_Kueche_klein:on {fhem("wget -q -O - \"http://benutzer:passwort@192.168.100.240/dev/sps/io/VI7/66\"")}
leider keine Reaktion seitens Loxone.
Mit:
define nf_Temperatur notify Licht_Kueche_klein:on "wget -q -O - 'http://benutzer:passwort@192.168.100.240/dev/sps/io/VI7/66'"
klappt es jedoch.
Hab auch noch:
define nf_Temperatur notify Licht_Kueche_klein:on {fhem("wget -q -O - 'http://benutzer:passwort@192.168.100.240/dev/sps/io/VI7/66'")}
versucht. Jedoch ebenfalls ohne Erfolg.
Irgendwas sehe ich da nicht :-(
LG
In dem Fall habe ich etwas übersehen, sorry...
Bevor ich "nur" vorgebe (und du mehr oder weniger gut kopierst ;) ) versuche ich es (noch mal) mit "Erläutern":
- Also um in einem Notify etc. nach Perl zu wechseln braucht man die Klammern
{Perl-Code}
Das brauchen wir, damit wir später dann die Variable mit ReadingsVal/ReadingsNum auslesen können, sonst bleibt der Befehl an Loxone ja statisch... ;)
- Damit dann aber innerhalb von Perl ein fhem-Befehl abgesetzt werden kann braucht es dann den fhem()-Aufruf
{fhem("set DeviceName Value")} entspricht -> set DeviceName Value (wenn man auf fhem-Ebene ist/bleibt/geblieben wäre)...
Und da liegt vermutlich der "Fehler", es fehlen vermutlich weitere Anführungszeichen...
Allerdings kannst du die "Einzelhochkommas" im http-Aufruf NICHT lassen da sonst das mit der Variablen NICHT klappt (klappen dürfte), habe ich ja bereits erläutert.
Wenn dann dort "escapte" Hochkommas zum Einsatz kommen (müssen), dann muss da auch das '@' "escaped" werden, also '\@'...
...oder auch '@@' (glaube ich).
D.h.:
define nf_Temperatur notify Licht_Kueche_klein:on {fhem("\"wget -q -O - \"http://benutzer:passwort\@192.168.100.240/dev/sps/io/VI7/66\"\"")}
Ansonsten (weil wir müssen ja nicht zwingend zurück zu fhem) ginge wohl auch sowas:
define nf_Temperatur notify Licht_Kueche_klein:on {qx("wget -q -O - \"http://benutzer:passwort\@192.168.100.240/dev/sps/io/VI7/66\"")}
Allerdings ist der 2te Aufruf blockierend!
Der erste zurück zu fhem nicht!
Durch anhängen eines '&' kann auch der erste Aufruf nicht blockierend gemacht werden...
(Linux eben)
Habe es mal rudimentär mit einem Dummy bei fhem selbst über http-Request getestet und hat eigentlich getan...
...also die {fhem("...")}-Variante. Die {qx("...")}-Variante habe ich nicht getestet...
EDIT: Zur sicherheit noch den Probeaufruf der funktioniert hat:
{fhem("\"wget -q -O - \"http://192.168.1.120:8088/fhem?cmd=set%20Test_2%20on\"\"")}
EDIT2: wichtig ist auch das Leerzeichen zwischen -O -[LEERZEICHEN]http://... Brauchst du den Parameter -O wirklich? Ohne brauchst du nämlich (zumindest ich in meinen Tests nicht) auch die Anführungszeichen bei http://... nicht. Dadurch fallen 2 "escapte" Anführungszeichen um den http-Aufruf weg...
EDIT3: evtl. brauchen wir auch gar nicht auf die Perl-Ebene, evtl. kann man den Wert auch per "setMagic" abfragen: [DeviceName:ReadingName] (entspricht ReadingsVal("DeviceName", "ReadingName", "Ersatzwert") ). Nutze ich aber nicht und weiß daher nicht, ob das bei Notify überhaupt geht...
P.S.: evtl. noch mal (vorm Testen und "einfach" Kopieren mitdenken und) die Hochkommas etc. "prüfen")
Wenn das dann geht, machen wir das mit der Variablen bzw. solltest du das dann auch selber können, siehe erstes Beispiel nur dann halt in richtig ;)
Gruß, Joachim
Guten Abend und ein RIESEN - Dankeschön für die verständliche und ausführliche Erklärung.
Ich hab es nun hinbekommen :-) (Hätte ich so wohl nicht geschafft.
So läuft es bei mir jetzt mit der Übergabe der Temperatur an Loxone:
define nf_Temperatur_ELW_Ki_re notify ELW_Kinderzimmer_rechts:measured-temp.* {my $Value=ReadingsVal("ELW_Kinderzimmer_rechts","measured-temp","15:00");;fhem("\"wget -q - http://benutzer:passwort\@192.168.100.240/dev/sps/io/VI9/$Value\"")}
Immer wenn sich die Temp ändert wird der Wert an Loxone gesendet.
Mein größtes Problem (neben vielen anderen) war das "escapen". Hatte / (und habe wohl auch noch) da wenig Durchblick. Aber dank der Erklärung (und v.A. mit den Beispielen) hab ich hinbekommen.
Nochmals Danke - nun kann ich weiterbasteln :-)
Schönen Abend
Markus
Hi Markus,
so soll es sein!
Also Erfolg und lernen!
Dann vielleicht noch den Thread als gelöst kennzeichen, beispielsweise umbenennen in [gelöst] Temperaturwert per wget an loxone übergeben
Viel Spaß noch, Joachim