Ankündigung

Einklappen
Keine Ankündigung bisher.

SIP Türsprechstelle Licht blinken lassen?!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    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?

    Kommentar


      #17
      Das hätte ich auch vorgeschlagen, das sollte recht easy zu machen sein

      Kommentar


        #18
        Mh ok, wenn das funktioniert, dass man den Inhalt so auslesen kann wäre das ein Ansatzpunkt.
        Geniale Menschen sind selten ordentlich, ordentliche selten genial. (Albert Einstein)

        Kommentar


          #19
          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
          OpenKNX www.openknx.de

          Kommentar


            #20
            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


              #21
              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
              Die Logik:
              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)
              Gruß, Waldemar
              OpenKNX www.openknx.de

              Kommentar


                #22
                Mit Asterisk kann man da bestimmt auch was basteln.
                Anruf der Türsprechstelle geht an Asterisk, dort Auswertung und Weiterleitung an die Fritzbox.

                Ist aber vielleicht auch etwas übertrieben.

                Viele Grüße
                Stefan

                Kommentar

                Lädt...
                X