Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    Zitat von Fry Beitrag anzeigen
    Ich stelle das mal als Feature-Request an Makki, der hier hoffentlich mitliest: sobald die zugehörige conf-Datei geändert wird, sollte ein Plugin neu initialisiert werden.
    Hmm ich dachte ich hätte das schon aber ich schreibs nochmal auf (eben nachgesehen: ist nicht so..)
    Nur kommen wir vom hundertsten ins tausendste; aktuell wär das kein Problem, nur wenn die Plugins wirklich mal Multithreaded laufen (was - Poseidons Glaskugel) wirklich irgendwann mal wahr werden könnte, dann sehe ich da 50 race-conditions.. Also wenn das Plugin meint eine .conf haben zu müssen, sollte es bitte am besten selber nachschauen, ob sich die geändert hat
    Nachdem ich aber eh eine "nur einmal"-Ausführung präferiere wirds mal eingebaut.

    Makki

    P.S.: Seit meinem ersten Ausflug in die Welt von Perl und vermeintlichem Multithreading, hat mich 2J zurückgeworfen weil es eine einzige Lüge ist, bin da vorsichtiger..
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      Ich habe eben einen Fix ins SVN gepusht (R1136), der Aufrufe von knx_write() mit leeren GAs verhindert.

      Diese konnten entstehen bei Logiken ohne transmit-Eintrag (von denen ich einige habe). Ohne den Patch wurde die folgende Warnung (wiederholt) ins messages Log geschrieben:
      Code:
      WARN - None or unsupported DPT:  sent to  value 0
      KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

      Kommentar


        Gerade noch ein svn commit gemacht.

        Deine Änderung habe ich einfließen lassen, bitte ruf svn update auf, um auch meine Edits zu haben.

        Übrigens habe ich das if-Statement etwas gekürzt, ich frage zwar defined $transmit aber nicht length($transmit)>0 ab. Der Grund liegt in einer logischen Trennung von VALIDIERUNG des Logikeintrages (das soll nur einmal in der Initialisierung passieren, dort müsste diese Abfrage also ggf. hin) und AUSFÜHRUNG (die soll schlank und schnell bleiben, der Logikprozessor soll ja auch 500 Logiken verarbeiten können - kann er aktuell auch).

        VG und danke für deine wertvollen Inputs!
        Fry

        Kommentar


          Jetzt hattest du mir aber einen Schrecken eingejagt, da ich immer vor dem dcommit den aktuellen Stand »pulle« (in dem Fall r1129). Ich hatte schon gedacht, dass die git-SVN-Unterstützung buggt, aber laut RevLog gab es dazwischen kein Update im Logikprozessor: SourceForge.net Repository - [openautomation] Log of /wiregate/plugin/generic/Logikprozessor.pl
          Der letzte Commit davor war mein r1123. War dein Commit evtl. unter gegangen?
          KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

          Kommentar


            Schon möglich, dass ich einen Bedienungsfehler gemacht habe.

            Aktuell (r1139) sollte die SVN-Version mit der auf meinem WG übereinstimmen. Bitte lass uns auf dieser Version weitermachen.

            Und wie gesagt, bitte Validierung der Einträge nicht in die reguläre Ausführung übernehmen (kostet Zyklen).

            Fry

            Kommentar


              Ich bräuchte mal etwas Starthilfe... ich verstehe die Syntax der Logiken noch nicht wirklich...


              Code:
              Beispiel aus dem SVN: 
              dim => { receive=>'2/2/9', transmit=>'2/3/9', translate => sub { return unless $input; $day ? 80 : 3; } },
              Ich möchte nur zur Nachtzeit einen Dimmwert hinter dem Einschalten des PMs herschicken. Das entsprechende Beispiel aus der conf.d im SVN hat zwei Dimmwerte, tagsüber bräuchte ich keinen, nur nachts. Also wäre die Variable $night wohl passender.

              Verstehe ich richtig, dass 'return unless $input' dafür sorgt, dass nur bei einer gesendeten 1 auf 2/2/9 reagiert wird?

              Wie ändere ich aber '$day ? 80 : 3;' ?? Wäre das '$night ? 30 ; für einen Dimmwert von 30%?

              Code:
              Meine Änderung: 
              dim => { receive=>'2/2/9', transmit=>'2/3/9', translate => sub { return unless $input; $night ? 30 ; } },
              Irgendwie erschliesst sich mir noch nicht welche Felder, Argumente, etc. da innerhalb von sub zusammengebaut werden...

              luigi

              Kommentar


                Zunächst mal: nimm int($input), denn $input enthält manchmal Strings, und ein String "0" ist TRUE.

                Zweitens: $day ? 80:3; als letzte Anweisung einer sub ist äquivalent zur Langform if($day) { return 80; } else {return 3;}

                Hoffe das hilft schon mal.

                Ansonsten: bitte lies dir das conf-File, das im SVN dabei ist, komplett durch.

                Wenn dann noch konkrete Fragen übrig sind, stelle sie hier, und es wird dir geholfen werden.

                Have fun,
                Fry

                Kommentar


                  Nur mal so am Rande: ich lese schon mit, solange ich keine gravierenden Einwände habe, belasse ich es aber dabei
                  Also: Weiter so

                  Makki
                  EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                  -> Bitte KEINE PNs!

                  Kommentar


                    @Fry
                    Vielen Dank für die Erklärung, diese Kurzform kannte ich nicht.. damit wird vieles klar.

                    Die Dimmwerte funktionieren damit prima!

                    Nächste Frage:
                    Um Werte in ein RRD zu speichern, reicht einfach eine Zeile:
                    Code:
                    rrd_Wohnzimmer => { receive=>'11/1/27', translate=>sub{update_rrd('Helligkeit_Wohnzimmer','',$input)} },
                    wie weiter vorne beschrieben??
                    Wird das RRD beim ersten Aufruf automatisch angelegt? Wenn ja, wo? Unter /var/www/rrd wo die anderen alle sind, finde ich nichts?
                    Oder stimmt in der Zeile oben etwas nicht?
                    [Ich finde auch keine Subroutine für RRDs in dem Plugin selbst, obwohl ich die neueste Version aus dem SVN habe!? Sehe ich die einfach nicht?]
                    luigi

                    Kommentar


                      Ja, das rrd wird automatisch angelegt. Kann es sein, dass auf 11/1/27 schlichtweg kein Telegramm ankommt?
                      Oder diese GA nicht mit korrekter DPTSubId in /etc/wiregate/eibga.conf eingepflegt ist?
                      Fry

                      Kommentar


                        Nachtrag: Irgendwie verstehen das Plugin und ich uns wohl nicht...

                        Also... das mit dem Dimmwert hatte geklappt (sonst nix in der Config).
                        Ich hab dann noch weitere Dimmwert Zeilen (alle mit eigenem Namen) hinzugefügt. Danach noch die RRD Funktion probieren wollen...

                        Irgendwann hab ich dann gemerkt, dass meine anderen Plugins nicht mehr laufen!?

                        Ich hab alles rumprobiert den Logikprozessor gelöscht, wieder neu angelegt. Alles nix. Dann hab ich den Fehler gemacht diesen eibga.conf Fix in der Logikprozessor.conf Datei auszukommentieren, obwohl ich PL 33 hab (ich wusste mir nicht zu helfen). Danach war scheinbar die eibga.conf so kaputt, dass der wiregated sich immer mit nem segfault verabschiedet hat...
                        Also die eibga.conf gelöscht, wieder neu aus der .knxproj importiert, jetzt läuft wenigstens der wiregated wieder.

                        Aber irgendwie laufen entweder meine anderen Plugins (eines für RRDs zu speichern und das Multi-RTR) alleine, oder der Logikprozessor, aber dann werden die anderen beiden nicht mehr ausgeführt!?

                        Meine .conf wieder zurück in Minimalversion, selbst damit geht es nicht
                        (soll heissen, dass Dimmen geht schon, aber die anderen Plugins laufen nicht mehr).

                        Code:
                        #!/usr/bin/perl
                        #
                        # Logikprozessor.pl - Konfiguration
                        #
                        
                        $eibd_backend_address='0.0.0'; # eigene Adresse zur Vermeidung von Zirkellogiken, ist oft auch '1.1.254'
                        
                        # Zentrale Einstellungen, insb. für die Prowl Mechanik, s. u..
                        %settings=(
                          prowl => {
                            apikey => "*** hier eigenen API-Key eintragen***", 
                            application => 'WireGate KNX',
                            priority => 0,
                            event => '[unbenanntes Ereignis]',
                            description => '',
                            url => ''
                          }
                        );
                        
                        %logic=(
                        
                        dim_Ankleide => { receive=>'1/3/120', transmit=>'1/3/122', translate => sub { return unless int($input); if($day) { return 20; } } },
                        
                            );
                        Lösche ich das Logik Script (und starte den wiregated.pl neu!) laufen die anderen beiden wieder.

                        Bei dem wiregated restart bringt er auch immer noch einmal einen segfault, scheint aber dann im zweiten Anlauf zu starten (was er mit der kaputten eibga.conf nicht tat):
                        Code:
                        Nov 24 17:48:17 wiregate187 /usr/sbin/wiregated.pl: INFO - *** reading config
                        Nov 24 17:48:18 wiregate187 /usr/sbin/wiregated.pl: INFO - connected to eibd local:/tmp/eib
                        Nov 24 17:48:19 wiregate187 kernel: [ 8933.386981] wiregated.pl[32029]: segfault at a54a843 ip b762e998 sp bfe9ae20 error 4 in libdb-4.6.so[b75df000+130000]
                        Nov 24 17:49:05 wiregate187 /usr/sbin/wiregated.pl: INFO - *** reading config
                        Nov 24 17:49:06 wiregate187 /usr/sbin/wiregated.pl: INFO - connected to eibd local:/tmp/eib
                        luigi

                        PS: WG187, VPN offen...

                        Kommentar


                          Luigi -
                          löschen und wieder reinkopieren mag kurze Abhilfe bringen, wird aber nicht dazu führen, dass du die Ursache des Problems selbst irgendwann verstehst.

                          Ein paar Tipps von meiner Seite:
                          * Nicht verzagen! Unter Linux lernt man immer dazu. Neu installieren und "dann läuft es irgendwie" ist immer unbefriedigend, und unter Linux meist NICHT der einfachste Weg der Problemlösung. Der Logikprozessor verwaltet bei mir aktuell um die 200 Logiken problemlos.
                          * Falls du es nicht bereits kannst: lerne, dich ins Wiregate einzuloggen (ssh) und einen Editor zu benutzen (emacs, pico, was-auch-immer).
                          * Dass deine eibga.conf "verbogen" war, glaube ich ehrlich gesagt nicht.
                          * Dass das %eibgaconf-Hash "verbogen" war, ist auch kaum zu glauben. Aber selbst wenn: einfach wiregated neu starten (/etc/init.d/wiregated restart).
                          * Wenn du an irgendeiner .conf-Datei was änderst, wird NICHT automatisch das zugehörige Plugin aufgerufen! Also besser direkt danach auch das Plugin selbst kurz aufrufen und neu speichern, damit es seine .conf-Datei auch wirklich einliest und darauf reagieren kann. (das gilt für alle Plugins!) Auf der Kommandozeile: touch /etc/wiregate/plugins/generic/Logikprozessor.pl
                          * Wenn du dann noch Probleme hast: zeig uns hier doch bitte deine Logfiles! (/var/log/wiregate_plugin.log, /var/log/eib.log) Aus denen kann man meist sehr viel analysieren.
                          * Wenn du in deiner %plugin_info keine kritischen Daten aufbewahrst (was ich sowieso nicht tun würde), kannst du die auch "resetten", indem du die Datenbank löschst: wiregated stoppen (/etc/init.d/wiregated stop), auf der Kommandozeile "rm /tmp/wiregate_plugin.db /etc/wiregate/wiregate_plugin.db", danach wiregated starten (/etc/init.d/wiregated start). Er baut die Datenbank dann neu auf.

                          Frage gern weiter, ich lese mit.
                          VG, Fry

                          Kommentar


                            Danke für die Hilfe... ich bin mir ja nicht mal sicher, ob's an dem Logikprozessor liegt.

                            Linux und Command Line sind kein Thema, wenn ich nur weiss, wo ich suchen muss.

                            Dann mal der Reihe nach.

                            - Momentan laufen die anderen beiden Plugins einwandfrei
                            (eines, dass RRDs speichert, das andere das Multi-RTR aus dem SVN).

                            - Kann ich Dein Plugin mit einer leeren Conf anlegen, bzw. was muss mindestens in der .conf stehen!? Denn wenn das schon nicht geht, muss ich den Fehler woanders suchen.

                            Update: Habe die plugin_db Files gelöscht. Nun tauchen auch unten auf der Webseite Plugin Debug-Infos auf, die waren vorher definitiv nicht da, aber ich hatte mir dabei gar nix gedacht.

                            Update 2: Ich glaub die (kaputten?) plugin_db Files waren der Schlüssel. Hab das Logikprozessor Script angelegt, es startet mit dem Kommentar 'initialisiert', mit Aufrufzyklus 0s (stand vorher immer auf 60). Und vor allem, die anderen beiden Plugins laufen weiter.

                            Kommentar


                              na prima. dann warten wir mal, ob neue Probleme auftauchen.
                              Have fun
                              Fry

                              Kommentar


                                Vielen Dank noch mal für Deine Hilfe!

                                Für alle anderen: das Problem war vermutlich schon vorher da (die kaputten plugin_db files), ist jedoch nie aufgefallen, bis ich etwas an den Plugins ändern wollte.

                                Dank Fry's toller Hilfe läuft jetzt alles wie's soll. Es sind momentan mehrere Dimmwert-Zeilen, sowie einige RRD Log Einträge drin und alles funktioniert prima.

                                luigi

                                Kommentar

                                Lädt...
                                X