Note de ce sujet :
  • Moyenne : 4 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
WinDev et le SDK Falcon 6
#1
Bonjour chère communauté,

Je suis nouveau sur le forum et on m'a demandé si je pouvais aider quelqu'un avec Windev. À ce moment-là, je ne connaissais pas encore ce logiciel, alors je l'ai testé et c'est ainsi que je suis tombé sur ce forum.
J'y ai vu qu'il existait un fil de discussion concernant KNX dans Windev, mais uniquement en lien avec le Falcon SDK 5 et ses fonctionnalités limitées. Le Falcon SDK 6 n'était pas abordé.


Ainsi, j'ai démarré mon premier projet avec Windev et j'ai écrit un wrapper C# pour le Falcon SDK 6.
Ce wrapper utilise les commandes les plus courantes et permet de réaliser un grand nombre de fonctions.

Les fonctionnalités incluent par exemple :

    - Établir une connexion USB
    - Connexion IP, y compris avec des Secure Gateways
    - Envoi de valeurs dans différents DPTS (y compris DPT10, DPT11 et date sous DPT16)
    - Interrogation de valeurs au format Raw ainsi qu'au format DPT
    - Lecture des données reçues, permettant de réagir aux télégrammes entrants
    - Recherche de IP Gateways
    - Recherche de IP Secure Gateways
    - Sauvegarde des 100 derniers télégrammes
    - Chargement de la liste d'adresses de groupe depuis le DPT (export de l'ETS)

Le fichier à télécharger contient un exemple de code que j'ai écrit et testé avec la version gratuite de WinDev 28 Express. Le Falcon SDK 6 est également inclus dans le fichier.
L'exemple de code est un simple moniteur de bus qui, lorsque la liste d'adresses de groupe exportée depuis ETS est ajoutée, affiche également les types DPT (types de points de données) ainsi que les identificateurs textuels correspondants des adresses de groupe.

Avant d'utiliser, il est nécessaire d'enregistrer la DLL signée du Falcon SDK :
1. Copiez le dossier "Falcon SDK 6 Signé" dans vos documents.
2. Ouvrez l'invite de commande (CMD) en tant qu'administrateur.
3. Allez dans le dossier C:\Windows\Microsoft.NET\Framework\v4.0.30319.
4. Enregistrez la DLL avec la commande suivante : regasm "C:\Users\Utilisateur\Documents\Falcon SDK 6 Signé\KNXlib.dll" /tlb:KNXlib.tlb /codebase
5. Ensuite, allez dans le dossier C:\Windows\Microsoft.NET\Framework64\v4.0.30319.
6. Enregistrez à nouveau la DLL avec la même commande : regasm "C:\Users\Utilisateur\Documents\Falcon SDK 6 Signé\KNXlib.dll" /tlb:KNXlib.tlb /codebase
7. Si un message d'erreur indique que l'enregistrement a été bloqué, il peut être nécessaire de désactiver la fonction "Accès protégé aux dossiers".
8. Vous pouvez vérifier l'enregistrement réussi dans le Registre :
   Appuyez sur [Windows]+R et tapez regedit pour ouvrir l'éditeur de registre.
   Vérifiez les chemins suivants :
   Ordinateur\HKEY_CLASSES_ROOT\CLSID{E45D1244-ABCD-4E1D-8D9F-9992B7F017A2} 
   Ordinateur\HKEY_CLASSES_ROOT\WOW6432Node\CLSID{E45D1244-ABCD-4E1D-8D9F-9992B7F017A2}


Exemples de code :

Établir une connexion USB :
knxCon is KNXlib.KnxController
knxCon <- new KNXlib.KnxController()

knxCon.ConnectUSB()


Connectez-vous à la passerelle IP :
knxCon is KNXlib.KnxController
knxCon <- new KNXlib.KnxController()

knxIp is string = "192.168.178.42"
knxCon.Connect(knxIp, 3671, False)


Connectez-vous à la passerelle IP sécurisée :
knxCon is KNXlib.KnxController
knxCon <- new KNXlib.KnxController()
knxIp is string = "192.168.178.42"

knxCon.ConnectSecure(knxIp, 3671, False, "1.1.243", " file.knxkeys", "password")

