FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TimoD am 26 Januar 2023, 15:17:56

Titel: externes python Skript einlesen / aufrufen / einbinden subProcess in py
Beitrag von: TimoD am 26 Januar 2023, 15:17:56
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 (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
Titel: Antw:externes python Skript einlesen / aufrufen / einbinden subProcess in py
Beitrag von: Otto123 am 26 Januar 2023, 15:46:16
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
Titel: Antw:externes python Skript einlesen / aufrufen / einbinden subProcess in py
Beitrag von: TimoD am 27 Januar 2023, 08:26:01
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
Titel: Antw:externes python Skript einlesen / aufrufen / einbinden subProcess in py
Beitrag von: Otto123 am 27 Januar 2023, 09:02:08
Moin Timo,

naja ich habe meine "Ermittlungen" dazu mal in einem Artikel  (https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html)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