QR-Code / Key / Codierung

HMIP Sender und Empfänger der Serie Homematic IP

Moderator: Co-Administratoren

Antworten
dodd
Beiträge: 31
Registriert: 12.01.2013, 23:42

QR-Code / Key / Codierung

Beitrag von dodd » 10.02.2021, 20:17

Hallo zusammen,

ich würde gerne aus einem aus dem QR Code ausgelesenen Key wieder die aufgedruckte Darstellung generieren.
Einiges habe ich schon zusammenbekommen, allerdings scheitere ich am letzen Schritt.

Ich weiß, dass es folgende Zusammensetzung gibt:
Daimler hat geschrieben:
01.08.2017, 19:36
Im Klartext:
Key - 7ZRMN-96KET-56AWW-3UBKK-MAAWX8
SGTIN - 3014-F711-A000-00D3-C9BC-A028

gescannt:
EQ01SG3014F711A00000D3C98CA028DLKFFC52A9349BA2995CE0F6894A8A573A8

hier lässt sich die SKTIN / SN ja noch herausfiltern:
EQ01SG 3014F711A00000D3C98CA028 DLK FFC52A9349BA2995CE0F6894A8A573A8
Und mit dem hier verlinkten JavaScript habe ich es auch geschafft, den aufgedruckten Wert in den ausgelesenen Wert des QR Codes zu konvertieren:
hobbyquaker hat geschrieben:
23.01.2021, 19:07
Hier eine Javascript Funktion für das Konvertieren des Keys (kommt im Homematic Manager zum Einsatz, dort gibt es auch einen QR Scanner im HmIP-Anlern-Dialog), vielleicht hilfts euch ;-) https://github.com/hobbyquaker/homemati ... r.js#L4798
Ist zwar Base32, aber ein ungewöhnlicher Zeichenvorrat.
Ich würde es allerdings gerne umgekehrt schaffen. Also aus dem ausgelesenen Wert des QR Codes (Base16??) den aufgedruckten KEY (Base32??) konstruieren.

Wahrscheinlich ist es gar nicht so schwer. Aber meine bisherigen Versuche sind leider gescheitert.
Steckt jemand von euch tiefer in der Thematik und weiß, wie es geht?

emkay82
Beiträge: 2
Registriert: 21.07.2022, 21:29
System: CCU und Access Point
Danksagung erhalten: 2 Mal

Re: QR-Code / Key / Codierung

Beitrag von emkay82 » 02.08.2022, 22:48

Die Angaben in diesem und einem weiteren Thread (HIER) haben mich motiviert eine Lösung zu diesem Thema entwickeln. Da ich gerne ein Excel-Dokument zur Dokumentation meiner Homematic-Geräte nutzen möchte, sind die Funktionen in VBScript realisiert. Alle Interessierten finden das Ergebnis hier: https://github.com/emkay82/hm_baseconvert

Anm.: Ich bin kein beruflicher Anwendungsentwickler. Wenngleich das Script m.E. keinerlei Gefahrenpotential birgt, schließe ich dennoch jede Haftung für Schäden aus, die durch die Nutzung des Scriptes entstehen könnten. Die Nutzung des Scriptes erfolgt daher ausdrücklich auf eigene Gefahr.

BjoernS
Beiträge: 1
Registriert: 16.12.2022, 06:28
System: CCU
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: QR-Code / Key / Codierung

Beitrag von BjoernS » 16.12.2022, 06:46

emkay82 hat geschrieben:
02.08.2022, 22:48
Da ich gerne ein Excel-Dokument zur Dokumentation meiner Homematic-Geräte nutzen möchte, sind die Funktionen in VBScript realisiert. Alle Interessierten finden das Ergebnis hier: https://github.com/emkay82/hm_baseconvert
Danke fürs Teilen. Habe den Code als Vorlage genutzt und einen Konverter in Javascript geschrieben.

Live Demo:
https://lyl-freeman.github.io/HmIP-QR/HmIP-QR.html

Git:
https://github.com/lyl-freeman/HmIP-QR

sweber
Beiträge: 2
Registriert: 28.12.2022, 20:44
System: CCU

Re: QR-Code / Key / Codierung

Beitrag von sweber » 28.12.2022, 21:41

Hallo!

Ich bin mehr in Python unterwegs, und möchte daher auch meine Lösung präsentieren.
Ein Vorteil ist, dass Python nativ auch sehr große Zahlen wie den 256Bit langen Key hier nativ unterstützt.
Bei den meisten anderen Programmiersprachen muss man schauen, wie man mit diesen großen Zahlen umgeht.

Code: Alles auswählen

hmAlphabet = '0123456789ABCEFGHJKLMNPQRSTUWXYZ'

def hmToNum(hm):
    '''Converts HM key to integer number'''
    x = 0
    for i in hm:
        n = hmAlphabet.find(i)
        if n >= 0:
            x = x << 5 | hmAlphabet.find(i)
    return x

def numToHm(num):
    '''Converts integer number to HM key'''
    hmString = ''
    while (num > 0):
        idx = num & 0b11111
        num >>= 5
        hmString = hmAlphabet[idx] + hmString
        if len(hmString) in [6,12, 18,24]:
            hmString = '-'+hmString
    return hmString


qr='EQ01SG3014F711A00000D3C98CA028DLKFFC52A9349BA2995CE0F6894A8A573A8'

dlkPos = qr.find('DLK')
sgtin= qr[6:dlkPos]
keyHex = qr[dlkPos+3:]
keyNum = int(keyHex,16)
keyHm = numToHm(keyNum)
print("QR-Code:       {}".format(qr))
print("SGTIN:               {}".format(sgtin))
print("KEY HEX:                                        {}".format(keyHex))
print("KEY NUMERIC:   {}".format(keyNum))
print("KEY HomeMatic: {}".format(keyHm))


# Just to demonstrate other direction

keyNum2 = hmToNum(keyHm)
keyHex2 = "{:X}".format(keyNum2) # Integer to hex string
print("KEY HEX2:                                       {}".format(keyHex2))
Die Ausgabe sieht so aus und demonstriert, dass das in beide Richtungen geht:

Code: Alles auswählen

QR-Code:       EQ01SG3014F711A00000D3C98CA028DLKFFC52A9349BA2995CE0F6894A8A573A8
SGTIN:               3014F711A00000D3C98CA028
KEY HEX:                                        FFC52A9349BA2995CE0F6894A8A573A8
KEY NUMERIC:   339976884936845613900152117349597934504
KEY HomeMatic: 7ZRMN-96KET-56AWW-3U8KK-MAAWX8
KEY HEX2:                                       FFC52A9349BA2995CE0F6894A8A573A8

Antworten

Zurück zu „HomeMatic IP Aktoren und Sensoren“