Dies ist mein erster Beitrag in diesem Forum, welches mir bei IPS schon ziemlich häufig weitergeholfen hat. Gestern habe ich JSON-RPC für mich entdeckt und nutze es jetzt im vollen Umfang. Hierzu verwende ich u.a. cURL (hier zu finden) um per Knopfdruck eine von vielen Lampen im Raum per Hotkey (Logitech G-Tasten) einzuschalten. Ich habe sehr lange gebraucht, um die richtige Syntax zu finden und bin selbst hier im Forum nicht ganz fündig geworden. Von daher hier meine Erkenntnisse, die cURL-Aufrufe mit den Beispieldaten - sie funktionieren =)
das mit dem Encoden von Benutzername und Passwort ist ein entscheidender Punkt, welcher in der Doku bisher nicht berücksichtigt ist. Für erfahrende Programmierer voraussichtlich eine Selbstverständlichkeit, für weniger erfahrene User eine harte Nuss zum Knacken.
Eventuell möchtet Ihr den Hinweis auf das encoden in der Doku noch ergänzen?
Das Passwort muss, ebenso wie der Benutzername, URL encoded sein bei HTTP.
In der Doku steht auch bei Benutzername (Email) das @ durch %40 ersetzt werden muss.
Für das Passwort fehlt der Hinweis.
Wenn man die RPC Klasse von Symcon benutzt, muss nur das Passwort urlencoded sein. Der Benutzername nicht.
Michael
Ich möchte gerne auf einer HTML-Seite, die auf einem anderen Server als IP-Symcon läuft, Variablen aus IP-Symcon anzeigen.
Die in der Doku beschriebene Variante JSON-RPC über PHP funktioniert bei mir leider nicht. Es kommt immer der Fehler HTTP Error 500.
Über die Kommandozeile funktioniert der Aufruf über CURL. Aber kann ich diesen Befehl auch in meine HTML-Seite einbinden? Wie kann ich dabei vorgehen?
Warning: file_get_contents(http://MeineDomain:3777/api/): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized
in /usr/share/symcon/scripts/__rpc.inc.php on line 89
Server Problem: Unable to connect
Die URL in Gänze kopiert (echo „http://“.$User.„:“.$Pass.„@“.$URL.„:3777/api/“ und im Browser eingetragen zeigt aber folgendes:
{"API":"0.1","IP-Symcon":"6.3","JSON-RPC":"2.0"}
Die Daten stimmen also offenbar, im IP-Symcon aber die Fehlermeldung…
Woran könnte das liegen?
Habe jetzt das „urlencode“ für den User entfernt - funktioniert aber leider trotzdem nicht…
Antwort:
arning: file_get_contents(http://Meine Domain:3777/api/): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized
in /usr/share/symcon/scripts/__rpc.inc.php on line 89
Server Problem: Unable to connect
Im Browser funktioniert es weiterhin - obwohl ja da zwei „@“ dann drin sind…
…habe noch mal etwas anderes probiert…
Wenn der Wohnwagen neben dem Haus steht bucht der Raspberry Pi sich in mein WLAN ein und hat damit eine „interne“ IP, ansonsten ist der „normale“ Weg ein LTE-Router.
Vom Browser funktionieren beide Variante was Webfront und Konsole angeht.
Aus dem Skript heraus funktioniert aber weder die DynDNS Anbindung über LTE, noch die direkte IP über das WLAN.
@Nall-chan : Das " fehlt nur hier im Forum (Copy/Paste/Edit-Fehler ), aber danke für den Hinweis
Unabhängig davon warum es nicht geht.
Du willst das extern nur über HTTPS über Symcon Connect benutzen und nicht über http. Sonst sind deine Zugangsdaten lesbar.
Wie gesagt, so wie oben nur ohne das urlencode beim Benutzer, geht es bei mir.
Tippfehler beim Benutzer/Passwort?
Michael
wenn den erstellten String so in den Browser kopiere, dann funktioniert es, von daher gehe ich davon aus dass die Zugangsdaten korrekt sind…
Da http schon nicht funktioniert habe ich mich bisher noch nicht um https gekümmert. Die Fehlermeldung lautet dann:
Warning: file_get_contents(): SSL: Erfolg in /usr/share/symcon/scripts/__rpc.inc.php on line 89
Warning: file_get_contents(): Failed to enable crypto in /usr/share/symcon/scripts/__rpc.inc.php on line 89
Warning: file_get_contents(https://MeineDomain:3777/api/): failed to open stream: operation failed in /usr/share/symcon/scripts/__rpc.inc.php on line 89
Server Problem: Unable to connect
Beschränken wir uns also zunächst einmal auf den Zugriff über das interne Netz und http Ein positive Rückmeldung von Sys_Ping zeigt mir das der Raspberry Pi erreichbar ist, warum kommt dann aus der Funkion ein „Unable to connect“?
Warum funktioniert dann ein „http://InterneIP:3777/console/“ aus dem Browser heraus? Auch der Zugriff per SSH auf den Raspberry Pi funktioniert doch einwandfrei?