Ankündigung

Einklappen
Keine Ankündigung bisher.

WireGate - 1-Wire to EIB/KNX Gateway - Einführung & FAQ

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

    [wiregate] WireGate - 1-Wire to EIB/KNX Gateway - Einführung & FAQ

    Edit (SW): Hier befindet sich das WireGate User-Forum für Fragen, Anregungen, Probleme und Wünsche.

    ==> Wichtige, Eilige oder Dringende Anfragen sowie bei Defekten, RMA, Reparatur ausschließlich an support at wiregate dot de.

    Im folgenden eine kurze Einführung zum Wiregate 1 Multifunktionsgateway:
    Allgemeine Informationen mit ein paar Hintergründen finden sich hier
    Ebenso sei auf den Lexikonartikel zu 1-Wire verwiesen.
    Das Datenblatt mit dem aktuellen Funktionsumfang kann man hier runterladen.

    Die Releasenotes finden sich aktuell immer hier. Das entspricht aber nicht immer sofort den ausgelieferten Updates, das ist der Entwicklungs-Stand. Alle Bestandteile sind Open-Source!

    Für einen kleinen Einblick, die Quickstart-Anleitung gibts hier.
    Die eigentliche Bedienungsanleitung ist jedoch die Online-Hilfe, eine Demo-Gerät mit Online-Zugang unter http://demo.wiregate.de verfügbar.

    Allgemeine Diskussionen zu 1-Wire, die nicht spezifisch das WireGate betreffen, bitte gerne in dem initialen Thread weiterführen.

    Wer steckt dahinter:
    Elaborated Networks GmbH
    Lise-Meitner-Str. 1
    85662 Hohenbrunn

    Tel.: 08102-8951-65
    eMail: support@wiregate.de
    WireGate Home page

    Die Abwicklung von Fragen usw. über dieses Forum wird selbstverständlich bevorzugt, wir beissen aber nicht ;-)
    Ein Anruf kann insbesondere bei komplexeren Installation oder besonderen Anforderungen, die derzeit nicht vom Standardumfang gedeckt werden durchaus sinnvoll sein.

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

    #2
    Plugins

    Seit dem Patchlevel 18 gibt es ein neues Feature:

    Plugins
    Edit: Seit 2011-05-28 werden diese der Übersichtlichkeit halber im openautomation-SVN auf Sourceforge gesammelt (<- Klick mich)
    Edit#2: Plugins sind jetzt auf Github: https://github.com/OpenAutomationPro...plugin/generic


    Es handelt sich hierbei um eine Möglichkeit mit kleinen Perl-Code-Schnipseln Funktionen zu realisieren. Diese Plugins können komplett über das Webinterface bearbeitet werden.
    • Um hiermit selbst etwas zu entwickeln kommt man nicht umhin, etwas Perl zu programmieren.
    • Die Anpassung und Verwendung fertiger Plugins ist dagegen mit minimalen Kenntnissen möglich.


    Zur Verbreitung/Verteilung von Plugin-(Beispielen) soll der bereits vorhandene Unterbereich Code-Schnipsel dienen.
    Ich werde in Kürze dort ein paar Beispiele reinstellen.


    Wozu:
    • Einfache Logikfunktionen, Regler etc.
    • Einbindung von "Sonderfunktionen", speziellen Kundenwünschen.



    Wozu eher nicht:
    • Komplexe Logikzusammenhänge
    • Zeit/Resourcenintensive Vorgänge



    Die Dokumentation ist bisher dünn, das ist im Moment auch im Status eines öffentlichen Beta-Tests und wird unter "Experten-Funktion" geführt!
    Support nur über das Forum.


    Wichtige interne Funktionen:
    <> = Notwendiger Parameter
    [] = Optionaler Parameter (DPT optional nur wenn importiert!)
    • knx_read(<Gruppenadresse>,<maxAlterInSekunden>,[DPT])
      Anmerkung zu maxAlter: Falls der Wert nicht im Cache ist oder Alter > 0 (in Sekunden) und der Wert im Cache älter als die Angabe, wird ein Lesetelegramm auf den Bus gesendet.
      Wenn binnen einer Sekunde eine Antwort eintrifft wird der Wert zurückgegeben, falls nicht, erfolgt bei weiteren Leseversuchen kein erneuter Versand eines Lesetelegramms!
      Niemals zum lesen eines "lokalen" Wertes verwenden (1-Wire Sensor, anderes Plugin), der nicht im Cache ist, da sich das gegenseitig blockiert.
    • knx_write(<Gruppenadresse>,<Wert>,[DPT])
    • update_rrd(<Name>,<Name2>,<Wert>,[Wert-Typ])
      (Wert-Typ ist standardmässig GAUGE, später mehr dazu)



    Variablen:
    • $plugin_subscribe{'<Gruppenadresse>'}{$plugname} = 1;
      -> anmelden an einer Gruppenadresse.
    • $plugname ist vorbelegt mit dem Namen des Plugins.
    • $plugin_info ist ein Hash, dessen Inhalt/Werte dauerhaft im Flash gespeichert wird. z.B. zum speichern von Zuständen.
    • Reserviert: $plugin_info{$plugname.'_cycle'}
      -> Aufrufzyklus des Plugins
    • $msg: Hash mit eingetroffenem KNX-Telegramm


    Bei Ansicht der Beispiele und etwas Perl Know-How sollte das relativ einfach verständlich sein.

    Rückgabewerte:
    • Wenn der Funktion return ein Wert übergeben wird, erfolgt ein Eintrag in der Plugin-Logdatei.
    • Wenn kein Wert (return;)angegeben wird, erfolgt auch kein Logeintrag.


    Ausführung im Detail:
    Die Plugins werden jeweils mit "eval" direkt ausgeführt. Kompilerfehler werden ggfs. ausgegeben.

    Aufruf:
    Der Aufruf eines Plugins erfolgt:
    • Nach jedem Neustart des Daemons (wiregated), also bei reboot, Konfigurationsänderung etc.
    • Sofort nach dem speichern eines Plugins (egal ob per Web oder anders)
    • Nach dem eingestellten Zyklus. Standard: 10s falls nicht anders vom Plugin selbst definiert (_cycle)
    • Beim eintreffen von KNX-Telegrammen soweit "angemeldet" (plugin_subscribe)
    • Beim anliegen von Daten auf einem Socket soweit "angemeldet" (plugin_socket_subscribe). Dazu später mehr..
    • Aufruf von Plugins erfolgt max. 1x pro Sekunde
    • Langlaufende Operationen sind zu vermeiden, da sonst alle Aktivitäten blockiert werden.
    • Timeout: 10s - länger darf ein einzelnes Plugin nicht laufen.
    • Vollständig offen! Man kann also wirklich fast alles machen. Auch kaputt!



    Gruppenadressen:
    • Gruppenadressen und vor allem die zugehörige Datenpunkt-Typen (DPT, vormals EIS) stehen nur zur Verfügung, wenn diese vorher importiert wurden! (ESF-import unter EIB-Konfiguration)
    • Dies ist insbesondere bei den Funktionen knx_read/write wichtig, falls nicht importiert muss der DPT mitgegeben werden.
      Ebenso wird hieraus die Dropdown-Liste mit Gruppenadressen im Plugin-Editor befüllt.



    Bekannte Probleme:
    • Der Webeditor für die Plugins funktioniert nicht mit dem IE, kann aber für diesen Fall deaktiviert werden.
      Rückfragen hierzu bitte an MS, ansonsten einen richtigen Browser wie Firefox, Opera, Safari verwenden


    Makki
    Zuletzt geändert von makki; 11.08.2015, 15:59. Grund: Update des Repos: Github
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      WireGate anstecken

      [Wichtig]Die Spannungsversorgung des WireGate sollte immer primärseitig (230V) getrennt werden!
      Insbesondere beim schnellen (<60s) aus & wiedereinstecken.
      [/Wichtig]

      Da es ansonsten manchmal nicht korrekt startet.

      Also einfach immer den Stecker vom Netzteil zuerst ins WireGate und dann das Netzteil in die Steckdose, das funktioniert 100% (auch z.B. bei Stromausfall).
      Die aktuellen Geräte bekommen einen Hinweis-Aufkleber am Stecker..

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

      Kommentar


        #4
        Einführungstutorial für WireGate Perl Plugins

        Der User xachsewag hat ein schönes Tutorial geschrieben:
        • Eine Variable muss vor Gebrauch definiert werden:
          Code:
          my $Variable;
          my $Variable = 0;
          my $Variable = $Variable2 +1;
          my $Variable = knx_read($GA_Variable,300,1);
          my ($Variable1, $Variable2) = (10, 20);
          (Variable1: 10, Variable2: 20)

          Der my-Befehl "schützt" Variablen vor einer versehentlichen Änderung bzw. verhindert, dass eine Variable unbeabsichtigt gelöscht wird.

          Auf Groß- und Kleinschreibung muss geachtet werden!

        • Vom Bus Lesen und auf den Bus Schreiben:
          Lesen
          Code:
          knx_read($GA_Variable,300,1);
          $GA_Variable: vorher festgelegte Variable der Gruppenadresse, kann auch direkt eingetragen werden.
          300: Cache Zeit (in Sekunden)
          1: Datentyp
          Um das Gelesene in eine Variable zu bekommen wird knx_read wie folgt angewendet:
          Code:
          $variable = knx_read($GA_Variable,300,1);
          Anmerkung zu maxAlter: Falls der Wert nicht im Cache ist oder Alter > 0 (in Sekunden) und der Wert im Cache älter als die Angabe, wird ein Lesetelegramm auf den Bus gesendet.
          Wenn binnen einer Sekunde eine Antwort eintrifft wird der Wert zurückgegeben, falls nicht, erfolgt bei weiteren Leseversuchen kein erneuter Versand eines Lesetelegramms!

          Niemals zum lesen eines "lokalen" Wertes verwenden (1-Wire Sensor, anderes Plugin), der nicht im Cache ist, da sich das gegenseitig blockiert.

          Schreiben
          Code:
          knx_write($GA_Variable,$Variable,9);
          GA_Variable: vorher festgelegte Variable der Gruppenadresse, kann auch direkt eingetragen werden.
          $Variable: Inhalt der Variablen wird an den Bus geschickt. Es kann auch direkt ein Wert eingetragen werden.
          9: Datentyp (in diesem Fall z.B. eine Temperatur)

          Überwachen
          Anmelden an Gruppenadresse: Der Plugin wird ausgeführt sobald auf dieser GA etwas gesendet wird.
          In diesem Fall geht es um eine Temperatur. Die gesendeten Rohdaten (data) werden zum DPT 9 umgesetzt und in die Variable geschreiben
          Code:
          $plugin_subscribe{$GA_Variable}{$plugname} = 1;
          if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $GA_Variable) {
          $Variable= decode_dpt9($msg{'data'});
          }
        • Datenpunkttyp (DPT):
          1 1 Bit Schalten/Toogle
          2 2 Bit Zwangsführung
          3 4 Bit Rolladen/Dimmen (3 Bit controlled)
          4 1 Byte ASCII Zeichen
          5 / 5.001 1 Byte unsigned Wert 0-100% (0,4% Auslösung)
          5.003 1 Byte Winkel
          5.004 / 5.005 / 5.010 1 Byte unsigned Wert 0-255
          6 1 Byte signed Wert (-128 bis 127)
          7 2 Byte unsigned Wert (0 bis 65.535)
          8 2 Byte signed Wert (-32.768 bis 32.767)
          9 2 Byte float Fliesskommazahl (-671.088,64 bis 670.760,96)
          10 3 Byte Uhrzeit
          11 3 Byte Datum
          12 4 Byte unsigned Wert (0 bis 4.294.967.295)
          13 4 Byte signed Wert (-2.147.483.648 bis 2.147.483.647)
          14 4 Byte signed Fliesskommazahl (IEEE 754)
          15 4 Byte Zutritt (nicht implementiert)
          16 14 Byte Zeichenkette (ASCII oder 8859-1)

        • Kommentieren:
          Kommentare können mit „#“ eingeleitet werden. Alles was innerhalb einer Zeile nach Raute geschrieben steht wird ignoriert.
          Code:
           $ergebniss = $wert1 + $wert2; #### Zwei werte Addieren
        • Logische Operatoren bei Zahlen:
          < wert kleiner als
          =< wert kleiner oder gleich
          == wert gleich
          > wert größer als
          => wert größer oder gleich
          != wert ungleich
          && UND
          || ODER
          ^ entweder ODER
          ! Not
        • Logische Operatoren bei Zeichenketten:
          lt Wert kleiner als
          le Wert kleiner oder gleich
          eq Werte sind gleich
          ge Wert größer oder gleich
          gt Wert größer als
          ne Werte sind ungleich
          and UND
          or ODER
          xor entweder ODER
          not nicht wahr

          „not“ kann wie folgt angewendet werden: (! kann durch not ersetzt werden)
          Code:
          if (! ($Variable == 1)) {
          # Wenn $Variable nicht 1 ist
          }
        • Mathematische Operatoren:
          Code:
          $Ergebnis = ($Variable1 + $Variable2 + $Variable3) / $Teiler;
          + Addition
          - Subtraktion
          * Multiplikation
          / Division
          % Modulo (Rest einer Division)
          ++ Hinzurechnen einer 1 (Inkrement)
          -- Abziehen einer 1 (Dekrement)
          ** Potenzierung

          Code:
          $Variable += 9; # Addiere 9 zu $Variable
          $Variable -= 6; # Ziehe 6 von $Variabke ab
          $Variable *= 3; # Multipliziere $Variable mit 3
          $Variable /= 2; # Teile $Variable durch 2
        • Hochzählen einer Variablen:
          $count++;
          entspricht: $count = $count + 1;
          Zählt $Count um 1 hoch
        • Weitere Operatoren:
          $Variable .= 2; # Fügt an $Variable 2 hinzu
        • Verknüpfungs Operatoren:
          Code:
          $a = 'ABC';
          $b = 'DEF';
          $c = GHI;
          $verkn = $b . $c . $d; *# $verkn enthält jetzt “ABCDEFGHI“
        • Einfache IF Abfrage mit wenn, dann:
          Code:
          if ($Variable1 == 1) {
          $variable2 = 1;
          }
        • IF Abfrage mit wenn, dann, sonst:
          Code:
          if ($Variable1 == 1) {
          $variable2 = 1;
          } else {
          $variable2 = 0;
          }
        • IF Abfrage mit mehreren UND Bedingungen:
          Code:
          if (($Variable1 == 1) && ($Variable2 > 0) && ($Variable3 <= 20)) {
          $variable4 = 1;
          }
        • Abschneiden einer Zahl:
          $Variable = sprintf ("%.2f", $Variable); (12.3456789 => 12.34)
          Die Variable wird auf 2 Nachkommastellen zugeschnitten, es wird nicht gerundet

          $Variable = sprintf ("%.2f", $Variable); (12.3 => 12.30)
          Die Variable wird auf 2 Nachkommastellen zugeschnitten/aufgefüllt

          $Variable = sprintf ("%.3d", $Variable); (12.3456789 => 012)
          Die Variable wird ohne Nachkommastellen auf 3 Zeichen geschnitten/aufgefüllt

          %b = '10100111101010011010101101' Binär
          %c = 'A' ASCII Zeichen
          %d = '43951789' Standard-Integerdarstellung
          %e = '4.39518e+7' Wissenschaftliche Notation
          %u = '43951789' vorzeichenlose Integerdarstellung einer positiven Zahl
          %u = '4251015507' vorzeichenlose Integerdarstellung einer negativen Zahl
          %f = '43951789.000000' Fließkommazahldarstellung
          %o = '247523255' Oktaldarstellung
          %s = '43951789' Stringdarstellung
          %x = '29ea6ad' Hexadezimaldarstellung (Kleinbuchstaben)
          %X = '29EA6AD' Hexadezimaldarstellung (Großbuchstaben)
          %+d = '+43951789' Vorzeichenangabe für positive Integerzahlen
          %+d = '-43951789' Vorzeichenangabe für negative Integerzahlen
        • Einfaches Array:
          my @array = (42, 13, 2);
          Möchte man auf ein einzelnes Element des Arrays zugreifen, wird das @-Zeichen durch das $-Zeichen ersetzt und der Index des betreffenden Elements in eckigen Klammern dahinter gesetzt.

          $array[1] => in diesem Fall „13“
        • Forschleife mit Array:
          Code:
          #Array befüllen
          my @Array;
          push @Array, { Name => "Teil1", Wert1 => 1, Wert2 => 20};
          push @Array, { Name => "Teil2", Wert1 => 5, Wert2 => 88};
          push @Array, { Name => "Teil3", Wert1 => 2, Wert2 => 35};
          
          foreach my $element (@Array) { 
          #Array Werte Lesen
          my $wert1 = ($element->{Wert1});
          my $wert2 = ($element->{Wert2});
          my $Name = ($element->{Name});
          
          #Auszuführende Aktion
          my $ergebniss = $wert1 + $wert2;
          $plugin_info{$plugname.'_'.$Name} = $ergebniss;
          }
          Mit next; kann zum nächsten Element gesprungen werden. Z.B. Wenn eine Abfrage innerhalb der FOR Schleife einen Abbruch erzeugt
        • Subroutine:
          Einbinden:
          Code:
          my ($rueckwert1, $rueckwert2) = SubRoutineNamen($Wert1, $Wer2);
          Hier wird eine Subroutine aufgerufen welche zwei Werte zurück geben soll (rueckwert1, rueckwert2). Gefüttert wird die Variable mit den beiden Variablen Wert1 und Wert2

          Subroutine selbst:
          Code:
          sub SubRoutineNamen {
          my $rueckwert1 = $Wert1 + $Wert2;
          my $rueckwert2 = $Wert1 - $Wert2;
          return ($rueckwert1, $rueckwert2); 
          }
        • Informationen zum Plugin ausgeben und weiterverarbeiten: (Plugin Debug-Infos)
          Die Funktion $plugin_info kann als remanenter Speicher genutzt werden, dessen Inhalt auch einen Neustart des Wiregates überlebt.

          Debug-Infos ausgeben:
          $plugin_info{$plugname.'_Info'} = 0; (0 wird ausgegeben)
          Es kann auch eine Variable ausgegeben werden:
          $plugin_info{$plugname.'_Info'} = $Variable; (Wert der Variablen wird ausgegeben)
          Der Name der Defug-Info kann ebenfalls per Variable bestimmt werden:
          $plugin_info{$plugname.'_’.$InfoName} = $Variable; (Unter Pluginnamen_$InfoName wir der Wird der Variablen Wert ausgegeben)

          Dieses Zeichen (') trennt Text von Variablen/Code. Deswegen '_Info'. Davor steht eine Variable

          Debug-Infos weiterverarbeiten:
          Es lassen sich hier auch Werte zwischenspeichern die ausgelesen werden können, z,B. Werte vom letzen Plugin Durchlauf.
          my $infoWert = $plugin_info{$plugname.'_Info'};

          Plugin Debug-Infos löschen:
          delete $plugin_info{'Test_Plugin_Info'}; (In diesem Fall ist „Test_Plugin“ der Name des Plugins und „InfoWert“ die Bezeichnug der Debug-Info-Variablen. Ersteres lässt sich durch $plugname ersetzen sofern die Löschung innerhalb des betroffenen Plugins durchgeführt wird.)
        • Return:
          Durch den Return Befehl können Rückgabewerte definiert werden, die in der Plugin-Übersicht aufgelistet werden. Dies erleichtert das Debugging.

          Code:
          return "Wert:$Variable, Info:$SVariable2";
          (Es warden zwei Werte ausgegeben. Z.B. Wert: 20, Info: 0)

          return 0; (Es werden keine Werte zurückgeliefert)
        • Plugin deaktiviern:
          Soll ein Plugin deaktiviert werden, so kann dies mit return; in der ersten Zeile geschehen.


        Weitere Sehr interessante Infos gibt es hier:
        http://www.gxy.ch/5efinf/perl/perl-theo-02.pdf


        Tutorial by: Sebastian Wagner

        Quellen:
        Bestehende Plugins
        knx-user-forum.de
        Wiregate Hilfe
        selfhtml.org
        perl-howto.de
        hidemail.de
        perlunity.de
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          Wann ist XYZ verfügbar ?

          Siehe hier: Wenn es fertig ist findet man es bestellbar im Shop, bzw. in endgültigen Ankündigungen hier.

          Es gibt bevor etwas fertig ist, regelmässig keine fixen Terminaussagen, auch nicht auf Rückfrage.
          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
          -> Bitte KEINE PNs!

          Kommentar


            #6
            Demo-System

            Es gibt* ein Demo-System (ohne Speichern):
            Demo WireGate

            Direktzugriff auf die CometVisu (Release-Version!) mit Webcam: CometVisu-Client hier -> Schalten KNX/1-Wire;

            Makki

            *) eigentlich schon seit längerem für die CometVisu
            P.S.: Das läuft auf einem "echten" Wiregate-1, das hat auch keine Angst vor 50 oder 100 gleichzeitigen Zugriffen Ebenso hängt die Webcam daran, die wird nur aus Bandbreitengründen im RZ gemuxed..
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Ich habe eine Frage zu XYZ

              -> Bitte hier im Forum!
              Es erzeugt denselben Aufwand, diese zu beantworten wie ein eMail, hilft aber evtl. 20 gleiche Fragen zu vermeiden.
              Das spart Aufwand auf beiden Seiten

              (Edit StefanW): Bei wichtigen, dringende, eiligen Fragen sowie bei Defekten und Problemen bitte direkt an support at wiregate dot de

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

              Kommentar


                #8
                Hinweis zu Inventur-Abverkauf:

                - WireGate 1 Multifunktionsgateway jetzt mit 30 % Rabatt. So günstig war es noch nie !

                Nur solange Vorrat reicht und nur bis zum 28. März 2014 !

                Kommentar


                  #9
                  Das "alte" Repository auf SF findest man hier:
                  https://sourceforge.net/p/openautoma...lugin/generic/
                  das "neue" (Umzug auf Github):
                  https://github.com/OpenAutomationPro...plugin/generic

                  Makki


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

                  Kommentar

                  Lädt...
                  X