Envoyer DPT1 :
knxCon.WriteBool("1/0/0" , True)

Envoyer DPT9.1 :
knxCon.WriteValueToDPT(Groupaddress, value as string, DPTupper value, DPTlower value)
knxCon.WriteValueToDPT("11/7/4", "20.5", 9, 1)

A lire :
value is string  = knxCon.ReadValueAsync("11/7/4")

Envoi DPT5.1 :
knxCon.WriteValueToDPT("6/0/9", "90", 5, 1)

Envoi DPT5.4 :
knxCon.WriteValueToDPT("6/0/9", "240", 5, 4)

Lire DPT9.1 :
tempvalue is string = knxCon.ReadValue("11/7/4", 9, 1)

Envoyer la date actuelle :
knxCon.WriteDate("11/5/0")

Envoyer l'heure actuelle :
knxCon.WriteTime("11/5/1")

Envoyer la date actuelle en tant que DPT16 :
knxCon.WriteTimeAsText("11/6/1")

La routine affiche les télégrammes actuellement reçus et démarre une action pour un télégramme spécifique :
IF knxCon.receiveValue.Count > lastcountinfo THEN
    
    IF knxCon.receiveValue.Count >= 100 THEN
        knxCon.receiveValue.Clear()  
        lastcountinfo = 0
        
    ELSE
        
        FOR i = lastcountinfo TO knxCon.receiveValue.Count - 1
            x1 is string = knxCon.GetReceiveDataValueAt(i, "date")
            x2 is string = knxCon.GetReceiveDataValueAt(i, "time")
            x3 is string = knxCon.GetReceiveDataValueAt(i, "paddress")
            x4 is string = knxCon.GetReceiveDataValueAt(i, "gaddress")
            x5 is string = knxCon.GetReceiveDataValueAt(i, "prio")
            x6 is string = knxCon.GetReceiveDataValueAt(i, "issecure")
            x7 is string = knxCon.GetReceiveDataValueAt(i, "hopcount")
            x8 is string = knxCon.GetReceiveDataValueAt(i, "eventtype")
            x9 is string = knxCon.GetReceiveDataValueAt(i, "value")        
                
                IF x4 = "10/0/3" AND x9 = 0 THEN
                    STC_NoName1.Text = "Hit the value !"        
                    knxCon.WriteByte("6/0/9", 10)             
                END
                
            LIST_NoName5.Add(x1 + " - " + x2 + " - " + x3 + " - " + x4 + " - " + x5 + " - " + x6 + " - " + x7 + " - " + x8 + " - " + x9)
        END
        
        lastcountinfo = knxCon.receiveValue.Count
        
        IF LIST_NoName5.Count <> 0 THEN
            ListPosition(LIST_NoName5, LIST_NoName5.Count)
        END
    END
END

Chargement du fichier d'adresses de groupe XML :
knxCon.LoadDptList("knxdptlist.xml")


J'espère que cela vous aidera et que vous vous en sortirez jusqu'à présent. Je n'ai pu le tester que tant que la version démo me le permettait.

Lien de téléchargement :
https://www.knx-board.org/download.php?f...rapper.zip

Bonne chance
Répondre
#2
Bonjour à tous !

Je voulais t'informer brièvement que l'outil a de nouveau été modifié. Ceux qui souhaitent utiliser la version actuelle sont priés de le télécharger à nouveau.

En outre, l'outil est facile à utiliser. Dans quelques cas, il pourrait également être possible pour les personnes intéressées de l'utiliser sous PHP, moyennant quelques efforts.


Exemple de 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 . " Grad Celsius<br>";    
    
    $knxController->Disconnect();
} catch (Exception $e) {

    echo "Fehler : " . $e->getMessage();
}
?>


Bien à vous,
Guido
Répondre
#3
Bonjour,

J'ai maintenant réécrit le code pour WinDev 25 et ajouté un exemple. Dans le fichier téléchargé, vous trouverez un guide expliquant comment enregistrer le Falcon SDK 6 signé dans le système à l'aide de regasm. Ainsi, il n'est plus nécessaire d'installer des assemblies .NET supplémentaires dans WinDev. Il suffit simplement de télécharger à nouveau le fichier.

