Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugins - Woher Infos und wie anfangen?

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

    [wiregate] Plugins - Woher Infos und wie anfangen?

    Hi zusammen,

    bis jetzt habe ich nur vorhandene Codes verändert und genutzt.
    Jetzt würde ich aber gerne mal was eigenes schreiben und testen.

    Ich habe mal angefangen mich in Perl einzulesen und ein wenig probiert.

    Leider mit mäßigen erfolg.

    Wenn ich das richtig verstehe, kann ich ja im WG plugin befehle nutzen, welche es in Perl eigentlich nicht gibt. Z.B knx_write, knx_read.
    wo sind diese definiert? Das muss doch irgendwo auf dem WG hinterlegt sein.

    Bis jetzt habe ich nur das HowTo https://knx-user-forum.de/forum/supp.../wiregate/6566
    gefunden.

    Was ich noch nicht so ganz verstehe ist z.B das Überwachen.
    Wie ist der ablauf im WG? Wird ein Plugin nur bei aufruf durch eine GA aufgerufen oder ist dieses immer aktiv?

    Was hat es mit diesen Variabeln auf sich.
    $msg{'apci'}
    $msg{'dst'}
    $msg{'data'}

    aus diesem Code:

    if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $GA_Variable) {
    $Variable= decode_dpt9($msg{'data'});

    $msg wird doch nirgends definiert und was soll apci, dst und data sein.

    Hab auch in der Perl anleintung gesucht, aber nichts gefunden.

    Für Tipps bin ich sehr dankbar. Wenn möglich so dass ich es auch verstehe.

    Ich habe bisher nur ein paar C++ Erfahrungen.

    Vielen dank schonmal

    Aber ein paar dumme fragen fallen mir bestimmt noch ein.

    #2
    Hoi

    Die Plugins werden sozusagen in ein grosses Programm eingebunden (wiregated.pl glaub'), in dem die knx_write, knx_read zur verfügung stehen.
    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


      #3
      Hmm, schwer in zwei Sätzen zu sagen..
      Ein bisschen was steht in der Online-Hilfe (unter Plugins->Hilfe), der grössere Teil sind Beispiele von vorhandenen; da gibts einfache und komplexe, ich empfehle als Einstieg sowas wie SourceForge.net Repository - [openautomation] Contents of /wiregate/plugin/generic/Schwellwert oder SourceForge.net Repository - [openautomation] Contents of /wiregate/plugin/generic/PI-Regler
      Da werden keine/kaum für Einsteiger "wilden" Perl-Konstrukte verwendet (und im ersten auch $msg erklärt)
      Es geht natürlich wie immer mehr/anders, im realen Leben führen 1000 Wege nach Rom, in Perl sinds 10.000 ..

      Technisch: die Plugins werden mittels "eval" im Kontext des wiregated.pl ausgeführt, zyklisch oder bei "plugin_subscribe" beim Telegramm oder "..socket_subscribe" eben bei eintreffen von Daten auf dem (wie auch immer gearteten) Socket (Unix/Posix, TCP, UDP, ..).
      Damit "erben" sie alle vorher definierten Variablen wie eben z.B. %msg oder $fh, also die sind quasi "vordefiniert", man kann/könnte aber trotzdem auf die zugrundeliegenden Variablen zugreifen (sorry, wie die heissen steht im Source )
      Sowas wie knx_read/write oder en/decode_dptXX sind ja "nur" Hilfs-funktionen, die das Leben im Plugin erleichtern sollen, auch dort könnte man direkt, roh, auf den Bus "durchlangen".
      Hoffe das war verständlich

      Makki

      PS: das das stark unterdokumentiert ist: klar.. Aber mir fehlt das Gefühl dafür wo man da anfängt (Grundkurse in Perl gibts im Netz genug) und wo man aufhört (Link oben und in der ->Hilfe);
      Da gibts auch viele "Geschmacksrichtungen"! Ich mag keine Ablehen aber verfolge persönlich eher eine die ich - wenn ich den Code 5J nicht angesehen habe - noch sicher verstehe..

      Feedback wird gerne angenommen, was für "gewöhnliche" Programmierer - egal welcher coleur - (wer sich damit nicht beschäftigen will, sorry, der ist da halt raus, schreibt auch keinen HS-BS o.ä. ..) völlig unverständlich/unterdokumentiert ist!
      Ich habe insb. bei den ersten/älteren Plugin(Beispielen) bewusst versucht, es so einfach wie möglich zu halten.
      Da hat sich über die Jahre natürlich eine gewisse Dynamik entwickelt (die ich keineswegs schlecht finde!), wo mir auch selber teils die Ohren wegfliegen (ohne Namen zu nennen, Plugins, wo mehr %$@ vorkommen als Buchstaben bitte explizit mit einem positiven )
      Aber das das für Ein/Umsteiger kompliziert aussieht - ist auch klar. Alleine über Hash/Refs in Perl kann man locker ne einwöchige Schulung abhalten ohne das man danach zwangsläfig damit umgehen kann
      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
      -> Bitte KEINE PNs!

      Kommentar


        #4
        Hallo Dirk

        ein paar Anmerkungen noch von meiner Seite.

        Zitat von evilg Beitrag anzeigen
        Wenn ich das richtig verstehe, kann ich ja im WG plugin befehle nutzen, welche es in Perl eigentlich nicht gibt. Z.B knx_write, knx_read. wo sind diese definiert? Das muss doch irgendwo auf dem WG hinterlegt sein.
        Kurze Antwort: Ja, im Quellcode des wiregated... und in der Online Hilfe.


        Längere Antwort:

        Das Plugin-System wurde ganz ursprünglich geschaffen, um für unseren Kunden auf relativ effiziente Weise Sonderlösungen bereitstellen zu können. D.h. anfänglich haben wir im Auftrag unserer (zumeist geschäftlichen) Kunden diverse Sonderwünsche / Anpassungen mithilfe der Plugins erfüllt / ermöglicht.

        Als dann später Wünsche aufkamen bei den Kunden, ob es nicht eine Möglichkeit gibt, das ein oder andere selbst dazu programieren zu können, haben wir die Information veröffentlicht dass es dieses Plugin-System gibt und einen Editor dazu im Webmin eingebunden. Dies sollte den Experten unter unseren Kunden erweiterte Möglichkeiten bieten.

        Was hierbei auf der Strecke geblieben ist sind entsprechende Anleitungen und Doku, die auch einen interessierten Einsteiger abholen und auf die interessante Reise zum ersten funktionierenden Plugin mitnehmen.

        Auf der anderen Seite sind solche Anleitungen und Dokus viel Aufwändiger als dies beim Lesen erscheint und damit nur schwerlich zu finanzieren. Wir haben hier auch ein wenig auf die Community gehofft und diese hat auch mit vielen Plugins, Beispielen und Zusammenfassungen beigetragen.

        Allerdings liegt diese Info ein wenig fragmentiert im Forum vor, es wäre sehr schön, hier eine etwas compilierte Zusammenfassung zu haben, welche den Einstieg erleichtert.

        Vielleicht findet sich ein Anwender aus der Community hierfür?

        lg

        Stefan

        Kommentar


          #5
          Ok für die Antworten.
          Ich hab zwar noch nicht alles verstanden aber man kämpft sich so durch.
          :-)

          Kommentar


            #6
            Hallo

            Ich habe mich da vor über einem Jahr (oder waren es schon 2?) auch durch gekämpft. Mittlerweile fällt das schreiben von Plugins nicht mehr ganz so schwer. Auch wenn ich immer mal wieder bei anderen Plugins spicken oder im Internet nachlesen muss, wie ich zum Ziel komme.

            Grundsätzlich arbeiten die Plugins mit Perl das im Internet eigentlich sehr gut dokumentiert ist.

            Was im Internet fast nicht zu finden ist, da es WG spezivisch ist, sind Funktionen und spezielle Variablen wie knx_read oder $msg.

            Dazu gibt es ein paar grundlegende Infos in der Hilfe.

            Zu der $msg Variable bzw. Hash...

            Die wird vom wiregated vererbt und darf im eigenen Plugin nicht noch einmal definiert werden.

            Der Inhalt des $msg Hash repräsentiert das letzte gelesene Telegramm, mit dem z.B. das Plugin aufgerufen wurde oder das mit knx_read gelesen wurde. Das Telegramm wird in diverse Informationen zerlegt, die einzeln verarbeitet werden können.

            Die wichtisten davon sind:

            $msg{'apci'} gibt an ob das Telegramm ein Schreib- oder Lesetelegramm ist. z.B. A_GroupValue_Write bedeutet, dass das Telegramm ein Schreibtelegramm ist

            $msg{'dst'} enthält die Gruppenadresse des Telegramm. Z.B. 1/3/25

            $msg{'src'} enthält die Physikalische Adresse des Teilnemers von dem das Telegramm gesendet wurde. Z.B. 1.1.32

            $msg{'data'} enthält den Wert des Telegramm als Hex Wert. Wenn die Gruppenadresse im WG importiert und der DPT korrekt eingetragen wurde werden hier aber auch decodierte Werte zurück gegeben. Z.B. 01

            Mehr fallen mir momentan auch gerade nicht ein

            PS: Gerade dass wäre noch etwas, was in der Hilfe des WG noch praktisch wäre
            Gruss Patrik alias swiss

            Kommentar


              #7
              Guten Morgen Patrick

              Zitat von swiss Beitrag anzeigen
              PS: Gerade dass wäre noch etwas, was in der Hilfe des WG noch praktisch wäre
              Eine deutlich bessere und umfangreichere Doku, insbesondere auch zum Plugin-System wäre sehr hilfreich, gerade auch für den Einsteiger.

              Ich fürchte einen technischen Redakteur für das alles können wir uns nicht leisten. Mit Produkten auf der Basis von Copyleft-Lizenzen in einem flachen Markt kann man nicht ausreichend einnehmen um das zu realisieren.

              Wenn sich jemand berufen fühlt eine solche Anleitung zu erstellen und dafür nur ein eher kleines Bakschisch als Anerkennung will - das würde der Community sicher gefallen

              lg

              Stefan

              Kommentar


                #8
                Eine Frage zu $msg{'data'} weil's grad dazupasst :
                Welchen Wert nimmt $msg{'data'} eigentlich an, wenn es sich um kein Telegramm handelt, sondern das Plugin durch einen zyklischen Aufruf ausgeführt wird?
                Andersherum gefragt: Wie unterscheidet man zyklische Aufrufe von Aufrufen durch Telegramme deren GAs angemeldet sind?

                Danke
                Robert

                Kommentar


                  #9
                  In dem Fall ist $msg{'data'} leer.

                  Das Plugin bekommt sämtliche $msg nur übergeben wenn es durch dieses Telegramm auch aufgerufen wurde. Dem zu Folge sind dann auch $msg{'apci'} $msg{'dst'} leer.
                  Worauf läuft die Frage hinaus ... sonst müsste man jetzt nen Aufsatz schreiben um evtl. den Kern der Frage zu treffen
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #10
                    @Stefan: Naja es ist ja nicht so, als würde ich mich nicht dazu berufen fühlen. Es wäre mir auch eine Ehre euch als Dankeschön für den tollen Support etwas zurück zu geben.

                    ... Leider habe ich aber im moment noch mindestens eine Grossbaustelle und die nennt sich CometVisu Handbuch. Die muss jetzt in möglichst kurzer Zeit "aus dem Boden gestampft werden". Ich sollte ja mit dem Handbuch noch vor dem offiziellen Releas fertig sein und möchte aber das Releas nicht unnötig hinauszögern.
                    Gruss Patrik alias swiss

                    Kommentar

                    Lädt...
                    X