externes python Skript einlesen / aufrufen / einbinden subProcess in py

Begonnen von TimoD, 26 Januar 2023, 15:17:56

Vorheriges Thema - Nächstes Thema

TimoD

Ich stehe vor folgendem Problem:

Ich würde gerne folgendes Python Script in FHEM integrieren (bzw. die Ausgabe des Scriptes) in FHEM einlesen.
https://github.com/CJNE/pyporscheconnectapi
Das Script ist z.B. cli.py

Folgende zwei Optionen habe ich gefunden:

1. Aufruf über {qx(sudo python porschecli -e 'mail@mail.me' -p passw! list)}

-> Hier bekomme ich die Fehlermeldung "did you forget to declare "my @mail"? Egal wie ich den Abruf abändere mit "" '' ich bekomme immer den Fehler.

2. Abändern der cli.py, dass es eine Übergabe an FHEM gibt:


def fhem_set(value):
    #print "set " +  var + " " + value
    subprocess.call(['perl', '/opt/fhem/fhem.pl', '8083', 'set test ' + value])


Und Aufruf bei printf als:
    try:
        if args.command == "list":
            data = await client.getVehicles()
            print(json.dumps(data, indent=2))
            fhem_set(json.dumps(data, indent=2))


Leider klappt es nicht,

habe den Link zu fhem angepasst: /opt/fhem/fhem.pl & den Port auf 8083

Jetzt bekomme ich keinen Fehler mehr aber auch keinen Eingang in fhem / noch im Event Monitor

Vorab vielen Dank

Otto123

Hi,

bei qx() musst Du entweder das @ schützen -> \@ oder qx mit ' ' aufrufen {qx'sudo python porschecli -e mail@mail.me -p passw! list'}
BTW: Wenn Du bei dem Script wirklich sudo brauchst, läuft was falsch!

Dein subprocess.call(['perl', '/opt/fhem/fhem.pl', '8083', 'set test ' + value]) funktioniert nicht, da fhem.pl im client Modus nicht über Webport 8083 sondern über Telnetport 7072 spricht. Das könntest Du definieren.
Es gäbe auch ne Variante über Web Port https://wiki.fhem.de/wiki/CsrfToken-HowTo#Python
Es gibt auch zu Hauf python Bibliotheken die FHEM ansprechen.

Was macht denn das Script? Wäre es nicht besser, das Ding extern aufzurufen und die Daten nach FHEM zu schicken? Setzt Du MQTT ein? - dann hätte ich einen einfachen Vorschlag ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TimoD

Hallo Otto,
danke für deine Antwort. Ja im Moment bin ich auch bei MQTT gelandet. Sobald das "Progrämchen" fertig ist, werde ich es vorstellen :-)

Danke für deine Hilfe! (Cool, wäre wenn du auf deiner Homepage, für das einen Verweis hättest: "bei qx() musst Du entweder das @ schützen -> \@ oder qx mit ' ' aufrufen")

Grüße Timo

Otto123

Moin Timo,

naja ich habe meine "Ermittlungen" dazu mal in einem Artikel zusammengefasst.

Ich hätte ja für MQTT einen ganz profanen Ansatz: https://forum.fhem.de/index.php/topic,131799.0.html
was Du in deinem Fall dazu brauchst wäre eine Datei mit einer Zeile in der Art:
value="$(python porschecli -e 'mail@mail.me' -p passw! list)"damit wärst Du fertig und hättest nach Aufruf von meinem Script den Wert in FHEM in einem MQTT2_DEVICE

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz