Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin OperationLog

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

    Neues Plugin OperationLog

    Hallo Forum,

    ich habe ein Plugin für das erstellen von Logger geschrieben. Es basiert auf MemLog mit den unterschied, dass die Logeinträge nicht nur in flüchtigen Speicher gehalten werden, sondern im SmartHome cache und im Verzeichnis smarthome/var/log/operationlog/ geschrieben werden. Die Logs können vom smartVISU Plugin „status.log“ dargestellt werden, siehe Bild.

    Das Plugin liegt auf GitHub:

    OperationLog

    Edit 02.02.2016: aktueller Version

    Und kann mit dem branch develop gemerged werden.

    @offline: Ich mochte Dein Logger in AutoBlind und habe mein Loggerklasse als Kind von AbLogger erstellt. Leider konnte ich Deine Klasse nicht komplett ohne Änderungen verwenden und habe die Datei in AutoBlindLoggerOLog umbenannt und bei mir eingefügt. Ich hoffe das ist in Deinem Sinne.

    @Marcus: ich habe ein pull-request erstellt.

    Viel Spaß mit dem Plugin, viele Grüße,

    Jan
    You do not have permission to view this gallery.
    This gallery has 1 photos.
    Zuletzt geändert von JanT; 02.02.2016, 22:00. Grund: Link aktualisiert

    #2
    Hi,

    super, muss ich gleich mal am WE ausprobieren, erster Kandidat ist mein eKey-Log, den habe ich bisher über memlog realisiert... Danke!

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #3
      Perfekt, das habe ich gesucht.
      Ich werde es heute Abend mal in meine Testumgebung einbauen.
      Vielen Dank!

      Kommentar


        #4
        Erste Tests erfolgreich.
        Meine Log Einträge werden wie im Bild dargestellt.
        Wie kann ich anstatt des Items einen anderen Text für den Logeintrag hinterlegen (dein Beispiel) ?
        mein Item:
        Code:
        ['log1gw']
           [['grundwasser']]
                name = grundwasserabs
                type = bool
                visu_acl = ro
                knx_dpt = 1
                knx_listen = 1/3/1  
                olog = log1
                olog_level = INFO


        You do not have permission to view this gallery.
        This gallery has 1 photos.

        Kommentar


          #5
          Verstehe ich richtig, dass bei jeder Wertänderung geloggt wird? Geht es auch, dass z.B. nur true geloggt wird, aber false nicht?

          Kommentar


            #6
            Zitat von cocoon Beitrag anzeigen
            Wie kann ich anstatt des Items einen anderen Text für den Logeintrag hinterlegen (dein Beispiel) ?
            Hi,

            ich denke, die Einträge im Beispiel sind durch die Log-Funktion des Plugins aus einer Logik heraus erstellt worden. Ich würde mir aber auch wünschen, dass ich am Item ein Formatier-String angeben kann, in dem der Item-Wert ersetzt wird. Idealerweise auch noch eine Mapping-Liste für die Werte, so dass man z.B. so was machen kann wie

            Code:
            [Abstellraum]
                [[Fenster]]
                    # 0 = zu, 1 = auf, 2 = gekippt
                    name = Fensterzustand
                    type = num
                    visu_acl = ro
                    knx_dpt = 5
                    knx_listen = x/y/z
                    olog = fensterlog
                    olog_level = INFO
                    olog_map = zu | auf | gekippt
                    olog_text = "Fenster im Abstellraum: {0}"
            Die Kür wäre dann noch ein
            Code:
                    olog_filter = 1 | 2
            mit dem man dann noch die Werte bestimmen kann, die gelogged werden (wie von kunig gewünscht). Natürlich kann man das alles auch mit einem Sub-Item realisieren, aber vielleicht kannst Du ja noch diese Ideen aufnehmen? Würde einem die Sub-Items ersparen.

            Danke und Gruß,
            Waldemar
            OpenKNX www.openknx.de

            Kommentar


              #7
              Hallo zusammen,

              klasse PlugIn, habe gestern abend auch gleich das Spielen angefangen. Die Möglichkeit, Items direkt für das Logging zu attributieren, finde ich dabei auch sehr reizvoll. Allerdings hat mich die technische Ausgabe auch etwas gestört. Ich hatte deswegen mit einem zweiten Item und "Textformatierung für Arme" angefangen:

              Code:
              [logtest]
                  [[funktion2]]
                      name = Fenster Zimmer 2
                      type = str
                      visu_acl = ro
                      olog = log_dev1
                      olog_level = INFO
                      eval_trigger = testdevices.funktion2
                      eval = 'Fenster geschlossen' if value = 0 else 'Fenster offen'
              Leider hatu das mit dem eval so nicht hin... Any ideas?

              Den Vorschlag von mumpf finde ich allerdings noch deutlich eleganter - wenn das käme, wäre meine Zwischenlösung eh hinfällig...

              Danke und besten Gruß
              Michael

              Kommentar


                #8

                if value == 0

                Kommentar


                  #9
                  Zitat von Tom Bombadil Beitrag anzeigen
                  if value == 0

                  Danke, damit geht's.

                  Kommentar


                    #10
                    Klassiker - passiert mir auch immer mal wieder.
                    /tom

                    Kommentar


                      #11
                      Zitat von mumpf Beitrag anzeigen
                      Natürlich kann man das alles auch mit einem Sub-Item realisieren, aber vielleicht kannst Du ja noch diese Ideen aufnehmen? Würde einem die Sub-Items ersparen.
                      Hallo Waldemar,

                      Ja, der Logfunktion über den items ist ein bisschen „stiefmütterlich“ implementiert. Ich verwende sie bisher selber noch nicht. Im Fall von loggen der offenen Fenster, mag ich eine Logikvariante lieber. Um in Deinem Kontext zu bleiben wäre das:

                      logic.conf:
                      Code:
                      [log_offene_fenster]
                          filename = log_offene_fenster.py
                          watch_item = *.Fenster
                      log_offene_fenster.py:
                      Code:
                      #!/usr/bin/env python3                                                                                                                                                                                                                     
                       
                      logmap = {0:'zu',1:'auf',2:'gekippt'}
                      value = int(trigger['value'])
                      item = sh.match_items(trigger['source'])[0]
                       
                      if value in [1,2]:
                          sh.fensterlog('INFO', '{} ist {}'.format(item._name, logmap[value]))
                      Damit hättest Du mit viel weniger Schreibaufwand dein gewünschte Funktion nicht nur für ein Fenster, sondern gleich alle!

                      Es gibt sicherlich Fälle wo es sinnvoll ist einen „schönen“ Logeintrag direkt vom Item zu erstellen und ich nehme es mir zu Herzen. Die Implementation könnte aber ein bisschen brauchen. Falls es eine von euch eilig hat, nehme ich gerne ein pull-request entgegen...

                      Viele Grüße,

                      Jan

                      Kommentar


                        #12
                        Da ich lieber mit Items arbeite und extra Logiken vermeide würde ich mich über die Item - Lösung sehr freuen.
                        Der oben genannte Filter um auch mal nur ein "true" des Items auszuwerten wäre elegant.
                        Ansonsten Funktioniert das Plugin super.

                        Kommentar


                          #13
                          @JanT: Stimmt, an eine Logiklösung hatte ich gar nicht gedacht. Das werde ich bei nächster Gelegenheit mal für ein paar Dinge umsetzen und testen.

                          Kommentar


                            #14
                            Hallo Jan,

                            Zitat von JanT Beitrag anzeigen
                            Im Fall von loggen der offenen Fenster, mag ich eine Logikvariante lieber.
                            natürlich hast Du recht, für Fenster ist ein Logik-Ansatz potentiell besser. Sollte aber auch nur ein anschauliches Beispiel sein - ich logge nicht meine Fensteröffnungen.

                            Zitat von JanT Beitrag anzeigen
                            Damit hättest Du mit viel weniger Schreibaufwand dein gewünschte Funktion nicht nur für ein Fenster, sondern gleich alle!
                            Das löse ich bei mir anders, deswegen ist die Frage, wie oft ich etwas schreiben muss, für mich nicht relevant.


                            Zitat von JanT Beitrag anzeigen
                            Es gibt sicherlich Fälle wo es sinnvoll ist einen „schönen“ Logeintrag direkt vom Item zu erstellen und ich nehme es mir zu Herzen.
                            Ich wollte nur Input geben und nicht fordern.

                            Dein Log schließt die Lücke zwischen persistentem Logging im File (was man über Logik ja schon immer machen konnte) und der Anzeige des Logs in der Visu. Damit werden Logeinträge "sichtbarer" und damit wird es wichtiger, sie formatieren zu können.
                            Einer (der vielen) Aspekte vom Logging ist ja auch die Fehlersuche, und speziell in dem Fall möchte ich nicht noch eine potentiell fehleranfällige Logik machen müssen, um einen Fehler finden zu können.

                            Sind aber alles "nice to have" Aspekte und sicherlich nicht eilig.

                            Gruß, Waldemar
                            OpenKNX www.openknx.de

                            Kommentar


                              #15
                              Danke für das Plugin, ist echt super! Allerdings bekomme ich immer eine Fehlermeldung im Smarthome Log - dabei werden die Einträge brav sowohl in der Visu angezeigt als auch in das operationlog-File geschrieben.. Any ideas?
                              Code:
                              [COLOR=#000000][FONT=Dosis]OperationLog Nachtlogger: could not update cache slice indices must be integers or None or have an __index__ method[/FONT][/COLOR]

                              Kommentar

                              Lädt...
                              X