Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    Zitat von Robosoc Beitrag anzeigen
    Fehlerbilder:
    1. In der PluginListe taucht nun unter Rückgabewert ein ewig langer Errorcode auf. Siehe Screenshot in Bild 1. Wenn das oben richtig war, dann wüßte ich gerne warum? Wenn das oben falsch war, dann brauch ich hier wohl keine Antwort drauf haben:-)
    2. Schaue ich mir den Code des Logikprozessors an, so fällt mir auf, dass der Editor in meinem Wiregate ab Zeile 104 alles rot darstellt. Der Editor scheint das Ende der Befehlskette in Zeile 104 nicht zu identifizieren. Siehe Screenshot in Bild 2. Irgendwelche Ideen?
    1. Mach deine Config mal leer, also alles löschen innerhalb von "%logic=( );"

    2. das sieht bei mir auch so aus. Ist mir aber auch eben erst aufgefallen, da ich den Editor nicht benutze.

    3. Wichtiger als die Ausgabe in der UI sind die Ausgaben in /var/log/wiregate-plugin.log. Was steht dort wenn du das Plugin/Config speicherst?

    VG
    Micha

    Kommentar


      Zitat von mivola Beitrag anzeigen

      1. Mach deine Config mal leer, also alles löschen innerhalb von "%logic=( );"

      VG
      Micha

      Danke, jetzt sieht es schon besser aus. siehe Screenshot.
      You do not have permission to view this gallery.
      This gallery has 1 photos.

      Kommentar


        Zitat von Fry Beitrag anzeigen
        lass doch mal bei receive=>... die eckigen Klammern weg.
        VG, Fry
        Danke Fry, das hat mich weitergebracht - der Input wird nun korrekt verarbeitet:
        Code:
        2015-03-29 19:35:35.095,Logikprozessor,aussen_sued_timer: 1
        2015-03-29 19:35:35.104,Logikprozessor,input aussen_sued_timer_DELAY: 1
        2015-03-29 19:35:35.119,Logikprozessor,1.1.20 5/0/141:1 -> $logic->{aussen_sued_timer}{receive}(Logik) -> [5/0/140,5/7/141]:1 gesendet; 1.1.20 5/0/141:1 -> $logic->{aussen_sued_timer_DELAY}{receive}(Logik) -> [5/0/140,5/7/141]:0 wird in 2s gesendet; ,0s,
        D.h. im Log wird das Hinterhersenden der verzögerten '0' korrekt angekündigt. Leider bleibt es bei der Ankündigung - die '0' wird dann doch nicht hinterher gefeuert:
        Code:
        2015-03-29 19:40:54.026,A_GroupValue_Write,1.1.20,5/0/141,01,1,DPT_Switch,1.001,0,low,6,T_DATA_XXX_REQ,0
        2015-03-29 19:40:54.067,A_GroupValue_Write,1.1.30,5/0/140,01,1,DPT_Switch,1.001,0,low,7,T_DATA_XXX_REQ,0
        2015-03-29 19:40:54.100,A_GroupValue_Write,1.1.30,5/7/141,01,1,DPT_Switch,1.001,0,low,7,T_DATA_XXX_REQ,0
        Nehme ich in der aussen_sued_timer_DELAY-Logik das delay-Statement raus, klappt es sofort. D.h. die Logik funktioniert, nur das Delay wird nicht ausgeführt.
        Zuletzt geändert von wuestenfuchs; 29.03.2015, 19:01.
        "Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren." - Benjamin Franklin

        Kommentar


          Hallo,

          hatte noch jemand gestern beobachten können, dass die Timer mit der Zeitumstellung nicht zurechtkommen (d.h. noch immer nach der alten Zeit ausgeführt wurden)? Erst nach einem Neustart des wiregated lief es wieder wie gewohnt.

          Wie kann man das Problem angehen?

          VG
          Micha

          Kommentar


            Hallo zusammen, kann mir vielleicht einer bei folgendem Code helfen.

            Code:
                enableDisableMultiroomC5 => { receive=>'8/0/70',
                                   transmit=>['13/3/0','10/1/170', '10/1/190'],
                            translate => sub { if(defined $input && int($input) > 0) { 1; } else {return 0;}},
                            debug=>1},
            Ich möchte bei der dritten transmitadresse nicht eine 1 senden, sondern eine 3.

            Wie kann ich ich das mit einer IF Logig umsetzen, also in der Form

            Wenn transmit == 13/3/0 sende 1 ->DPT:1.001
            Wenn transmit == 10/1/170 sende 1 -> DPT:1.001
            Wenn transmit == 0/1/190 sende 3 -> DPT: 5.010

            Zuletzt geändert von larsknx; 02.04.2015, 10:35.

            Kommentar


              Zitat von larsknx Beitrag anzeigen
              Ich möchte bei der dritten transmitadresse nicht eine 1 senden, sondern eine 3.

              Wie kann ich ich das mit einer IF Logig umsetzen, also in der Form

              Wenn transmit == 13/3/0 sende 1 ->DPT:1.001
              Wenn transmit == 10/1/170 sende 1 -> DPT:1.001
              Wenn transmit == 0/1/190 sende 3 -> DPT: 5.010
              Gar nicht - im Prinzip kannst Du nur dann mehrere transmit-Adressen setzen, wenn sie alle den gleichen Wert bekommen sollen.

              Dein Lösungsansatz ist es, anstelle einer einzigen Logik drei Logiken zu schreiben, je eine pro Transmit-Adresse: alle receiven auf der gleichen Adresse, lösen aber je nach empfangenem Wert auf ihrer Transmit-Adresse etwas aus.

              Kommentar


                Oh ja, manchmal sieht man den Wald vor lauter Bäumen nicht. Logisch .-) Danke dir recht herzlich. Habe es jetzt in 2 Reciever Logiken aufgeteilt.


                Code:
                        ####Zimmer2 MPD und Russound aus/anschalten
                    enableDisableMultiroomC5 => { receive=>'8/0/70',
                                       transmit=>['13/3/0','10/1/170', '10/1/190'],
                                translate => sub { if(defined $input && int($input) > 0) { 1; } else {return 0;}},
                                debug=>1},
                
                        ####Zimmer2 Russound Source auf 3 stellen
                    setScourceMultiroomC5 => { receive=>'8/0/70',
                                       transmit=>['10/1/171','10/1/191'],
                                translate => sub { if(defined $input && int($input) > 0) { 3; } else {return undef;}},
                                debug=>1},

                Kommentar


                  Hallo
                  Meine letzte Logik bringt mich noch um den Verstand. Vermutlich sehe ich den Wald vor lauter Bäumen nicht. Folgenden Fehler liefert mir das Log-File:
                  Code:
                  2015-04-12 22:19:49.761,logikprozessor.pl,config error: Global symbol "$input" requires explicit package name at (eval 110306) line 49.
                  Global symbol "$input" requires explicit package name at (eval 110306) line 49.
                  Global symbol "$input" requires explicit package name at (eval 110306) line 55.
                  Global symbol "$input" requires explicit package name at (eval 110306) line 55.
                  Global symbol "$input" requires explicit package name at (eval 110306) line 55.
                  ,0s,
                  Ab Zeile 47 stehen foldene Logiken:
                  Code:
                  # Licht der Hängeschränke mit Szenen "Zentral Licht aus"/"Haus verlassen" aus schalten
                  Licht_Haenge_aus => { receive=>'3/6/1', transmit=>'1/0/40', sub {
                          if (int($input) == 15 || (int($input) == 16 )
                              { return 0;}
                          else  { return undef; }
                      }, debug=>1 },
                  # Licht der Hängeschränke mit Insel-, Esszimmer- und Wohnzimmer-Licht an schalten
                  Licht_Haenge_an => { receive=>['1/0/15','1/0/25','1/0/30'], transmit=>'1/0/40', sub {
                          if (int($input->[0]) == 1 || (int($input->[1]) == 1 || (int($input->[2]) == 1 )
                              { return 1;}
                          else  { return undef; }
                      }, debug=>1 },
                  Ich habe auch andere Logiken mit einer If-else-Folge, und solche mit mehreren Inputs, aber nur diese macht Probleme. Sonst läuft alles top. Lösche oder kommentiere ich die Zeilen aus, gibts keine Fehler.
                  Die GA's sind alle angelegt.

                  Danke für die Hilfe.
                  Zuletzt geändert von martinb07; 13.04.2015, 13:06. Grund: Zeilennummer korrigiert
                  ---
                  Martin

                  Kommentar


                    Kann es sein, dass Dir vor Zeile 48 ein Komma fehlt?

                    Kommentar


                      Ne, leider nicht. Hab grad nochmal nachgesehen.
                      ---
                      Martin

                      Kommentar


                        Hast Du evtl noch andere Logiken mit dem gleichen Namen? Die Namen müssen eindeutig sein.

                        Kommentar


                          Auch negativ.
                          Kurze Korrektur: Zeile 49 ist diese:
                          Code:
                           [FONT=Courier][SIZE=12px]if (int($input) == 15 || [COLOR=#FF0000][B]([/B][/COLOR]int($input) == 16 )[/SIZE][/FONT]
                          Gerade fällt mir die Klammer vor dem zweiten int(... auf. Blöd dass ich es gerade nicht ausprobieren kann. könnte da der Fehler sein?

                          Edit:
                          Hab es grad doch mal schnell übers Mobiltelefon versucht und aus der Zeile 49 folgendes gemacht:
                          Code:
                          if ( $input = 15 || $input = 16 )
                          Leider ohne Erfolg - selber Fehler. :-(

                          Edit 2:
                          Hier mal meine ganze Config:
                          http://sebsauvage.net/paste/?322f62b...5lFUUeU1EEKG4=
                          Zuletzt geändert von martinb07; 13.04.2015, 13:38.
                          ---
                          Martin

                          Kommentar


                            Fehlt da nicht ein "translate => " vor sub { if ( $input = 15 || $input = 16 ) ...
                            Gruß
                            alexbeer

                            Kommentar


                              Alex, das wars!!!! Wie konnte ich nur. Ich sags ja, vor lauter Bäumen den Wald nicht gesehen. Mit ein paar weiteren Anpassungen ("==" anstatt "=") läufts jetzt.

                              Danke.
                              ---
                              Martin

                              Kommentar


                                Und ich habe mir schon wieder ein Problem eingefangen. Diesemal aber eher ein Verständnisproblem. Vielleicht könnt ihr mir hier ja auch weiterhelfen.

                                Hintegrund:
                                Ich habe in der Küche zwei LED Streifen. Einer an der Decke über der Insel, der andere unter den Hängeschränken über der Spüle. Diese kann ich beide an meinem Siemens UP204 Raumcontroller und einen MDT Taster in der Küche schalten. Das funktioniert auch. Am MDT wird der Status auch korrekt angezeigt. Am UP204 wird der Dimwert auch (scheinbar) korrekt dargestellt. Nur leider geht die Anzeige am UP204 nicht korrekt auf 0% wenn ich diesen über eine Szene (Alle Lichter) oder am MDT (auch mittels Szene) ausschalter. Mit folgender Logik wollte ich das erschlagen. Leider funktioniert es nicht.

                                Code:
                                #Status Küchenlicht
                                Licht_Kueche_Status => { receive=>['1/0/14','1/0/19'], transmit=>'1/0/24', translate => sub { ( int($input->[0])+int($input->[1]) )/2 }, debug=>1 },
                                ...14, ...19 und ...24 sind alles Status GA's.

                                Ich denke diese Logik hat das gleiche Problem:

                                Code:
                                # Rollo Status Höhe 
                                Rollo_Bad_lueften_Status     => { receive=>['2/2/31','2/2/35'], transmit=>'2/2/51', translate => sub { (int$input->[0]+int$input->[1])/2 }, debug=>1 },
                                Rollo_Bad_alle_Status         => { receive=>['2/2/23','2/2/27','2/2/31','2/2/35'], transmit=>'2/2/39', translate => sub { (int$input->[0]+int$input->[1]+int$input->[2]+int$input->[3])/4 }, debug=>1 },
                                Rollo_Schlafen_alle_Status     => { receive=>['2/2/7','2/2/11'], transmit=>'2/2/47', translate => sub { (int$input->[0]+int$input->[1])/2 }, debug=>1 },
                                Rollo_OG_alle_Status         => { receive=>['2/2/3','2/2/7','2/2/11','2/2/15','2/2/17','2/2/23','2/2/27','2/2/31','2/2/35'], transmit=>'2/2/43', translate => sub { (int$input->[0]+int$input->[1]+int$input->[2]+int$input->[3]+int$input->[4]+int$input->[5]+int$input->[6]+int$input->[7]+int$input->[8])/9 }, debug=>1 },
                                Anscheinend habe ich ein Verständnisproblem mit des Status GA's. Die Logic "Licht_Kueche_Status" taucht im plugin-Log auf, dort wird auch der korrekte Wert von 0 ausgegeben. Nur leider wird dieser nicht am UP204 angezeigt.

                                Die Rollo-Status-Logiken werden erst gar nicht ausgeführt. Die Status-GA's tauchen auch nicht im eib.log auf. Von daher kann die Logik auch nicht getriggert werden. Muss ich hier die Wert-GA's der abfragen?
                                ---
                                Martin

                                Kommentar

                                Lädt...
                                X