Lien de téléchargement :
https://www.knx-board.org/download.php?f...rapper.zip
Répondre
#4
Thumbs Up 
Bonjour Guido.
J'ai fait des essais en suivant ton tuto et ton dernier lien de téléchargement.  ça fonctionne, Merci . J'ai justement un projet à mener en Windev 28 pour superviser une installation KNX...
Merci beaucoup pour ton post, à bientôt et bonne année 2025.
Répondre
#5
(01/01/2025, 19:21:58)PAT26140 a écrit : Bonjour Guido.
J'ai fait des essais en suivant ton tuto et ton dernier lien de téléchargement.  ça fonctionne, Merci . J'ai justement un projet à mener en Windev 28 pour superviser une installation KNX...
Merci beaucoup pour ton post, à bientôt et bonne année 2025.

Bonjour PAT26140,

Merci, cela me fait plaisir. Si tu as d'autres questions, n'hésite pas à me contacter.
Je travaille également à ajouter quelques méthodes supplémentaires. Si toi ou vous avez des idées, écris-moi simplement, dans la mesure où cela est réalisable de ma part.
Je te souhaite également une excellente année 2025 !
Répondre
#6
Bonjour,
j'ai légèrement modifié le wrapper afin qu'il dispose de plus de fonctionnalités.

Mise à jour vers la version 2.6
- Les informations sur l'adresse de groupe ainsi que l'unité DPT sont désormais transmises via le port TCP, à condition que le fichier XML soit disponible.
- Le codage pour l'envoi et la réception des données via TCP a été modifié de ASCII à UTF-8.
- L'appel de la méthode Version() renvoie désormais la version du pilote.

Des exemples simples pour Android Studio et Android MAUI sont également inclus, démontrant un contrôle via le port TCP/IP.

Lien de téléchargement :
https://www.knx-board.org/download.php?f...rapper.zip
Répondre
#7
(05/01/2025, 09:50:00)Smart Guido 73 a écrit : Bonjour,
j'ai légèrement modifié le wrapper afin qu'il dispose de plus de fonctionnalités.

Mise à jour vers la version 2.6
- Les informations sur l'adresse de groupe ainsi que l'unité DPT sont désormais transmises via le port TCP, à condition que le fichier XML soit disponible.
- Le codage pour l'envoi et la réception des données via TCP a été modifié de ASCII à UTF-8.
- L'appel de la méthode Version() renvoie désormais la version du pilote.

Des exemples simples pour Android Studio et Android MAUI sont également inclus, démontrant un contrôle via le port TCP/IP.

Lien de téléchargement :
https://www.knx-board.org/download.php?f...rapper.zip

Merci Guido. 
De mon coté je poursuis les essais aussi. Bon courage et à bientôt.
Répondre
#8
(12/01/2025, 22:28:17)PAT26140 a écrit :
(05/01/2025, 09:50:00)Smart Guido 73 a écrit : Bonjour,
j'ai légèrement modifié le wrapper afin qu'il dispose de plus de fonctionnalités.

Mise à jour vers la version 2.6
- Les informations sur l'adresse de groupe ainsi que l'unité DPT sont désormais transmises via le port TCP, à condition que le fichier XML soit disponible.
- Le codage pour l'envoi et la réception des données via TCP a été modifié de ASCII à UTF-8.
- L'appel de la méthode Version() renvoie désormais la version du pilote.

Des exemples simples pour Android Studio et Android MAUI sont également inclus, démontrant un contrôle via le port TCP/IP.

Lien de téléchargement :
https://www.knx-board.org/download.php?f...rapper.zip

Merci Guido. 
De mon coté je poursuis les essais aussi. Bon courage et à bientôt.

Bonjour PAT26140,

Merci, cela me fait plaisir ! Si tu as des questions, n'hésite pas à me contacter à tout moment.
Répondre
#9
Bonjour,

J'ai intégré le HttpListener, qui est également utilisé dans le KNX BusMonitor, ici dans ce projet.
En principe, il fonctionne de la même manière que dans le BusMonitor. Grâce aux requêtes HTTP, toutes les valeurs DPT (Types de Points de Données) peuvent être lues et écrites. Pour cette fonctionnalité, il n'est pas nécessaire de lire spécifiquement les adresses de groupe à partir du fichier XML.
Si, lors de la lecture d'une valeur, le DPT correspondant à l'adresse de groupe n'est pas connu, il suffit d'indiquer DPT0.0. Dans ce cas, la valeur brute de l'adresse de groupe est lue.
Il convient également de s'assurer que le port est ouvert.

