Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Bitte hilfe zu den Perl Plugins

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - Bitte hilfe zu den Perl Plugins

    Hallo,

    ich war jetzt nun lange auf der Suche nach einer "easy" Möglichkeit, Logiken auf dem Bus zu realisieren ohne viel Geld zu bezahlen. Gefunden habe ich nix.
    Aber da ja das Wiregate schon da ist, mach ich das nun damit, hab aber wie gesagt noch Probleme mit...

    1. Perl programmierung.... Muss ich wohl aber selber durch....
    2. Verständniss für die Pluginns...

    Am Anfang würde ich gerne recht einfache Sachen machen wie:

    Binäreingang 7 5/5/7 = 1 dann Schaltaktor 1/1/4 Aus

    Also einfach If Then else Geschichten.

    Was ich noch nicht so ganz checke ist, wie das das Wiregate macht ohne ständig ein Skript oder so laufen zu haben.....

    Als Beispiel hier der Code für Licht nachts gedimmt schalten:

    https://knx-user-forum.de/code-schni...nschalten.html

    Ich verstehe nicht:
    1. Warum wird der Aufruf da auf 1x täglich gesetzt? Damit er die Zwei zeiten oder was auch immer neu einliest wenn man was geändert hat?

    2. Warum benötige ich plugin_subscribe für die lichtein_ga?

    3. Was sind denn in der if Anweisung $msg{'apci'} und $msg{'dst'} und A_GroupValue_Write?

    Gibts ne docu zum erstellen von Plugins?

    Wäre cool wenn mich da einer etwas aufklären und bei den ersten Logiken begleiten würde.....

    Viele Grüße

    Jan

    #2
    Ich versuche es mal, auch wenn ich nicht der Wiregate Plugin Spezialist bin, also nicht schlagen wenn ich falsch liege


    . Warum wird der Aufruf da auf 1x täglich gesetzt? Damit er die Zwei zeiten oder was auch immer neu einliest wenn man was geändert hat?
    Vermutlich nur, weil der Wert definiert sein muss. Eigentlich wird das Plugin durch das "subscripe" ja immer dann aufgerufen, wenn das Wiregate ein Telegramm für $lichtein_ga empfängt.


    2. Warum benötige ich plugin_subscribe für die lichtein_ga?
    Damit der Code immer dann ausgeführt wird, wenn auf der entsprechenden GA ein Telegramm empfangen wird, zyklische Aufrufe nutzen Dir ja in dem Anwendungsfall nichts.


    Was sind denn in der if Anweisung $msg{'apci'} und $msg{'dst'} und A_GroupValue_Write?
    $msg{'apci'} eq "A_GroupValue_Write" fragt ab, ob die GA geschrieben wurde und es z.B. nicht die Antwort auf eine Leseanfrage ist. $msg{'dst'} ergibt das Ziel (Destination) des Telegramms.

    Bei dem Beispiel erscheint es mir die Abfrage des Ziels eigentlch überflüssig, damit kann man aber auf einzelne GAs reagieren wenn das Plugins per subscribe an mehrere GAs gebunden ist. Um es später nicht zu vergessen und weil es einfach guter Stil ist, schadet die Abfrage aber auf keinen Fall.

    Kommentar


      #3
      Hallo Jan

      Ein Thema in dem schon recht viel über Pluginprogrammierung von makki erklärt wurde, findest du z.B. ->HIER<-

      Damit habe ich meine ersten Gehversuche mit Plugins gemacht. Das Script, dass makki auf meine Anfrage hin gepostet hat ist auch sehr gut kommentiert, was mir den Einstieg sehr erleichtert hat.
      Gruss Patrik alias swiss

      Kommentar


        #4
        Super.... vielen Dank für den Link.

        Aber ich hab mich jetzt einfach für nen Homeserver entschieden.

        Der bringt zwar 23423 eigene Fragen mit, aber damit ist das Logik Thema wenigstens erschlagen....

        Viele Grüße

        Jan

        Kommentar


          #5
          Mal kurz ne Verständnisfrage zur Zusammenarbeit von Script und Visu (Comet).
          Ich habe vor eine evtl. nötige ERR über das Wiregate zu machen (was hoffentlich heute ankommt :-D ).
          Meine Heizungsaktoren (BJ 6164/40) können selbst PWM erzeugen und verstehen 1 bit oder 1 byte ... wahlweise.
          Die Erfassung der Temperatur erfolgt über das Wiregate, die Regelung soll über das PI-Plugin erfolgen, so dass aber über die Visu ein geänderter Sollwert gesendet werden kann.

          Ich würde in der ETS dem Stellantrieb jetzt eine Gruppenadresse zuweisen.
          Im PI-Script wäre das ja die $ventil_ga_8bit
          Die aktuelle Raumtemperatur wäre $istwert_ga

          In der config der Visu könnte ich ja jetzt eine GA anlegen die der $sollwert_ga
          entspricht und meine Solltemperatur vorgibt, aber über die Visu veränderbar ist.

          Wie lange hält diese Info aus der Visu und wo wird diese Info gespeichert.
          Wenn das Script alle 60 Sekunden durchläuft muss doch irgendwie der Sollwert über eine GA wieder ausgelesen werden.

          Eine absolute noob-Frage also.


          ----------------------

          EDIT:

          Habs gefunden ;-)

          Wenn ich es richtig verstehe bewirkt der Befehl:

          $plugin_subscribe{$knx_addr }{$plugname} = 1

          das aktivieren der entsprechenden Adresse. Damit wird diese im Wiregate/Plugin abrufbar bzw. überwachbar.
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            Richtig, je nachdem wie man es gerne hätte kann man den Sollwert dann z.B. persistent in $plugin_info{$plugname.'_sollwert'} ablegen.

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Ich hänge hier gerade daran die Dreambox Benachrichtigung von swiss auf XBMC umzustricken.
              So richtig weiter komme ich allerdings nicht weiter. Über die Console erhalte ich die Fehlermeldung 401 unauthorized.
              Das eigentlich Problem ist aber ein Syntax-Error:

              Code:
              # Plugin zum versenden von Textmeldungen an XBMC
              # Version 0.1 13.03.2011
              # Copyright: swiss (https://knx-user-forum.de/members/swiss.html)
              # License: GPL (v2)
              # Aufbau möglichst so, dass man unterhalb der Einstellungen nichts verändern muss!
              
              
              ####################
              ###Einstellungen:###
              ####################
              
              
              my $aufrufende_ga = '0/7/100'; #GA die die Benachrichtigung auslöst
              my $xbmc_ip = "192.168.2.30"; #IP des XBMC Rechners
              my $xbmc_port = "8080"; #Port des XBMC Webservers
              my $user = "media"; #Username XMBC Webserver
              my $pwd = "media" ; #Password XBMC Webser
              my $text = "Testtext"; #Für mehrere Zeilen einfach zwischen den Zeilen ein & einfügen
              my $timeout = 10; #Zeit in sekunden in der die Meldung angezeigt wird
              my $type = 2; #Meldungstyp: 1=Info, 2=Neutral, 3=Fehler
              my $picture = 'http://www.bildbilder.org/wp-content/bilder/2011/03/Herz.gif'; #Bildadresse für Benachrichtigung
              
              
              ######################
              ##ENDE Einstellungen##
              ######################
              
              
              # Eigenen Aufruf-Zyklus auf 1T setzen
              $plugin_info{$plugname.'_cycle'} = 86400; 
              # Zyklischer Aufruf nach restart und alle 86400 sek., dient dem anmelden an die Gruppenadresse, einmalig (0) würde in diesem Fall auch genügen
              
              
              
              if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $aufrufende_ga) {
              wget 'http://'.$user':'.$pwd'@'.$xbmc_ip':'.$xbmc_port'/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(.$text,.$timeout,.$picture))';
              } else { # zyklischer Aufruf
                 # Plugin an Gruppenadresse "anmelden", hierdurch wird das Plugin im folgenden bei jedem eintreffen eines Telegramms auf die GA aufgerufen und der obere Teil dieser if-Schleife durchlaufen
                 $plugin_subscribe{$aufrufende_ga}{$plugname} = 1;
              }
              Das Problem wird in dieser Zeile geortet:
              Code:
              wget 'http://'.$user':'.$pwd'@'.$xbmc_ip':'.$xbmc_port'/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(.$text,.$timeout,.$picture))';
              syntax error at (eval 212) line 36, near "wget 'http://'"

              Kann mir jemand kurz mit der Syntax der Perl-Befehle aushelfen ?

              Danke und Gruß
              Mirko

              P.S.:
              Code:
              http://media:media@192.168.2.30:8080/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification())
              gibt ein OK aus im Browser
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Hallo JuMi2006

                Du hast die Klammern vergessen. Richtigerweise müsste es so aussehen:

                Code:
                wget( "http://".$user":".$pwd"@".$xbmc_ip":".$xbmc_port"/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$text",".$timeout",".$picture"))" );
                Kann ich aber leider nicht testen, da ich keine xbmc habe.
                Gruss Patrik alias swiss

                Kommentar


                  #9
                  irgendwie will er das nicht schlucken :-(

                  2011-06-19 14:23:35.623,XBMC Message,,0s,syntax error at (eval 265) line 36, near "wget 'http://'"

                  Gruß Mirko
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #10
                    Es fehlt ein Punkt nach $user
                    Grüsse Bodo
                    Fragen gehören ins Forum, und nicht in mein Postfach;
                    EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                    Kommentar


                      #11
                      .. und nach $pwd usw - zwischen Variable und String muss jew. ein . (concat)

                      Makki
                      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                      -> Bitte KEINE PNs!

                      Kommentar


                        #12
                        So in etwa:
                        Code:
                        wget( "http://".$user.":".$pwd."@".$xbmc_ip.":".$xbmc_port."/xbmcCmds/xbmcHttp?command=ExecBuiltIn(Notification(".$text.",".$timeout.",".$picture."))" );
                        Grüsse Bodo
                        Fragen gehören ins Forum, und nicht in mein Postfach;
                        EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                        Kommentar


                          #13
                          stimmt. hab ich übersehen.
                          Gruss Patrik alias swiss

                          Kommentar


                            #14
                            tja vielen Dank schonmal ... jetzt bekomme ich beim Aufruf die folgende Fehlermeldung:

                            Code:
                            Undefined subroutine &main::wget called at (eval 47) line 37,
                            Ich musste das Plugin einmal löschen und hab den Code dann nochmal in ein neues Plugin kopiert. Vorher hing es irgendwie immer beim alten Fehler.

                            Dank und Gruß
                            Mirko
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              #15
                              Und was geschieht, wenn du an Stelle von wget einfach nur get einsetzt? Ich habe wget noch nicht eingesetzt. Mit get sollte es aber gehen.
                              Gruss Patrik alias swiss

                              Kommentar

                              Lädt...
                              X