Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    Übrigens sehe ich eine Uneleganz beim Jumi-Patch (%plugin_subscribe_read/write): wenn zB plugin_subscribe UND plugin_subscribe_write für eine GA und ein Plugin gesetzt sind, wird das Plugin in diesem Fall ZWEImal aufgerufen.

    Im Logikprozessor werde ich das natürlich zu verhindern wissen...

    Kommentar


      Zitat von Fry Beitrag anzeigen
      Übrigens sehe ich eine Uneleganz beim Jumi-Patch (%plugin_subscribe_read/write): wenn zB plugin_subscribe UND plugin_subscribe_write für eine GA und ein Plugin gesetzt sind, wird das Plugin in diesem Fall ZWEImal aufgerufen.
      Wäre es denn in dem Fall nicht sinnvoll nur das normale plugin_subscribe zu nutzen? Als Plugin-Autor hat man doch die volle Freiheit, oder?

      Zitat von Fry Beitrag anzeigen
      Ja, sowohl denkbar als auch sinnvoll. Werde ich dann gemeinsam mit dem $plugin_subscribe_read/write einarbeiten. Dank %plugin_cache verursacht sowas auch keine Performanceeinbußen, weil es ja nur einmal (beim Start des Logikprozessors) eingelesen wird.
      Super. Ich freue mich schon immer mehr auf das neue PL. Hoffentlich kommt es bald :-)

      VG
      Micha

      Kommentar


        Zitat von Fry Beitrag anzeigen
        Übrigens sehe ich eine Uneleganz beim Jumi-Patch (%plugin_subscribe_read/write): wenn zB plugin_subscribe UND plugin_subscribe_write für eine GA und ein Plugin gesetzt sind, wird das Plugin in diesem Fall ZWEImal aufgerufen.

        Im Logikprozessor werde ich das natürlich zu verhindern wissen...
        Das sollte dann aber Sache des Pluginentwicklers sein darauf zu achten, dass man sich nicht 2x auf eine GA registriert.

        Kommentar


          Zitat von kingolli Beitrag anzeigen
          Ja, andere Plugins spielen keine Rolle! Wenn ich die erwähnten Jalousie Logiken auskommentiere, ist Ruhe auf dem Bus.

          Ich habe jetzt mal die Cache Zeit auf 86400 (=24 Stunden) erhöht, weil ja die Position der Jalousie normalerweise nur gemeldet wird, wenn sie auch in Bewegung war und das sollte mindestens einmal am Tag sein. Mal sehen, ob es was bringt.

          Ich werde berichten.

          Grüße
          David
          Da das Problem immer noch und an andere Stelle auch nochmal aufgetreten ist, habe ich versucht, das Ganze besser einzugrenzen. Folgende Sachen sind dabei aufgefallen:

          - ich habe folgende Logik für meine Beregnung definiert, wobei 13/1/1 ein DPT 1.001 Bool ist, um die Automatik zu aktivieren bzw. deaktivieren.

          Code:
          Beregnung_Pumpe_An_Debug =>   { fetch=>'13/1/1', transmit=>'1/2/1',  timer=>{time=>['00:00+5m']}, eibd_cache=>86400, translate => sub {       
              	plugin_log($plugname,"Beregnung_Pumpe_An 13/1/1='". int($input)."'\n");
          	return unless int($input) == 1; 0
              
              }, debug=>1},

          - ich setze den Wert in der Visu per Schalter (GA 13/1/1)
          Code:
          eib.log
          2014-05-20 10:11:33.425,A_GroupValue_Write,1.1.241,13/1/1,01,1,,1.001,1,low,7,T_DATA_XXX_REQ,0
          - anschliessend kann der Logikprozessor den Wert erfolgreich lesen (aus dem Cache, da es in der eib.log keinen Read-Eintrag dazu gibt)

          Code:
          plugin.log
          2014-05-20 10:10:01.456,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='0'
          2014-05-20 10:15:01.197,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='1'
          2014-05-20 10:25:01.247,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='1'
          2014-05-20 10:30:00.997,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='1'
          2014-05-20 10:35:01.833,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='1'
          ...
          3. irgendwann (in meinem Fall nach sechs Stunden) dann das:


          Code:
          plugin.log
          2014-05-20 15:50:00.907,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='1'
          2014-05-20 15:55:01.250,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='1'
          2014-05-20 16:00:03.083,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='0'
          2014-05-20 16:05:02.104,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='0'
          2014-05-20 16:10:01.434,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='0'
          2014-05-20 16:15:01.544,logikprozessor.pl,Beregnung_Pumpe_An 13/1/1='0'
          
          eib.log
          2014-05-20 16:00:14.256,A_GroupValue_Read,1.1.241,13/1/1,00,0,,1.001,0,low,7,T_DATA_XXX_REQ,0
          2014-05-20 16:00:14.270,A_GroupValue_Read,1.1.241,13/1/1,00,0,,1.001,1,low,7,T_DATA_XXX_REQ,0
          2014-05-20 16:05:06.342,A_GroupValue_Read,1.1.241,13/1/1,00,0,,1.001,0,low,7,T_DATA_XXX_REQ,0
          2014-05-20 16:10:03.720,A_GroupValue_Read,1.1.241,13/1/1,00,0,,1.001,0,low,7,T_DATA_XXX_REQ,0
          2014-05-20 16:15:03.669,A_GroupValue_Read,1.1.241,13/1/1,00,0,,1.001,0,low,7,T_DATA_XXX_REQ,0
          2014-05-20 16:20:03.715,A_GroupValue_Read,1.1.241,13/1/1,00,0,,1.001,0,low,7,T_DATA_XXX_REQ,0
          2014-05-20 16:25:04.577,A_GroupValue_Read,1.1.241,13/1/1,00,0,,1.001,0,low,7,T_DATA_XXX_REQ,0
          Es wird wieder versucht, den Wert vom Bus zu lesen, was natürlich nicht funktioniert, da ja niemand antworten kann...

          Wie macht man das denn, wenn man nur eine "virtuelle" GA hat, die ich einmalig setze, aber dauerhaft als Wert erhalten will?

          Grüße
          David

          Kommentar


            Zitat von kingolli Beitrag anzeigen
            Wie macht man das denn, wenn man nur eine "virtuelle" GA hat, die ich einmalig setze, aber dauerhaft als Wert erhalten will?
            Mit einer Logik, die den letzten Wert der GA alle 15min wiederholt:

            Code:
            ga_cont=>{ receive=>'1/2/3', transmit=>'1/2/3', translate=>sub{$input}, delay=>900 },
            Dabei werden die spezifischen Eigenschaften des delay-Timers (analog einer retriggerbaren Treppenlichtschaltung) ausgenutzt. Wenn ein Timer noch laeuft und es kommt von extern ein neuer Wert auf der GA rein, wird der Timer gecancelt, der Wert sofort ueberschrieben und nach 900s der neue Wert gesendet.

            Außerdem löst die Logik sich selbst immer wieder aus, wiederholt also den letzten Wert immer wieder.

            Damit ist der letzte Wert immer im Cache drin.

            Kommentar


              Zitat von Fry Beitrag anzeigen
              Mit einer Logik, die den letzten Wert der GA alle 15min wiederholt:

              Code:
              ga_cont=>{ receive=>'1/2/3', transmit=>'1/2/3', translate=>sub{$input}, delay=>900 },
              Dabei werden die spezifischen Eigenschaften des delay-Timers (analog einer retriggerbaren Treppenlichtschaltung) ausgenutzt. Wenn ein Timer noch laeuft und es kommt von extern ein neuer Wert auf der GA rein, wird der Timer gecancelt, der Wert sofort ueberschrieben und nach 900s der neue Wert gesendet.

              Außerdem löst die Logik sich selbst immer wieder aus, wiederholt also den letzten Wert immer wieder.

              Damit ist der letzte Wert immer im Cache drin.
              Manchmal kann es so einfach sein. ;-)

              Vielen Dank für den Tipp und den Logikprozessor im Allgemeinen, das Ding ist echt ein "Brett".

              Grüße
              David

              Kommentar


                Hallo, ich verzweifel gerade am Logikprozessor.

                Ich möchte eine Gruppenadresse invertieren, sprich der Multi I/O liefert mir bei meinen Fensterkontakten für offen eine 0 und für geschlossen eine 1. Ich brauche das aber genau umgekehrt. Vorher im Beitrag war das ganze schon mal Thema. Meine Config sieht nun so aus:

                Code:
                %logic=(
                
                    invert1 => { receive=>'4/1/0',
                                 transmit=>'4/1/20',
                                 translate => sub { ! int($input) },
                                 debug=>1
                               },
                    invert2 => { receive=>'4/1/1',
                                 transmit=>'4/1/21',
                                 translate => sub { ! int($input) },
                                 debug=>1
                               },
                                  
                );
                Die Logdatei sieht so aus:

                2014-05-24 22:21:07.557,Logikprozessor.pl,1.1.254 4/1/0:0 -> $logic{invert1}{receive}(Logik) -> 4/1/20:1 gesendet; ,0.3s,
                2014-05-24 22:21:18.536,Logikprozessor.pl,1.1.254 4/1/1:1 -> $logic{invert2}{receive}(Logik) -> 4/1/21: gesendet; ,0.3s,

                Auf der 4/1/20 scheint er die 0 umzurechnen und zeigt mir zwar eine 1 an. Auf dem Bus habe ich sie aber nicht. Die Comet Visu zeigt mir nichts an.
                Bei der 4/1/21 scheint er aus der 1 nichts zu machen.

                Vielleicht hat jemand einen Tipp für mich?
                MfG, Sven

                endlich eingezogen, aber noch lange nicht fertig...

                Kommentar


                  Sven -
                  deine /etc/wiregate/eibga.conf enthält ziemlich sicher nicht die richtigen DPTSubIds für diese GAs.
                  VG,
                  Fry

                  Kommentar


                    Danke, werde ich morgen gleich mal testen...
                    MfG, Sven

                    endlich eingezogen, aber noch lange nicht fertig...

                    Kommentar


                      Hallo,

                      in der eibga.conf schaut's so aus:

                      Code:
                      [4/1/1]
                      
                      DPTSubId = 1.001
                      
                      DPTId = 1
                      
                      name = Küche P1 Alarm ch0
                      
                      DPT_SubTypeName = DPT_Switch
                      
                      [4/2/1]
                      
                      DPTSubId = 1.001
                      
                      DPTId = 1
                      
                      name = Küche P2 Sabotage ch0
                      
                      DPT_SubTypeName = DPT_Switch
                      
                      [4/1/20]
                      
                      DPTSubId = 1.001
                      
                      DPTId = 1
                      
                      name = Esszimmer P1 Alarm invert
                      
                      DPT_SubTypeName = DPT_Switch
                      
                      [4/1/21]
                      
                      DPTSubId = 1.001
                      
                      DPTId = 1
                      
                      name = Küche P1 Alarm invert
                      
                      DPT_SubTypeName = DPT_Switch
                      Das scheint mir alles richtig zu sein...
                      MfG, Sven

                      endlich eingezogen, aber noch lange nicht fertig...

                      Kommentar


                        Problem könnte vielleicht auch sein, das ich den Logikprozessor vorher schonmal installiert und dann wieder gelöscht habe? In der Plugin Debug-Info ist auch der alte noch drin...
                        MfG, Sven

                        endlich eingezogen, aber noch lange nicht fertig...

                        Kommentar


                          Hm, seltsam. Hast du nach dem letzten Edit der /etc/wiregate/eibga.conf den wiregated.pl neu gestartet?

                          Um der Ursache näher zu kommen, füg doch mal Zeilen der Art

                          plugin_log($plugname, "input=$input, output=".(!int($input)));

                          ein und sieh was in /var/log/wiregate_plugin.log erscheint. Das hilft vielleicht weiter.

                          VG, Fry

                          Kommentar


                            Hallo

                            Ist zwar ein bisschen spät, aber ich hab' das mal implementieren wollen bei mir:


                            Zitat von mivola Beitrag anzeigen
                            So, nun hat es mich mal gepackt und ich habe versucht
                            NMA-Nachrichten zu verschicken. Dabei ist folgendes herausgekommen:

                            [...]

                            Code:
                            %settings=(
                              nma => {
                                apikey => "enterYourApiKey",
                                application => 'SmartHome Logikprozessor',
                                targetUrl => 'urlToYourVisu',
                                url => 'http://www.notifymyandroid.com/publicapi/notify'
                              }
                            );
                            An sich tut's hervorragend - danke - aber die Settings werden nicht gesetzt. Die Teile der URL, die aus Settings kommen, sind leer. Wenn ich sendnma komplett mit allen Parametern aufrufe, geht es.

                            Liegt das an mir?

                            Kommentar


                              Zitat von johnnychicago Beitrag anzeigen
                              Liegt das an mir?
                              Mit Sicherheit

                              Nein, im Ernst: wo definierst du die Settings? Und wo "sub sendNma"? Beides in der Logikprozessor.conf? Welcher Teil kommt zuerst?

                              VG
                              Micha

                              Kommentar


                                Zitat von mivola Beitrag anzeigen
                                Mit Sicherheit
                                Da geh' ich von aus


                                Nein, im Ernst: wo definierst du die Settings? Und wo "sub sendNma"? Beides in der Logikprozessor.conf? Welcher Teil kommt zuerst?
                                Settings und die sub in der .conf, settings vor der sub, alle Aufrufe dahinter.

                                Kommentar

                                Lädt...
                                X