FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: andies am 19 März 2017, 22:39:25

Titel: Python -> Perl und wo kann man schauen wie das geht?
Beitrag von: andies am 19 März 2017, 22:39:25
Guten Abend, ich bin (stolzer?) Besitzer eines speedports, das ich wegen wlan-to-go nicht in die wohl bessere Fritzbox tauschen will. Speedport ist nun total nervig, wenn man die Anruflisten holen will: man muss sich zuerst einloggen, dann dreimal klicken und erst dann sieht man die Liste mit den Anrufen. Auf https://github.com/stenub/wlan_switcher/blob/master/wlan_switcher.py (https://github.com/stenub/wlan_switcher/blob/master/wlan_switcher.py) hat sich jemand dankenswerterweise des Problems angenommen und dazu eine Python-Datei geschrieben, die aus dem Speedport diese Daten holt. Ich würde die gern in FHEM einsetzen.

Nun dachte ich mir, dass ich diesen Python-Code erst einmal auf das Minimum reduziere. Das habe ich geschafft, der Code steht hier:
#!/usr/bin/python3
#

import requests
import hashlib
import re
import sys
import json


# Extrahiere den Wert von _httoken aus der Website
def pagerequest(url, session):
    page = session.get(url)
    regex = re.compile('_httoken = (\d*);')
    httoken = re.findall(regex, page.text)[0]
    return httoken, session


def main():
    # Starte neue http-Session:
    with requests.Session() as s:
        url_router = 'http://192.168.2.1'
        passwd_router = 'XXXXXXX'
       
        httoken, s = pagerequest(url_router, s)
        page = s.post(url_router + '/data/Login.json', data={'password': hashlib.md5(bytes(passwd_router, 'utf-8')).hexdigest(), 'showpw': '0', 'httoken': httoken})
        httoken, s = pagerequest(url_router + '/html/content/overview/index.html?lang=de', s)

        page = s.get(url_router + '/data/PhoneCalls.json', params={"_tn": httoken}, headers={'Referer': url_router + '/html/content/overview/index.html?lang=de'})
        page_decoded = json.loads(page.content.decode('utf-8'))
        for i in page_decoded:
            if (i["varid"] == "addtakencalls") or (i["varid"] == "addmissedcalls"):
                for j in i["varvalue"]:
                    if (j["varid"] == "takencalls_duration") or (j["varid"] == "missedcalls_who"):
                        print(j["varid"], j["varvalue"])
                    else:
                        print(j["varid"], j["varvalue"], end=", ")
   

if __name__ == '__main__':
    main()
 

Jetzt könnte ich natürlich Python in Perl einbinden (ich kenne Perl bisher nicht). Kann mir vielleicht jemand einen Tipp geben, wie man das in Perl umsetzen/übersetzen kann? Ich bin auch bei Python ein Anfänger und mir sagen diese Bibliotheken recht wenig, also würde ich jetzt raten/googlen müssen, bis ich das alles kapiert habe. Vielleicht hat jemand eine bessere Idee?
Titel: Antw:Python -> Perl und wo kann man schauen wie das geht?
Beitrag von: KernSani am 19 März 2017, 23:24:51
wenn dieser code funktioniert und auf der Kommandozeile ein Ergebnis liefert, dann kannst du das python script aus FHEM aufrufen und das Ergebnis z.B. in einen dummy schreiben.
Als ersten test kannst du ja mal folgendes in die FHEM Kommandozeile tippen:

{qw("python <myPythonScript>")}

Wie man das am sinnvollsten macht und auswertet hängt ein bisschen davon ab, wie die Daten angeliefert werden und was du damit anstellen willst (Ich habe keine Fritzbox und keine Ahnung von Call-Listen etc... da gibt es sicher Leute, die das besser können)

Grüße,

Oli
Titel: Antw:Python -> Perl und wo kann man schauen wie das geht?
Beitrag von: marsill82 am 09 August 2017, 19:07:38
Hallo,
ich habe ein Ähnliches Problem, bin glaub ich aber einfach zu doof...
Ich habe ien Python Skript was von meiner Heizung Temperaturwerte ausliest und dann den entsprechenden FHEM dummy-Devices die entsprechenden Werte zuweist.
Das funktioniert soweit auch einwandfrei wenn ich das Skript auf dem raspberry "händisch" starte.
Ich will das Skript nun aber aus fhem heraus starten, bekomme das aber leider nicht hin.
Das Skript liegt unter /opt/fhem/python/status.py
Ich habe versucht mit der obigen Methode das Skript über die Kommandozeile zu starten, jedoch ohne Erfolg:
{qw("python /opt/fhem/python/status.py")}
Was mache ich falsch?
Titel: Antw:Python -> Perl und wo kann man schauen wie das geht?
Beitrag von: dev0 am 09 August 2017, 19:27:17
qx statt qw verwenden.