Python Modul (pip) für IP-Symcon API

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 cool, danke!

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

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:

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“