Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    Zitat von Hannatz Beitrag anzeigen
    Code:
    EG_PM_Treppe => { receive=>['1/1/11'], transmit=>'1/1/10', translate => sub { return 1 if ($input->[0] == 1); return undef;}, debug=>1 },
    
    OG_PM_Treppe => { receive=>['1/1/13'], transmit=>'1/1/10', translate => sub { return 1 if ($input->[0] == 1); return undef;}, debug=>1 },
    
    EBS_Treppe_ausschalten => { receive=>'1/1/10', transmit=>'1/1/10', timer=>{ time=>['00:01-05:29']}, delay=>300, translate => sub { return 0 if ($input == 1); return undef;}, cool=>299, debug=>1 },
    Zwei PMs befeuern je die GAs für Licht (11 & 13, Treppenhausbeleuchtung), sobald da ne 1 drauf kommt soll die 1/1/10 (Beleuchtung Treppenstufen) ebenfalls angehen. Klappt soweit ganz gut, Ziel war es ja das Hauptlicht nur 1 Min an zu haben (Triggered by PM), die Treppenstufenbeleuchtung aber länger (triggered by Wiregate/Logikprozessor).
    Parallel ist die Treppenstufenbeleuchtung aber nun auch zeitgesteuert an (i.d.R. von Dämmerung bis 22 Uhr), sobald aber jemand da abends durch ist wird das Ausschalten gefeuert. Ich hab versucht das entsprechend einzugrenzen so dass "EBS_Treppe_ausschalten" nur von Mitternacht bis morgens 5:29 Uhr (ab 5:30 per Zeitschaltuhr bis Sonnenaufgang eh an) aktiv werden kann, irgendwas mach ich aber falsch. Aktuell scheint der Timer überhaupt nicht zu greifen...

    Jemand ne Idee wie ich das fixen kann?

    Danke & Gruß,
    Hannatz
    Ich schieb das Thema noch mal nach oben, ist leider etwas untergegangen. Jemand ne Idee was ich falsch gemacht habe?

    Kommentar


      Also ich kann dir zwar nich weiter helfen, bei mir funktioniert aber mittlerweile zumindest (offenbar) die IF-Logik. Meine Vergleiche waren nicht ok. "gt" und "lt" sind String-Vergleiche und "<" sowie ">" sind numerische Vergleiche und daher richtig.
      Der Timer ging bei mir ja auch nicht - möglicherweise is da ein Bug drin oder die "Doku" dazu falsch... Ich warte hier auch auf Rückmeldung

      Aktuell hab ich zu Testzwecken noch Cool drin und transmit_changes_only auf "0". Mein Melder sendet jede Minute einen Helligkeitswert. Wenn ich zu Ende geprüft habe, dann kommt cool raus und transmit changes only kommt auf "1" - der Melder soll dann auch nur alle 30Min+ was senden.

      Ich hätte hier aber insbesondere mangels einer richtigen Doku auf mehr Unterstützung gehofft :-/

      Vielleicht kannst du ähnlich wie ich vorgehen und IF-Logiken zusammen mit Helligkeitswerten nehmen. Ich wollts ja auch via Timer lösen, aber der Timer ging bei mir auch nich wie gesagt...

      Code:
      %logic=(  
      
      LED_Fluter => {
      receive => '0/0/4',
      transmit => '0/0/1',
      transmit_changes_only => 0,
      cool => 120,
      translate => sub {
      if ($input < 40) {return 1;}
      if ($input > 70) {return 0;}
      else {return undef;}
      },
      },
      
      
      );
      Zuletzt geändert von Saargebeat; 18.11.2017, 15:59.

      Kommentar


        Zitat von Hannatz Beitrag anzeigen

        Ich schieb das Thema noch mal nach oben, ist leider etwas untergegangen. Jemand ne Idee was ich falsch gemacht habe?
        Die Angabe
        time=>['00:01-05:29'] ist unvollständig. Wenn man ein Intervall und keinen Zeitpunkt angibt, dann muss man auch sagen, wie oft wiederholt werden muss (z.B. +5m für alle fünf Minuten), damit sich wieder Zeitpunkte ergeben. Glaube aber nicht, dass es das ist was du willst. Wenn du sagen willst, tue in einem bestimmten Intervall nichts oder was anderes, dann musst du das in der translate-sub abhandeln.

        Kommentar


          Zitat von Saargebeat Beitrag anzeigen
          Ich wollts ja auch via Timer lösen, aber der Timer ging bei mir auch nich wie gesagt...
          Intervall hab ich bisher nicht gebraucht, aber einzelne Zeitpunkte gehen definitiv als Timer, z.B. 17 Uhr Licht an, 7 Uhr Licht aus. Über Dämmerungsschalter ist es aber eh' besser.

          Kommentar


            ok nur aus Interesse... wo liegt mein Fehler vom Timer?

            Kommentar


              "timer" löst eine Logik zu bestimmten Zeiten aus. Das möchtest du ja nicht, sondern nur die Reaktion auf einen anderen Trigger zu bestimmten Zeiten ausschließen.

              D.h. du müsstest die Zeit in deiner "translate" Anweisung unterbringen. Ich habe das nicht mehr genau im Kopf, aber ich meine, der Logikprozessor kennt eine Variable $hour, die du in eine IF-Abfrage einbauen könntest. So etwas wie if ... $hour < 6 ... , um in der Zeit zwischen 0 und vor 6 Uhr etwas zu tun oder nicht zu tun.

              Kommentar


                Zitat von Saargebeat Beitrag anzeigen
                ok nur aus Interesse... wo liegt mein Fehler vom Timer?
                Das weiß ich leider nicht, da ich Intervalltimer noch nicht benutzt hab, sondern nur zu einzelnen Zeitpunkten.
                Du hast aber die neueste Version aus dem Github installiert, oder?

                Kommentar


                  Jap hab die neuste Version - evt. schaut ja der Programmierer davon hier iwann mal wieder rein und checkt die Sache :-)

                  Werde in Kürze mal EDOMI installieren und ausprobieren, da soll einiges an Logik möglich sein und mich als SPS-Programmierer wenigstens halbwegs zufrieden stellen

                  Kommentar


                    Zitat von Saargebeat Beitrag anzeigen
                    Jap hab die neuste Version - evt. schaut ja der Programmierer davon hier iwann mal wieder rein und checkt die Sache :-)
                    Nun, wenn du die Historie anschaust, stellst du fest, dass da mehrere Entwickler beteiligt waren, ist halt auch ein Community-Projekt. (Wir sprechen bei solchen Sachen übrigens von entwickeln, nicht von programmieren ;-). Programmieren ist bloß das schnöde runterhacken ...).
                    Evtl. hilft auch selber debuggen, wenn es schneller gehen soll.

                    Kommentar


                      Ok sorry, Entwickler :-)

                      Da die IF-Geschichte mir erstmal reicht, gehts aktuell nur um den Vorwitz wo denn der Fehler lag. Ich setz jetzt erstmal ein bisschen Hoffnung in die EDOMI-Geschichte, auch wenn ich die Logikengine für den Wiregate auch höchst interessant finde.

                      Da muss ich mich aber denk ich noch ein bisschen mit Perl beschäftigen, bevor ich da was reissen kann mit

                      Kommentar


                        Logik für Hauswirtschaftsraum, Waschmaschine und Trockner

                        Hallo ich möchte mit dem Logikprozessor gerne eine etwas aufwändigere Logik umsetzen. Nun bin ich nicht der Fachmann dazu, versuche mich aber daran und baue auf eure Hilfe für Tipps und Verbesserungen.

                        Die ursprüngliche Logik habe ich hier http://www.knx-home.net/wiki/index.php?title=Beispiele gefunden.

                        Entgegen dem Beispiel schalte ich mein Licht im HWR von Hand, sollte ja aber nicht viel Unteerschied sein.

                        Der erste Teilabschnitt ist
                        wenn das Licht im HWR länger als 30 sec an ist, sollen die Steckdosen von WM und Trockner eingeschaltet werden.

                        Mein Vorschlag:

                        %logic=(
                        HWR => {
                        receive=>'GALichtRm',
                        transmit=>['GASteckdoseWMs', 'GASteckdoseTrochners'],
                        translate=>sub{
                        if ($input -> [1] < "30") {return 1;}
                        else {return 0;}
                        },


                        );

                        passt das so?


                        LG
                        Andre
                        Zuletzt geändert von katerina; 16.01.2018, 13:13.

                        Kommentar


                          Zitat von katerina Beitrag anzeigen
                          passt das so?
                          Nein, du musst mit delay und cancel arbeiten, so wie hier im Beispiel aus der sample_conf
                          stair => { receive=>'1/2/9', transmit=>'1/2/9', delay=>600, translate => sub { return ($input eq 1) ? 0 : 'cancel';}, },
                          Adressen anpassen, und hinten die 0 durch 1 ersetzen, du willst ja was anschalten und nicht ausschalten.

                          Kommentar


                            Ich mag' diese Einzeiler nicht, weil sie sehr unübersichtlich rüberkommen. Man schmeisse eine Handvoll Satzzeichen zu Perl und es macht eine if-then-Abfrage draus

                            So finde ich das schöner:
                            Code:
                            HWR => {
                            receive=>'GALichtRm',
                            transmit=>['GASteckdoseWMs', 'GASteckdoseTrochners'],
                            translate=>sub{
                                if ($input eq 1)
                                    {return 1;}
                                else
                                    {return 'cancel' ;}
                            },
                            Aber eigentlich wollte ich nur anmerken, dass man das vielleicht nicht unbedingt direkt canceln mag: Auch wenn die Steckdosen erst nach 30s Licht Strom bekommen sollen, heisst das ja nicht, dass sie beim Ausschalten des Lichtes direkt stromlos sein sollen. Sonst kann man nur mit Licht waschen


                            Kommentar


                              Ne, Licht soll mit normalem Nachlauf ausgehen. Steckdosen entweder nach meinetwegen 10 Minuten, wenn doch kein Gerät in Betrieb geht oder eben dann, wenn die Geräte mit der Arbeit fertig sind.

                              Das Aus wird in der verlinkten Logik über den Gerätezustand gelöst. Kommt also noch...

                              Kommentar


                                Wenn das Licht sowieso nicht manuell ausgeschaltet, sondern als Treppenlicht ausgeht, und der Nachlauf beträgt mehr als 30 Sekunden, kannste Dir den delay=> auch sparen

                                Das feuert dann sowieso jedes Mal

                                Kommentar

                                Lädt...
                                X