Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    #31
    Zitat von Fry Beitrag anzeigen
    Die Einschränkung auf nur eine transmit-Adresse ist daher auch Absicht. Ich fürchte, wenn man das noch weiter aufbohrt, wird die Konfiguration so kompliziert, dass Konfig-Einträge bald wieder aussehen wie komplette Plugins.
    Der Hintergrund ist folgender:

    Deine Konfig-Einträge würden sich, da gut strukturiert, mit etwas Hirnschmalz wunderbar in einen graphischen Editor verwursten lassen... im Prinzip miteinander verkettete Bausteine:

    EINGANG -> VERARBEITUNG -> AUSGANG

    Wobei Eingang das Ereignis definiert, welches als Trigger für die Aktion dient,
    Verarbeitung sich um Werte-Konvertierungen aller Art kümmert und
    Ausgang das Ergebnis der ganzen Geschichte auf den Bus bzw. sonstwohin schickt.

    Das wäre als reine KNX-Logik-Engine schon reizvoll... wenn man allerdings über eine definierte Schnittstelle auch andere Ein- und Ausgabemöglichkeiten hätte... wären der Kreativität kaum Grenzen gesetzt :-)

    Zitat von Fry Beitrag anzeigen
    Ob man auch einen grafischen Editor für solche Logiken schreiben könnte? "Man" sicher, "ich" nicht :-)
    VG, Fry
    Da kann ich viel besser helfen als bei dem ganzen Perl-Gewurschtel :-)

    Kommentar


      #32
      Zitat von kleinklausi Beitrag anzeigen
      wenn Du jetzt noch die Sonnenstandsberechnung einbauen würdest (siehe verschiedene Beschattungs-Plugins), könnte ich meine Beschattung hier mit bahandeln... Nur ein Vorschlag.
      Hi Moritz, danke für dein Interesse und den Vorschlag.

      Natürlich kannst du die Beschattung bereits jetzt über die Logikengine steuern - du brauchst nur eine Timerlogik, die alle 5 Minuten läuft, den Sonnenstand berechnet und auf den KNX-Bus sendet, und andere Logiken können darauf reagieren. Ich werde diese Logik nicht schreiben, da ich eine Quadra habe, die sendet genau diese Daten bereits regelmäßig. (die Quadra berechnet m.W. den Sonnenstand auch nur - ich glaube kaum, dass sie den misst). Ist also nur "ein bisschen" Astronomie...

      Aus strukturellen Gründen würde ich die beiden Dinge (Sonnenstand berechnen und darauf reagieren) aber zwingend in zwei Logiken auftrennen, die eine regelmäßig per Timer, die andere per Bustraffic getriggert. Noch genauer: die erste Sache würde ich NICHT dem Logikprozessor anvertrauen, ein spezialisiertes Plugin erledigt das zuverlässig und ist dabei CPU-schonender.

      Falls du was zu dem Thema schreibst, zB eine Logikdefinition, wäre ich dir dankbar, wenn du das hier posten könntest.

      Viele Grüße,
      Fry

      Kommentar


        #33
        Zitat von amaridian Beitrag anzeigen
        Da kann ich viel besser helfen als bei dem ganzen Perl-Gewurschtel :-)
        Prima!

        Da haben wir sehr schnell einen Deal. Denn ich kann mit dem ganzen PHP und HTML-Gewurschtel nicht mithalten. Da sind andere viel besser.

        Wenn du also einen grafischen Editor für die Logikengine baust, füge ich die Möglichkeit hinzu, Sockets einzulesen.

        Mehrere KNX-Telegramme als Output einer einzigen Logik... na gut, mach ich dann auch noch. Gefällt mir vom Konzept her nicht super, aber man lässt ja mit sich reden :-)

        VG,
        Fry

        Kommentar


          #34
          Zitat von Fry Beitrag anzeigen
          Code:
              blub => { receive=>'9/5/201', transmit=>'9/5/202', translate => sub { 2*$input; }, },
          Am einfachsten wäre wohl, den receive und transmit Parameter zu erweiter, evtl. so:

          Code:
             blub => 
             {
                receive=> 
                {
                   type=>  'ga',
                   value=> '1/2/3'
                },
                transmit=> { ... },
                translate=> { ... }
             }
          oder eben

          Code:
             blub => 
             {
                receive=> 
                {
                   type=>  'socket',
                   value=> 'socketname'
                },
                transmit=> { ... },
                translate=> { ... }
             }
          Wobei die benutzten Sockets am besten zentral der Reihe nach definiert und in den Logik-Regeln nur aufgerufen werden.

          Kommentar


            #35
            Zitat von kleinklausi Beitrag anzeigen
            wenn Du jetzt noch die Sonnenstandsberechnung einbauen würdest (siehe verschiedene Beschattungs-Plugins), könnte ich meine Beschattung hier mit bahandeln...
            Da bin ich mit Fry völlig einer Meinung: das macht wenig Sinn..
            Es gibt dafür Plugins (von Dir..für die ich das Astro-Dingens gepackt habe ) die man nur entschlacken müsste, eine Trennung ist da durchaus sinnvoll, man muss nicht bei jedem Wind-Telegramm (o.ä.) den Sonnenstand neu berechnen, das lässt sich wunderbar aufteilen..

            Zitat von amaridian Beitrag anzeigen
            Der Hintergrund ist folgender: (multiples senden)
            Ich habe mich da auch Monate (Jahre?)-lang gespuckt, bis ich verstanden hab warum das nicht sinnvoll ist
            Die Möglichkeit kann man leicht schaffen aber um die Risiken und Nebenwirkungen zu erklären braucht man 2J -> Wenn man mal drin ist, KNX ist garnicht so schlecht - und das ist eines der Dinge die daran gut sind!

            Da kann ich viel besser helfen als bei dem ganzen Perl-Gewurschtel :-)
            Mit etwas Abstimmung: sehr gern gesehen!

            Zitat von Fry Beitrag anzeigen
            Wenn du also einen grafischen Editor für die Logikengine baust, füge ich die Möglichkeit hinzu, Sockets einzulesen.
            Das geht ja schon, ich bin jedoch kein Freund davon, funktionierende Webserver ohne lücken nochmal neu zu schreiben..

            Also da wär ich schon dabei, aber es ist nicht Aufgabe des Plugins die config vom TCP-Socket zu empfangen, da fallen mir hundert bessere Varianten ein

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

            Kommentar


              #36
              Zitat von Fry Beitrag anzeigen
              Wenn du also einen grafischen Editor für die Logikengine baust...
              Sorry, wegen meiner unqualifizierten Bemerkung:
              Ist das nicht am Besten in einen (großen) Widget in der CV aufgehoben?

              Ich meine damit "nur" den Editor, nicht die Logik Engine selbst...

              Gruß
              Sascha

              Kommentar


                #37
                Zitat von Fry Beitrag anzeigen
                Aus strukturellen Gründen würde ich die beiden Dinge (Sonnenstand berechnen und darauf reagieren) aber zwingend in zwei Logiken auftrennen, die eine regelmäßig per Timer, die andere per Bustraffic getriggert.
                Danke, macht Sinn!

                Schönes WE und Gruß

                Kommentar


                  #38
                  Zitat von haegar80 Beitrag anzeigen
                  Ist das nicht am Besten in einen (großen) Widget in der CV aufgehoben?
                  Sollte das eines Tages einen releasefähigen Zustand erreichen wäre ich der letzte der dem abgeneigt gegenüberstände :-)

                  Grüße
                  Christian

                  Kommentar


                    #39
                    Na dann macht mal...

                    Ein CV-Widget für die Config des Logikprozessors wäre bestimmt mega-cool. Wie würde das wohl designmäßig aussehen?

                    Aber wie gesagt, bei der Umsetzung XML/HTML/PHP steige ich leider aus. Für irgendwas ist man halt auch schon zu alt... oder fühlt sich jedenfalls so. Und man ist ja immer so alt wie man sich fühlt...

                    VG
                    Fry

                    Kommentar


                      #40
                      Hallo zusammen,
                      smart Home macht wirklich Spaß.

                      Die Kombination des Ansagen-Plugins (jetzt mit integriertem Internetradio) und Logikprozessor-Plugins macht auch Spaß.

                      Hier ein Radiowecker, der NUR an Arbeitstagen und NUR wenn ich da bin (roter Schlüssel am Schlüsselbrett), folgendes tut:

                      * um 7:30 für 30min Radio anschalten

                      * zwischendurch alle 10min die aktuelle Uhrzeit ansagen

                      * einmalig um 7:40 die Aussentemperatur ansagen.

                      Im Logikprozessor (/etc/wiregate/plugin/generic/conf/Logikprozessor.conf) sieht das folgendermaßen aus:

                      Code:
                          # 1. An Arbeitstagen und wenn roter Schluessel da:
                          # Um 7:30 Radio auf 80% Lautstaerke, Sender 'Solo Piano' anschalten
                           wecker1a => { receive=>'SB_rot1', transmit=>'WP_MusicPlayer', 
                                        timer=>{ time=>'07:30', workingday=>1 }, 
                                        translate => sub { $input>0 ? 'SKYSoloPianoV8' : undef } }, 
                      
                          # Uhrzeit zwischen 7:40 und 8:00 alle 10min aufsagen
                          wecker1b => { receive=>'SB_rot1', transmit=>'WP_Uhrzeit', 
                                        timer=>{ time=>'07:40+10m-08:00', workingday=>1 }, 
                                        translate => sub { $input>0 ? $time_of_day : undef } }, 
                      
                          # Aussentemperatur auslesen und um 7:40 ansagen
                          wecker1c => { receive=>['SB_rot1','TA_A2'],  
                                        transmit=>'WP_Temperatur', 
                                        timer=>{ time=>'07:40',workingday=>1}, 
                                        translate => sub { $input->[0]>0 ? $input->[1] : undef } }, 
                      
                          # Um 8:00 Radio aus
                          wecker1d => { transmit=>'WP_MusicPlayer', 
                                        timer=>{ time=>'08:00', workingday=>1 }, 
                                        translate => 'AUS' }, 
                      
                          # 2. An Nicht-Arbeitstagen das Ganze um 09:00:
                          # ....
                          # Übung für den geneigten Leser :-)
                      Jetzt muss nur noch das Haus fertigwerden... (aktueller Stand 60% des Rohbaus).

                      Have fun!
                      Fry

                      PS.

                      Wen's vielleicht verwirrt: bei mir tauchen Gruppenadressen ('1/2/3') niemals in Configfiles auf. Stattdessen haben alle GAs Namen, die mit einem eindeutigen und für mich verständlichen Wortkürzel beginnen.

                      Hier ein Eintrag meiner /etc/wiregate/eibga.conf:

                      Code:
                      [6/2/186]
                      DPTId = 9
                      DPTSubId = 9.001
                      name = TA_A2 Aussenlufttemperatur (28.7BDE1B030000) EG Aussenbereich
                      Dank des flexiblen Wiregate-Daemons (=Makki) ergibt

                      Code:
                      $eibgaconf{TA_A2}{ga}
                      die Gruppenadresse '6/2/186', die ich mir schlechter merken kann als 'TA_A2' (T=Temperatur, A=Aussen, A2=Aussenbereich 2. Ebene). Analog 'SB_rot1' = Schluesselbrett, erster roter Schlüssel, und 'WP_...'= Wiregate Paging-Kanal (geht auf alle Russound-Kanäle).

                      Kommentar


                        #41
                        Erstmal danke für das Plugin. Ich habe mich gestern mal hingesetzt und wollte die Funktionalität einiger selbst geschriebener Plugins umziehen, leider bis jetzt nur mit mäßigem Erfolg.
                        Ist es eigentlich normal, dass das Logikprozessor Plugin ununterbrochen aufgerufen wird? Bei mir sieht das z.B. so aus, also mehrere Aufrufe pro Sekunde:

                        Code:
                        2012-06-26 07:35:51.263,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'DaemmerungAus' um 7:00.
                        2012-06-26 07:35:51.340,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'DaemmerungAus' um 7:00.
                        2012-06-26 07:35:51.805,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'DaemmerungAus' um 7:00.
                        2012-06-26 07:35:51.877,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'DaemmerungAus' um 7:00.
                        2012-06-26 07:35:52.150,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'DaemmerungAus' um 7:00.
                        2012-06-26 07:35:52.188,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'DaemmerungAus' um 7:00.
                        2012-06-26 07:35:52.562,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'DaemmerungAus' um 7:00.
                        Man merkt, dass das Wiregate deutlich ächzt, wenn der Logikprozessor läuft, alle Aktionen die ansonsten prompt ausgeführt werden (z.B. Nachdimmen in einem anderen Plugin) passieren jetzt im Worst-Case erst mit 3-4s Verzögerung.

                        Kennt jemand das Problem?

                        Kommentar


                          #42
                          Der Bug ist bekannt, sollte aber bereits seit einigen Versionen behoben sein. Das Problem war, dass das Plugin bei jedem Aufruf alles komplett initialisiert hat, um beim nächsten Aufruf erstmal alle Variablen wieder zu löschen.

                          Hast du die neueste Version? Hast du es irgendwie modifiziert, und sei es nur Name oder Pfad?

                          Falls das Problem weiter besteht, kannst du gerne mal deine Conf-Datei posten. Ich sehe es mir dann an.

                          VG, Fry

                          PS. Noch was: falls der Logikprozessor mit Verzögerung arbeitet, liegt das idR nicht an der Workload (der Prozessor ist "light on resources" geschrieben), sondern daran, dass er knx_read aufruft (das tut er standardmäßig mit Parameter "300"), was oft zu einer 1s-Verzögerung pro Call führt, nämlich dann, wenn kein KNX-Gerät antwortet. (das Wiregate antwortet sich selbst nicht). Die 300 wird in einer späteren Version korrigiert werden.

                          Kommentar


                            #43
                            Danke schonmal für die Hilfe, ja das Plugin habe ich gestern frisch aus dem SVN geholt.

                            Das Problem tritt auf, sobald ich die Logik DaemmerungAus aktiviere:

                            Code:
                              rolloBuero => { receive => ['0/5/4','1/7/21'], transmit => '2/1/28', translate => sub{return (($input->[0] > 0 ? 1 : ($input->[1] > 0 ? 0 : 1)))}, debug => 1},    
                                referenzFahrt => { transmit => '2/7/0', timer => { time => ['04:30']}, translate => 1 },
                                RolloEGAb => { transmit => '2/0/0', timer => { time => ['21:00']}, translate => 1 },
                                RolloOGAb => { transmit => '2/0/7', timer => { time => ['21:00']}, translate => 1 },
                                DaemmerungAn => { transmit => '0/1/18', timer => { time => ['21:00']}, translate => 1 },
                                DaemmerungAus => { transmit => '0/1/18', timer => { time => ['7:00']}, translate => 1000 },
                                memoryDaemmerung => { transmit => '0/1/18'},
                                DaemmerungStatus => { receive => '0/1/18',transmit => '0/5/4', translate =>  sub{$input > 80 ? 0 : 1}, cool => 100},
                                memoryDaemmerungStatus => { transmit => '0/5/4'},

                            Kommentar


                              #44
                              Grmpf, ich hab den Fehler gefunden, das Zeitformat war falsch.

                              Statt 07:00 habe ich 7:00 angegeben und das regelmäßig übersehen beim drüberschauen.
                              Nachdem ich den Code hier gepostet habe, ist es mir aufgefallen.

                              Jetzt geht's. Danke dir.

                              Kommentar


                                #45
                                Prima!
                                (Das ist mir ein wenig peinlich, eigentlich sollte guter Code robust genug sein, um 07:00 und 7:00 beides zu akzeptieren... naja, ist ein Todo für später.)
                                Fry

                                Kommentar

                                Lädt...
                                X