Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von klassisch » 27.05.2017, 04:34

Hallo,
per CUxD liefere ich von meinen WeMos Daten via Port 8181 von meinen WeMos an die CCU. Funktioniert so weit.
Allerdings habe ich jetzt festgestellt, daß manchmal die Daten von der CCU anscheinend nicht vereinnahmt werden.

Beispiel: Die Payload (ohne http-prä und - suffix) lautet:

Code: Alles auswählen

/xy.exe?ant1=dom.GetObject('CUxD.CUX9002008:1.SET_TEMPERATURE').State('24.47')&ant2=dom.GetObject('CUxD.CUX9002008:1.SET_HUMIDITY').State('37.42')&ant3=dom.GetObject('CUxD.CUX9000008:1.SET_STATE').State('1018.52')&ant3=dom.GetObject('CUxD.CUX9000348:1.SET_STATE').State('0')
Während in der CCU die ersten 3 Werte (Temp, Feuchte und Luftdruck) mit dem aktuellen timestamp versehen sind, ist der 4. Wert (Helligkeit) mehrere Stunden alt.
Da sich die Helligkeit nachts nicht mehr ändert, gibt es keine Einzelübertragung der Helligkeit mehr (= kürzerer String) und nur noch die zykische Sammelübertragung aller Werte (alle 10 min.) mit dem o.g. String. Aber es scheint so, daß die Helligkeit so gar nicht in der CCU ankommt.
Jetzt wird bei der Übertragung der Helligkeit eine Stringlänge von 255 Zeichen überschritten.
Ist das der Grund? Sind Skriptzeilen in Ihrer Länge begrenzt?

Edit: Nein, die Stringlänge scheint nicht das Problem zu sein.
Mit diesem String

Code: Alles auswählen

/xy.exe?ant1=dom.GetObject('CUxD.CUX9002008:1.SET_TEMPERATURE').State('24.06')&ant2=dom.GetObject('CUxD.CUX9002008:1.SET_HUMIDITY').State('37.41')&ant3=dom.GetObject('CUxD.CUX9000008:1.SET_STATE').State('1018.86')&ant3=dom.GetObject('CUxD.CUX9000348:1.SET_STATE').State('8')
wurden Daten übertragen.
Ich hatte zwischenzeitlich den unteren Wert im CUxD Universal Wrapper Device von 0.0 auf -1.0 gestellt. Vielleicht liegt es daran? Kann ich frühestens in der nächsten Nacht testen.

BadenPower

Re: Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von BadenPower » 27.05.2017, 19:36

Dein Datenpunkt erwartet einen real-Wert.

Dass es mit der 8 funktioniert ist ein Glücksfall, da er durch die automatische Typunwandlung zufälligerweise zu 8.0 wird. Bei 0 eben nicht.

Daher solltest Du immer den korrekten Variabletyp benutzen, also 8.0 bzw. 0.0.

Bei der http-Zeile ist mir noch aufgefallen, dass Du zweimal ant3 benutzt. Dies ist für die Abarbeitung auf der CCU egal, aber Du kannst dann den Http-Rückgabewert nicht richtig auslesen.
.

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von klassisch » 27.05.2017, 21:10

Super, herzlichen Dank für Deine Hilfe und Deine Hinweise! Habe die CCU Skriptsparche nicht wirklich durchschaut und arbeite da mehr nach dem "Papageienprinzip". Also eher sparsam und dann durch nachplappern.
BadenPower hat geschrieben:Dein Datenpunkt erwartet einen real-Wert.
Habe gerade nochmals nachgesachaut, die Helligkeit kommt vom Sensor als ganzzahliger vorzeichenfreier 16 bit Wert und wird als "unsigned int" behandelt. Die wird wohl nie Nachkommastellen haben. Die automatische Konvertierung scheint also zu funktionieren.
Habe auch nochmal in der History nachgeschaut. Irgendwann hat die Datenübertragung heute Nacht auch bei der 0 funktioniert, wahrscheinlich nachdem ich beim CUxD den Anfangswert auf -1 gesetzt habe. Sonst abe ich zumindest wissentlich und willentlich nicts geändert. Werde das bei nächster Gelegenheit (dunkel und ich bin wach) mal gegenprüfen, weil ich auch dieses Verhalten nicht verstehen würde.
Leider macht der CUxD aus meiner Grenzwert-Eingabe automatisch ein float mit 2 Nachkommastellen.
BadenPower hat geschrieben:Daher solltest Du immer den korrekten Variabletyp benutzen, also 8.0 bzw. 0.0.
Wenn die Konvertierung unzuverlässig oder anfällig ist, kann ich das WeMos Programm auch etwas modifizieren, so daß immer ein float im String erscheint.
BadenPower hat geschrieben:Bei der http-Zeile ist mir noch aufgefallen, dass Du zweimal ant3 benutzt. Dies ist für die Abarbeitung auf der CCU egal, aber Du kannst dann den Http-Rückgabewert nicht richtig auslesen.
Das habe ich jetzt gar nicht verstanden. Weil ich die ganze Rückgabesache einfach nur abgeschrieben habe. Da werden die "\n" gezählt und bei der "7" (7te Zeile?) dann die Uhrzeit ausgelesen. Die Ergebnisse scheinen plausibel. Mehr wird da aber nicht gemacht? Sollte da mehr gemacht oder noch etwas anderes werden? Wäre gut zu wissen, könnte ja sein, daß die CCU bei der nächsten SW wieder etwas strenger wird und dann wieder etwas nicht funktioniert.

