Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    Hallo,

    benutze mal anstatt return ($input eq 1) ? 0 : undef; einmal return ($input == 1) ? 0 : undef;

    Viele Grüße Jens

    Kommentar


      Das Problem ist tatsächlich, dass bei Ausführung der Logik, der Wert nicht mehr im eibd_cache vorhanden ist.
      Der Read-Request auf die virtuelle GA funktioniert auch nicht während der Ausführung der Logik, weil der Logikprozessor ja genau diesem Moment noch mit sich selbst beschäftigt ist.

      eibd_cache auf 24h hochsetzen klappt irgendwie auch nicht. Gibt es irgendwo eine Doku, was der höchste erlaubte Wert ist?

      Aktuell hilft es die Logik zweimal hintereinander auszuführen.
      Die erste Ausführung funktioniert nicht, triggert aber den Read-Request und damit den Refresh des eibd_cache. Die zweite Ausführung kann dann auf den korrekten Wert zugreifen.
      Autor der SonoPhone, SonoPad und SqueezePad Apps.

      Kommentar


        Zitat von bluegaspode Beitrag anzeigen
        eibd_cache auf 24h hochsetzen klappt irgendwie auch nicht. Gibt es irgendwo eine Doku, was der höchste erlaubte Wert ist?
        Das würde mich auch interessieren. Da KNX eigentlich ja Event und nicht Zyklusgetrieben ist, sollte man meinen, dass ein Zustand so lange aktuell bleibt, bis man ihn überschreibt.
        Meiner Wetterstation muss ich ja auch nicht einmal am Tag eine 1 senden, damit die Beschattungsautomatik aktiv bleibt.

        Habe an einigen Stellen ebenfalls das Problem, mit dem vergessenen Zustand. Neben den Nachtlogiken, auch beim Gesamtstatus Licht. Wenn mein Wiregate erst mal 49 Lampenzustände abfragt, weil sich Nr. 50 geändert hat um zu ermitteln ob noch eine Lampe an ist, dann kann das schon mal dauern.
        Gruß, Sebastian
        Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
        Ruhri? -> Komm zum Stammtisch

        Kommentar


          Zitat von bluegaspode Beitrag anzeigen
          Das Problem ist tatsächlich, dass bei Ausführung der Logik, der Wert nicht mehr im eibd_cache vorhanden ist.
          Der Read-Request auf die virtuelle GA funktioniert auch nicht während der Ausführung der Logik, weil der Logikprozessor ja genau diesem Moment noch mit sich selbst beschäftigt ist.
          Ich sage nur: mit zyklischem Senden wäre das nicht passiert ;-)

          Im Ernst: andere KNX-Geräte (zb Wetterstation) merken sich "ihre" Status und senden auf ein Read-Request den entsprechenden Response. Für "virtuelle" GAs gibt es aber kein passendes Gerät - außer den LP. Der kann auch auf Read-Request antworten - aber eben nicht für eigene Logiken....

          VG
          Micha

          Kommentar


            Zitat von mivola Beitrag anzeigen

            Ich sage nur: mit zyklischem Senden wäre das nicht passiert ;-)
            Wenn ich wüsste wie weit der eibd_cache zurückreicht, würde es auch nicht passieren. ;-)

            Ich will ja auch so wenig extra Buslast erzeugen, wie nötig.

            Hilfreich wäre auch eine Logausgabe, wenn weder per Cache, noch per Read ein Input Wert ermittelt werden konnte.
            Zuletzt geändert von bluegaspode; 09.09.2015, 22:41.
            Autor der SonoPhone, SonoPad und SqueezePad Apps.

            Kommentar


              Ich hab's so gelöst: https://knx-user-forum.de/forum/öffe...233#post666233

              Nicht schön, funktioniert aber astrein. Eine bessere Lösung habe ich nicht gefunden. Ich habe allerdings auch nicht mehr weiter gesucht.

              Kommentar


                Hallo,

                könnte man nicht auch einen zweiten LP aufsetzen der nur die Read-Request beinhaltet?
                Diese würde dann aber einen Neustart nicht überstehen, oder?

                Grüße
                Stefan

                Kommentar


                  Hallo zusammen,

                  zuerst einmal vielen Dank an Fry für den Logikprozessor! Ich verwende ihn seit einiger Zeit intensiv und es kommen immer mehr Logiken hinzu. Mittlerweile ist er praktisch zur wichtigsten Komponente im Wiregate bei mir geworden.

                  Am Wochenende habe ich eine banale Timerlogik hinzugefügt:

                  Code:
                  Aussenlampe_Zeitsteuerung => { transmit=>'1/7/1', timer => { time => '1:00' }, translate => 0 },
                  Zuerst ist mir kein Problem aufgefallen, die Konfiguration wurde ohne Fehler verarbeitet und die alten Logiken haben einwandfrei gearbeitet. Dann ist mir jedoch aufgefallen, dass die Latenz des Logikprozessors enorm angestiegen ist. Hat die Ausführung einer einfachen Logik vorher zwischen 10 und maximal 100 ms gedauert, waren es auf einmal mehrere Sekunden. In der Plug-In-Übersicht des Wiregates hatte der Logikprozessor eine enorm hohe Anzahl an Ticks, um die 350.000.

                  Den Fehler habe ich dann relativ schnell gefunden, es war die Zeitangabe. Als ich diese zu time => '01:00' mit führender Null geändert hatte, lief alles wie gewohnt mit niedrigen Latenzen und wenigen Ticks.

                  Damit ist das Problem gelöst, was mich jedoch interessiert ist, wie dieser Fehler zustande kommt. Meine Perl-Kenntnisse sind sehr eingeschränkt, weshalb ich nicht selbst den Debugger angeworfen habe. Als was wird denn die Zeitangabe mit einstelliger Stunde interpretiert, wodurch diese hohe Last entsteht? Und könnte man eine solche Falscheingabe beim Parsen der Konfiguration evtl. direkt abfangen bzw. einen Fehler ausgeben?

                  Viele Grüße
                  Tulkas

                  Kommentar


                    Zitat von johnnychicago Beitrag anzeigen
                    Ich hab's so gelöst: https://knx-user-forum.de/forum/öffe...233#post666233

                    Nicht schön, funktioniert aber astrein. Eine bessere Lösung habe ich nicht gefunden. Ich habe allerdings auch nicht mehr weiter gesucht.
                    Sehr Schön und funktioniert!

                    Vielen Dank für deinen Tipp, jetzt funktionieren alle meine Logiken wie ich es möchte.

                    Das löst bei mir ab sofort die Memoryfunktion ab.

                    Code:
                    memory => { transmit=>'1/2/9', reply_to_read_requests=>1 },
                    Linknx als Helfer für den Logikprozessor

                    Schöne Grüße
                    Gernot

                    Kommentar


                      Hallo...

                      Mal 'ne andere Frage. Ich kriege regelmässig Nachrichten ins Log, dass Logiken lange liefen. Bei einigen ist mir klar, wieso, andere scheinen eher simpel. So verbraucht z.B. folgende Logik immer eine gute Sekunde Laufzeit:

                      Code:
                      summe => {
                      eibd_cache=>300,
                      receive=>['8/0/4','4/1/19','3/2/6'],
                      transmit=>'8/0/8'
                      translate=>sub{
                        return ($input->[0]+$input->[1]+$input->[2]) },
                      },
                      Die werte sollten alle auf dem Bus vorhanden sein, deswegen das eibd_cache.

                      Wie debugge ich sowas am Besten?

                      Kommentar


                        Zitat von Tulkas Beitrag anzeigen
                        Am Wochenende habe ich eine banale Timerlogik hinzugefügt:

                        Code:
                        Aussenlampe_Zeitsteuerung => { transmit=>'1/7/1', timer => { time => '1:00' }, translate => 0 },
                        ...
                        Und könnte man eine solche Falscheingabe beim Parsen der Konfiguration evtl. direkt abfangen bzw. einen Fehler ausgeben?
                        Wenn ich dein Beispiel nachstelle, passiert genau das: Warnung wird in /var/log/wiregate_plugin.log ausgegeben.
                        VG, Fry

                        Kommentar


                          Hallo an die Logikprozessor-Experten.
                          Ich habe da ein Problem mit der Ausführung einer Logik.
                          Es soll die GA 0/0/1 (Tag/Nacht-Signal der Wetterstation) abgefragt werden und bei logisch 1 die Logik zum Fahren der Rollladen getriggert werden.
                          Das funktioniert auch fadt alles soweit, nur die Umschaltung auf 0/0/1=>1 bekommt der Logikprozessor nicht mit.
                          Wenn ich dann einen Neustart durchführe, wird das Signal erkannt und die Logik sauber ausgeführt.

                          Hat da jemand einen Tipp für mich?
                          PHP-Code:
                              2015-10-24 21:27:27.909,Logikprozessor,1.1.40 0/0/1:-> $logic->{Aussenbeleuchtung_abends_an_daemmerung}{receive}(Logik) -> 1/1/1:0 unveraendert -> nichts zu senden;  1.1.40 0/0/1:-> $logic->{Rollladen_AZ_OG_daemmlux}{receive}(Logik) -> nichts zu senden;  1.1.40 0/0/1:-> $logic->{Rollladen_Flur_OG_daemmlux}{receive}(Logik) -> nichts zu senden;  1.1.40 0/0/1:-> $logic->{Rollladen_WC_OG_daemmlux}{receive}(Logik) -> nichts zu senden;  1.1.40 0/0/1:-> $logic->{und_street_light}{receive}(Logik) -> nichts zu senden;  ,0.9s2015-10-24 21:29:21.916,Logikprozessor,compiled in 0.5s 2015-10-24 21:29:22.034,Logikprozessor,Naechster Aufruf der timer-Logik 'Beregnung_morgens_Timer_aus'  morgen um 06:15. 2015-10-24 21:29:22.041,Logikprozessor,Naechster Aufruf der timer-Logik 'street_light_off_at_645am'  in 2 Tagenam 26.10.2015um 06:45. 2015-10-24 21:29:22.046,Logikprozessor,Naechster Aufruf der timer-Logik 'Rollladen_AZ_OG_uhr_morgens_we'  morgen um 09:02. 2015-10-24 21:29:22.049,Logikprozessor,Naechster Aufruf der timer-Logik 'Rollladen_AZ_OG_uhr_morgens_wt'  in 2 Tagenam 26.10.2015um 06:02. 2015-10-24 21:29:22.059,Logikprozessor,Naechster Aufruf der timer-Logik 'Beregnung_abends_Timer_aus'  morgen um 21:20. 2015-10-24 21:29:22.061,Logikprozessor,Naechster Aufruf der timer-Logik 'frueh_WT_AUS'  morgen um 06:25. 2015-10-24 21:29:22.068,Logikprozessor,Naechster Aufruf der timer-Logik 'Rollladen_Flur_OG_uhr_morgens_wt'  in 2 Tagenam 26.10.2015um 06:01. 2015-10-24 21:29:22.070,Logikprozessor,Naechster Aufruf der timer-Logik 'Zirkulation_EIN_WTag'  morgen um 16:50. 2015-10-24 21:29:22.077,Logikprozessor,Naechster Aufruf der timer-Logik 'Beregnung_morgens_Timer_an'  morgen um 06:00. 2015-10-24 21:29:22.080,Logikprozessor,Naechster Aufruf der timer-Logik 'frueh_WE_AN'  morgen um 08:00. 2015-10-24 21:29:22.088,Logikprozessor,Naechster Aufruf der timer-Logik 'Aussenbeleuchtung_abends_aus'  um 23:00. 2015-10-24 21:29:22.096,Logikprozessor,Naechster Aufruf der timer-Logik 'Rollladen_WC_OG_uhr_morgens_wt'  in 2 Tagenam 26.10.2015um 06:00. 2015-10-24 21:29:22.099,Logikprozessor,Naechster Aufruf der timer-Logik 'frueh_WE_AUS'  morgen um 09:20. 2015-10-24 21:29:22.106,Logikprozessor,Naechster Aufruf der timer-Logik 'frueh_WT_AN'  in 2 Tagenam 26.10.2015um 05:55. 2015-10-24 21:29:22.113,Logikprozessor,Naechster Aufruf der timer-Logik 'street_light_on_at_625am'  in 2 Tagenam 26.10.2015um 06:25. 2015-10-24 21:29:22.120,Logikprozessor,Naechster Aufruf der timer-Logik 'Rollladen_WC_OG_uhr_morgens_we'  morgen um 09:00. 2015-10-24 21:29:22.128,Logikprozessor,Naechster Aufruf der timer-Logik 'Beregnung_abends_Timer_an'  morgen um 21:00. 2015-10-24 21:29:22.130,Logikprozessor,Naechster Aufruf der timer-Logik 'Rollladen_Flur_OG_uhr_morgens_we'  morgen um 09:01. 2015-10-24 21:29:22.140,Logikprozessor,Naechster Aufruf der timer-Logik 'Zirkulation_AUS_WTag'  um 21:30. 2015-10-24 21:29:22.181,Logikprozessor,59 initialisiert;  ,0.3s2015-10-24 21:29:23.215,pingtest,Status1,0.9s2015-10-24 21:29:26.604,Fensterüberwachung,4 TŸren/Tore offenFenster Keller Flur auf Fenster Keller Waschauf Fenster WZ auf Fenster EZ auf,0s2015-10-24 21:29:28.018,Logikprozessor und_street_light,logic took 1.0s (bus2015-10-24 21:29:28.045,Logikprozessor,1.1.40 0/0/1:-> $logic->{Aussenbeleuchtung_abends_an_daemmerung}{receive}(Logik) -> 1/1/1:1 gesendet;  1.1.40 0/0/1:-> $logic->{Rollladen_AZ_OG_daemmlux}{receive}(Logik) -> 3/2/20:1 wird in 20s gesendet;  1.1.40 0/0/1:-> $logic->{Rollladen_Flur_OG_daemmlux}{receive}(Logik) -> 3/2/10:1 wird in 10s gesendet;  1.1.40 0/0/1:-> $logic->{Rollladen_WC_OG_daemmlux}{receive}(Logik) -> 3/2/0:1 wird in 1s gesendet;  1.1.40 0/0/1:-> $logic->{und_street_light}{receive}(Logik) -> nichts zu senden;  $logic->{Rollladen_WC_OG_daemmlux}{transmit}(Logik) -> 3/2/0:1 gesendet (delay);  ,0.9s
                          PHP-Code:
                          Rollladen_WC_OG_daemmlux =>  { receive =>['0/0/1'], transmit => '3/2/0',  translate => sub { return if $input->[0] == 1; return undef ;}, transmit_changes_only=>1delay=>1debug=>},
                          Rollladen_Flur_OG_daemmlux =>{ receive =>['0/0/1'], transmit => '3/2/10'translate => sub { return if $input->[0] == 1; return undef ;}, transmit_changes_only=>1delay=>10debug=>},
                          Rollladen_AZ_OG_daemmlux =>  { receive =>['0/0/1'], transmit => '3/2/20'translate => sub { return if $input->[0] == 1; return undef ;}, transmit_changes_only=>1delay=>20debug=>}, 
                          Zuletzt geändert von JCS; 24.10.2015, 21:15.

                          Kommentar


                            Moin JCS,
                            versuche mal
                            Code:
                             int($input->[0]) == 1
                            Wobei es schon komisch ist, dass es nach einem Neustart geht.
                            transmit_changes_only könnte hier auch der Übeltäter sein. Wie fährst du die Rollos bei einer Null auf das Dämmerungsobjekt wieder hoch? Wenn die GA 3/2/x immer auf 1 steht wird bei deiner Logik kein zweites Mal gesendet.
                            Gruß, Sebastian
                            Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
                            Ruhri? -> Komm zum Stammtisch

                            Kommentar


                              Hallo Sebastian,
                              das werde ich ausprobieren, danke.
                              Die Wetterstation (MDT) sendet den Wert, den der Logikprossor dann auswertet und ein Mal dann die Logik ausführen soll, deshalb auch transmit_changes_only.
                              Bei den Rollos handelt es sich um Velux-Rollos angekoppelt an KNX über Rollo-Aktor und dem klf-50.
                              Die Öffnung erfolgt per Zeit Steuerung.

                              Gruß Chris

                              Kommentar


                                Hallo,

                                die Ursache ist gefunden, das Wiregate wurde durch Plugins ausgbremst, so dass Telegramme nicht mehr zeitnah abgearbeitet wurden.
                                Nach dem Löschen geht es nun wieder.

                                Kommentar

                                Lädt...
                                X