Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    Hallo zusammen, kann mir vielleicht einer bei folgender Logik behilflich sein.


    Ich möchte die Treppenlichtfunktion ausnutzen, um bei Bewegung im Gaestebad ein Radio einzuschalten, das nach bestimmter Zeit Inaktivität wieder ausgeschaltet wird. Leider habe ich hier Schwierigkeitem.


    0/7/221 => GA HLK vom Präsenzmelder (Wert 1/An oder 0/aus, DPT: 1.001

    8/0/30 => GA Radio Multihome (Wert 1/An oder 0/aus, DPT: 1.001

    Ich möchte im Prinzip, wenn Bewegung im Gaestebad erkannt wird, dass das Radio eingeschaltet wird (sofern nicht bereits an) und nach zB 300 Sekunden keiner Bewegung mehr das Radio auf der GA 8/0/30 wieder ausgeschaltet wird.

    Code:
        PMgaestewcMPD => { receive=>['0/7/221','8/0/30'], transmit=>'8/0/30', debug => 1,
            translate => sub {
                if (int($input->[0]) > 0 && int($input->[1]) == 0) { return 1 };
                else  { return "cancel" }; ????? -> hier Bedingung wenn kein Bewegung mehr nach XXX Sekunden auf transmit eine 0 senden, also im Prinzip delay, aber delay gilt ja leider nicht für die If Bedingung sonder für die ganze Logik
            },
        },
    Delay funktioniert ja nur für das Ausschalten, ich bräuchte aber eine Logik für beides, Einschalten ohne delay und Ausschalten mit delay und falls möglich sogar noch eine Verlängerung der Treppenlichtfunktion wenn in der DelayZeit wiederum eine Bewegung gemeldet wird.



    Nachtrag:

    Habe noch einen neuen Versuch gemacht, irgendwie funktioniert es aber nicht:

    Code:
        # GaesteWC HLK 1 und MPD aus -> sende 1
        pm_gaestewc_mpd_an    => {
            receive     => ['0/7/221','8/0/30'],
            transmit    => '8/0/30',
            cool        => 1,
            translate   => sub {
                plugin_log($plugname, "\r\n pm_gaestewc_mpd_an: input1 ".$input->[0] . " input2 "  .$input->[1]);
                if (int($input->[0]) > 0 && int($input->[1]) == 0) { return 1; }
                else   { return undef; }
            },
            debug        => 1,
        },
        
     #   # pm_gaestewc_mpd nach 30 Sekunden automatisch wieder aus (Treppenlichtfunktion)
        delay_pm_gaestewc_mpd_aus => {
            receive     => '0/7/221',
            transmit    => '8/0/30',
            delay       => '120',
            reply_to_read_requests => 1,
            translate    => sub {
                    plugin_log($plugname, "\r\ delay_pm_gaestewc_mpd_aus: ".$input);
                if ( defined $input && int($input) == 1 ) { return 0; }
                else { return undef; }
            },
            debug       => 1
        },
    Zuletzt geändert von larsknx; 04.02.2016, 10:17.

    Kommentar


      Funktionieren denn eventuell diese beiden Logiken?

      Code:
        pm_gaestewc_mpd_an    => { receive     => ['0/7/221','8/0/30'],
                                   transmit    => '8/0/30',
                                   translate   => sub { return 1 if int($input->[0])==1 && int($input->[1])==0; return undef; } 
                                   debug        => 1,
          },
        
        delay_pm_gaestewc_mpd_aus => { receive=>'0/7/221', 
                                       transmit =>'8/0/30', 
                                       delay => 300, 
                                       translate => sub { return 0 if int($input)==0; 'cancel';}, 
                                       debug  => 1,
                                     },
      Damit sollte das Radio angehen, wenn es noch nicht an war und der PM eine 1 sendet.
      Aus geht es dann 300 Sekunden nachdem der PM eine 0 sendet.


      Sitze gerade nicht vorm Wiregate, daher kann ich den Code nicht testen. Ich hoffe dass syntaktisch alles ok ist.

      Kommentar


        Guten Tag,

        ich hatte nun einige Logiken zur rrd Aufzeichnung eingegeben und seit dem das Problem bekommen das andere Logicen nicht mehr ausgeführt werden.
        Selbst die Anzeigen in der CV wurden nicht mehr aktualisiert. Obwohl diese nichts mit dem LP zu tunh aben.

        Anhand den Beitrags #805 habe ich folgenden Cod eingegeben.
        Code:
        HZ_Brauchwasseroben_RRD=> { receive=>'13/1/2', translate=>sub{update_rrd('13-1-2','',$input)}, debug=>1 },
        Sieht jemand wo mein Fehler ist?

        Schöne Grüße
        Stefan

        Kommentar


          [QUOTE=Crimson;n909468]Funktionieren denn eventuell diese beiden Logiken?

          Code:
          pm_gaestewc_mpd_an => { receive => ['0/7/221','8/0/30'],
          transmit => '8/0/30',
          translate => sub { return 1 if int($input->[0])==1 && int($input->[1])==0; return undef; }
          debug => 1,
          },
          
          delay_pm_gaestewc_mpd_aus => { receive=>'0/7/221',
          transmit =>'8/0/30',
          delay => 300,
          translate => sub { return 0 if int($input)==0; 'cancel';},
          debug => 1,
          },
          Hey Crimson, danke dir. Funktioniert soweit sehr gut.

          Allerdings erhalte ich noch folgende Meldung im Log:

          2016-02-04 14:10:33.150,Logikprozessor.pl,$logic{pm_gaestewc_ mpd_an}: Moegliche Zirkellogik: 8/0/30 ist Receive- und Transmit-GA, und weder delay, cool noch transmit_only_on_request ist spezifiziert.

          Und ich habe noch eine Frage.

          Ich prüfe ja auf der GA 8/0/30, ob das Radio noch an ist. Kann es sein, dass der Wert nach 5 Minuten (eibd_cache) wieder 0 ist obwohl ja eine 1 geschrieben worden ist? Muss ich da noch zur Sicherheit eibd_cache=>3600, setzen ? Wie lange hält sich denn so ein Wert auf der GA 8/0/30, wenn einmal das Radio eingeschaltet worden ist und nicht wieder ausgemacht wird, also müsste er ja eigentlich auf 1 bleiben. Sieht aber so aus, dass er nach 5 Minuten wieder 0 wird, obwohl das Radio nicht ausgestellt worden ist.
          Zuletzt geändert von larsknx; 04.02.2016, 14:25.

          Kommentar


            Ich denke Du kannst da sicherlich den eibd_cache hochsetzen. Zusätzlich kannst Du ja auch die repeater-Logik aus der Beispielconf verwenden, um den Wert von 8/0/30 z.B. jede Stunde wieder in den Cache zu schreiben.

            Um die Meldung loszuwerden, könntest Du die 8/0/30 statt in receive einfach per fetch holen. Du willst ja auf den PM reagieren. Der Status des Radios ist ja nur nebensächlich. Oder Du lässt das cool zum Beispiel drin.

            @Stefan/Hammer69
            Ich sehe in der Zeile eigentlich keinen Fehler.

            Viele Grüße,
            Tim

            Kommentar


              Zitat von Crimson Beitrag anzeigen
              Ich denke Du kannst da sicherlich den eibd_cache hochsetzen. Zusätzlich kannst Du ja auch die repeater-Logik aus der Beispielconf verwenden, um den Wert von 8/0/30 z.B. jede Stunde wieder in den Cache zu schreiben.

              Um die Meldung loszuwerden, könntest Du die 8/0/30 statt in receive einfach per fetch holen. Du willst ja auf den PM reagieren. Der Status des Radios ist ja nur nebensächlich. Oder Du lässt das cool zum Beispiel drin.

              Der Status, ob das Radio an oder aus ist, ist schon wichtig, sonst startet das Radio bzw. die Musik neu obwohl der Status ja eigntlich noch auf angeschaltet wäre und man hat für ca. 5 Sekunden dann keine Musik mehr. Nun duscht jemand und die Musik startet neu, nicht tragisch, aber unschön.

              Zitat von mivola Beitrag anzeigen

              Ich sage nur: mit zyklischem Senden wäre das nicht passiert ;-)

              Im Ernst: andere KNX-Geräte (zb Wetterstation) merken sich "ihre" Status und senden auf ein Read-Request den entsprechenden Response. Für "virtuelle" GAs gibt es aber kein passendes Gerät - außer den LP. Der kann auch auf Read-Request antworten - aber eben nicht für eigene Logiken....

              VG
              Micha
              Da die 8/0/30 nur eine virtuelle GA ist und wahrscheinlich nicht wie ein zyklisch sendender Aktor den richtigen Wert/Response bei einem Read Request ausgeben kann, mache ich ein Repeat, richtig ?

              Code:
              repeater_enableDisableMultiroomC8 => { receive=>'8/0/30', transmit=>'8/0/30', delay=>'5min', translate=>sub{$input} },
              
              oder über memory ?
              
               memory => { transmit=>'8/0/30', reply_to_read_requests=>1 },
              Zuletzt geändert von larsknx; 04.02.2016, 15:11.

              Kommentar


                Guten Morgen Tim,

                danke für die Kontrolle.
                Dann gehe ich nochmal die anderen Zeilen Durch ob sich dort ein Fehler eingeschlichen hat.
                Ich muss sagen es hat auch 1-2 Tage gut funktioniert, doch mitten in der Nacht hat es angefangen mein WG zu stören.
                Es kam acuh keine Fehlermeldung im Logbuch. Ich dachte erst an einen anderen Fehler, doch erst nachdem ich alle RRD Einträge im LP gelöscht habe hat sich Besserung eingestellt.

                Das der LP nicht mehr als 30 solcher rrd Aufträge verarbeiten kann?

                Schöne Grüße
                Stefan

                Kommentar


                  Zitat von Crimson Beitrag anzeigen
                  Hallo,
                  erstmal vielen Dank für die Arbeit die hier bereits in die Logikengine geflossen ist. Damit lässt sich einfach unglaublich viel machen.
                  Ich wollte jetzt mal das Wecker-Skript, welches Fry hier irgendwo im Thread gepostet hat mal testen.
                  Leider verstehe ich noch nicht ganz wo ich das genau einbinden muss.

                  Gehören die ganzen Funktionen ($logic{"Alarm_set"}, $logic{"Alarm_time"}, usw.) in ein eigenes Plugin, in die Logikengine.pl oder einfach in die Logikengine.conf?
                  Ich hab da zwar mal ein wenig ausprobiert, hab das aber nicht ans laufen gekriegt.

                  Viele Grüße,
                  Tim
                  Ist das noch aktuell? Wenn ja: kannst du bitte nochmal die Stelle raussuchen an der Fry den Wecker gepostet hat?

                  VG
                  Micha

                  Kommentar


                    Zitat von mmarkus Beitrag anzeigen
                    1/1/100 --> 1Bit Befehl vom Taster
                    1/5/100 --> 8Bit Rückmeldung von DMX
                    1/4/100 --> 8Bit Befehl absolutes Dimmen

                    Code:
                    dim => { receive=>['1/1/100','1/5/100'], transmit=>'1/4/100',
                    translate => sub { if ($input->[0]) == 1 && ($input->[1]) < 20 { return 50 }; } },
                    Nun möchte ich aber noch einbauen dass die Logik nach einmaliger Ausführung gesperrt wird, bis auf 1/1/100 wieder eine 0 gesendet wird. ansonsten wird ja bei relativem oder absolutem Dimmen unter Schwellwert automatisch wieder erhöht.
                    Evtl. reicht es auch, wenn du nur auf 1/1/100 (also das Einschalten) hörst, und dann per fetch den Dimmwert holst?
                    Code:
                    dim => { receive=>['1/1/100'], fetch=>['1/5/100'], transmit=>'1/4/100', translate => sub { if ($input->[0]) == 1 && ($input->[1]) < 20 { return 50 }; } },
                    So startet die Logik nur wenn du am Taster einschaltest. Die manuelle Verstellung des Dimmwerts löst die Logik nicht mehr aus...

                    VG
                    Micha

                    Kommentar


                      Zitat von larsknx Beitrag anzeigen
                      Hallo zusammen, kann mir vielleicht einer bei folgender Logik behilflich sein.

                      Ich möchte die Treppenlichtfunktion ausnutzen, um bei Bewegung im Gaestebad ein Radio einzuschalten, das nach bestimmter Zeit Inaktivität wieder ausgeschaltet wird. Leider habe ich hier Schwierigkeitem.
                      Um mal einen ganz anderen Blickwinkel reinzubringen: ist das nicht Standardaufgabe eines PM? Genauso schalte ich bei uns im Bad das Licht. Und das sollte doch mit einem Radio genauso gehen...

                      Welchen PM nutzt du?

                      VG
                      Micha

                      Kommentar


                        Zitat von Hammer69 Beitrag anzeigen
                        Das der LP nicht mehr als 30 solcher rrd Aufträge verarbeiten kann?
                        Ich denke schon dass der LP das kann. Ich habe >40 rrd's die der LP schreibt. Die Frage ist vielleicht auch: wie oft kommen denn die Werte rein, die diese rrd-Logiken auslösen?

                        VG
                        Micha

                        Kommentar


                          Halo Micha,

                          das meisten komme alle 2 Minuten, aber eher mit längerem Abstand.
                          Kann es daran liegen weil nur ein rrd geschrieben und nichts gesendet wird?

                          VG
                          Stefan

                          Kommentar


                            Hallo Mivola
                            Danke für deine Hilfe,
                            Ja an diese Lösung hatte ich auch schon gedacht, allerdings macht mir das DuoDMX wieder einen Strich durch die Rechnung. Leseanfragen an den Dimmwert lösen grundsätzlich ein 0% Schreibtelegramm aus. (obwohl die Lampe brennt)

                            Ich habs für mich jetzt so gelöst, dass bei jedem einschalten den Dimmwert hinterhergesendet wird, unabhägig des vorhergehenden. Zusätzlich pro kanal noch eine 1Bit und 1Byte Rückmeldung


                            Noch eine andere Frage, kann eigentlich ein reply_to_read_requests=>1 verzögert werden? ca 200ms wären optimal, damitt könnte ich ein falsches 0% telegramm vom DuoDMX wieder überschreiben :-D

                            Kommentar


                              Zitat von Hammer69 Beitrag anzeigen
                              Kann es daran liegen weil nur ein rrd geschrieben und nichts gesendet wird?
                              Nein, genau so ist es bei mir auch... Hast du das rrd selbst/manuell angelegt oder automatisch anlegen lassen?

                              Zitat von mmarkus Beitrag anzeigen
                              Noch eine andere Frage, kann eigentlich ein reply_to_read_requests=>1 verzögert werden?
                              Hm, weiß nicht so genau. Probier es mit "delay" doch mal aus ;-)

                              VG
                              Micha

                              Kommentar


                                Ich habe mal ein neues Thema bzgl. Warnings im LP erstellt: https://knx-user-forum.de/forum/%C3%...gen-seit-1-2-6

                                Bitte mal reinschauen falls ihr auch welche habt, oder auch kommentieren, wenn ihr keine habt.

                                VG
                                Micha

                                Kommentar

                                Lädt...
                                X