Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    ok, sollte alles funktionieren. zumindest sind keine fehlermeldungen in den log files aufgetaucht.

    Das Telegramm wurde bisher nur einmal versendet, allerdings sehe ich in der wiregate_plugin.log jetzt auch nicht mehr, ob der timer wirklich jede minute aufgerufen wird. Ich gehe mal davon aus, dass debug nur bei einem Telegramm Versand aufgerufen wird.

    Code:
    2013-08-05 15:04:00.786,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'timerShadeTemp'  um 15:05.
    2013-08-05 15:04:00.796,Logikprozessor.pl,$logic->{timerShadeTemp}{transmit}(Logik) -> 7/0/1:1 gesendet (Timer);  ,0s,
    2013-08-05 15:05:01.110,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'timerShadeTemp'  um 15:06.
    Ich hab versucht die Temperatur manuell niedriger vorzugeben, aber das hilft nicht. Die letzten 10 Minuten wurde nichts mehr ausgegeben.

    Kommentar


      Zitat von Fry Beitrag anzeigen
      @Elo: deine receive-Adressen kommen vom Wiregate? (1-wire oder Logik oder anderes Plugin?) Oder von einem KNX-Gerät, das zwar regelmäßig sendet, aber nicht auf Lesetelegramme reagiert? Oder nicht schnell genug?
      Von einem KNX-Gerät. Ich sehe im Gruppenmonitor immer Lese- und Antworttelegramme zur 1/2/90, nicht jedoch zu der anderen receive-Adresse (nicht einmal Lesetelegramme). Mir ist nicht klar warum das so ist. Vielleicht liegt hier das Problem?

      Die beste Lösung ist mE immer, die Werte regelmäßig (alle 5-30min) senden zu lassen und dann mit der Option eibd_cache=>2000 dafür zu sorgen, dass das vom Logikprozessor aufgerufene knx_read ohne Verzögerung den letzten Wert liefert.
      Ich habe das zyklische Senden für die beiden receive-Adresse mal aktiviert. Das bedeutet aber, dass ich das Ergebnis der UND-Verküpfung nicht von Hand übersteuern kann, da es beim nächsten zyklischen Senden wieder gesetzt wird. Ich müsste also doch bei der "Lesevariante" bleiben.

      Kommentar


        Zitat von Elo Beitrag anzeigen
        Von einem KNX-Gerät. Ich sehe im Gruppenmonitor immer Lese- und Antworttelegramme zur 1/2/90, nicht jedoch zu der anderen receive-Adresse (nicht einmal Lesetelegramme). Mir ist nicht klar warum das so ist. Vielleicht liegt hier das Problem?
        Ganz sicher JA.

        Hast du diese andere receive-Adresse korrekt mit DPTSubId in /etc/wiregate/eibga.conf eingetragen?

        VG, Fry

        Kommentar


          Zitat von Fry Beitrag anzeigen
          Hast du diese andere receive-Adresse korrekt mit DPTSubId in /etc/wiregate/eibga.conf eingetragen?
          Ich habe es gerade überprüft, es ist für beide receive-Adressen der Eintrag "DPTSubId = 1.001" vorhanden. Außer bei "name=" unterscheiden sich die Einträge für die beiden Adressen auch nicht.
          Im Augenblick tauchen aber gar keine Lesepakete mehr im Gruppenmonitor auf. Das Plugin habe ich noch mal neu initialisiert, die konfigurierte Logik funktioniert auch noch. Was kann ich noch überprüfen?

          Edit: Oder liegt es daran, dass ich gestern das zyklische Senden für die receive-Adressen eingeschaltet habe (alls 5 Min.) und somit nicht gelesen wird, weil vorher schon ein neues Paket kommt? Wie ist der Default-Zyklus für das Lesen?

          Kommentar


            Der Default-Zyklus ist 300s.

            Kommentar


              Neues Plugin: Logikprozessor.pl

              Zitat von Fry Beitrag anzeigen
              Der Default-Zyklus ist 300s.
              Ich verstehe es so: Wenn sich eine der beiden receive-Adressen auf "1" ändert, wird der Status der anderen Adresse über ein Lesetelegramm nur dann abgefragt, wenn der Empfang des letzen Telegramms länger als 5 Min her ist?

              Kommentar


                So verstehe ich es auch. Setze in deiner Logik bitte eibd_cache=>0 und sieh in /var/log/eib.log nach, ob das Wiregate entsprechende Lesetelegramme schickt. Auch kannst du debug=>1 setzen in der Logik.
                Und natürlich kannst du auch plugin_log(...) in der Logik fürs Debugging verwenden.
                Viel Erfolg!
                VG, Fry

                Kommentar


                  Neues Plugin: Logikprozessor.pl

                  Wenn du es auch so siehst, wird es wohl stimmen. Es passt ja auch zu dem beobachteten Verhalten. Somit habe ich aufgrund des testweise eingeschalteten zyklischen Sendens die Telegramme nicht gesehen, es ist jetzt also alles ok. Ich werde die Funktion mal weiter beobachten und testen.
                  Ist es eigentlich auch möglich, eine Abhängigkeit in die Reihenfolge zu bringen, in der die beiden Receive Adressen auf "1" gehen? Sprich: 1. Adresse "1" danach 2. Adresse "1" = sende "1", jedoch 2. Adresse "1" danach 1. Adresse "1" = keine Aktion.

                  Kommentar


                    Zitat von Elo Beitrag anzeigen
                    Ist es eigentlich auch möglich, eine Abhängigkeit in die Reihenfolge zu bringen, in der die beiden Receive Adressen auf "1" gehen? Sprich: 1. Adresse "1" danach 2. Adresse "1" = sende "1", jedoch 2. Adresse "1" danach 1. Adresse "1" = keine Aktion.
                    Dafür gibt es keinen einfachen Weg...

                    Kommentar


                      Hi,

                      ich habe ein Problem mit der prowl Funktion in Zusammenhang mit dem Parameter transmit_changes_only.

                      untenstehendes Beispiel sendet mir bei Temperturen über 4 Grad alle 5 Minuten die prowl Meldung bis die Temperatur wieder unterhalb 4 Grad ist.

                      Code:
                         Kuehlschrank_monitor => {
                            receive => '14/5/14',
                            transmit_changes_only => 1,
                            translate => sub {
                               if ($input>4) {
                                  sendProwl(
                                      event => 'Alarm: Kühlschrank Keller',
                                      description => 'Temperatur: '.$input.' °C',
                                  );
                               }
                            },
                            #debug => 1
                         },
                      Zusätzliche Frage:
                      mit debug=1 wird jede "Logikbearbeitung" ins plugin Log geschrieben.
                      Ich hätte gerne jeweils einen Eintrag im Plugin Log, wenn etwas gesendet wurde. Gibt es dazu eine elegante Lösung?

                      Danke
                      Gruss
                      Marcel
                      seit: 11'08 KNX / 04'09 HS3 / 12'09 WG mit 21 Temp & 4 Feuchtesensoren / 10'10 Enocean mit 15 Fenstergriffe Hoppe / 02'11 MBus2Serial Gas-Wasserzähler
                      HS3: 99% / VISU: PV 99%, iPad 99%
                      60 Akt. Linie1 / 14 Akt. Linie2

                      Kommentar


                        Sorry Marcel,
                        die Prowl-Funktionalität nutze ich nicht, kann sie daher auch nicht debuggen oder modifizieren. Zu deiner anderen Frage: ja klar, programmiere es doch einfach selbst (suche nach allen knx_write-Statements im Plugin und füge ein plugin_log() hinzu).
                        VG, Fry

                        Kommentar


                          Hallo Fry,

                          Kannst du mir behilflich sein? Folgendes schaffe ich nicht, mit deinem Logikprozessor abzubilden.

                          Ich möchte gerne die Nachtlichter in den Kinderzimmern ausschalten, wenn das Rollo hoch gefahren wird. Ich erhalte auf der Rollo-GA die Rückmeldewerte der Rollohöhe von 0-255 in 25er Schritten. Ich möchte gerne die Nachtlichter abschalten, sobald die Rollohöhe kleiner als 70 wird ist.

                          Ich dachte, hierfür würde sich der Complexe Fall eignen.
                          Code:
                          SternenhimmelAlina => { receive=>'3/1/9', 
                                           transmit=>'1/1/16', 
                                           state => {val1=>0, val2=>0}, 
                                   translate => sub { $state->{val2}=$state->{val1}; $state->{val1}=$state->{result}; 
                                              if ($input<70){if($state->{val1}>=70){0} }}, 
                              },
                          3/1/9 ist dabei die Rollohöhe
                          1/1/16 ist das Licht

                          Nun dachte ich, dass die IF Bedingung ja nur dann erfüllt sei, wenn die aktuelle Rollohöhe kleiner als 70 ist, die vorher gemeldet Höhe jedoch über 70 liegt. Und weiter dachte ich (naiv), dass auch nur dann eine 0 gesendet würde, wenn die IF Bedingung erfüllt ist.

                          Leider wird jedoch bei jedem empfangenen Wert auf der Rollo-GA eine Null auf die Licht-GA gesendet, (egal ob das Rollo hoch oder runter fährt).

                          Daher meine Frage: Kann ich auch _nicht_ senden, oder muss stets gesendet werden, wenn etwas empfangen wurde?

                          Grüße und Danke
                          Guste

                          Kommentar


                            Im Prinzip korrekt gedacht. Fast.

                            Versuch es mal so:

                            Code:
                            SternenhimmelAlina => { receive=>'3/1/9', 
                                             transmit=>'1/1/16', 
                                             state => {lastval=>undef}, 
                                     translate => sub { 
                                              my $oldval=$state->{lastval};
                                              my $newval=int($input);
                                              $state->{lastval}=$newval;
                                              return ($oldval>=70 && $newval<70) ? 0 : undef;
                                      }
                                },
                            Nicht senden geht, indem man undef zurückgibt.

                            VG,
                            Fry

                            Kommentar


                              Fry, you made my night

                              Es funktioniert! Danke!

                              Ich versuche die Tage dann mal zu verstehen, ob nur das undef fehlte bzw, was die restlichen Änderungen bewirken.

                              Grüße
                              Guste

                              Kommentar


                                Generell bei Lichtlogiken sollte man die Hinweise im Thread "Darfs ein bisschen schneller sein" befolgen. Insbesondere das Ersetzen eines "if" durch "while" im wiregated.pl hilft, bei einem KNX-Bus mit viel Traffic die Verzögerungen des Wiregate STARK zu reduzieren.
                                Have fun,
                                Fry

                                Kommentar

                                Lädt...
                                X