StartHttpListenerServer(HttpPort: System.Int32)
Description : Cette méthode démarre le HttpListener sur le port spécifié.

StopHttpListenerServer()
Description : Cette méthode arrête le HttpListener.


Voici quelques exemples :
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

Voici un exemple de code :
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();
      }
   }
}

Le paquet de téléchargement contient maintenant uniquement le Wrapper et le manuel.
Lien de téléchargement v2.8 :
https://www.knx-board.org/download.php?f...Xdll28.zip
Répondre
#10
Bonjour,

J'ai ajouté quelques nouvelles fonctionnalités, notamment des méthodes pour l'email, FTP et SFTP. Celles-ci simplifient grandement le transport des données, car elles rendent les processus correspondants plus simples.


Méthodes Email :

SendTextEmail(senderName: System.String, emailAddress: System.String, password: System.String, toAddress: System.String, subject: System.String, body: System.String)
Description :
Cette méthode envoie un email simple en texte brut à l'adresse du destinataire spécifiée, avec le sujet et le corps du message donnés.

SendHtmlEmail(senderName: System.String, emailAddress: System.String, password: System.String, toAddress: System.String, subject: System.String, htmlBody: System.String)
Description :
Cette méthode envoie un email formaté en HTML à l'adresse du destinataire spécifiée, avec le sujet et le contenu HTML donnés.

ReadEmailByIndex(emailAddress: System.String, password: System.String, emailIndex: System.Int32)
Description :
Cette méthode lit l'email à la position d'index spécifiée dans la boîte de réception du compte email donné.

GetEmailCount(emailAddress: System.String, password: System.String)
Description :
Cette méthode renvoie le nombre total d'emails dans la boîte de réception du compte email spécifié.

DeleteEmailByIndex(emailAddress: System.String, password: System.String, emailIndex: System.Int32)
Description :
Cette méthode supprime un email de la boîte de réception en fonction de l'index spécifié.


Méthodes FTP :

FtpClientUserData(newhost: System.String, newusername: System.String, newpassword: System.String)
Description :
Cette méthode définit les informations de connexion FTP (hôte, nom d'utilisateur et mot de passe) pour le client FTP.

UploadFtpFile(localFilePath: System.String, remoteFilePath: System.String)
Description :
Cette méthode télécharge un fichier depuis un chemin local vers le serveur FTP distant spécifié.

DownloadFtpFile(remoteFilePath: System.String, localFilePath: System.String)
Description :
Cette méthode télécharge un fichier depuis le serveur FTP distant vers le chemin local spécifié.

DeleteFtpFile(remoteFilePath: System.String)
Description :
Cette méthode supprime un fichier du serveur FTP distant.

ListFtpDirectory(remoteDirectory: System.String)
Description :
Cette méthode liste tous les fichiers du répertoire distant spécifié sur le serveur FTP.


Méthodes SFTP :

SFtpClientUserData(newhost: System.String, newport: System.Int32, newusername: System.String, newpassword: System.String)
Description :
Cette méthode définit les informations de connexion SFTP (hôte, port, nom d'utilisateur et mot de passe) pour le client SFTP.

UploadSftpFile(localFilePath: System.String, remoteFilePath: System.String)
Description :
Cette méthode télécharge un fichier depuis un chemin local vers le serveur SFTP distant spécifié.

DownloadSftpFile(remoteFilePath: System.String, localFilePath: System.String)
Description :
Cette méthode télécharge un fichier depuis le serveur SFTP distant vers le chemin local spécifié.

DeleteSftpFile(remoteFilePath: System.String)
Description :
Cette méthode supprime un fichier du serveur SFTP distant.

ListSftpDirectory(remoteDirectory: System.String)
Description :
Cette méthode liste tous les fichiers du répertoire distant spécifié sur le serveur SFTP.


Quelques exemples de code :
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 E-Mail.";
          
 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");


Lien de téléchargement v3.0 :
KNXlib.dll
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet :