Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    #76
    Hallo Fry,

    Danke für deine Hilfe. Habe es nun wie folgt abgeändert:

    Code:
    DG_MBad_DIM => { receive=>['7/1/18','5/0/4'], transmit=>'1/4/89', translate => sub { 
    	if (int($input->[0]) == 0) { 
    		return 0; 
    	}
    	if (int($input->[1]) == 1) { 
    		return 5; 
    	} 
    	return $day ? 100 : 30; 
    }, },
    DG_Ankl_DIM => { receive=>['7/1/19','5/0/3'], transmit=>'1/4/95', translate => sub { 
    	if (int($input->[0]) == 0) { 
    		return 0; 
    	} 
    	if (int($input->[1]) == 1) { 
    		return 5; 
    	} 
    	return $day ? 100 : 30; 
    }, },
    es funktioniert auch... irgendwie, aber gefühlt nicht ganz richtig
    Problem eins, die Logiken dauern zu lange. Sprich, wenn der PM eine Bewegung erkennt werden die Lampen zuerst auf 100% angedimmt (DALI andimmen auf 2,5s) und erst dann kommt der Dimmwert hinterher. Als ich nur zwischen Tag und Nacht unterschieden habe wurde direkt auf 30% gedimmt.
    Zweitens kommt es mir so vor, als wenn manchmal bei Bewegung auf 100% gegangen wird und erst wenn ich den Taster für schlafen erneut betätige wird die Logik ausgeführt. Also wie wenn der gespeicherte Zustand von "einer schläft" nicht korrekt abgefragt wird.

    Ist momentan noch etwas schwammig das ganze und "fühlt" sich so noch nicht richtig an, ich werde aber versuchen, ob ich das ganze mal etwas ausführlicher gedebuggt bekomme.

    Dennoch Danke für deine Hilfe und das tolle Plugin!
    Mit freundlichen Grüßen
    Niko Will

    Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
    - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

    Kommentar


      #77
      Prima, also erster Bug schon mal behoben.

      Was das Tempo angeht, so hast du dir das selbst "eingebrockt":
      du hast eine zweistufige Logik, d.h. eine Logikroutine braucht als Input den Output einer anderen Logikroutine. Das bedeutet, der Logikprozessor muss mind. zweimal ausgeführt werden, bis der Effekt sich einstellt. Das würde ich reduzieren. (oder die beiden Logiken auf zwei verschiedenen Wiregates ausführen). Also so umschreiben, dass du ohne die Zwischen-GAs 5/0/* auskommst. Dann geht es in Sekundenbruchteilen.

      VG, Fry

      Kommentar


        #78
        Hallo Fry,

        alles klar. Habe dabei gleich noch einen "Bug" in meiner KNX Installation gefunden... die GAs hatten kein Lese-Flag (habe ewig nach dieser Einstellung gesucht bis ich mal drauf gekommen bin, dass man das beim Gerät und nicht in der GA Ansicht einstellen muss). Mit Lese-Flag und dem Auswerten der zwei "Schlafen"-Flags in den einzelnen Logiken sieht das ganze schon besser aus. Auch die Geschwindigkeit passt nun. Werde das mal weiter beobachten und berichten. Bis hierher mal vielen Dank für deine Hilfe!
        Mit freundlichen Grüßen
        Niko Will

        Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
        - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

        Kommentar


          #79
          transmit_changes_only ergänzt

          Hi zusammen!

          Wie weiter oben bereits angekündigt habe ich transmit_changes_only als Option im SVN ergänzt. Es lief in meiner Konfig. die letzte Zeit wie gewünscht. Der Beispielcode sieht dann wie folgt aus:

          Code:
            logik_regenbrause_in_benutzung => {
              receive => '4/1/71',
              transmit => '6/1/0',
              transmit_changes_only => 1,
              translate => sub {
                return ($input gt 25) ? 1 : 0;
              }
            }
          Beste Grüße,
          Timo

          Kommentar


            #80
            Verhalten bei en_US.UTF-8

            Hallo zusammen,

            @Fry: erstmal herzlichen Dank für das Plugin.

            Ich habe das Plugin auf meinem Communitygate, welches ich aus Gewohnheit mit en_US.UTF-8 als locals installiert hatte.

            Dies war jedoch der Grund, warum machen Timer bei mir nicht liefen. Genau genommen die am späten Abend (das zu finden dauerte nur etwas, da die Tests am Vormittag erfolgreich waren. ).

            Das Plugin verwendet den Parameter %X vom date Befehl und somit die Ausgabe der Uhrzeit im locals-Format (in meinem Fall 12h).

            Der Parameter %T gibt die Uhrzeit immer im 24h-Format aus und damit funktioniert das Plugin auch auf Systemen mit en_US.UTF-8 wie erwartet.

            Vielleicht bin ich der einzige mit dem Fehler, da ja meist de_DE verwendet wird. Aber wenn nicht, ist zumindest die Lösung über die Suche im Forum dokumentiert.

            Gruß

            Christian

            Kommentar


              #81
              Wie wärs mittelfristig mit SBC (send-by-change), das wär mir jetzt geläufiger

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

              Kommentar


                #82
                @Christian: danke für den Hinweis! (aktuell ändere ich das Plugin aber nicht, weil Wiregate auf Baustelle und offline)

                @Makki: whatever, in KNX-Land ist eben alles ein wenig anders....

                VG, Fry

                Kommentar


                  #83
                  Christian, Timo,
                  da ich jetzt wieder online bin, konnte ich den Logikprozessor-Code mal wieder ansehen:
                  Timo: good job, du hast dankenswerterweise vor allem Code eingefügt und nichts/wenig verändert. Alles übernommen, auch wenn ich Prowl mangels Anwendung nicht testen kann. Danke!
                  Christian: Änderung in %T ist gemacht.
                  Viele Grüße,
                  Fry

                  Kommentar


                    #84
                    Neue Option für Logiken: transmit_on_startup=>1

                    Damit wird die Logik beim Startup des Logikprozessors ausgeführt und ein Telegramm gesendet. Vorsicht: wenn viele Logiken dieses Flag gesetzt haben und ihre jeweiligen Receive-Adressen abfragen und diese lang zur Antwort brauchen, kann dadurch der Logikprozessor in der Initialisierung bereits einen Timeout einfangen (Plugins dürfen max 10s laufen) - dann ist er nur teilweise initialisiert und wird danach u.U. nicht alle Logiken ausführen. Also: use with caution.

                    Timo: könntest du bitte in die Logikprozessor.conf noch eine Beispiellogik für prowl einfügen? Danke!

                    VG, Fry

                    Kommentar


                      #85
                      Eine Frage für eine einfache xor - Anwendung im Logikprozessor:

                      Ich möchte den Wert einer GA invertieren (0 -> 1 und 1->0) (ist notwenidg, da Doppelbelegung eines 2-fach-Tasters und sich sonst Jalousierichtung und Beleuchtungssteuerung behindern). Ein

                      [HILFE]xor => { receive=>['11/0/0'], transmit=>'2/2/0', translate => sub { 1 xor $input; }, debug=>1 },[/HILFE]

                      bringt jedoch tatsächlich NICHTS. Im plugin-log steht:

                      [INFORMATION]Logikprozessor,1.1.111 11/0/0: -> $logic{xor}{receive}(Logik) -> 2/2/0: gesendet ,0.3s,[/INFORMATION]

                      Offensichtlich frisst er in der Logikdefinition nicht die 1 als zweiten Operanten. Hab auch schon probiert das Ganze als '1' einzugeben und statt xor das ^benutzt - immer dasselbe Ergebnis.

                      Was mache ich denn da nun falsch?
                      Viele Grüße Jens

                      Kommentar


                        #86
                        Auf die Schnelle versuch mal das: Lass die eckigen Klammern bei receive weg (nur eine GA, da willst du ein skalares $input), und nimm

                        Code:
                        translate => sub { ! int($input) }
                        Das ! steht für NOT. Ein xor mit 1 würde sicher auch funktionieren, wichtig ist aber das int(), denn der Inputwert kommt häufig als String, nicht als numerischer Wert.

                        Have fun,
                        Fry

                        Kommentar


                          #87
                          Hallo Fry,

                          danke für die Hilfe. Habe Deine Hinweise beachtet und die angesprochenen Änderungen vorgenommen. Der Prozessor spuckt nun auf die entsprechende GA eine 1 aus

                          [INFORMATION]19:57:21.850,Logikprozessor,1.1.111 11/0/0: -> $logic{xor}{receive}(Logik) -> 2/1/40:1 gesendet ,0s,[/INFORMATION]

                          Allerdings kommt auf dem EIB jedoch nur auf der 11/0/0 etwas an.

                          [INFORMATION]19:57:21.715,A_GroupValue_Write,1.1.111,11/0/0,00,,,,0,low,6,T_DATA_XXX_REQ,0[/INFORMATION]

                          Der Prozessor arbeitet also, aber auf der "Ziel"GA kommt am EIB nichts an.
                          Wo liegt denn nun jetzt der Fehler
                          Viele Grüße Jens

                          Kommentar


                            #88
                            Das liegt wahrscheinlich daran, dass deine /etc/wiregate/eibga.conf nicht gepflegt ist. Der Logikprozessor holt sich aus dieser Datei den passenden Datentyp fürs Schreiben auf den Bus. Die Sendeadresse muss dort mit korrekter DPTSubId hinterlegt sein.

                            Zweiter Tipp: Logiken müssen eindeutige Namen haben. Also nenne die Logik vielleicht besser "xor1", die nächste dann "xor2" usw. Bei mehreren gleichnamigen führt der Logikprozessor nur die letzte definierte Logik aus.

                            Grüße,
                            Fry

                            PS. das gleiche gilt übrigens für die receive-Adressen

                            Kommentar


                              #89
                              Hatte die entsprechenden GA in der eibga.conf eingepflegt. Die SubID habe ich in verschiedenen Variationen jetzt mal variiert. Jedesmal mi dem selben Ergebnis.
                              Aber vielleicht mal die konkrete Situation.
                              Die GA's: 2/1/40 Schalten Licht; 2/1/41 Status Licht; 2/2/0 Jalousie auf/ab; 11/0/0 hilfs-GA für Licht.

                              Taster ist ein Merten 2-fach-Taster (INSTABUS Tastermodul 2fach System M).
                              Applikation ist die Schalt.Dim.Jal.Szene.Status 1911/1.0.
                              Tasten sind alle als Jalousie belegt (damit ich die Unterscheidung kurzer/langer Tastendruck habe).

                              Das linke Tastenpaar (darum geht es) ist folgendermassen belegt:
                              Taste 1 Jalousie, Fahrtrichtung auf
                              Taste 2 Jalousie, Fahrtrichtung ab
                              Plan war:
                              Kurzer Tastendruck oben (Schritt/Stop-Objekt) - Licht an -> funktioniert nicht
                              Langer Tastendruck oben - Jalousie hoch -> das funktioniert
                              Kurzer Tastendruck unten (Schritt/Stop-Objekt) - Licht aus -> funktioniert nicht
                              Langer Tastendruck unten - Jalousie runter -> das funktioniert
                              Objekte sind so belegt wie im Anhang gezeigt.

                              Die GA 11/0/0 als Hilfs-GA für die Lichtschaltung hab ich nur eingeführt, weil ansonsten beim Tastendruck oben das Licht ausging und unten an (liegt wohl an der Applikation, welche geladen ist) - das wollte ich mit dem Logikprozessor und der Umkehr des gesendeten Wertes ändern.
                              Probiert habe ich für 11/0/0 und 2/1/40 die SubID's 1.001 1.007, 1.008, 1.017.
                              Nichts von alledem funktioniert.
                              Verzweiflung macht sich breit.

                              So langsam denke ich, ich sollte wohl eher akzeptieren, dass man bei dieser speziellen Konstellation das Licht unten anschaltet und oben aus.

                              Grüße

                              Jens

                              PS @ Fry: Die Funktion im Logikprozessor habe ich natürlich umbenannt in xor01
                              Angehängte Dateien
                              Viele Grüße Jens

                              Kommentar


                                #90
                                Hi Jens -

                                ich kann mich heute nicht tiefer mit dem Problem befassen, werde mir das aber nächste Woche nochmal ansehen. Nur soviel: nicht verzweifeln, das Problem wird sich ganz bestimmt lösen lassen, und idR lernt man was dabei.

                                In aller Kürze: Wenn die DPTSubId eingepflegt ist, ist nicht wirklich wichtig ob 1.017 oder 1.008 oder was auch immer. Wichtig für den Logikprozessor ist aber, dass für ALLE vorkommenden GAs die DPTSubId eingepflegt ist!

                                Poste doch mal einen Ausschnitt aus der Logikprozessor-Konfi, dem wiregate_plugin.log und dem eib.log. Außerdem stelle bitte debug=>1 bei der xor-Logik.

                                Viele Grüße,
                                Fry

                                PS. Ich gehe davon aus, dass du die neueste Version des Logikprozessors aus dem SVN verwendest. Falls nicht, hol dir die bitte.

                                Kommentar

                                Lädt...
                                X