Ankündigung

Einklappen
Keine Ankündigung bisher.

problem mit python und syslog server

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

    problem mit python und syslog server

    Hi,

    kann mir jemand mit meiner logic helfen? damit möchte ich einfangen ob mein tv reciever im standby oder nicht ist....
    wenn ich das ganze one smarthome.py starte funktioniert alles bestens.
    wenn ich das als logic im smarthome starte startet alles wunderbar, es printet auch die messages ins log, bloß ab dem "if" macht das ding einfach garnichts mehr.... auch das logger.info nach der if schleife wird nicht mehr ausgeführt....

    kann mir irgendjemand helfen?

    Code:
    import socketserver
    import re
    #logger.info("syslog start")
    
    
    class SyslogUDPHandler(socketserver.BaseRequestHandler):
    
       def handle(self):
          data = bytes.decode(self.request[0].strip(), 'utf-8')
          logger.info (data)
          if re.search('PowerToggle:\sstandby\skein\sbild',data):
             logger.info("FOUND OFF")
          elif re.search('PowerToggle:\sstandby\sbild',data):
             logger.info("FOUND ON")
          else:
             logger.info("NO MATCH")
    
          logger.info("nach dem if")
    
    
    server = socketserver.UDPServer(("0.0.0.0", 22220), SyslogUDPHandler)
    server.serve_forever()
    Zuletzt geändert von knxvenom; 01.04.2015, 17:25.

    #2
    Hallo,

    ich denke es wird schwer Dir zu helfen.

    Du bist anscheinend ganz neu dabei, ohne Debuglog kann ich nichts sehen.

    Bis bald

    Marcus

    Kommentar


      #3
      hi, jep ich bin neu...

      hab das loglevel auf debug und sehe folgendes im var/log/smarthome:

      Code:
      2015-04-01 16:51:23,421 INFO     syslog       <12>Apr  1 16:51:23 kernel: [VID]: VIDEO_STOP 1  1 -- syslog.py:handle:8
      2015-04-01 16:51:23,424 INFO     syslog       <12>Apr  1 16:51:23 kernel: [AUD]: AUDIO_STOP 0 -- syslog.py:handle:8
      2015-04-01 16:51:23,431 INFO     syslog       <12>Apr  1 16:51:23 kernel: [AUD]: AUDIO_CONTINUE 0 0 aph=0x0 -- syslog.py:handle:8
      2015-04-01 16:51:23,432 INFO     syslog       <12>Apr  1 16:51:23 kernel: [AUD]: AUDIO_CONTINUE aph=0 0 0 -- syslog.py:handle:8
      2015-04-01 16:51:23,619 INFO     syslog       <13>Apr  1 16:51:23 PowerToggle: standby kein bild -- syslog.py:handle:8
      wenn ich das selbe script ohne smarthome ausführe bekomme ich den output der if anweisung....
      Code:
      <12>Apr  1 21:47:41 kernel: [VID]: VIDEO_STOP 1  1
      NO MATCH
      <12>Apr  1 21:47:41 kernel: [AUD]: AUDIO_STOP 0
      NO MATCH
      <12>Apr  1 21:47:41 kernel: [AUD]: AUDIO_CONTINUE 0 0 aph=0x0
      NO MATCH
      <12>Apr  1 21:47:41 kernel: [AUD]: AUDIO_CONTINUE aph=0 0 0
      NO MATCH
      <12>Apr  1 21:47:41 kernel: FE tune
      NO MATCH
      <12>Apr  1 21:47:41 kernel: [AUD]: AUDIO_SET_BYPASS_MODE 0
      NO MATCH
      <12>Apr  1 21:47:41 kernel: [AUD]: AC3 downmix 1  state : 1
      NO MATCH
      <12>Apr  1 21:47:41 kernel: [AUD]: AUDIO_PAUSE 0
      NO MATCH

      Kommentar


        #4
        Hi,

        wenn Du das (oben gepostete) Script nicht als Logik ausführst dann kommt garantiert nicht der gepostet Output! (Da in dem Script logger nicht definiert ist.)
        Kann es sein, dass in deiner Logik print(...) drin steht? Das wandert nämlich nicht ins logfile.

        Bis bald

        Marcus

        Kommentar


          #5
          Hi,

          das ist klar... das logger.info hab ich beim manuellen ausführen durch print ersetzt....

          Kommentar


            #6
            Hi,

            ich kriegs mit den oben sachen einfach nicht hin...
            ich habs jetz mal als plugin probiert... funkitoniert perfekt!
            nur jetz hab ich das problem dass ich oben in der syslog class zwar die info hab dass mein reciever eingeschaltet ist, nur kann ich das item nicht updaten / oder zumindest auslesen, da ich ja die self._sh nur unten in der mysyslog class habe....
            ich hab schon etliche sachen probiert... ich komm nicht weiter...

            z.B. unten ne dritte class wo ich das smarthome element versucht habe global für die class zu setzen.... irgendwie funktioniert garnix....
            könntest du mir diesen - ich tippe mal kleinen tipp, noch geben?


            Code:
            import logging
            import socketserver
            import re
            
            logger = logging.getLogger('')
            
            
            class SyslogUDPHandler(socketserver.BaseRequestHandler):
            
               def handle(self):
                  data = bytes.decode(self.request[0].strip(), 'utf-8')
                  logger.info (data)
                  if re.search('PowerToggle:\sstandby\skein\sbild',data):
                     logger.info("FOUND OFF")
            #         blubb = zumsh()
            #         blubb.newval(11)
                  elif re.search('PowerToggle:\sstandby\sbild',data):
                     logger.info("FOUND ON")
            
            
            class mysyslog():
            
                def __init__(self, smarthome):
                    self._sh = smarthome
            #        logger.info("im init script")
            
                def run(self):
                    self.alive = True
            #        blubb = zumsh()
            #        blubb.addsh(self._sh)
                    server = socketserver.UDPServer(("0.0.0.0", 22220), SyslogUDPHandler)
                    server.serve_forever()
                    # if you want to create child threads, do not make them daemon = True!
                    # They will not shutdown properly. (It's a python bug)
            
            #class zumsh():
            #   sh = []
            #   def addsh(self, smarthome):
            #      logger.info("addsh")
            #      self.sh = smarthome
            #      logger.info("addsh danach")
            #      logger.info(self.sh.dev.list.vuduo2())     # HIER hab ich das sh element noch verfügbar und er sagt mir was drin steht
            #   def newval(self, val):
            #      logger.info("got new val")
            #      logger.info(val)
            #      logger.info(self.sh.dev.list.vuduo2())     # HIER wo ichs bräuchte dann leider nicht mehr.... in den python3 dokus war aber gestanden dass die sh eigentlich global sein sollte...

            Kommentar


              #7
              Hallo,

              ja, Du musst das (sh) Objekt schon an die Klasse übergeben. Wie Du das mit dem socketserver hinbekommst, kann ich Dir leider nicht sagen, da Ich diesen schon sehr lange nicht mehr verwendet habe.
              Ich habe mit lib/connection.py eine eigene asynchrone Netzwerk-Bibliothek. Die verwenden fast alle Netzwerkplugins.
              Siehe z.B. das CLI-Plugin. Das dürfte für Dich einfach zum anpassen sein.

              Bis bald

              Marcus

              Kommentar

              Lädt...
              X