Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    Zitat von tger977 Beitrag anzeigen
    nur zur Sicherheit: Du hast auch in der eibga.conf oder über das webmin des WG die GA dem Wiregate korrekt mitgeteilt und den DPT korrekt gesetzt?
    Das sollte der Fall sein, da der LP sonst eigentlich eine entsprechende Warnung ausgibt...

    Kommentar


      Hallo,

      ich steh irgendwie grad auf dem Schlauch. Ich möchte eine Resetbedingung für meine Lüftung erstellen die genau dann greift wenn keine Präsenz erkannt ist (--> input0 oder 1 ==0) und die Lüfter nicht den Status 7 haben (input 2). Falls irgendein anderer Status kommt möchte ich den delay Trigger resetieren.

      Wie kann ich in der Sub Anweisung dies korrekt abfragen und im Falle aller anderen Kombinationen dann den delay Timer immer über "cancel" resetieren?

      Bisheriger Versuch:
      Code:
      LueftungEGKuecheAUTOohnePraesenz => {receive=>['7/5/4','7/5/3','8/1/1'], transmit=>['8/1/2','8/1/1'], delay=>1800, translate=>sub{return 0 if int($input->[0]==0 || $input->[1]==0 && $input->[2]!=7), return "cancel"}, debug=>1},
      Danke...

      Gruß
      Andi
      Gruß
      Andi

      Kommentar


        Zitat von tger977 Beitrag anzeigen
        Wie kann ich in der Sub Anweisung dies korrekt abfragen und im Falle aller anderen Kombinationen dann den delay Timer immer über "cancel" resetieren?
        Ungetestet, aber mit Erklärungsversuch:
        - das "int()" muss um die einzelnen Werte, nicht um den ganzen boolschen Ausdruck (rote Klammer)
        - ich habe den boolschen Ausdruck nochmal separat (blau) geklammert, damit klar wird, wie "||" und "&&" zusammenspielen
        - lass dir mit plugin_log() die Eingangswerte ins Log schreiben

        Code:
        LueftungEGKuecheAUTOohnePraesenz => {receive=>['7/5/4','7/5/3','8/1/1'], 
        	transmit=>['8/1/2','8/1/1'], delay=>1800, translate=>sub{
        	plugin_log($plugname, "input0: ".$input->[0]);
        	return 0 if ([COLOR="blue"][B]([/B][/COLOR][B][COLOR="Red"]int([/COLOR][/B]$input->[0][COLOR="red"][B])[/B][/COLOR]==0 || int($input->[1])==0[COLOR="Blue"][B])[/B][/COLOR] && int($input->[2])!=7), return "cancel"}, 
        debug=>1},
        VG
        Micha

        Kommentar


          Ich kenn mich jetzt mit diesem Perl-Zeug nicht so aus, aber ist
          Code:
          , return "cancel"
          der else Zweig oder eine Antwort für die zweite Transmit Adresse? Zweiteres geht so weit ich weiß nicht, es wird immer der gleiche Wert an alle Adresse versendet.

          Kommentar


            Zitat von Wookie81 Beitrag anzeigen
            Ich kenn mich jetzt mit diesem Perl-Zeug nicht so aus, aber ist
            Code:
            , return "cancel"
            der else Zweig oder eine Antwort für die zweite Transmit Adresse? Zweiteres geht so weit ich weiß nicht, es wird immer der gleiche Wert an alle Adresse versendet.
            Danke für den Hinweis, das ist mir gar nicht aufgefallen. So geht das natürlich auch nicht. das "return cancel" ist eine neue Anweisung, die nur ausgeführt wird, falls das vorherige "if" nicht true ist (denn sonst wäre die sub ja schon beendet).
            Richtig sollte also sein:
            Code:
            LueftungEGKuecheAUTOohnePraesenz => {receive=>['7/5/4','7/5/3','8/1/1'], 
            	transmit=>['8/1/2','8/1/1'], delay=>1800, translate=>sub{
            	plugin_log($plugname, "input0: ".$input->[0]);
            	return 0 if ((int($input->[0])==0 || int($input->[1])==0) && int($input->[2])!=7);
            	return "cancel";}, 
            debug=>1},
            VG
            Micha

            Kommentar


              Hallo Micha, Wookie,

              vielen Dank für eure Hinweise. Genau so war es gemeint: Rückmeldung identisch für beide transmit GA's! Werde es nun mal testen...

              Gruß
              Andi
              Gruß
              Andi

              Kommentar


                nach ersten Tests funktioniert das nun Bestens nachdem ich die Logikverknüpfung nochmal angepasst habe (da war noch ein kleiner Denkfehler meinerseits)! Nochmal Danke für die Syntaxunterstützung!
                Gruß
                Andi

                Kommentar


                  string an timer übergeben?

                  Hallo,

                  da mich immer noch nicht eine überschaubare Lösung für eine zeitgesteuerte Logik in Abhängigkeit vom Sonnenaufgang / -untergang +- x Minuten interessiert, habe ich mir in die conf-Datei eine Subroutine eingebaut, welche mir eine entsprechende Zeitangabe der Form hh:mm zurückgibt.

                  Gibt es eine Möglichkeit, ein solches string-Konstrukt einem timer mitzugeben?

                  ...timer=>{'&sonnUntergang(x)'}... anstatt ...timer=>{'19:13'}...

                  wobei hier das x für die Abweichung in Minuten vom Sonnenuntergang steht.
                  Viele Grüße Jens

                  Kommentar


                    Bash Scriptaufruf

                    Hallo!

                    wie kann ich vom Logikprozessor aus ein Bash-Script aufrufen, sobald auf eine GA ein bestimmter Wert ankommt? In Pseudocode:

                    Code:
                    run_script => { receive=>'0/7/1', _system_call_ => sub { if(defined $input && int($input) == 1) { system '/bin/bash /usr/local/bin/myscript &'; } else {return undef;}}, debug=>1, },
                    Im Klartext: Sobald auf der 0/7/1 eine "1" ankommt, soll das Script ausgeführt werden.

                    Unter welchem Benutzer würde ein derart aufgerufenes Script eigentlich laufen? Root?
                    "Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren." - Benjamin Franklin

                    Kommentar


                      Zitat von wuestenfuchs Beitrag anzeigen
                      Im Klartext: Sobald auf der 0/7/1 eine "1" ankommt, soll das Script ausgeführt werden.
                      Ich habe mal sowas ähnliches (allerdings außerhalb des Logikprozessors) gemacht:
                      Code:
                      	my $command = "net rpc SHUTDOWN -C \"Feierabend!\" -f -I  ".$ip_address." -U ".$user."%".$password;
                      	my $status = system($command);
                      Zitat von wuestenfuchs Beitrag anzeigen
                      Unter welchem Benutzer würde ein derart aufgerufenes Script eigentlich laufen? Root?
                      Das kann ich dir leider nicht sagen - ich denke aber eher nicht...

                      VG
                      Micha

                      Kommentar


                        Wert von einer GA empfangen und auf anderer GA senden

                        Moin zusammen,

                        versuch nun schon seit einiger Zeit eine Lösung für oben genanntes Problem zu finden.
                        Dachte mir der Logikprozessor hätte da was passendes auf Lager, aber irgendwie klappt das bei mir alles nicht.
                        Muss dazu gestehen das ich, was Plugins angeht, noch recht jungfräulich bin
                        Habe den aktuellen Logikprozessor aus dem SVN in das Verzeichnis kopiert und die GA´s sind auch importiert.
                        Hab dann ein paar Sachen ausprobiert:
                        Treppenlicht:
                        stair => { receive=>'3/4/25', transmit=>'3/7/55', delay=>1, translate => $input, },
                        multiplizieren:
                        mal1 => { receive=>'3/4/25', transmit=>'3/7/55', translate => sub { 2*$input; }, },


                        Als Hintergrund für die Funktion:
                        Der BMS Aktor MCU-06 sendet keine Rückmeldung über die Positionen. Nun wollte ich mit einem Infotrigger (CV) die Lamellenverstellung machen. Dies funktioniert aber wohl nur, wenn ich auf "Info" die aktuelle Position habe.

                        Für Tips oder andere Anregungen wie ihr es mit der Lamellenverstellung gelöst habt, wäre ich sehr dankbar!

                        Gruß
                        Kay

                        Kommentar


                          Zitat von Litze Beitrag anzeigen
                          versuch nun schon seit einiger Zeit eine Lösung für oben genanntes Problem zu finden.
                          ...
                          Als Hintergrund für die Funktion:
                          Der BMS Aktor MCU-06 sendet keine Rückmeldung über die Positionen. Nun wollte ich mit einem Infotrigger (CV) die Lamellenverstellung machen. Dies funktioniert aber wohl nur, wenn ich auf "Info" die aktuelle Position habe.
                          Ich verstehe noch nicht so recht, was du nun eigentlich wirklich machen willst? Was ist denn das "oben genannte Problem"? Meinst du "Wert von einer GA empfangen und auf anderer GA senden"? Was hat das aber mit der Lamellenverstellung zu tun?

                          Versuch es bitte mal noch etwas klarer zu beschreiben.

                          VG
                          Micha

                          Kommentar


                            Zitat von mivola Beitrag anzeigen
                            Versuch es bitte mal noch etwas klarer zu beschreiben.
                            Ich versuche es mal:

                            Ich gebe meinem Raffstore einen Wert für die Lamellenverstellung vor.
                            Z.B. 1/2/3 - DPT 5.001 - 50%
                            Nun fährt dieser die Position an, meldet diese mir aber nicht, sondern nur "Position erreicht" auf GA 1/3/1 - 1

                            Nun würde ich am liebsten folgende Logic haben:
                            GA 1/2/3 sendet 50% -> GA 1/3/1 meldet position erreicht => Logik sendet auf GA 1/2/4 50% (als Rückmeldung)

                            Meine erste Überlegung war einfach nach dem senden auf GA 1/2/3 - 50% eine Rückmeldung von der Logik auf GA 1/2/4 zu haben.

                            So kann ich dann in der Visu anzeigen lassen auf welche Position die Lamellen oder auch Rollläden (hab beides) gerade sind.

                            Kommentar


                              Zitat von Litze Beitrag anzeigen
                              Ich versuche es mal:

                              Ich gebe meinem Raffstore einen Wert für die Lamellenverstellung vor.
                              Z.B. 1/2/3 - DPT 5.001 - 50%
                              Nun fährt dieser die Position an, meldet diese mir aber nicht, sondern nur "Position erreicht" auf GA 1/3/1 - 1

                              Nun würde ich am liebsten folgende Logic haben:
                              GA 1/2/3 sendet 50% -> GA 1/3/1 meldet position erreicht => Logik sendet auf GA 1/2/4 50% (als Rückmeldung)

                              Meine erste Überlegung war einfach nach dem senden auf GA 1/2/3 - 50% eine Rückmeldung von der Logik auf GA 1/2/4 zu haben.

                              So kann ich dann in der Visu anzeigen lassen auf welche Position die Lamellen oder auch Rollläden (hab beides) gerade sind.
                              OK, ich versuche es mal:

                              Code:
                              lamelleStatus => { trigger=>['1/2/3', '1/3/1==1', 'within 10s', 'all_in_order'], fetch=>'1/2/3', transmit=>'1/2/4', translate=>sub{$input}, debug=>1},
                              - mit dem trigger sagst du, du erwartest einen beliebigen Wert auf 1/2/3 und eine 1 auf 1/3/1. Und zwar in genau dieser Reihenfolge und innerhalb von 10 Sekunden.
                              - mit fetch holst du dir den zuletzt auf 1/2/3 gesendeten Wert in die $input-Variable
                              - diesen Wert gibst du dann durch translate wieder auf der transmit-Adresse aus

                              Schau mal ob es funktioniert. Das ganze ist natürlich ungetestet ;-)

                              VG
                              Micha

                              Kommentar


                                Hallo Fry,

                                sind Deine Änderungen im aktuellen Patch 38 enthalten?
                                Hintergrund der Frage: Ist die aktuelle Version Deines Logikprozessors im SVN oder soll ich die letzte Version hier aus dem Thread nehmen?

                                Danke,
                                Grüße

                                Kommentar

                                Lädt...
                                X