Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX Integration Plattformübergreifend nutzbar machen

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

    KNX Integration Plattformübergreifend nutzbar machen

    Hallo, ich habe meine erste DLL in C# geschrieben, die die Falcon SDK 6 nutzt.
    Diese DLL erleichtert die Nutzung des SDKs in verschiedenen Programmiersprachen und sie kann sowohl als Assembly als auch als COM Komponente verwendet werden, um sie in verschiedenen Programmiersprachen einzubinden.

    Ich habe sie in den folgenden Umgebungen getestet: WinDev, Delphi, Python, Java, Kotlin, PowerShell und natürlich C#.

    Zusätzlich ermöglicht sie die Verwendung auf verschiedenen Plattformen, beispielsweise als TCP Client. Auf einem Raspberry Pi oder Windows PC kann man damit einen Server erstellen, der mit anderen Geräten kommuniziert über TCP, wie einem ESP32/8266, Raspberry Pi oder Arduino.
    Die DLL nutzt TCP für das Senden und Empfangen von Daten, wodurch eine einfache Vernetzung zwischen Geräten möglich ist.

    Was ist möglich damit :
    - Aufbau einer Verbindung mit einem USB/IP Gateway (inklusive Secure IP Verbindung)
    - Integration von exportierten XML Gruppenadressen aus der ETS, sodass alle empfangenen Telegramme automatisch in die entsprechenden DPT Werte umgewandelt werden
    - Senden von Telegrammen über einen TCP/IP Port, inklusive Anfragen zu verschiedenen Werten, wie z.B. Temperatur
    - Suche nach verfügbaren USB/IP-Gateways im Netzwerk
    - Speicherung eingehender Telegramme in einem String-Array (max. 100 Werte, die nach Bedarf Speicherung eingehender Telegramme in einem String-Array (max. 100 Werte, die nach Bedarf gelöscht und neu beschrieben werden können)
    - Umwandlung von Raw DPT Werten und deren Rückumwandlung
    - Kann alle Telegramme in einer SQL Datenbank speichern, einschließlich der Funktionen zum Lesen und Löschen von IDs
    - Bietet mehrere Optionen zum Speichern der SQL Daten in Textdateien (nach Tag/Monat) und zur Ausgabe als Textdiagramm.

    Wenn du die DLL als Assembly verwenden möchtest, kannst du sie wie in C# einfach als Verweis hinzufügen (KNXlib.dll).
    Um sie als COM Schnittstelle zu nutzen, musst du sie mit regasm sowohl in 32Bit als auch in 64Bit registrieren.
    Dadurch wird auch die Nutzung mit PHP (XAMPP) möglich.

    Nutzung der DLL als COM Schnittstelle :
    1. Kopiere den Ordner „Falcon DLL“ in den „Dokumente“ Ordner.
    2. Starte die Eingabeaufforderung (CMD) als Administrator.
    3. Wechsle in den Ordner C:\Windows\Microsoft.NET\Framework\v4.0.30319.
    4. regasm "C:\Users\Benutzer\Documents\Falcon DLL\KNXlib.dll" /tlb:KNXlib.tlb /codebase diese Registrieren.
    5. Anschließend in den Ordner C:\Windows\Microsoft.NET\Framework64\v4.0.30319
    6. regasm "C:\Users\Benutzer\Documents\Falcon DLL\KNXlib.dll" /tlb:KNXlib.tlb /codebase diese Registrieren.
    7. Nur bei nutzung von PHP und JavaScript: Installiere XAMPP und füge den PHP-Code in den Ordner C:\xampp\htdocs ein.
    8. Sollte beim Registrieren eine Meldung erscheinen, dass der Ordnerzugriff überwacht wird, deaktiviere gegebenenfalls die Funktion „Überwachter Ordnerzugriff“.
    9. Du kannst die Registrierung überprüfen in RegEdit [Windows]+R Tastenkombination und regedit eingeben.

    Computer\HKEY_CLASSES_ROOT\CLSID\{E45D1244-ABCD-4E1D-8D9F-9992B7F017A2}

    Computer\HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{E45D 1244-ABCD-4E1D-8D9F-9992B7F017A2}


    Im Download Ordner befinden sich verschiedene Beispiele zur Nutzung der Schnittstelle in unterschiedlichen Programmiersprachen sowie eine einfache Hilfe Anleitung. Hier sind einige Beispiele:


    In PHP als COM Schnittstelle (nicht alles möglich):
    Code:
    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    try {
    $knxController = new COM("KNXlib.KnxController");
    
    $knxController->Connect("192.168.178.42", 3671, false);
    echo "Verbindung hergestellt !<br><br>";
    
    $knxController->WriteBool("1/0/0", true);
    
    $value = $knxController->ReadValue("4/1/3", 9, 1);
    echo "Gelesene Temperatur: " . $value . " <br>";
    
    $knxController->Disconnect();
    } catch (Exception $e) {
    echo "Fehler : " . $e->getMessage();
    }
    ?>

    Hier ist ein Delphi Beispiel:
    Code:
    unit Unit1;
    
    interface
    
    uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,ActiveX, ComObj,
    System.Actions, Vcl.ActnList, Vcl.ExtCtrls;
    
    
    var
    MyKNXDotNet: OleVariant;
    Result: OleVariant;
    var
    x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, combinedText: string;
    var
    i: Word;
    
    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    private
    ListBox1: TListBox;
    public
    { Public-Deklarationen }
    end;
    
    var
    Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    MyKNXDotNet.WriteBool('1/0/0', true);
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    MyKNXDotNet.WriteBool('1/0/0', false);
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    MyKNXDotNet.WriteValueToDPT('6/0/9', '10', 5, 1)
    end;
    
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    MyKNXDotNet.WriteValueToDPT('6/0/9', '0', 5, 1)
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    
    begin
    MyKNXDotNet := CreateOleObject('KNXlib.KnxController');
    MyKNXDotNet.Connect('192.168.178.42', 3671, false);
    
    ListBox1 := TListBox.Create(Self);
    
    ListBox1.Parent := Self;
    ListBox1.Left := 25;
    ListBox1.Top := 175;
    ListBox1.Width := 1200;
    ListBox1.Height := 300;
    
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
    combinedText: string;
    begin
    label3.Caption := 'Received telegrams : ' + IntToStr(ri);
    
    x1 := MyKNXDotNet.GetReceiveDataValueAt(i, 'date');
    x2 := MyKNXDotNet.GetReceiveDataValueAt(i, 'time');
    x3 := MyKNXDotNet.GetReceiveDataValueAt(i, 'paddress');
    x4 := MyKNXDotNet.GetReceiveDataValueAt(i, 'gaddress');
    x5 := MyKNXDotNet.GetReceiveDataValueAt(i, 'prio');
    x6 := MyKNXDotNet.GetReceiveDataValueAt(i, 'issecure');
    x7 := MyKNXDotNet.GetReceiveDataValueAt(i, 'hopcount');
    x8 := MyKNXDotNet.GetReceiveDataValueAt(i, 'eventtype');
    x9 := MyKNXDotNet.GetReceiveDataValueAt(i, 'svalue');
    x10 := MyKNXDotNet.GetReceiveDataValueAt(i, 'dptvalue');
    x11 := MyKNXDotNet.GetReceiveDataValueAt(i, 'dpttype');
    x12 := MyKNXDotNet.GetReceiveDataValueAt(i, 'info');
    
    if Pos('Index out of range', x1) = 0 then
    begin
    combinedText := Format('Date: %s, Time: %s, PAddress: %s, GAddress: %s, ' +
    'Prio: %s, IsSecure: %s, HopCount: %s, EventType: %s, Value: %s ' +
    'DptType: %s, DptValue: %s, DptInfo: %s',
    [x1, x2, x3, x4, x5, x6, x7, x8, x9, x11, x10, x12]);
    
    if ListBox1.Items.IndexOf(combinedText) = -1 then
    begin
    
    ListBox1.Items.Add(combinedText);
    ListBox1.ItemIndex := ListBox1.Items.Count - 1;
    ListBox1.SetFocus;
    i := i + 1;
    ri := ri + 1;
    end;
    end;
    
    
    if i = 100 then
    begin
    i := 0;
    MyKNXDotNet.GetReceiveDataClear;
    end;
    end;
    end.

    Hier ein WinDev Assemblies Beispiel:
    Code:
    knxCon is KNXlib.KnxController
    knxCon <- new KNXlib.KnxController()
    
    knxCon.Connect(“192.168.178.42”, 3671, False)
    knxCon.WriteValueToDPT(“11/7/4”, “20.5”, 9, 1)
    value is string = knxCon.ReadValueAsync(“11/7/4”)


    Hier ein Python Beispiel:
    Code:
    clr.AddReference(r’C:\Users\aa\Documents\Falcon DLL\KNXlib.dll’)
    from KNXlib import KnxController
    
    knxcontroller = KnxController()
    knxcontroller.LoadDptList(“knxxml.xml”)
    
    constatus = knxcontroller.Connect(“192.168.178.42”, 3671, False)
    
    knxcontroller.WriteValueToDPT(‘6/0/9’, ‘0’, 5, 1)

    Hier ein PowerShell Beispiel:
    Code:
    Add-Type -Path “KnxLib.dll”
    
    $controller = New-Object KNXlib.KnxController
    
    $result = $controller.Connect(“192.168.178.42”, 3671, $false)
    
    $controller.WriteBool(“1/0/0”, $true)



    Hier ist ein kleiner Auszug aus der Liste der verfügbaren Befehle/Methoden :

    ConnectUSB()
    Beschreibung: Diese Methode stellt eine Verbindung zu einem KNX USB Gateway her.

    Connect(Ip: System.String, Port: System.Int32, Nat: System.Boolean)
    Beschreibung: Diese Methode stellt eine Verbindung zu einem KNX IP Gateway her. Der Nat Parameter gibt an, ob NAT verwendet wird.

    ConnectSecure(Ip: System.String, Port: System.Int32, Nat: System.Boolean, indiaddress: System.String, filename: System.String, password: System.String)
    Beschreibung: Diese Methode stellt eine gesicherte Verbindung zu einem KNXsecure IP Gateway her und zusätzlicher Authentifizierung (individuelle Adresse, Datei und Passwort) her.

    Disconnect()
    Beschreibung: Diese Methode trennt die Verbindung zu einem KNX USB/IP Gateway.

    LoadDptList(filename: System.String)
    Beschreibung: Diese Methode lädt eine exportierte XML ETS Gruppenadressenliste aus einer angegebenen Datei.

    CreateSqlDatabase(Filename: System.String)
    Beschreibung: Diese Methode erstellt eine SQLite Datenbank mit dem angegebenen Dateinamen.

    SaveDataToSql(Filename: System.String, i: System.Int32)
    Beschreibung: Diese Methode speichert Daten in einer SQLite Datenbank aus dem index i.

    GetDataById(Filename: System.String, id: System.Int32)
    Beschreibung: Diese Methode ruft Daten aus einer SQLite Datenbank basierend auf einer ID ab.

    DeleteDataById(Filename: System.String, id: System.Int32)
    Beschreibung: Diese Methode löscht Daten aus einer SQLite Datenbank basierend auf einer ID.

    ExportDataToTextFile(SqlFileName: System.String, CreateFileName: System.String)
    Beschreibung: Diese Methode exportiert alle Daten aus einer SQLite Datenbank in eine Textdatei.

    ExportDataByDayAndGAddressToTextDiagramFile(SqlFil eName: System.String, createFileName: System.String, selectedDate: System.String, selectedGAddress: System.String, faktor: System.Double)
    Beschreibung: Diese Methode exportiert Daten aus einer SQLite Datenbank für einen bestimmten Tag und eine bestimmte Gruppenadresse in eine Textdatei und formatiert die Daten als Diagramm.

    ExportDataByMonthAndGAddressToTextDiagramFile(SqlF ileName: System.String, createFileName: System.String, selectedDate: System.String, selectedGAddress: System.String, faktor: System.Double)
    Beschreibung: Diese Methode exportiert Daten aus einer SQLite Datenbank für einen bestimmten Monat und eine bestimmte Gruppenadresse in eine Textdatei und formatiert die Daten als Diagramm.

    WriteValueToDPT(groupAddress: System.String, value: System.String, dpt1: System.Int32, dpt2: System.Int32)
    Beschreibung: Diese Methode schreibt einen Wert an eine Gruppenadresse im bestimmten DPT Type.

    WriteDate(groupaddress: System.String)
    Beschreibung: Diese Methode schreibt das aktuelle Datum an eine Gruppenadresse.

    WriteTimeAsText(groupaddress: System.String)
    Beschreibung: Diese Methode schreibt die aktuelle Uhrzeit als Text an eine Gruppenadresse.

    WriteTime(groupaddress: System.String)
    Beschreibung: Diese Methode schreibt die aktuelle Uhrzeit an eine Gruppenadresse.

    ReadValueAsync(groupAddress: System.String)
    Beschreibung: Diese Methode liest einen Wert asynchron von einer Gruppenadresse.

    ReadValue(groupAddress: System.String, dpt1: System.Int32, dpt2: System.Int32)
    Beschreibung: Diese Methode liest einen Wert von einer Gruppenadresse unter Verwendung der DPT Wert und gibt den DPT Wert zurück.

    ConvertToRaw(value: System.String, dpt1: System.Int32, dpt2: System.Int32)
    Beschreibung: Diese Methode konvertiert einen Wert in das Rohformat basierend auf den DPT Wert.

    ConvertToDPT(value: System.String, dpt1: System.Int32, dpt2: System.Int32)
    Beschreibung: Diese Methode konvertiert einen Wert in das DPT Format basierend auf den Raw Wert.


    Dies ist nur eine einfache Übersicht, die zeigt, wie die Schnittstelle genutzt werden kann.
    Zusätzlich habe ich ein Beispiel für Android MAUI beigefügt, das demonstriert, wie Server (der KNX BusMonitor, der ebenfalls hier zum Download zur Verfügung steht, kann ebenfalls als Server verwendet werden) und Client über TCP kommunizieren und welche Möglichkeiten sich daraus ergeben.
    Im Ordner ‚WinDev 28 .Net Assemblies - KNX Connection\Exe‘ befindet sich eine ausführbare Datei, die automatisch startet. Es handelt sich um ein WinDev Beispiel, das einige der möglichen Funktionen demonstriert.


    Downloadlink (Dateigröße: ca. 320 MB aufgrund der enthaltenen Beispiele) :
    https://www.knx-board.org/download.php?file=KNXdll.zip

    Downloadlink (Dateigröße: ca. 40 MB nur die Dll und ein Beispiel) :
    https://www.knx-board.org/download.p...=KNXdll-lv.zip
    Zuletzt geändert von Smart Guido; 31.12.2024, 16:42.
    Mit besten Grüßen,
    Guido

    Meine Projekte hier : KNX Busmonitor​​ / KNX Schalter mit Audio​ / KNX PiRadio

    #2
    Ich verstehe als Softwarelooser zwar nur Bahnhof, aber meinen Respekt hast Du
    Viele Grüße,
    Stefan

    DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

    Kommentar


      #3
      Vielen Dank, Stefan. Ich habe ja eigentlich nur ein Wrapper erstellt, der die Falcon SDK nutzt. Ich freue mich schon auf dein nächstes Projekt und möchte dir meinen tiefsten Respekt für deine Arbeit aussprechen die du hier bereits präsentiert hast.
      Mit besten Grüßen,
      Guido

      Meine Projekte hier : KNX Busmonitor​​ / KNX Schalter mit Audio​ / KNX PiRadio

      Kommentar


        #4
        Hallo, da eine Änderung vorgenommen wurde, müssen alle drei Softwarepakete angepasst werden, um mit TCP/IP kompatibel zu sein und einen einheitlichen Standard zu gewährleisten.

        Update auf v2.6
        - Die Gruppenadressinformationen sowie die DPT Einheit werden nun über den TCP Port mit übertragen, sofern die XML Datei vorhanden ist.
        - Die Kodierung für das Senden und Empfangen von Daten über TCP wurde von ASCII auf UTF8 umgestellt.
        - Der Aufruf der Methode Version() gibt nun die Treiberversion zurück.

        Es liegt noch ein einfaches Beispiel für Android Studio be,i mit einer Steuerung über TC/IP Port (letzter Downloadlink).

        Downloadlink (Treiber ein beispiel) :
        https://www.knx-board.org/download.p...=KNXdll-lv.zip

        Downloadlink Treiber mit Beispielen :
        https://www.knx-board.org/download.php?file=KNXdll.zip​
        Mit besten Grüßen,
        Guido

        Meine Projekte hier : KNX Busmonitor​​ / KNX Schalter mit Audio​ / KNX PiRadio

        Kommentar


          #5
          Hallo,

          ich habe den HttpListener, der auch im KNX BusMonitor verwendet wird, nachträglich hier integriert.
          Grundsätzlich funktioniert er genauso wie im BusMonitor. Über HTTP Requests können alle DPT Werte (Datapoint Types) gelesen und geschrieben werden. Für diese Funktion ist das spezielle Einlesen der Gruppenadressen aus der XML Datei nicht erforderlich.
          Falls beim Lesen eines Werts die DPT zur entsprechenden Gruppenadresse nicht bekannt ist, kann einfach DPT0.0 angegeben werden. In diesem Fall wird der Rohwert der Gruppenadresse eingelesen.
          Es sollte auch darauf geachtet werden, dass der Port freigeschaltet ist.

          StartHttpListenerServer(HttpPort: System.Int32)
          Beschreibung: Diese Methode startet den HttpListener auf dem angegebenen Port.

          StopHttpListenerServer()
          Beschreibung: Diese Methode stoppt den HttpListener.

          Hier sind ein paar Beispiele :
          Code:
          http://192.168.178.30:8080/set/1.0.0/dpt1.1/true oder false
          http://192.168.178.30:8080/set/6.0.9/dpt5.1/10
          http://192.168.178.30:8080/set/6.0.9/dpt5.4/250
          http://192.168.178.30:8080/set/11.7.4/dpt9.1/20.5
          http://192.168.178.30:8080/set/11.6.1/dpt16.1/Do.23.01.2025
          http://192.168.178.30:8080/get/10.0.2/dpt1.1
          http://192.168.178.30:8080/get/11.7.4/dpt0.0    
          http://192.168.178.30:8080/get/11.7.4/dpt9.1
          Hier noch ein Beispielcode :
          Code:
          using System;
          using KNXlib;
          
          namespace KNXConsolenApp
          {
              internal class Program
              {
                  private static KnxController knxController;
                  static void Main(string[] args)
                  {
                      knxController = new KnxController();
                      Console.ForegroundColor = ConsoleColor.Green;
                      Console.WriteLine("XML Import Status : " + knxController.LoadDptList("knxxml.xml"));
                      Console.WriteLine("KNX Gateway Status : " + knxController.Connect("192.168.178.42", 3671, false));
                      Console.WriteLine("TCP Server Status : " + knxController.StartKnxServer(6010));
                      Console.WriteLine("Http Server Status : " + knxController.StartHttpListenerServer(8080));
                      Console.WriteLine();
                      Console.ResetColor();
                      Console.ReadLine();
                      knxController.StopHttpListenerServer();
                      knxController.StopKnxServer();
                      knxController.Disconnect();
                  }
              }
          }
          Im Download Paket sind jetzt nur der Wrapper und die Anleitung enthalten.
          Downloadlink v2.8 :
          https://www.knx-board.org/download.p...e=KNXdll28.zip



          Mit besten Grüßen,
          Guido

          Meine Projekte hier : KNX Busmonitor​​ / KNX Schalter mit Audio​ / KNX PiRadio

          Kommentar


            #6
            Hallo,

            ich habe einige neue Funktionen hinzugefügt, darunter Methoden für Email, FTP und SFTP. Diese erleichtern den Datentransport erheblich, da sie die entsprechenden Prozesse vereinfachen.


            Email Methoden:

            SendTextEmail(senderName: System.String, emailAddress: System.String, password: System.String, toAddress: System.String, subject: System.String, body: System.String)
            Beschreibung:
            Diese Methode sendet eine einfache Text Email an die angegebene Empfängeradresse, mit dem angegebenen Betreff und Inhalt.


            SendHtmlEmail(senderName: System.String, emailAddress: System.String, password: System.String, toAddress: System.String, subject: System.String, htmlBody: System.String)
            Beschreibung:
            Diese Methode sendet eine HTML formatierte Email an die angegebene Empfängeradresse, mit dem angegebenen Betreff und dem HTML Inhalt.


            ReadEmailByIndex(emailAddress: System.String, password: System.String, emailIndex: System.Int32)
            Beschreibung:
            Diese Methode liest die Email an der angegebenen Indexposition in der E-Mail-Inbox des angegebenen Accounts.


            GetEmailCount(emailAddress: System.String, password: System.String)
            Beschreibung:
            Diese Methode gibt die Gesamtanzahl der Emails im Posteingang des angegebenen Email Kontos zurück.


            DeleteEmailByIndex(emailAddress: System.String, password: System.String, emailIndex: System.Int32)
            Beschreibung:
            Diese Methode löscht eine Email aus dem Posteingang basierend auf dem angegebenen Index.



            FTP Methoden:

            FtpClientUserData(newhost: System.String, newusername: System.String, newpassword: System.String)
            Beschreibung:
            Diese Methode setzt die FTP Verbindungsdaten (Host, Benutzername und Passwort) für den FTP-Client.


            UploadFtpFile(localFilePath: System.String, remoteFilePath: System.String)
            Beschreibung:
            Diese Methode lädt eine Datei vom lokalen Pfad auf den angegebenen Remote FTP Server hoch.


            DownloadFtpFile(remoteFilePath: System.String, localFilePath: System.String)
            Beschreibung:
            Diese Methode lädt eine Datei vom Remote FTP Server auf den angegebenen lokalen Pfad herunter.


            DeleteFtpFile(remoteFilePath: System.String)
            Beschreibung:
            Diese Methode löscht eine Datei vom Remote FTP Server.


            ListFtpDirectory(remoteDirectory: System.String)
            Beschreibung:
            Diese Methode listet alle Dateien im angegebenen Remote Verzeichnis auf dem FTP Server auf.



            SFTP Methoden:

            SFtpClientUserData(newhost: System.String, newport: System.Int32, newusername: System.String, newpassword: System.String)
            Beschreibung:
            Diese Methode setzt die SFTP Verbindungsdaten (Host, Port, Benutzername und Passwort) für den SFTP-Client.


            UploadSftpFile(localFilePath: System.String, remoteFilePath: System.String)
            Beschreibung:
            Diese Methode lädt eine Datei vom lokalen Pfad auf den angegebenen Remote SFTP Server hoch.


            DownloadSftpFile(remoteFilePath: System.String, localFilePath: System.String)Beschreibung:
            Diese Methode lädt eine Datei vom Remote SFTP Server auf den angegebenen lokalen Pfad herunter.


            DeleteSftpFile(remoteFilePath: System.String)
            Beschreibung:
            Diese Methode löscht eine Datei vom Remote SFTP Server.


            ListSftpDirectory(remoteDirectory: System.String)
            Beschreibung:
            Diese Methode listet alle Dateien im angegebenen Remote Verzeichnis auf dem SFTP Server auf.


            Ein paar Code Beispiele :
            Code:
             string senderName = "KNXlib Send you a message";
             string email = "karl.mustermann@web.de";
             string password = "123456";
             string toAddress = "max.mustermann@web.de";
             string subject = "Visu Status";
             string body = "Dies ist eine Test Email.";
                      
             string sendResult = knxController.SendTextEmail(senderName, email, password, toAddress, subject, body + downloadResult);
            Code:
             string senderName = "KNXlib Send you a message";
             string email = "karl.mustermann@web.de";
             string password = "123456";
             string toAddress = "max.mustermann@web.de";
             string subject = "Visu Status";
             string htmlBody = @"
                                 <html>
                                    <body>
                                       <h1>Dies ist eine Test HTML E-Mail</h1>
                                       <p>Dies ist der <b>HTML Inhalt</b> der E-Mail.</p>
                                       <p>Weitere Informationen finden Sie <a href='https://mustermann.de'>hier</a>.</p>
                                    </body>
                                 </html>";
            
             string sendResult2 = knxController.SendHtmlEmail(senderName, email, password, toAddress, subject, htmlBody);
            Code:
             knxController.FtpClientUserData("ftp://asfasrt4tfdyf.myfritz.net", "FTP Mustermann", "123456");
             var directoryList = knxController.ListFtpDirectory("/Daten");
             foreach (var file in directoryList)
             {
                 Console.WriteLine(file);
             }
             var downloadResult = knxController.DownloadFtpFile("/Daten/readme.txt", "C:\\Users\\Guido\\Desktop\\downloaded.txt");
            Code:
             knxController.SFtpClientUserData("hosting.vodafone.de", 22,"admin@dsafdasfc6stf.vodafone.de", "123456");
             var directoryList = knxController.ListSftpDirectory("public_html/");
             foreach (var file in directoryList)
             {
                 Console.WriteLine(file);
             }
             var downloadResult2 = knxController.DownloadSftpFile("log.txt", "C:\\Users\\Guido\\Desktop\\downloaded.txt");

            Downloadlink v3.0 :
            KNXlib.dll
            Mit besten Grüßen,
            Guido

            Meine Projekte hier : KNX Busmonitor​​ / KNX Schalter mit Audio​ / KNX PiRadio

            Kommentar


              #7
              Hallo,

              ich habe noch zwei Methoden zur alten Email Funktion hinzugefügt und zusätzlich eine Steuerung für Spotify integriert. Wenn man sich einen Web API Account erstellt, kann man den Spotify Webplayer steuern. Das bedeutet, man könnte Spotify über einen Raspberry Pi laufen lassen und diesen mit einem Verstärker in dem Raum integrieren, wo man ihn haben möchte. Alternativ funktioniert auch ein Mini PC.

              Es ist noch wichtig zu erwähnen, dass ab dieser Version (also v4.0) der Wrapper nur noch als .NET Assemblies verwendet werden kann und nicht mehr als COM DLL.

              So erstellst du einen Spotify Web API Account :
              1. Gehe zum Spotify Developer Dashboard.
              2. Melde dich an oder erstelle ein Spotify Konto, falls du noch keines hast.
              3. Akzeptiere die Nutzungsbedingungen von Spotify.
              4. Klicke auf "Create an App".
              5. Gib deiner App einen Namen und eine Beschreibung.
              6. Klicke auf "Create", um die App zu erstellen.
              7. Notiere dir die "Client ID" und das "Client Secret", diese werden für die Kommunikation mit der Spotify Web API benötigt.
              8. Gehe in die Einstellungen deiner App.
              9. Füge eine Redirect URI hinzu, z. B. http://localhost:5000/callback (dies ist eine URL, auf die Spotify nach der Authentifizierung zurückkehrt).
              10. Speichere die Änderungen.
              11. Öffne die Spotify Web API Console.
              12. Teste eine API Anfrage, z. B. "Get Current User’s Playlists".
              13. Autorisiere die Anfrage, indem du dich mit deinem Spotify-Konto anmeldest.
              14. Du erhältst dann JSON Daten mit deiner Spotify Playlist.
              15. Nutze die "Client ID" und das "Client Secret" in deiner App, um API-Anfragen zu senden und Spotify zu steuern.


              Um die Playlist ID von Spotify zu erhalten, kannst du folgenden Weg nutzen :
              1. Öffne Spotify auf deinem Desktop oder in der mobilen App.
              2. Navigiere zur gewünschten Playlist, deren ID du abrufen möchtest.
              3. Klicke mit der rechten Maustaste auf die Playlist (Desktop) oder tippe auf die drei Punkte neben der Playlist (Mobile).
              4. Wähle "Teilen" und dann "Link kopieren" (Desktop) oder "Copy Link" (Mobile).
              Der Link sieht in etwa so aus:
              https://open.spotify.com/playlist/{Playlist ID}
              5. Die Playlist-ID ist der Teil des Links nach "playlist/". Zum Beispiel, wenn der Link lautet:
              https://open.spotify.com/playlist/37...1DX2sUQw7jZg5b
              Dann ist die Playlist ID : 37i9dQZF1DX2sUQw7jZg5b.


              Hier die neuen Methoden die dazu kamen:

              Methode: EmailServer.Add
              Beschreibung: Fügt einen neuen E-Mail-Server (mit IMAP- und SMTP-Serverdetails) zum EmailServers-Dictionary hinzu.
              EmailServers.Add(domain: System.String, smtpServer: System.String, smtpPort: System.Int32, imapServer: System.String, imapPort: System.Int32)
              Übergebene Parameter:
              domain: Der E-Mail-Domainname des Anbieters (z.B. "example.com").
              smtpServer: Der SMTP-Server für den E-Mail-Anbieter (z.B. "smtp.example.com").
              smtpPort: Der Port für den SMTP-Server (z.B. 587).
              imapServer: Der IMAP-Server für den E-Mail-Anbieter (z.B. "imap.example.com").
              imapPort: Der Port für den IMAP-Server (z.B. 993).
              Rückgabewert:
              void: Die Methode gibt keinen Wert zurück. Der Server wird direkt zum EmailServers-Dictionary hinzugefügt.

              Schon verfügbar:
              { "gmail.com", ("smtp.gmail.com", 587, "imap.gmail.com", 993) },
              { "web.de", ("smtp.web.de", 587, "imap.web.de", 993) },
              { "gmx.de", ("smtp.gmx.de", 587, "imap.gmx.de", 993) },
              { "freenet.de", ("smtp.freenet.de", 587, "imap.freenet.de", 993) },
              { "yahoo.com", ("smtp.mail.yahoo.com", 587, "imap.mail.yahoo.com", 993) },
              { "outlook.com", ("smtp-mail.outlook.com", 587, "imap-mail.outlook.com", 993) },
              { "hotmail.com", ("smtp.live.com", 587, "imap-mail.outlook.com", 993) },
              { "icloud.com", ("smtp.mail.me.com", 587, "imap.mail.me.com", 993) },
              { "zoho.com", ("smtp.zoho.com", 587, "imap.zoho.com", 993) },
              { "mail.com", ("smtp.mail.com", 587, "imap.mail.com", 993) },
              { "protonmail.com", ("smtp.protonmail.com", 587, "imap.protonmail.com", 993) },
              { "aol.com", ("smtp.aol.com", 587, "imap.aol.com", 993) },
              { "yandex.com", ("smtp.yandex.com", 587, "imap.yandex.com", 993) },
              { "t-online.de", ("smtp.t-online.de", 587, "imap.t-online.de", 993) },
              { "orange.fr", ("smtp.orange.fr", 587, "imap.orange.fr", 993) },
              { "sfr.fr", ("smtp.sfr.fr", 587, "imap.sfr.fr", 993) },
              { "laposte.net", ("smtp.laposte.net", 587, "imap.laposte.net", 993) },
              { "free.fr", ("smtp.free.fr", 587, "imap.free.fr", 993) },
              { "bouyguestelecom.fr", ("smtp.bouyguestelecom.fr", 587, "imap.bouyguestelecom.fr", 993) },
              { "neuf.fr", ("smtp.neuf.fr", 587, "imap.neuf.fr", 993) },
              { "seznam.cz", ("smtp.seznam.cz", 587, "imap.seznam.cz", 993) },
              { "mailinator.com", ("smtp.mailinator.com", 587, "imap.mailinator.com", 993) },
              { "tutanota.com", ("smtp.tutanota.com", 587, "imap.tutanota.com", 993) }


              Methode: GetAllEmailsInfo
              Beschreibung: Ruft alle E-Mail-Informationen für ein bestimmtes E-Mail-Konto ab, basierend auf der E-Mail-Adresse und dem Passwort.
              GetAllEmailsInfo(emailAddress: System.String, password: System.String)
              Rückgabewert: System.Collections.Generic.List<System.String>
              Liste der E-Mails: Gibt eine Liste von E-Mail Informationen im Format „Email #N - Subject: [Betreff] - From: [Absender] - Date: [Datum]“ zurück.
              Email provider not supported: Wenn der E-Mail Anbieter nicht unterstützt wird.
              No emails found: Wenn keine E-Mails im Posteingang gefunden wurden.
              Error retrieving emails: Wenn ein Fehler beim Abrufen der E-Mails auftritt. Wird der Fehlertext im Rückgabewert angezeigt.

              Methode: InitSpotify
              Beschreibung: Startet den Spotify Authentifizierungsprozess und spielt nach erfolgreicher Authentifizierung eine Playlist ab.
              InitSpotify(userClientId: System.String, userClientSecret: System.String, userRedirectUri: System.String, playList: System.String)
              Rückgabewert: System.String
              Browser sollte sich nun öffnen. Warte auf Authentifizierung...: Der Browser sollte geöffnet werden, um die Authentifizierung abzuschließen.
              Authentifizierung erfolgreich!: Wird zurückgegeben, wenn der Benutzer erfolgreich authentifiziert wurde.
              Fehler: Kein Autorisierungscode erhalten.: Wird zurückgegeben, wenn kein Autorisierungscode empfangen wurde.

              Methode: Playlist
              Beschreibung: Spielt eine Playlist basierend auf der angegebenen ID ab.
              Playlist(playlist: System.String)
              Rückgabewert: System.String
              Wiedergabe gestartet.: Wird zurückgegeben, wenn die Playlist erfolgreich abgespielt wurde.
              Fehler beim Starten der Wiedergabe: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler beim Starten der Playlist auftritt.

              Methode: PlayPlaylist
              Beschreibung: Spielt eine Playlist auf dem ersten verfügbaren Gerät ab.
              PlayPlaylist(playlistId: System.String)
              Rückgabewert: System.String
              Wiedergabe gestartet.: Wird zurückgegeben, wenn die Playlist erfolgreich auf dem verfügbaren Gerät abgespielt wird.
              Keine verfügbaren Geräte für die Wiedergabe gefunden.: Wird zurückgegeben, wenn kein Gerät für die Wiedergabe gefunden wird.
              Fehler beim Starten der Wiedergabe: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: PlayPlaylistIndexOnlyThisNumber
              Beschreibung: Spielt einen bestimmten Track aus einer Playlist auf dem ersten verfügbaren Gerät ab.
              PlayPlaylistIndexOnlyThisNumber(playlistId: System.String, trackIndex: System.Int32)
              Rückgabewert: System.String
              Wiedergabe gestartet: [Track Name] von [Künstler Name]: Wird zurückgegeben, wenn der Track erfolgreich abgespielt wurde.
              Ungültige Tracknummer. Die Playlist hat [Anzahl] Titel.: Wird zurückgegeben, wenn der angegebene Trackindex ungültig ist.
              Keine verfügbaren Geräte für die Wiedergabe gefunden.: Wird zurückgegeben, wenn kein Gerät gefunden wird.
              Fehler beim Starten der Wiedergabe: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: PlayPlaylistAtThisNumber
              Beschreibung: Spielt eine Playlist ab und beginnt ab einem bestimmten Track-Index.
              PlayPlaylistAtThisNumber(playlistId: System.String, trackIndex: System.Int32)
              Rückgabewert: System.String
              Wiedergabe gestartet ab Titel [Track Index + 1].: Wird zurückgegeben, wenn die Wiedergabe erfolgreich gestartet wird.
              Ungültige Tracknummer. Die Playlist hat [Anzahl] Titel.: Wird zurückgegeben, wenn der angegebene Trackindex ungültig ist.
              Keine verfügbaren Geräte für die Wiedergabe gefunden.: Wird zurückgegeben, wenn kein Gerät gefunden wird.
              Fehler beim Starten der Wiedergabe: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: IncreaseVolume
              Beschreibung: Erhöht die Lautstärke des aktuellen Wiedergabegeräts um 10%.
              IncreaseVolume()
              Rückgabewert: System.String
              Volume increased to [new volume]%: Wird zurückgegeben, wenn die Lautstärke erfolgreich erhöht wurde.
              Volume is already at maximum.: Wird zurückgegeben, wenn die Lautstärke bereits auf dem Maximum ist.
              No device available to adjust the volume.: Wird zurückgegeben, wenn kein Gerät verfügbar ist.

              Methode: DecreaseVolume
              Beschreibung: Verringert die Lautstärke des aktuellen Wiedergabegeräts um 10%.
              DecreaseVolume()
              Rückgabewert: System.String
              Volume decreased to [new volume]%: Wird zurückgegeben, wenn die Lautstärke erfolgreich verringert wurde.
              Volume is already at minimum.: Wird zurückgegeben, wenn die Lautstärke bereits auf dem Minimum ist.
              No device available to adjust the volume.: Wird zurückgegeben, wenn kein Gerät verfügbar ist.

              Methode: SetVolume
              Beschreibung: Stellt die Lautstärke des aktuellen Wiedergabegeräts auf den angegebenen Wert ein.
              SetVolume(volume: System.Int32)
              Rückgabewert: System.String
              Volume set to [volume]%: Wird zurückgegeben, wenn die Lautstärke erfolgreich auf den angegebenen Wert gesetzt wurde.
              No device available to adjust the volume.: Wird zurückgegeben, wenn kein Gerät verfügbar ist.

              Methode: TogglePlayPause
              Beschreibung: Schaltet zwischen Wiedergabe und Pause des aktuellen Tracks.
              TogglePlayPause()
              Rückgabewert: System.String
              Playback paused.: Wird zurückgegeben, wenn die Wiedergabe erfolgreich pausiert wurde.
              Playback resumed.: Wird zurückgegeben, wenn die Wiedergabe erfolgreich fortgesetzt wurde.
              Error toggling play/pause: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: Play
              Beschreibung: Startet die Wiedergabe, falls der aktuelle Track pausiert ist.
              Play()
              Rückgabewert: System.String
              Playback resumed.: Wird zurückgegeben, wenn die Wiedergabe erfolgreich fortgesetzt wurde.
              Playback is already playing.: Wird zurückgegeben, wenn die Wiedergabe bereits läuft.
              Error starting playback: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: Pause
              Beschreibung: Paussiert die Wiedergabe des aktuellen Tracks.
              Pause()
              Rückgabewert: System.String
              Playback paused.: Wird zurückgegeben, wenn die Wiedergabe erfolgreich pausiert wurde.
              Playback is already paused.: Wird zurückgegeben, wenn die Wiedergabe bereits pausiert wurde.
              Error pausing playback: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: FastForward
              Beschreibung: Spult den aktuellen Track um 10 Sekunden vorwärts.
              FastForward()
              Rückgabewert: System.String
              Fast forward.: Wird zurückgegeben, wenn die Wiedergabe erfolgreich vorwärts gesprungen ist.
              No track available to fast forward.: Wird zurückgegeben, wenn kein Track verfügbar ist.
              Error fast-forwarding: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: Rewind
              Beschreibung: Spult den aktuellen Track um 10 Sekunden zurück.
              Rewind()
              Rückgabewert: System.String
              Rewind.: Wird zurückgegeben, wenn die Wiedergabe erfolgreich zurückgespult wurde.
              No track available to rewind.: Wird zurückgegeben, wenn kein Track verfügbar ist.
              Error rewinding: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: SkipNext
              Beschreibung: Überspringt zum nächsten Track in der Wiedergabe.
              SkipNext()
              Rückgabewert: System.String
              Skipped to the next track.: Wird zurückgegeben, wenn erfolgreich zum nächsten Track gesprungen wurde.
              Error skipping to the next track: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: SkipPrevious
              Beschreibung: Überspringt zum vorherigen Track in der Wiedergabe.
              SkipPrevious()
              Rückgabewert: System.String
              Skipped to the previous track.: Wird zurückgegeben, wenn erfolgreich zum vorherigen Track gesprungen wurde.
              Error skipping to the previous track: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: GetCurrentTrackInfo
              Beschreibung: Gibt Informationen über den aktuellen Track, der abgespielt wird, zurück.
              GetCurrentTrackInfo()
              Rückgabewert: System.String
              Now playing: [Track Name] by [Artist Name]. Progress: [currentProgress]s of [trackDuration]s.: Wird zurückgegeben, wenn Informationen über den aktuellen Track erfolgreich abgerufen wurden.
              No active playback.: Wird zurückgegeben, wenn keine Wiedergabe aktiv ist.
              Error retrieving track information: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: GetRemainingTime
              Beschreibung: Gibt die verbleibende Zeit des aktuellen Tracks zurück.
              GetRemainingTime()
              Rückgabewert: System.String
              Remaining time: [remainingTime]s.: Wird zurückgegeben, wenn die verbleibende Zeit erfolgreich berechnet wurde.
              No active playback.: Wird zurückgegeben, wenn keine Wiedergabe aktiv ist.
              Error calculating remaining time: [Fehlermeldung]: Wird zurückgegeben, wenn ein Fehler auftritt.

              Methode: PlaySong
              Beschreibung: Spielt ein Lied basierend auf einem Suchbegriff.
              PlaySong(querySongName: System.String)
              Rückgabewert: System.String
              Now playing: [Track Name] by [Artist Name].: Wird zurückgegeben, wenn das Lied erfolgreich abgespielt wurde.

              Hier ist ein einfaches Beispiel, wie es aussehen könnte:
              Code:
              using System;
              using KNXlib;
              
              namespace spotifytest
              {
                  internal class Program
                  {
                      static KnxController knxController = new KnxController();
                      static int i = 0;
                      static void Main(string[] args)
                      {
                          knxController.Connect("192.168.178.42", 3671, false);
              
                          knxController.InitSpotify("Client ID", "Client Secret", "Redirect URI", "Playlist ID");
              
                          Console.WriteLine("KNX Telegram Listener gestartet...");
              
                          while (true)
                          {
                              ProcessKNXData();
              
                              if (Console.KeyAvailable)
                              {
                                  ConsoleKeyInfo key = Console.ReadKey(true);
              
                                  if (key.Key == ConsoleKey.Spacebar)
                                  {
                                      knxController.Disconnect();
                                      break;
                                  }
                              }
                          }
                      }
              
                      static void ProcessKNXData()
                      {
                          string x1 = knxController.GetReceiveDataValueAt(i, "gaddress");
                          string x2 = knxController.GetReceiveDataValueAt(i, "svalue");
                      
                          if (!x1.Contains("Index out of range"))
                          {
                              if (x1 == "10/0/2" && x2 == "1")
                              {
                                  knxController.SkipPrevious();
                              }
              
                              if (x1 == "10/0/3" && x2 == "1")
                              {
                                  knxController.SkipNext();
                              }
              
                              if (x1 == "10/0/4" && x2 == "1")
                              {
                                  knxController.Pause();
                              }
              
                              if (x1 == "10/0/5" && x2 == "1")
                              {
                                  knxController.Play();
                              }
              
                              i++;
              
                              if (i==100)
                              {
                                  knxController.GetReceiveDataClear();
                                  i = 0;
                              }
                          }
                      }
                  }
              }
              Downloadlink v4.0 :
              KNXlib


              Ich habe eine weitere Version zum Download bereitgestellt, in der nur die beiden Email Funktionen hinzugefügt wurden, ohne die Spotify Funktionen. Diese Version funktioniert sowohl als .NET Assembly als auch über die COM Schnittstelle.

              Downloadlink v3.1 :
              KNXdll


              Ich habe hier noch drei kleine Programme hinzugefügt, die für den ein oder anderen interessant sein könnten.

              1. Programme : BBCodeEditor v1.4

              Ich habe das Tool weiter optimiert und beide Textfenster springen bei Änderungen nicht mehr zum Anfang zurück. Das Eingabefenster verfügt nun über einen Code Highlighter, und Funktionen werden jetzt automatisch aktualisiert, sobald sie gesetzt werden.

              Downloadlink :
              BBCodeEditor

              2. Programmm : Html&Css LiveWriter
              Ich habe eine kleine App geschrieben, die HTML und CSS direkt im Browser anzeigt. Das hilft beim Lernen und erleichtert das Verständnis.

              Downloadlink :
              Html&Css LiveWriter

              3.Programm : MSIL Compiler
              Ich habe ein simples Tool geschrieben, das den MSIL Code einfacher Konsolenanwendungen anzeigt und diesen in eine ausführbare EXE Datei umwandelt.

              Downloadlink :
              MSIL Compiler
              Zuletzt geändert von Smart Guido; 08.02.2025, 19:28.
              Mit besten Grüßen,
              Guido

              Meine Projekte hier : KNX Busmonitor​​ / KNX Schalter mit Audio​ / KNX PiRadio

              Kommentar

              Lädt...
              X