Note de ce sujet :
  • Moyenne : 4 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
WinDev et le SDK Falcon 6
#11
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
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"91);
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-familyArialsans-serif;
background#f2f2f2;
displayflex;
justify-contentcenter;
align-itemscenter;
height100vh;
}
.
container {
backgroundwhite;
padding30px 40px;
border-radius15px;
box-shadow0 0 15px rgba(0,0,0,0.1);
text-aligncenter;
}
button {
padding12px 24px;
margin10px;
bordernone;
border-radius8px;
colorwhite;
font-size16px;
cursorpointer;
transition0.3s;
}
.
on background#28a745; }
.off background#dc3545; }
.on:hover background#218838; }
.off:hover background#c82333; }
.status {
margin-top20px;
font-size18px;
}
</
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(updateTemp10000);
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$errstr2);
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()]);

Répondre


Messages dans ce sujet
WinDev et le SDK Falcon 6 - par Smart Guido 73 - 05/11/2024, 22:37:27
RE: WinDev et le SDK Falcon 6 - par Smart Guido 73 - 10/11/2024, 16:59:20
RE: WinDev et le SDK Falcon 6 - par Smart Guido 73 - 26/11/2024, 21:16:37
RE: WinDev et le SDK Falcon 6 - par PAT26140 - 01/01/2025, 19:21:58
RE: WinDev et le SDK Falcon 6 - par Smart Guido 73 - 01/01/2025, 19:46:20
RE: WinDev et le SDK Falcon 6 - par Smart Guido 73 - 05/01/2025, 09:50:00
RE: WinDev et le SDK Falcon 6 - par PAT26140 - 12/01/2025, 22:28:17
RE: WinDev et le SDK Falcon 6 - par Smart Guido 73 - 12/01/2025, 22:52:58
RE: WinDev et le SDK Falcon 6 - par Smart Guido 73 - 25/01/2025, 18:35:19
RE: WinDev et le SDK Falcon 6 - par Smart Guido 73 - 27/01/2025, 22:11:25
RE: WinDev et le SDK Falcon 6 - par Smart Guido 73 - 26/10/2025, 19:16:24

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)