PHP und socat - aktuelle Werte ermitteln

Begonnen von kud, 21 April 2013, 11:34:17

Vorheriges Thema - Nächstes Thema

kud

Die Frage habe ich schon mal bei den "Anfängern" gestellt, glaube aber hier besser zu liegen.
Kurz zum Thema was ich mit socat  machen will.
Ich habe eine eigene Oberfläche gebastelt.
Dazu läuft auf dem RasPi Apache und PhP.
Optimiert für Touch und mit meinem Note2 toll zu bedienen.
Bisher habe ich immer die letzte Zeile der Logfiles ausgelesen und dargestellt.
Nun war das Ganze noch zu statisch und gehe jetzt dazu über mittels Ajax-Technologie die veränderten Werte auch gleich wieder darzustellen. Den Beitrag über socat habe ich nur zufällig in einem Tread zu RSS mitgelesen und die Geschichte mit socat fand ich Klasse.
Ein Befehl und ich habe den aktuellen Status aller "Geräte".
Ich werde jetzt bei jeder Änderung der Weboberfläche den eingelesen String auswerten und die Werte aktualisieren.
Die Werte im String habe ich.
$werteausgelesen = shell_exec('echo "list * state"|socat - TCP:127.0.0.1:7072');
Das auftrieseln der einzelnen Werte versuche ich jetzt mit String-Funktionen umzusetzen.
Kennt vielleicht Jemand eine Möglichkeit ein Array direkt zu befüllen ohne Umweg ?

Johannes

Ich verstehe nicht ganz, warum du den Umweg über exec und Telnet wählst.
Du kannst die aktuellen Readings über den jsonlist oder xmllist Befehl direkt abrufen und hast ein Format, dass sich parsen lässt.
Ich verwende bei mir z.B. jsonlist mit angehängtem XHR=1 Parameter, und bekomme eine brauchbare, parsbare Struktur:

http://192.168.0.111:8083/fhem?cmd=jsonlist&XHR=1

Dieser Aufruf bildet einen Hauptbestandteil des Chartingfrontends, da ich über ihn fast alle Device-Daten beziehe.
Das ganze dann in einem bestimmten Intervall per Ajax angefragt, und man bekommt regelmäßig frische Daten.

kud

OhHa... da glänze ich mit gesunden Halb(Kein)wissen.
Wenn ich
http://meine-IP:8083/fhem?cmd=jsonlist&XHR=1
 im Browser aufrufe kommt gar nichts.
Auch sagt mir das Thema jsonlist bisher noch gar nichts.
Die Daten in einem bestimmten Interval brauche ich nicht. Nur wenn ich zB. das Gartenwasser anmache soll auch gleich der Status (Wert der Variablen)  geändert werden.
Ich schaue mal was Google zu Json und FHEM bringt....

rudolfkoenig

>  im Browser aufrufe kommt gar nichts.

Bei mir schon :)

>  Auch sagt mir das Thema jsonlist bisher noch gar nichts.

Als FHEM Entwickler sollte man wenigstens die Suchfunktion beherrschen: http://fhem.de/commandref.html#JsonList

>  Das ganze dann in einem bestimmten Intervall per Ajax angefragt, und man bekommt regelmäßig frische Daten.

Noch eleganter ist eine TCP Verbindung mit inform zu versehen, dann kriegt man alle Aenderungen sofort mit. Das gleiche klappt auch ueber HTTP, wird in FHEMWEB mit longpoll aktiviert.

kud

Natürlich kam im Browser was... wenn man die richtige IP angibt ;-(((
Jetzt schaue ich mir mal Json und PHP an.

Noch eleganter ist eine TCP Verbindung mit inform zu versehen, dann kriegt man alle Aenderungen sofort mit. Das gleiche klappt auch ueber HTTP, wird in FHEMWEB mit longpoll aktiviert.

Das sind schon wieder bömische Dörfer.

Könnte denn ein Entwickler (denn ich bin nun wirklich Keiner ) mal eine gute Vorgehensweise anreißen.

Mein Ansatz war bisher:
1. Beim Aufruf der Html-Seite alle Daten mit PHP zu sammeln und in Variablen einpacken.
2. Mit PHP die Html-Seiten aufbauen und anzeigen.
3. Bei einer Änderung der Form mit action einen FHEM-Befehl abzusetzen und mit onsubmit über Funtionen in Javascript (via Ajax-PhP) die neuen Werte darzustellen.

Wie schon gesagt habe ich bisher die Daten aus der letzten Zeile der Logdatei herausgezogen.
Danke und Gruss
Kai-Uwe  







Johannes

Zitat von: rudolfkoenig schrieb am So, 21 April 2013 13:01Noch eleganter ist eine TCP Verbindung mit inform zu versehen, dann kriegt man alle Aenderungen sofort mit. Das gleiche klappt auch ueber HTTP, wird in FHEMWEB mit longpoll aktiviert.
Hallo,

Gibt es dazu evtl. Beispiele oder eine etwas ausführlichere Doku ? Die commandref hält sich ziemlich bedeckt was die genaue Funktionsweise und Nutzung angeht.

Johannes

Zitat von: kud schrieb am So, 21 April 2013 14:34Könnte denn ein Entwickler (denn ich bin nun wirklich Keiner ) mal eine gute Vorgehensweise anreißen.

Mein Ansatz war bisher:
1. Beim Aufruf der Html-Seite alle Daten mit PHP zu sammeln und in Variablen einpacken.
2. Mit PHP die Html-Seiten aufbauen und anzeigen.
3. Bei einer Änderung der Form mit action einen FHEM-Befehl abzusetzen und mit onsubmit über Funtionen in Javascript (via Ajax-PhP) die neuen Werte darzustellen.

Wie schon gesagt habe ich bisher die Daten aus der letzten Zeile der Logdatei herausgezogen.
Danke und Gruss
Kai-Uwe  

zu 1. Bestehende (Web)Schnittstellen von FHEM nutzen.
zu 2. Das ist ziemlich alter und unschöner Stil (eine Sprache in einer anderen generieren und ausgeben). Sag doch nochmal genau, was du erreichen willst.

kud

Die Bilder im 1. Post sind nicht nur Bilder. Das Gebilde funktioniert auch!

Ich hatte nur das Problem, dass wenn ich zB. eine Temperatur geändert hatte zwar der Befehl umgehend von FHEM umgesetzt wurde, doch in meinem Webinterface noch der alte Desired-Wert drinstand. Oder wenn ein Schalterzustand sich geändert hatte die Änderung in FHEM und im Schalterbild sich änderten aber in den Variablen noch die alten Werte drinstanden.
Mit dem Ajax-Ansatz konnte ich schon einiges umsetzen aber das "datenholen" erschien mir zu umständlich.
Wie sich ja jetzt rausstellt war meine Vermutung richtig.