API / WebSocket Verbindung zum Miniserver Gen2

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Frank85
    Smart Home'r
    • 30.01.2023
    • 43

    #1

    API / WebSocket Verbindung zum Miniserver Gen2

    Guten Abend zusammen,

    ich versuche nun schon seit ein paar Tagen via API / WebSocket auf den Miniserver zuzugreifen. Leider bisher ohne Erfolg. Das Forum oder andere Stellen im Internet schweigen sich auch dazu aus, wie das am besten geht, oder ich habe bis dato einfach falsch gesucht.

    Gefunden habe ich das offizielle Dokument von Loxone, aber das hat mich auch nicht weiter nach vorne gebracht.



    Zudem ein guten Ansatz aus dem Forum, aber da bekomme ich selbst auch immer ein HTTP 401 Unauthorized.

    Hallo Zusammen, ich habe endlich mal wieder etwas Zeit gefunden an meinen Projekt weiterzumachen. Nun stellte ich fest, dass Loxone in den kommenden Versionen


    Hatte versucht das Skript auch mal anzupassen, aber wie gesagt, ich sehe entweder den Wald vor lauter Bäumen nicht, oder in meinem Kopf ist es einfach dunkel ;-)

    Code:
    import urllib.request
    from hashlib import sha1
    import hmac
    import json
    import codecs
    
    base_url="https://<adresseDesMiniservers>"
    pw = "<benutzerkennwort>"
    user ="<benutzer>"
    uuid="<uuid des Benutzers>"
    
    ### STEP1: acquire Key and salt
    r = urllib.request.urlopen(base_url+"/jdev/sys/getkey2/<benutzer>")
    jm = json.loads(r.read())
    key=jm['LL']['value']['key']
    salt=codecs.decode(jm['LL']['value']['salt'],'hex')
    
    print("key",key)
    print("key_hex",codecs.decode(key,'hex'))
    print("salt",salt)
    print("salt_hex",salt)
    
    ### STEP2: generate PwHash
    hash=pw+":"+codecs.decode(salt)
    print("to be hashed",hash)
    hashed = hmac.new(codecs.decode(key,'hex'), hash.encode(), sha1)
    hashed_upp=str.upper(hashed.hexdigest())
    print("PWhash finished :",hashed_upp)
    
    ### STEP3: generate USER:PwHash
    user_pwhash="<benutzer>"+":"+hashed_upp
    hashed = hmac.new(codecs.decode(key,'hex'), user_pwhash.encode(), sha1)
    hashed_hex=hashed.hexdigest()
    print("user:pwhash HASH: finished :",hashed_hex)
    
    ### STEP4: Get Token URL
    build_url="/jdev/sys/gettoken/"+hashed_hex+"/"+user+"/2/"+uuid+"/pypy"
    url=base_url+build_url
    print("URL:",url)
    r = urllib.request.urlopen(url)
    jm = json.loads(r.read())
    print(jm)​
    Vielleicht kann mich ja jemand auf den richtigen Weg schubsen?!

    Viele Grüße & besten Dank
    Frank
  • nufke
    Smart Home'r
    • 10.11.2018
    • 62

    #2
    My recommendation is not to develop your own websocket communication, instead you better use an existing library. There are different libraries available to access a Miniserver (supporting Gen1 and Gen2), e.g. LxCommunitator or node-lox-ws-api.
    Alternatively, you can use things like ioBroker or NodeRed which already have dedicated nodes or plugins to establish an interface to a Loxone Miniserver.​

    Kommentar

    Lädt...