26/10/2025, 19:16:24 
(Modification du message : 26/10/2025, 19:27:18 par Smart Guido 73.)
		
	
	
		Bonjour,
J’ai désormais un exemple de code PHP pour le wrapper qui fonctionne correctement, accompagné d’un petit guide avec des exemples pratiques.
Configuration d’un démon KNX avec support COM sous XAMPP.
Prérequis :
Windows 10 ou 11 (64 bits)
XAMPP installé (avec PHP 8.4.x CLI disponible)
Composant COM KNXlib installé
Étape 1 : Télécharger PHP 8.2 NTS avec support COM
Allez sur le site officiel des archives PHP pour Windows :
https://windows.php.net/downloads/releases/archives/
Recherchez la version PHP 8.2 NTS x64, par exemple « php-8.2.12-nts-Win32-vs16-x64.zip », et téléchargez le fichier ZIP.
Étape 2 : Créer un dossier pour la nouvelle version de PHP
Créez un dossier, par exemple :
C:\xampp\php_com
Décompressez le contenu du fichier ZIP téléchargé dans ce dossier.
Étape 3 : Configurer php.ini
Copiez le fichier php.ini-development présent dans le dossier php_com et renommez-le en php.ini.
Ouvrez ce fichier dans un éditeur de texte et assurez-vous que les lignes suivantes sont présentes ou ajoutées :
extension_dir = "ext"
extension=com_dotnet
Enregistrez ensuite le fichier.
Étape 4 : Vérifier le support COM
Ouvrez CMD ou PowerShell et exécutez la commande suivante :
C:\xampp\php_com\php.exe -m | find "com_dotnet"
Si la sortie affiche « com_dotnet », l’extension COM est bien activée.
Étape 5 : Démarrer le démon KNX
Dans le terminal, placez-vous dans le dossier de votre projet, par exemple :
C:\xampp\htdocs
Démarrez ensuite le démon avec la nouvelle version de PHP :
C:\xampp\php_com\php.exe knx_daemon.php
La sortie devrait indiquer :
[KNX] Démarrage du démon...
[KNX] Connexion établie.
Étape 6 (optionnelle) : Créer un fichier batch pour un démarrage simplifié
Créez un fichier batch, par exemple :
C:\xampp\start_knx_daemon.bat
Ce fichier doit :
se placer dans le dossier du projet,
lancer le démon avec la nouvelle version de PHP,
et éventuellement minimiser la fenêtre.
Un double-clic sur ce fichier lancera le démon.
Vous pouvez également placer ce fichier dans le dossier de démarrage de Windows pour que le démon se lance automatiquement au démarrage du système.
C’est terminé !
Le démon KNX fonctionne désormais en permanence via PHP avec support COM.
Votre interface peut envoyer des commandes TCP au démon sans devoir réinitialiser la connexion USB à chaque fois.
knx_daemon.php
index.php
knx_api.php
	
	
	
	
J’ai désormais un exemple de code PHP pour le wrapper qui fonctionne correctement, accompagné d’un petit guide avec des exemples pratiques.
Configuration d’un démon KNX avec support COM sous XAMPP.
Prérequis :
Windows 10 ou 11 (64 bits)
XAMPP installé (avec PHP 8.4.x CLI disponible)
Composant COM KNXlib installé
Étape 1 : Télécharger PHP 8.2 NTS avec support COM
Allez sur le site officiel des archives PHP pour Windows :
https://windows.php.net/downloads/releases/archives/
Recherchez la version PHP 8.2 NTS x64, par exemple « php-8.2.12-nts-Win32-vs16-x64.zip », et téléchargez le fichier ZIP.
Étape 2 : Créer un dossier pour la nouvelle version de PHP
Créez un dossier, par exemple :
C:\xampp\php_com
Décompressez le contenu du fichier ZIP téléchargé dans ce dossier.
Étape 3 : Configurer php.ini
Copiez le fichier php.ini-development présent dans le dossier php_com et renommez-le en php.ini.
Ouvrez ce fichier dans un éditeur de texte et assurez-vous que les lignes suivantes sont présentes ou ajoutées :
extension_dir = "ext"
extension=com_dotnet
Enregistrez ensuite le fichier.
Étape 4 : Vérifier le support COM
Ouvrez CMD ou PowerShell et exécutez la commande suivante :
C:\xampp\php_com\php.exe -m | find "com_dotnet"
Si la sortie affiche « com_dotnet », l’extension COM est bien activée.
Étape 5 : Démarrer le démon KNX
Dans le terminal, placez-vous dans le dossier de votre projet, par exemple :
C:\xampp\htdocs
Démarrez ensuite le démon avec la nouvelle version de PHP :
C:\xampp\php_com\php.exe knx_daemon.php
La sortie devrait indiquer :
[KNX] Démarrage du démon...
[KNX] Connexion établie.
Étape 6 (optionnelle) : Créer un fichier batch pour un démarrage simplifié
Créez un fichier batch, par exemple :
C:\xampp\start_knx_daemon.bat
Ce fichier doit :
se placer dans le dossier du projet,
lancer le démon avec la nouvelle version de PHP,
et éventuellement minimiser la fenêtre.
Un double-clic sur ce fichier lancera le démon.
Vous pouvez également placer ce fichier dans le dossier de démarrage de Windows pour que le démon se lance automatiquement au démarrage du système.
C’est terminé !
Le démon KNX fonctionne désormais en permanence via PHP avec support COM.
Votre interface peut envoyer des commandes TCP au démon sans devoir réinitialiser la connexion USB à chaque fois.
knx_daemon.php
Code PHP :
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$address = '127.0.0.1';
$port = 9000;
echo "[KNX] Démarrer le Daemon...\n";
$knx = new COM("KNXlib.KnxController");
$knx->ConnectUSB();
echo "[KNX] Connexion établie.\n";
$server = stream_socket_server("tcp://$address:$port", $errno, $errstr);
if (!$server) {
die("Erreur lors du démarrage du serveur: $errstr ($errno)\n");
}
while (true) {
$client = @stream_socket_accept($server, -1);
if ($client) {
$data = trim(fgets($client));
echo "[REQ] $data\n";
if ($data === "on") {
$knx->WriteBool("1/0/0", true);
fwrite($client, "OK: Lumière allumée\n");
} elseif ($data === "off") {
$knx->WriteBool("1/0/0", false);
fwrite($client, "OK: Extinction des feux\n");
} elseif ($data === "temp") {
$value = $knx->ReadValue("4/1/3", 9, 1);
fwrite($client, "TEMP:$value\n");
} else {
fwrite($client, "ERREUR : commande inconnue\n");
}
fclose($client);
}
} 
index.php
Code PHP :
PHP-Code:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Contrôle KNX</title>
<style>
body {
font-family: Arial, sans-serif;
background: #f2f2f2;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
background: white;
padding: 30px 40px;
border-radius: 15px;
box-shadow: 0 0 15px rgba(0,0,0,0.1);
text-align: center;
}
button {
padding: 12px 24px;
margin: 10px;
border: none;
border-radius: 8px;
color: white;
font-size: 16px;
cursor: pointer;
transition: 0.3s;
}
.on { background: #28a745; }
.off { background: #dc3545; }
.on:hover { background: #218838; }
.off:hover { background: #c82333; }
.status {
margin-top: 20px;
font-size: 18px;
}
</style>
</head>
<body>
<div class="container">
<h1>? KNX Steuerung</h1>
<button class="on" onclick="sendCommand('on')">Allumer</button>
<button class="off" onclick="sendCommand('off')">Éteindre</button>
<div class="status" id="status">Bereit...</div>
<div class="status" id="temp">température: -- °C</div>
</div>
<script>
async function sendCommand(cmd) {
const res = await fetch(`knx_api.php?cmd=${cmd}`);
const data = await res.json();
document.getElementById('status').innerText = data.response || data.message;
}
async function updateTemp() {
const res = await fetch(`knx_api.php?cmd=temp`);
const data = await res.json();
if (data.response && data.response.startsWith("TEMP:")) {
const temp = data.response.replace("TEMP:", "").trim();
document.getElementById('temp').innerText = `?️ Temperatur: ${temp} °C`;
}
}
setInterval(updateTemp, 10000);
updateTemp();
</script>
</body>
</html>  
knx_api.php
Code PHP :
PHP-Code:
<?php
header('Content-Type: application/json');
$command = $_GET['cmd'] ?? '';
$response = '';
try {
$fp = fsockopen("127.0.0.1", 9000, $errno, $errstr, 2);
if (!$fp) {
throw new Exception("Démon inaccessible : $errstr ($errno)");
}
fwrite($fp, $command . "\n");
$response = fgets($fp);
fclose($fp);
echo json_encode(["status" => "ok", "response" => trim($response)]);
} catch (Exception $e) {
echo json_encode(["status" => "error", "message" => $e->getMessage()]);
} 

 
 

 
