Je commence : Comment gérer les commandes Set et Get en PHP

Bonjour
Cela fait plus de 30 ans que je n’ai plus programmer et à mon époque c’était de l’assembleur, Fortran77 et C++. Pour programmer mon IPX800V3, j’essaye de m’y remettre et c’est loin d’être evident.
Les conseils du forum étaient de partir avec du PHP, plus performant que l’HTML. Je me suis donc lancé et suivi différents tutorial, j’ai installé Notepad++ et WampServer, mais la je bloque !
Pouvez-vous m’aider ? J’ai fait une programme au plus simple !, je commence doucement !!!
Ligne 15, eh oui déjà, impossible d’ajouter 2 heures à l’heure que j’ai récupéré, mieux comment récupérer l’heure de l’IPX ?
Ligne 29 impossible de récupérer l’état des input ( mode GET défini dans la doc GCE avec les majuscules et minuscules)
Ligne 39 impossible de forcer le relai par la commande set (ici le relai 4)
Merci de votre aide en me proposant les bonnes commandes et des astuces simples de programmation.
J’ai cru comprendre qu’avec PHP je devais récupérer les états avec un fichier XML, est-ce exact, si oui ou puis-je trouver le programme ?

Cdt

PS :L’objectif est de lancer une alarme (relai 4) si un contact (input:sunglasses: est ouvert pendant une période donnée, ici entre 20 heures et 8 heures.

<?php $date = date("d-m-Y"); $heure_gmt = date("2:0"); $heure = date ("H:i") + $heure_gmt ; // ce code écrase les minutes comment faire pour avoir l'heure de la France ou mieux l'heure de l'IPX ? echo 'Nous sommes le '.$date.' et il est '.$heure.'
' ; $IP='xx.xx.xx.xx'; // Adresse de mon IPX800 V3 $port='9870'; // Port TCP par défaut $errno=0; // RAZ n° d'erreur de la connexion IPX $errdtr='errstr'; // RAZ message d'erreur de la connexion IPX $fp = fsockopen($IP,$port,$errno,$errstr,5); // Connexion vers l'IPX, ça l'air de marcher mais peut être pas ????????????? if (!$fp) { // Si connexion à échouée echo "$errstr ($errno)
\n"; // envoi message d'erreur } else { // Si connexion IPX OK $getin8 = fwrite ($fp, 'GetIn8') ; // $getin1 prend-elle la réponse de l'IPX à la commande GetIn1 (état de l'input :sunglasses: echo 'L état de 8 input 8 est : '.$getin8.'
' ; // echo me retourne la valeur 6, quelquesoit l'état des input $heure_debut = date ("20:0") ; // heure de déclenchement de l'arlarme si contateur off $heure_fin = date ("8:0") ; // heure d'arrêt de l'arlarme si contateur off echo 'heure de début est : '.$heure_debut.'
' ; echo 'heure fin est : '.$heure_fin.'
' ; if ($getin8 = 0) { // si le contact 8 est ouvert if ($heure > $heure_debut) { // si l'heure de début de surveillance est dépassée if ($heure < $heure_fin) { // Si la plage horaire de surveillance n'est pas dépassée echo 'alarme ON
' ; // Alors je lance l'alarme $set41 = fwrite ($fp, 'Set41') ; // Relai 4 ON } else { echo 'alarme off sup à '.$heure_fin.'
' ; $set40 = fwrite ($fp, 'Set40') ; // Relai 4 OFF } } else { echo 'alarme off inf à '.$heure_debut.'
' ; $set40 = fwrite ($fp, 'Set40') ; // Relai 4 OFF } } else { echo 'alarme off porte fermée
' ; $set40 = fwrite ($fp, 'Set40') ; // Relai 4 OFF } /* $etat_input1 = fread ($getin1,4) ; // Est-ce que je lie le retour de l'IPX à la commande GetIn1 ? */ } fclose($fp); // fermeture de la connexion IPX} ?>

Bonjour,
Voici quelques réponses aux questions (nombreuses) de ce post…

  • la fonction date de PHP se base sur la date et l’heure système sur lequel tourne PHP, ce même système qui censé être mis à l’heure via un serveur NTP (tous nos OS le font), du coup l’heure extraite par PHP sera la même que celle de l’IPX qui elle-même se sert de NTP, pour les fuseaux horaires et autres « heures été hiver » voir ici http://php.net/manual/fr/function.date.php
  • pour avoir l’état précis des entrées et sorties de l’IPX, je conseille de « parser » le status XML donné par l’IPX, PHP le fait très bien, il y a de nombreux exemples dans ce forum ou sur internet
  • une fois le fichier status.xml « lu » par PHP, tu peux créer des variables pour chaque entrée de l’IPX, c’est pratique pour la suite de ton programme
  • pour envoyer des commandes M2M à l’IPX, le socket à créer est expliqué dans le forum, section « Contributions », exemple ici Faire du M2M en PHP

Sinon, pour en revenir à ta demande initiale, tu peux très bien le faire sans PHP, en utilisant 2 sorties de l’IPX. En effet, il suffit de programmer un timer quotidien 20h-8h sur un sortie qui sera câblé en série avec le relay4 de ton alarme, elle-même asservie à ton input8.

Salut

  • Pour être plus précis, la date et l’heure en php dépend de la timezone définit dans le php.ini. Elle peut être remplacé dans les scripts avec la fonction date_default_timezone_set => PHP: date_default_timezone_set - Manual
    Sinon tu peux trouver la tienne avec la fonction très utile phpinfo => http://php.net/manual/fr/function.phpinfo.php
  • Sinon pour la communication, je te conseil la communication M2M (plus compliqué, mais beaucoup plus rapide).
    Sinon pour lire le fichier status.xml, utilises simplexml_load_file :

$status = simplexml_load_file("http://".$compte.":".$password."@".$ip.":".$port."/status.xml"); print_r($status);

  • Je te conseil dans tes scripts php de mettre au debut :

error_reporting(E_ALL); ini_set("display_errors", "stdout");
Ca permet d’afficher toutes les erreurs dans les pages et donc de faire un code propre.

Pour la date de la france :

date_default_timezone_set('Europe/Paris'); $date = date("d-m-Y"); $heure = date ("H:i"); echo 'Nous sommes le '.$date.' et il est '.$heure.' <br> ' ;

Pour le GetIn8, si tu est en version 3.05.XX, il faut mettre le numero sur 2 caractère : GetIn08.
Mais en plus le GetIn08 est buggé pour l’instant en version beta :

$etat_input1 = fread ($getin1,4) ; // Est-ce que je lie le retour de l'IPX à la commande GetIn1 ? Ne serait-ce pas $etat_input1 = fread ($fp,4) ; // Est-ce que je lie le retour de l'IPX à la commande Set... ?

A+
Thomas

Bonjour,

et merci à vous deux, je vais regarder tout cela, vous m’avez encourager a continuer.

Bien cordialement

Bonjour à tous,

j’avance doucement dans mon developpement, et toujours des questions sur PHP.
J’ai l’impression (je suis en localhost sur wampserver) que le programme s’effectue totalement, puis affiche les résultats aprés.
Par exemple : j’ai mis en sleep(5) dans le code, apres le clic sur mon fichier.php j’ai attendu 5 secondes l’affichage alors qu’il y avait des echo avant le sleep. j’ai le même phenomène avec les questions et le bouton OK. Est-ce normal ?

De plus les fsockopen ou simplexml_load_file me retounent des erreurs de non connexion sur time out, erreur 10060, ou affichage de : Internet Explorer ne peut pas afficher cette page Web

Y-a-t’il une astuce que je n’ai pas vu ?

Merci et bon week-end

Salut

Le php n’est envoyé que lorsque le buffer est plein.
Il existe une fonction flush(); qui normalement envoie les commandes, mais c’est pas toujours fonctionnel.
Sinon, il faut faire attention au sleep dans le code php car tu as en générale un timeout de page qui peut vite être atteind.

A+
Thomas

Thomas,

Les commandes de GetIn fonctionnent.

Il faut envoyer GetIn1 à GetIn32 (et non GetIn01)
Idem pour les GetOut1 à GetOut32

Si tu peux confirmer :slight_smile:

Merci

Patrick

je suis en vacances a mon tour lol
je regarde a mon retour …

Je confirme ce que dit Patrick.
Par contre pour le Set, c’est Set011, Set101, … Il faut bien ajouter un 0 pour les relais de 1 à 9.

A+
Thomas