Hallo zusammen...
Ich möchte gerne meine Ist Temperatur von meinen Wandthermostaten an meine CCU senden..
Ich kann über diesen Befehl werte über meinen Browser an die CCU senden.
http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("28.5")
Wie schaffe ich das nun das in State die aktuelle Ist Temperatur vom Wandthermostat rein kommt..
Und dies dann ausgelöst wird sobald die Ist Teperatur des Wandthermostat sich ändert.
Zitat von: schmello am 08 September 2017, 19:03:06
Hallo zusammen...
Ich möchte gerne meine Ist Temperatur von meinen Wandthermostaten an meine CCU senden..
Ich kann über diesen Befehl werte über meinen Browser an die CCU senden.
http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("28.5")
Wie schaffe ich das nun das in State die aktuelle Ist Temperatur vom Wandthermostat rein kommt..
Und dies dann ausgelöst wird sobald die Ist Teperatur des Wandthermostat sich ändert.
Notify erstellen was auf Ist vom Wandthermostat triggert und dann das Value als $EVTPART in Deinen Aufruf einbauen.
Danke erstmal für deine Anwtort..
Aber kannst du mir da helfen?
Das Einrichichten von den Max Geräten und erstellen der Programme war soweit kein Problem.... aber vom rest habe ich wenig ahnung :)
https://fhem.de/commandref_DE.html#notify
Dann empfehle ich Dir Dich ein zu lesen denn gerade den Rest wirst Du in Zukunft sehr oft brauchen. Schlagworte habe ich Dir genannt.
Im Anfängerforum die angepinnten Beiträge lesen. Das Einsteiger PDF ist immer ein sehr guter Anfang.
Danke erstmal... :)
Ich denke das ich das so schnell nicht hin bekommen werde ???
Aber werde mich die Tage an versuchen einzulesen.
Kann mir vielleicht jemand weiter bei dem Thema helfen... ich bekomme meine Idee leider nicht umgesetzt..
Fhem ist da dich eine ganz andere Welt als Homematic :)
Ich habe zum testen ein Dummy angelegt.
define mySwitch1 dummy
attr mySwitch1 webCmd on:off
Und dann das Notify erstellt
define tempcheck notify Badezimmer.unten.Thermostat:temperature set mySwitch1 on
Doch mySwitch1 schaltet nicht auf on
Was für einen Wandthermostaten hast du denn?
Wie ist der in fhem eingebunden?
Poste doch mal ein list vom Wandthermostaten:
list NameDesWandthermostaten
in die FhemWeb-Command-Zeile eingeben und dann 'Enter'.
Die Ausgabe dann hier posten in code-Tags (das '#' im Menü)...
Das Stichwort und der Link zur Commandref wurde ja bereits gepostet: notify
Im EventMonitor (von Fhem-Web aus erreichbar: links in den FhemWeb-Menüs deines Fhem) auf das Ist-Temperatur-Event warten (also bis es auftaucht) und dann markieren und Modify/Create klicken und das notify erzeugen lassen
oder
den entsprechenden Auszug aus dem EventMonitor hier posten...
Gruß, Joachim
Es ist ein Max Wandthermostat
Hier der auszug
Internals:
CULMAX0_MSGCNT 1537
CULMAX0_TIME 2017-09-11 11:22:14
DEF WallMountedThermostat 167ae3
IODev CULMAX0
LASTInputDev CULMAX0
MSGCNT 1537
NAME Badezimmer.unten.Thermostat
NR 148
RSSI -54
STATE 12.0 °C
TYPE MAX
addr 167ae3
backend CULMAX0
rferror 0
type WallMountedThermostat
wakeUpUntil 1504862821.12559
READINGS:
2017-09-11 11:22:14 RSSI -54
2017-09-05 19:25:16 TimeInformationHour 0
2017-09-11 08:05:26 battery ok
2017-09-05 19:27:06 boostDuration 25
2017-09-05 19:27:06 boostValveposition 80
2017-09-05 19:27:06 comfortTemperature 21.0
2017-09-11 11:22:14 desiredTemperature 12.0
2017-09-11 08:05:26 displayActualTemperature 1
2017-09-05 19:27:06 ecoTemperature 17.0
2017-09-05 19:27:06 firmware 1.0
2017-09-05 19:27:06 groupid 0
2017-09-05 19:27:06 maximumTemperature on
2017-09-05 19:27:06 measurementOffset 0.0
2017-09-05 19:27:06 minimumTemperature off
2017-09-11 08:05:26 mode auto
2017-09-11 08:05:22 msgcnt 55
2017-09-11 11:22:14 state 12.0 °C
2017-09-11 11:22:14 temperature 19.7
2017-09-05 19:27:06 testresult 255
2017-09-05 19:27:06 weekprofile-0-Sat-temp 17.0 °C / 21.0 °C / 17.0 °C
2017-09-05 19:27:06 weekprofile-0-Sat-time 00:00-06:00 / 06:00-22:00 / 22:00-00:00
2017-09-05 19:27:06 weekprofile-1-Sun-temp 17.0 °C / 21.0 °C / 17.0 °C
2017-09-05 19:27:06 weekprofile-1-Sun-time 00:00-06:00 / 06:00-22:00 / 22:00-00:00
2017-09-05 19:27:06 weekprofile-2-Mon-temp 17.0 °C / 21.0 °C / 17.0 °C / 21.0 °C / 17.0 °C
2017-09-05 19:27:06 weekprofile-2-Mon-time 00:00-06:00 / 06:00-09:00 / 09:00-17:00 / 17:00-23:00 / 23:00-00:00
2017-09-05 19:27:06 weekprofile-3-Tue-temp 17.0 °C / 21.0 °C / 17.0 °C / 21.0 °C / 17.0 °C
2017-09-05 19:27:06 weekprofile-3-Tue-time 00:00-06:00 / 06:00-09:00 / 09:00-17:00 / 17:00-23:00 / 23:00-00:00
2017-09-05 19:27:06 weekprofile-4-Wed-temp 17.0 °C / 21.0 °C / 17.0 °C / 21.0 °C / 17.0 °C
2017-09-05 19:27:06 weekprofile-4-Wed-time 00:00-06:00 / 06:00-09:00 / 09:00-17:00 / 17:00-23:00 / 23:00-00:00
2017-09-05 19:27:06 weekprofile-5-Thu-temp 17.0 °C / 21.0 °C / 17.0 °C / 21.0 °C / 17.0 °C
2017-09-05 19:27:06 weekprofile-5-Thu-time 00:00-06:00 / 06:00-09:00 / 09:00-17:00 / 17:00-23:00 / 23:00-00:00
2017-09-05 19:27:06 weekprofile-6-Fri-temp 17.0 °C / 21.0 °C / 17.0 °C / 21.0 °C / 17.0 °C
2017-09-05 19:27:06 weekprofile-6-Fri-time 00:00-06:00 / 06:00-09:00 / 09:00-17:00 / 17:00-23:00 / 23:00-00:00
2017-09-08 11:02:32 windowOpenDuration 15
2017-09-05 19:27:06 windowOpenTemperature 12.0
internals:
interfaces thermostat;temperature;battery
Attributes:
IODev CULMAX0
room Badezimmer unten
Dann mal den EventMonitor öffnen und im Filter mal:
Badezimmer.unten.Thermostat.*
oder auch nur:
Badezimmer.*
"eingeben" und schauen wann der Event mit der Ist-Temperatur kommt.
und hier posten.
Oder wie beschrieben das notify selbst erzeugen (lassen).
Leider weiß ich nicht wie man dann den Web-Aufruf absetzt (evtl. wget oder curl aber es geht bestimmt auch mit fhem-Befehlen)...
Den Wert den du übertragen willst bekommst du (wie bereits geschrieben) über $EVTPART0 (bzw. $EVTPART1 etc. je nachdem wie das notify/Event aussieht).
Gruß, Joachim
define tempcheck notify Badezimmer.unten.Thermostat:temperature.* set mySwitch1 on
So sollte wenigstens das Teil auf on gehen
Hier ist der Aufzug aus dem Event Monitor
2017-09-11 11:36:45 MAX Badezimmer.unten.Thermostat temperature: 19.7
2017-09-11 11:36:45 MAX Badezimmer.unten.Thermostat desiredTemperature: 12.0
2017-09-11 11:36:45 MAX Badezimmer.unten.Thermostat 12.0 °C
2017-09-11 11:36:45 MAX Badezimmer.unten.Thermostat RSSI: -54
@CoolTux
Danke das geht schonmal... auch wenn es erst einmal nichts bringt.. aber ich weiß nun wo da schon einmal mein fehler war :)
Ups, da hätte ich Antwort #6 besser lesen sollen, ist mir irgendwie durchgerutscht...
...hatte auch schon ein notify "gebastelt" (aus dem list) aber da ich nicht weiß wie das dann mit dem http-Aufruf geht und den Dummy übersehen hatte, hab ich's gelassen zu posten ;)
Gruß, Joachim
Zitat von: schmello am 11 September 2017, 11:38:29
@CoolTux
Danke das geht schonmal... auch wenn es erst einmal nichts bringt.. aber ich weiß nun wo da schon einmal mein fehler war :)
Ich sehe es anders. Es bringt sehr viel. Du lernst!!
So eine RegEx auf ein Event wird Dir in FHEM an sehr vielen stellen begegnen. Nicht nur bei Notify.
Und nun mach mal weiter mit Deinem Dummy. Jetzt gib ihm nicht starr vor das er ein set on machen soll sondern das er ein Teil des Events an den dummy geben soll.
Der ganze Event ist $EVENT Teile vom Event sind $EVTPART und dann die Zahl dahinter beginnend bei 0
$EVTPART0 z.B.
$EVENT ist alles nach dem Devicenamen. Teile bilden immer durch Leerzeichen
Also
temperature: 19.7
ist Dein $EVENT. Welchen Teil möchtest Du als
set dummy $EVTPARTx setzen
Ich habe es hinbekommen das ich temperature: 19.7 in den Dummy schreibe...
Ich habe es nur noch nicht mit dem $EVTPARTx verstanden...
Wenn ich define tempcheck notify Badezimmer.unten.Thermostat:temperature.* set mySwitch1 $EVTPART0
eingebe..
speichert er nur das Wort temperature
---
EDIT
Mit $EVTPART1 wird nur die Zahl gespeichert... klasse...
Also steht die zahl bei $EVTPARTx für die einzelnen Wörter?
Wenn dort - Temerature 19.7 Celsius - stehen würde... und ich möchte nur das Celsius in den Dummy schreiben... müsste ich $EVTPART3 verwenden ?
Jetzt muss ich nur noch den Wert vom Dummy in den http Befehl rein bekommen und die Werte in meine CCU zu schreiben.. :)
Kann dies der Dummy selbst?
Also wenn sich der Wert im Dummy ändert löst er einen http Befehl aus...
Zitat von: schmello am 11 September 2017, 13:23:34
Mit $EVTPART1 wird nur die Zahl gespeichert... klasse...
Also steht die zahl bei $EVTPARTx für die einzelnen Wörter?
Wenn dort - Temerature 19.7 Celsius - stehen würde... und ich möchte nur das Celsius in den Dummy schreiben... müsste ich $EVTPART3 verwenden ?
Fast. Wir beginnen bei 0 zu zählen. Also dann $EVTPART2
Entscheidend ist das die Trennung immer per Leerzeichen erfolgt. Das ist quasi das Trennungszeichen für die split Funktion die da intern rennt.
Zitat von: schmello am 11 September 2017, 13:23:34
Jetzt muss ich nur noch den Wert vom Dummy in den http Befehl rein bekommen und die Werte in meine CCU zu schreiben.. :)
Kann dies der Dummy selbst?
Also wenn sich der Wert im Dummy ändert löst er einen http Befehl aus...
Naja so ganz alleine kann der das nicht, aber ein notify welches darauf triggert kann das. Aber dann kannst auch gleich den Dummy weg lassen und das Notify nehmen was bisher den Dummy versorgt hat. Dazu kommt dann Dein http Aufruf den Du direkt in " " eingeschlossen losschicken kannst. Den Wert sendest Du im HTTP String in dem Du die Variable einsetzt $EVTPART1
Was mir gerade einfällt falls noch nicht genannt. Es gibt ein ein CCU Modul (HMCCU). Damit kann man so glaube ich auch Daten an die CCU senden.
Könntest du mir da ein Beispiel schreiben?
So ungefähr müsste es doch dann aussehen :) Hoffe ich mal
define tempcheck notify Badezimmer.unten.Thermostat:temperature.* set http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("$EVTPART1")
Von den Modul HMCCU habe ich auch schon gehört und auch was gelesen.. nur ich konnte es nicht einbinden.
Es kam immer eine Meldung das - Cannot load module HMCCU -
Und da es um "nur" 5-7 Wandthermostate geht es nur die bleiben, dachte ich ist es so wie ich es gerade vor habe am einfachsten.
Na das wird nicht gehen. set ist ein FHEM Befehl der ein Device erwartet. Du hast kein Device. Du willst einen HTTP String senden. Im einfachsten Fall mit einem Linux Kommandotool. wget zum Beispiel.
Ungetestet und ohne genaue Ahnung würde ich sagen
define tempcheck notify Badezimmer.unten.Thermostat:temperature.* "wget http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject(\"CUxD.CUX9002001:1.SET_TEMPERATURE\").State(\"$EVTPART1\")"
Warum der wget Befehl in "" und nicht als Perl system Aufruf? Ganz einfach. Alle Tools ausserhalb von FHEM blockieren FHEM. Das kann bis zu 3 Minuten dauern und das wäre sehr schlecht. Ein Kommandotool in " " aufgerufen tut dies nicht, dafür haben die FHEM Entwickler eine eigene Routine geschaffen.
Ich habe vorsichtshalber die " innerhalb des wgets noch maskiert. Weiß nicht ob der Befehl an sich in der url_encode aufgerufen wird.
Schade es scheint nicht zu funktionieren..
Der Notify wird zwar aktualisiert aber der Wert in der CCU nicht geändert.
Dann probiere das erstmal direkt in der Linux shell. Versuche den richtigen wget Befehl zu finden
Das sieht nach den ersten Versuchen so aus
Server:~# wget 192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("25.5")
-bash: Syntaxfehler beim unerwarteten Wort `('
Ich probiere es weiter sobald ich wieder zuhause bin.
und wenn du es so machst
wget '192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("25.5")'
Das funktioniert... :)
Wenn ich nun das Einstelle.. Funktioniert es und der Wert State wird übertragen...
define tempcheck notify Badezimmer.unten.Thermostat:temperature.* "wget '192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("25.5")'"
Und das im LogFile
--2017-09-11 17:17:33-- http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject(%22CUxD.CUX9002001:1.SET_TEMPERATURE%22).State(%2229.5%22)
Connecting to 192.168.178.3:8181... connected.
HTTP request sent, awaiting response... 200 OK
Length: 147 [text/xml]
Saving to: `alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("29.5")'
0K 100% 4.15M=0s
2017-09-11 17:17:33 (4.15 MB/s) - `alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("29.5")' saved [147/147]
Wenn ich aber State in $EVTPART1 änder zeigt mir das Gerät in der CCU 0 an.
define tempcheck notify Badezimmer.unten.Thermostat:temperature.* "wget '192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("$EVTPART1")'"
Und das im LogFile
--2017-09-11 17:29:07-- http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject(%22CUxD.CUX9002001:1.SET_TEMPERATURE%22).State(%22$EVTPART1%22)
Connecting to 192.168.178.3:8181... connected.
HTTP request sent, awaiting response... 200 OK
Length: 147 [text/xml]
Saving to: `alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("$EVTPART1").3'
0K 100% 3.82M=0s
2017-09-11 17:29:07 (3.82 MB/s) - `alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("$EVTPART1").3' saved [147/147]
Wenn Du eine Variable in Perl in ' ' einschließt wird sie als String übertragen und nicht der Wert der Variable.
Es wird also $EVTPART1 genau so übertragen und nicht der Wert.
Nun suche Mal im Forum wie andere dieses Problem gelöst haben. Wget Variable sollte reichen als Suchbegriffe
define tempcheck notify Badezimmer.unten.Thermostat:temperature.* "wget '192.168.178.3:8181/alchy.exe\?sagt=dom.GetObject\("CUxD.CUX9002001:1.SET_TEMPERATURE"\).State\("$EVTPART1"\)'"
Bisschen probieren halt. Schau mal das hier
Das brachte leider auch keinen Erfolg.. :(
Man Schmello, heulen kannste bei der Mama. Probiere bitte bisschen rum, kann sein das Du da was escapen musst. Suche im Web oder Forum.
Du schaffst Das. *lieb in den Arm nehm*
:D:D Kein Problem... wollte nur sagen das es nicht geht mehr nicht...
Ob der Satz nun sein musste... egal... Trotzdem vielen dank für die hilfe..
Ja manchmal muss so ein Satz sein. Glaub mir.
Eventuell komme ich nachher mal dazu auf meinem Testsystem zu probieren. Bis dahin bitte suchen und probieren.
;D Ich suche und Probiere auch noch ein weiter..
Wenn du zu deinem Testsystem kommen würdest wäre natürlich super...
define tempcheck notify Badezimmer.unten.Thermostat:temperature.* { GetFileFromURL("http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD.CUX9002001:1.SET_TEMPERATURE").State("$EVTPART1")"); }
Probier das Mal bitte
Beim Anlegen bekomme ich das angezeigt
syntax error at (eval 373) line 1, near ""http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject("CUxD"
Missing right curly or square bracket at (eval 373) line 2, at end of line
syntax error at (eval 373) line 2, at EOF
Unknown command }, try help.
Wenn ich es so anlege
"wget http://192.168.178.3:8181/alchy.exe\?sagt=dom.GetObject\("CUxD.CUX9002001:1.SET_TEMPERATURE"\).State\("$EVTPART1"\)"
Sieht das im Log recht gut aus finde ich.. Die Temperaturwerte werden übernommen.
Doch leider nicht in der CCU
--2017-09-11 19:57:59-- http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject(CUxD.CUX9002001:1.SET_TEMPERATURE).State(20.1)
Connecting to 192.168.178.3:8181... connected.
HTTP request sent, awaiting response... 200 OK
Length: 146 [text/xml]
Saving to: `alchy.exe?sagt=dom.GetObject(CUxD.CUX9002001:1.SET_TEMPERATURE).State(20.1)'
0K 100% 3.49M=0s
2017-09-11 19:57:59 (3.49 MB/s) - `alchy.exe?sagt=dom.GetObject(CUxD.CUX9002001:1.SET_TEMPERATURE).State(20.1)' saved [146/146]
Ich sehe den Fehler. Er nimmt uns die " innerhalb des wgets weg aber er soll sie ja encodieren
"wget http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject(\"CUxD.CUX9002001:1.SET_TEMPERATURE\").State(\"$EVTPART1\")"
Entweder so oder da wo jetzt vor den " die \ stehen machst an statt \ noch ein "
Also ""
Aber erstmal so wie oben testen
erst einmal danke für deine Geduld :)
Bei beiden möglichkeiten bekomme ich diesen Fehler im Log
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
sh: 1: Syntax error: "(" unexpected
"wget http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject\(\"CUxD.CUX9002001:1.SET_TEMPERATURE\"\).State\(\"$EVTPART1\"\)"
Getestet und für gut befunden
Einen riesen riesen Dank... :) Es geht...
Supi. Wir hatten immer nur zu wenig escaped, das war alles. Daher meckerte er die ( und ) noch an.
Na dann mal weiter machen. ;D
Grüße
Es funktioniert weiterhin alles wunderbar...
Nur wird jedes Ausführen eines des Notify ins Logfile geschrieben.. Und dadurch gehen viele andere sachen unter :)
Wie bekomme ich das ausgeschaltet?
Muss ich bei jedem Notify ein Verbose-X setzen :)?
Gib Mal bitte ein aktuelles list eines Notify
Hallo und entschuldige die späte Antwort... :)
Was genau meinst du mit List? Muss ich dazu irgendetwas eingeben ???
Oder reicht dir auch ein Screenshot?
Zitat von: schmello am 19 Dezember 2017, 09:25:56
Hallo und entschuldige die späte Antwort... :)
Was genau meinst du mit List? Muss ich dazu irgendetwas eingeben ???
Oder reicht dir auch ein Screenshot?
list NOTIFY_NAME
EDIT: NOTIFY_NAME natürlich durch den Namen deines Notify ersetzen ;)
oben in das WebCmd von fhem, Enter und die Ausgabe dann per copy&paste hier posten.
Und dazu dann die "Code-Tags" (das '#' im "Menü") verwenden...
Gruß, Joachim
Danke dir für die Info...
Internals:
DEF Kuche.Thermostat:temperature.* "wget http://192.168.178.3:8181/alchy.exe?sagt=dom.GetObject\(\"CUxD.CUX9002002:1.SET_TEMPERATURE\"\).State\(\"$EVTPART1\"\)"
NAME Kuche.Temp.CCU
NOTIFYDEV Kuche.Thermostat
NR 151
NTFY_ORDER 50-Kuche.Temp.CCU
REGEXP Kuche.Thermostat:temperature.*
STATE 2017-12-19 12:39:31
TYPE notify
READINGS:
2017-11-21 09:02:18 state active
Attributes:
room Kuche
verbose 0