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 ?
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 (//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.
OhHa... da glänze ich mit gesunden Halb(Kein)wissen.
Wenn ich
http://meine-IP:8083/fhem?cmd=jsonlist&XHR=1 (//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....
> 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 (//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.
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
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.
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.
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.