BadenPower

Re: Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von BadenPower » 27.05.2017, 21:31

klassisch hat geschrieben:
BadenPower hat geschrieben:Bei der http-Zeile ist mir noch aufgefallen, dass Du zweimal ant3 benutzt. Dies ist für die Abarbeitung auf der CCU egal, aber Du kannst dann den Http-Rückgabewert nicht richtig auslesen.
Das habe ich jetzt gar nicht verstanden.
Gib einmal Deine http-Zeile in einen Browser ein.

Als Rückgabe erhälst Du eine XML-Struktur.

Noch ein Beispiel:

Code: Alles auswählen

/regaget.exe?answer1=dom.GetObject(950)&answer2=dom.GetObject(40)

Code: Alles auswählen

<xml>
  <exec>/regaget.exe</exec>
  <sessionId></sessionId>
  <httpUserAgent>User-Agent: Mozilla/3.0 (compatible; HM-Control)
  </httpUserAgent>
  <answer1>SYS-CCU-Reboot</answer1>
  <answer2>Alarmmeldungen</answer2>
</xml>
Und bei Dir steht eben zweimal "ant3", was die Auswertung der http-Abfrage erschwert, wenn Du diese nutzen möchtest/würdest.
.

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von klassisch » 27.05.2017, 22:19

Ja, vielen Dank, habe jetzt mal an Deinem Beispiel etwas gespielt und gesehen, daß dann eine Zeile fehlt, wenn die "antwort" gleich benannt ist.
Wahrscheinlich ist dann die bei mir derzeit implementierte Methode zum Auslesen der Rückmeldezeiten durch Zeilenzählen komplett daneben.
Außer Zeit entgegennehmen werte ich derzeit nichts aus.

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von klassisch » 27.05.2017, 23:51

Immer noch unklar.
Habe jetzt das WeMos-Programm auf Stand gebracht.
Gesendet wird nun:

Code: Alles auswählen

GET /xy.exe?ant1=dom.GetObject('CUxD.CUX9002008:1.SET_TEMPERATURE').State('28.94')&ant2=dom.GetObject('CUxD.CUX9002008:1.SET_HUMIDITY').State('35.10')&ant3=dom.GetObject('CUxD.CUX9000008:1.SET_STATE').State('1018.00')&ant4=dom.GetObject('CUxD.CUX9000348:1.SET_STATE').State('0.0') HTTP/1.1
Host: 192.168.1.24:8181
Connection: close

Die CCU antwortet:

Code: Alles auswählen

HTTP/1.1 200 OK
Server: ise GmbH HTTP-Server v2.0
Accept-Ranges: bytes
Cache-Control: no-store, no-cache
Content-Type: text/xml
Content-Length: 157
Date: Sat, 27 May 2017 23:39:35 GMT
Connection: close

<xml><exec>/xy.exe</exec><sessionId></sessionId><httpUserAgent></httpUserAgent><ant1>false</ant1><ant2>false</ant2><ant3>false</ant3><ant4>false</ant4></xml>
Die Helligkeit mit dem Wert 0 scheint nicht übertragen zu werden. Das WebUI der CCU zeigt zwar 0, aber mit einer älteren Uhrzeit.

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von klassisch » 28.05.2017, 04:26

Habe jetzt noch einige Eperimente mit dem Browser gemacht. Es scheint so zu sein, daß nur Änderungen übernommen werden. Das widerspricht meiner Interpretation der CUxD Beschreibung und ich werde mal dort nachfragen.

Dennoch gibt es in der Kommunikation mit den WeMos Kommandos Auffälligkeiten. Die Uhrzeit scheint nicht zuverlässig von der CCU zurück zum WeMos übertragen zu werden. Wie kann ich hier weiter suchen?

BadenPower

Re: Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von BadenPower » 28.05.2017, 13:19

klassisch hat geschrieben:

Code: Alles auswählen

<xml><exec>/xy.exe</exec><sessionId></sessionId><httpUserAgent></httpUserAgent><ant1>false</ant1><ant2>false</ant2><ant3>false</ant3><ant4>false</ant4></xml>
Der Response ist nicht schlüssig und wirft Fragen auf.

.State() sollte beim Setzen eines Datenpunktwertes im Erfolgsfall "true" zurückgeben und nicht "false".
.

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Skriptzeilenlänge bei Port 8181 via CUxD begrenzt?

Beitrag von klassisch » 28.05.2017, 13:49

Ja, so etwas hätte ich erwartet. Gibt es irgendein Logfile, wo man nachschauen könnte?

Gesendet von meinem ZTE A2016 mit Tapatalk

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“