Hallo zusammen.
Ich baue gerade eine Schnittstelle von MyCroft (OpenSource „Alexa-Alternative“ ) zu IP-Symcon und versuche möglichst die offizielle Symcon API zu verwenden.
Da MyCroft auf Python aufbaut und ich relativ viel mit der JSONRPC API kommuniziere habe ich das gleich als Python Modul ausgelagert, falls es noch jemand außer mir nutzen möchte/kann.
Damit kann aus Python heraus auf IP-Symcon per offizieller API zugegriffen werden.
So wird es verwendet:
pip install requests
pip install symcon
Weitere Details sind hier:
Beispiel:
import symcon
connection = symcon.Symcon("symcon.local",3777,"http","token","123456789")
print("symcon dir: " + connection.execCommand("IPS_GetKernelDir"))
>> symcon dir: /var/lib/symcon/
Gruß
Thorsten
Sehr gerne :).
Ich werde das Python Symcon Modul die nächste Zeit voraussichtlich immer wieder um Funktionen erweitern, je nachdem was ich für die MyCroft Integration noch so brauche.
Das ist mal genau das, was ich exakt jetzt brauche und mir einen Haufen Arbeit spart. Kudos!
Gruß,
Jos
Das freut mich sehr.
Ich kam noch nicht dazu mehr Funktionen einzubauen, aber wenn dir was auf oder einfällt, dann sag gerne Bescheid.
Gruß
Thorsten
Gesendet von meinem MAR-LX1A mit Tapatalk
thorsten9:
import symcon
connection = symcon.Symcon("symcon.local",3777,"http","token","123456789")
print("symcon dir: " + connection.execCommand("IPS_GetKernelDir"))
>> symcon dir: /var/lib/symcon/
Hallo Community,
hallo @thorsten9 ,
API Access funktioniert generell. However, ich bekomme beim obigen Beispiel (natürlich mit meinen Zugangsdaten) folgende Fehlermeldung:
Unexpected error occured on calling ip-symcon api
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-31-a6b066bb1977> in <module>
9
10
---> 11 print("symcon dir: " + connection.execCommand("IPS_GetKernelDir"))
~\Anaconda3\lib\site-packages\symcon\__init__.py in execCommand(self, cmd)
73 "id": 0
74 }
---> 75 return self.send(payload)
76
77
~\Anaconda3\lib\site-packages\symcon\__init__.py in send(self, payload)
45 self.baseurl, data=json.dumps(payload), headers=self.headers)
46 if(r.status_code != 200):
---> 47 raise ValueError("ip-symcon api did not respond with http okay code 200")
48
49 except:
ValueError: ip-symcon api did not respond with http okay code 200
Ich habe auch andere Beispiele von @thorsten9 versucht, bekomme jedoch immer die gleiche Meldung.
Hat jemand eine Idee wo ich suchen könnte um das Problem zu eleminieren?
Danke und Gruß
Dirk
OK, ich habe das Problem gelöst. Die Authentisierung an IPS für die API war doch nicht korrekt.
Wichtig ist, dass sowohl Benutzernamen und Passwort zuvor encoded werden. Das kann man hier machen unter „URL Encoding Functions“.
Hier der entscheidende Hinweis:
Hallo IPS-Community!
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 Erken…
Gruss Dirk
1 „Gefällt mir“
Hallo @syncmaster .
Dann komme ich mit hilfreichen Tipps wohl etwas zu spät ;-).
Gut, dass es jetzt bei dir funktioniert.
1 „Gefällt mir“