Kannst du nicht über das Network-Plugin den Inhalt des UDP-Pakets in ein Item laufen lassen und das dann per eval oder Logik auswerten?
Ankündigung
Einklappen
Keine Ankündigung bisher.
SIP Türsprechstelle Licht blinken lassen?!
Einklappen
X
-
Ja, das geht auf jeden Fall. So lese ich meine ekey Meldungen aus...
Ein Item wird per Network Plugin beschrieben, Triggert eine Logik, die wertet das Item aus.
Gruss, Waldemar
Kommentar
-
Das Problem dabei wird aber sein, dass ich die Ziel IP der Pakete nach meinem jetzigen Wissen nicht beeinflussen kann. Naja ich werds mal angehen.
mumpf : Hast du mir evtl ein paar Codeschnipsel als Anregung wie du deine Ekey Meldungen verarbeitest?Geniale Menschen sind selten ordentlich, ordentliche selten genial. (Albert Einstein)
Kommentar
-
Hi,
ich weiß nicht, ob es repräsentativ ist, ich bin nicht wirklich stolz auf das Coding, ist schon sehr alt, so dass Du es als Anregung, aber nicht 1:1 verwenden kannst. Ich habe auch ein paar Werte maskiert, sofern sie private Informationen enthalten... Grundidee: Das Item Ekey empfängt den String, in der Logik wird der String geparsed und auf die Unteritems verteilt. Diese triggern dann weitere Aktionen.
Das Item:
Code:Ekey: name: eKey string type: str nw_udp_listen: 51234 enforce_updates: True Failed: type: num cache: True visu_acl: ro autotimer: 60 = 2 User: type: num visu_acl: ro Name: type: str visu_acl: ro State: type: str #0=inaktiv, 1=aktiv, -=undefiniert Finger: type: num visu_acl: ro Name: type: str visu_acl: ro Device: type: str visu_acl: ro Name: type: str visu_acl: ro Key: type: str visu_acl: ro Name: type: str visu_acl: ro Action: type: num visu_acl: ro Zeit: type: str visu_acl: ro
Code:#!/usr/bin/env python # # eKey auswertung #ekey Felder fields = { '0' : 'pakettyp', # hat immer den Wert 1 '1' : 'benutzernummer', # 0000-9999 '2' : 'benutzername', # alphanumerisch,10 Zeichen, ********** = undefiniert '3' : 'benutzerstatus', # 0 = deaktiviert, 1 = aktiviert, - = undefiniert '4' : 'finger', # siehe fingers '5' : 'schluesselnummer',# 1-4, - = undefiniert '6' : 'seriennummer', # siehe devides '7' : 'geraetename', # 5 Zeichen, 'HT' = Haustür, ***** = undefiniert '8' : 'aktion', # 1 = OK, 2 = unbek. Finger, 3 = Zeitfenster A, 4 = Zeitfenster B, 5 = inaktiv, 6 = Nur immer Nutzer??, 7 = FS nicht bekannt, 8 = OK - Digitaleingang '9' : 'digitaleingang'} # 1-4, - = kein Digitaleingang # benutzter Finger fingers = { '1' : 'kleiner Finger links', '2' : 'Ringfinger links', '3' : 'Mittelfinger links', '4' : 'Zeigefinger links', '5' : 'Daumen links', '6' : 'Daumen rechts', '7' : 'Zeigefinger rechts', '8' : 'Mittelfinger rechts', '9' : 'Ringfinger rechts', '0' : 'kleiner Finger rechts'} # sendendes Gerät devices = { '8013241xxxxxxx' : 'eKey Zentrale', '8013772xxxxxxx' : 'Fingerprint 1', '8013771xxxxxxx' : 'Fingerprint 2'} # Schlüssel keys = { '1' : 'Tür1', '2' : 'Tür2', '3' : 'Tür3', '4' : 'Tür4'} logger.info('eKey.py - triggered by: {0}'.format(trigger)) if trigger['source'] == 'Zentral.Ekey': result = value.split(';') for index,r in enumerate(result): logger.info('result[{0}]: {1}'.format(fields[str(index)], r)) user = int(result[1]) username = result[2] benutzerstatus = result[3] finger = result[4] key = result[5] device = result[6] # sh.all.ekey.zeit = sh.now() if device in devices: device_text = devices[device] else: device_text = 'UNBEKANNT' if finger in fingers: finger_text = fingers[finger] else: finger_text = 'UNBEKANNT' if key in keys: key_text = keys[key] else: key_text = 'UNBEKANNT' action = int(result[8]) datum = sh.now().date() zeit = sh.now().time() am_um = '{0:am %d.%m.%Y um %H:%M:%S}'.format(sh.now()) sh.Zentral.Ekey.UserName(username) sh.Zentral.Ekey.FingerName(finger_text) sh.Zentral.Ekey.DeviceName(device_text) sh.Zentral.Ekey.KeyName(key_text) sh.Zentral.Ekey.Action(action) sh.Zentral.Ekey.Zeit(am_um)
Kommentar
Kommentar