Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Anwesenheitssimulation

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

    #31
    Hallo,

    erst mal danke für die Antworten, läuft aber leider immer noch nicht. Dass man Gruppenadressen einrichten muss, war mir nicht bewusst, hab ich jetzt nachgeholt (manuell). Hab grad auch das plugin-skeleton (Thread von Fry) kurz überflogen: eibga.conf scheint ja evtl. nur für die Datentypen relevant zu sein. Wie auch immer, hab's gemacht.

    Habe eben aber gesehen, dass schon am Sonntag im plug-Log etwas stand, was jetzt da auch noch steht:

    Anwesenheitssimulation,Anwesenheitssimulation AnwSimSkript.pl gestoppt,0s,

    Das kommt, wenn ich auf $starten eine 1 sende. Es kommt auch, wenn ich auf $starten eine 0 sende. Es kommt nix, wenn ich auf $erzeugen eine 1 sende. Hänge jetzt mal was an:

    Auszug aus jetziger eibga.conf:
    Code:
    [0/1/2]
    short=AnwSim_aktivieren
    DPTSubId=1.001
    ga=0/1/2
    name=AnwSim_aktivieren
    DPTId=1
    [0/1/0]
    short=AnwSim_erzeugen
    DPTSubId=1.001
    ga=0/1/0
    name=AnwSim_erzeugen
    DPTId=1
    Die anderen Gruppenadressen habe ich auch konfiguriert und analog angelegt (die Texte als 16.001).

    eibd hab ich schon neu gestartet, im GA-Editor (wiregate-webmin) hatte ich "Speichern" geklickt (Message: "Cache ist jetzt im Flash"). Naja, ist ja jedenfalls im eibga.conf angekommen.

    Das Plugin habe ich schon mehrfach neu gespeichert, da ich annehme, dass es dann ausgeführt wird. Die LOG-Zeile "Anwesenheitssimulation,initialisiert,0s," tauchte gelegentlich auf (nicht bei jedem Speichern?)

    Hier noch der Anfang des Skripts ohne Kommentar- und Leerzeilen:
    Code:
    use File::stat;
    my $erzeugen = '0/1/0';
    my $erzeugt = '0/1/1';
    my $starten = '0/1/2';
    my $laeuft = '0/1/3';
    my $naechste_Zeit = '0/1/4';
    my $naechste_Aktion = '0/1/5';
    my @gafilter=grep m!^(4/0/|4/1/)!, keys %eibgaconf;
    my $use_shorts=0;
    my $test_only=0;
    Laut Code wird beim Drücken des Knopfs (0/1/2 auf Wert 1 oder 0) ja immer der letzte Fall aufgerufen:
    $incoming eq $starten => WAHR (korrekt)
    $in => FALSCH (nicht korrekt)

    Bin jetzt auch nicht soo fit in Perl, aber einen offensichtlichen Bug sehe ich da jetzt auch nicht. Was mache ich noch falsch?

    Stefan

    Kommentar


      #32
      Hi Stefan,
      1. Ich glaube, das isses: Hast du eigentlich eib-Logging aktiviert?
      D.h. gibt es /var/log/eib.log und stehen da auch die Telegramme alle drin?
      Dieses Log dient nämlich als Vorlage für die Erzeugung der Simulation.
      2. Nach deinem letzten Posting zu urteilen, hast du wohl die aktuelle Version des Plugins (denn $naechste_Aktion gab es vorher nicht).
      3. Die "short=..."-Einträge aus /etc/wiregate/eibga.conf bitte wieder löschen. Die gehören da nicht hin, haben den Fehler aber auch nicht verursacht.
      4. Was gibt
      Code:
      grep 'SIM.*#.*knx_write' /etc/wiregate/plugin/generic/Anwesenheitssimulation.pl
      als Ausgabe? (ich hatte in einer Testphase mal die knx-writes auskommentiert). Wenn dieses grep irgendwas ausgibt, hast du noch die Testversion. Dann musst du in diesen betreffenden Zeilen die '#'s löschen.
      5. Wenn du eine 1 auf die $erzeugen-GA sendest, taucht dann ein Perlskript "AnwSimSkript.pl" in /etc/wiregate/plugin auf? (Dieses Plugin ist die eigentliche Simulation und wird, sobald eine 1 auf $starten-GA gesendet wurde, nach /etc/wiregate/plugin/generic kopiert und damit ausgeführt). Wenn ja, sieht das soweit ok aus?
      Hoffe, das hilft,
      VG, Fry

      Kommentar


        #33
        1. Nein. eib.log ist alles drin.
        2. Ja. Letzte Version, hier aus dem Thread (nicht svn).
        3. Ok. (?) Die Datei hat webmin angelegt.
        4. Bin grad nicht dran. Das hatte ich Sonntag gecheckt mein ich, stand ja im Thread. Falsch ist aber ja so oder so der return value.
        5. Nein. Skript taucht nicht auf.

        Stefan

        Kommentar


          #34
          Tja, da fische ich doch jetzt auch im Trüben. Du musst wohl noch ein wenig mehr selbst forschen, was da los ist, und hier posten.

          Sind zB wirklich ALLE benutzten GAs (also auch die, die in der Simulation landen sollen) in /etc/wiregate/eibga.conf eingepflegt?

          Hast du nach dem Einpflegen auch den Daemon neu gestartet? Was wird ins /etc/wiregate_plugin.log geschrieben?

          VG, Fry

          PS. was meinst du mit $in=FALSCH (nicht korrekt)
          und was meinst du mit "falsch ist der return value"?

          Kommentar


            #35
            Zitat von Fry Beitrag anzeigen
            Hast du nach dem Einpflegen auch den Daemon neu gestartet?
            Das war es bzw. das hat jetzt geholfen. Das Skript wurde jetzt erzeugt.

            Was mir direkt auffällt: Im Skript sind auch alle möglichen Zeilen mit Gruppenadressen, die ich nicht im grep-Ausdruck habe. Die Wetterzentrale schickt alle 30sec Sensorwerte auf den Bus, die stehen da jetzt alle drin. Filtert der grep nur beim Lesen? Das wäre zwar komfortabel, da das Skript ja nicht beim Ändern der regex neu erzeugt werden muss. Aber dafür landet eben u.U. auch sehr viel Müll drin. Erwarte da jetzt kein Laufzeitproblem, aber macht's auch nicht übersichtlicher. Spontan hätte ich jetzt gesagt, beim Ändern der regex macht man das Skript einfach neu. Vielleicht bastel ich da mal weiter -- jetzt will ich das erst mal zum Rennen bringen.

            Jetzt komm ich jedenfalls weiter und werd mal testen.

            Zitat von Fry Beitrag anzeigen
            PS. was meinst du mit $in=FALSCH (nicht korrekt)
            und was meinst du mit "falsch ist der return value"?
            Habe ich jetzt aus Skript und dem plugin.log geschlossen. Das skript wurde ja aufgerufen und es reagierte auch auf die Taster. Schon vor eibga.conf. Aber eben komisch (immer letzer Fall, d.h. $in kann ja nicht 1 gewesen sein, obwohl 1 auf den Bus kam). Das kann aber ja auch von eibga abhängen. Vielleicht falscher Typ angenommen o.ä. (weil nicht konfiguriert) und dadurch value immer 0?

            In var/log/messages steht/stand übrigens
            wiregate775 /usr/sbin/wiregated.pl: WARN - None or unsupported DPT: sent to 0/1/1 value 0
            Sieht mir nach etwas ähnlichem aus. Allerdings ist die erzeugen-GA dort nie als Warnung und die hat ja nie was gemacht.


            Habe zwischenzeitlich hier auch über deinen if/while-Patch gelesen, sehe ich übrigens genauso -- die timeout-Variante wäre doch ein guter Kompromiss. Also nur mal so als Rückmeldung (+1). Danke auch überhaupt für dein Skript hier.

            Kommentar


              #36
              Ok, meld dich falls weitere Probleme auftauchen.

              Und im Sinne der Community: sobald du es dann am Laufen hast, schreib doch bitte mal hier, was man aus Sicht eines Beginners zu beachten hat. Das hilft dann auch anderen.

              Danke, VG, Fry

              Kommentar


                #37
                Hi Fry,

                ich glaub, ich hab es soweit. Wesentlicher Punkt zur LÖSUNG: Gruppenadressen aus ETS vollständig importieren, ggf. Typen in eibga.conf checken (oder webmin). eibd muss neu gestartet werden, evtl. auch wiregated (ob das nötig ist, hab ich jetzt nicht geprüft). Danach werden überhaupt erst mal die richtigen Zeilen in der eib.log erzeugt! Bei mir fehlten nämlich die DPT-Typen und auch der Wert ($val) kam nicht an, da Fry den Wert aus der Spalte 2 hinter der GA liest, die ist aber ohne eibga.conf-Eintrag LEER. DPT ist dann auch leer.

                Der Value steht aber auch (roh hex bytes) in Spalte 1 hinter der GA. Insofern kann ich mir das jetzt selbst ein bisschen umhacken, damit ich jetzt nicht erst wieder eine Woche warten muss, bis eib.log richtig gefüllt ist.

                Das regex-grep-problem ist irgendwie auch damit erledigt: nur noch die relevanten Zeilen stehen im Sim-Skript.

                Aufgefallen ist mir dabei auch, dass die DPT nicht immer richtig sind. Habe z.B. eine Gruppenadresse, die die Windstärke hat. Das ist ein 2-Byte-Wert. Laut eibga.conf (Import direkt aus knxproj) steht da DPT 1 (1 bit). In der ETS hat die Windstärke keinen Konsumenten, wird nur gesendet. Evtl. die Ursache. Aber das soll jetzt nicht Fry's Problem sein.

                Danke, sieht erst mal gut aus. Muss jetzt Workaround hacken... Der wird oder warten. Schauen wir mal...

                Kommentar


                  #38
                  Guten Morgen zusammen,

                  kann ich die zu verwendene eib.log Datei vorgeben?
                  Denn es wird immer die aktuelle eib.log Datei eingelesen. Welche ja aber noch keine ganze Woche alt ist. Deshalb fände ich es besser die vorherige eib.log.1.gz verwenden.
                  Ab zeile 84 wird dies doch vorgegeben,oder?
                  Code:
                       # Vorlage in eib.log-Archiven vorhanden? Ggf. entpacken, ansonsten aussteigen
                      my @gzsources=grep m!/var/log/eib\.log\.[0-9]\.gz$!, </var/log/eib.log.*.gz>;
                      for my $source (@gzsources)
                      {
                      $source=~s/\.gz$//;
                      system "/bin/gunzip /var/log/$source\.gz" if -f "/var/log/$source\.gz" && ! -f "/var/log/$source";
                      }
                  Aber selbst wenn ich in dieser Zeile wie folgt abändere komme ich nicht zu dem gewünschten Ergebniss.
                  Code:
                    my @gzsources=grep m!/var/log/eib\.log\.[[COLOR=#FF0000]1[/COLOR]-9]\.gz$!, </var/log/eib.log.*.gz>;
                  Wo liegt da mein Gedankenfehler? Oder habe ich da Fry am Anfang vom Thead falsch verstanden das es doch nicht möglich ist eine ältere eib.log Datei zu verwenden?

                  Schöne Grüße

                  Stefan

                  Kommentar


                    #39
                    Stefan,
                    sieh mal die beiden Zeilen unter dem Ausschnitt, den du gepostet hast. Dort werden die Quelldateien ausgewählt. In dem Abschnitt deines Posts wird lediglich entpackt (gunzip). - wobei ich dringend rate, um die Laufzeit des Plugins nicht unnötig zu verlängern, das eib.log-Packen sowieso zu deaktivieren. (Hatte ich oben glaube ich schon geschrieben).
                    VG, Fry

                    Kommentar


                      #40
                      Hallo Fry,

                      du meinst bestimmt die Zeile 93
                      Code:
                          my @sources=sort { $b cmp $a } grep m!/var/log/eib\.log(\.[0-9])?$!, </var/log/eib.log*>;
                      Doch auch wenn ich hier nur zum Beispiel ...log(\.[2])?$.. eingebe funktioniert es nicht.
                      Ich lasse die eib.log wöchentlich (Sonntag 6:25 Uhr) rotieren, das Plugin liest nun leider nur die aktuelle eib.log ein somit beginnt die Simulation erst am kommenden Sonntag.
                      Wie schaffe ich es das die Simulation z.B. schon heute die Telegramme wiederholt?
                      Ich dachte wenn ich die eib.log.1.gz einlesen lasse habe ich die Daten von der KW 10 und so sollte es funktionieren, oder?

                      Kommentar


                        #41
                        Seltsam.
                        Probier mal einfach
                        Code:
                        my @sources=</var/log/eib.log.1>;

                        Kommentar


                          #42
                          Hallo Fry,
                          ich habe es so pobiert und den Fehler bekommen das keine verwertbaren Daten vorhanden sind.
                          Deshalb habe ich nun die eib.log.[1-7].gz händisch entpackt und als eib.log.[1-7] angelegt.
                          Nun funktioniert es.
                          Aber warum werden die Logdateien nicht vom Plugin entpackt. Ich dachte dies wird hier erledigt?
                          Code:
                              # Vorlage in eib.log-Archiven vorhanden? Ggf. entpacken, ansonsten aussteigen
                              my @gzsources=grep m!/var/log/eib\.log\.[0-9]\.gz$!, </var/log/eib.log.*.gz>;
                              for my $source (@gzsources)
                              {
                              $source=~s/\.gz$//;
                              system "/bin/gunzip /var/log/$source\.gz" if -f "/var/log/$source\.gz" && ! -f "/var/log/$source";
                              }

                          Kommentar


                            #43
                            Hm, weiß ich auch nicht. Timeout? Du kannst aber den collectd so konfigurieren, dass er die Dateien gar nicht erst packt. Das geht beim Wiregate sogar auf der Web-Oberfläche.

                            Kommentar


                              #44
                              Hallo Fry,

                              das Prugin hat letzte Woche gute Dienste getan. Vielen Dank nochmal dafür.
                              Ich habe bei der Log Rotation die Komprimierung nun ausgeschaltet und werde testen ob es dann damit funktioniert.

                              Grüße

                              Stefan

                              Kommentar


                                #45
                                Na prima, danke fürs Feedback!

                                Kommentar

                                Lädt...
                                X