📉 DATA LOGGER valeurs analogiques

Bonjour
J’aimerais archiver, dans un fichier texte banal (je ne veux pas utiliser une base de données), la valeur d’une entrée analogique (par exemple), complété par l’heure de lecture

J’ai regroupé ce qui me semble utile

  • IPX800V4
  • Usage de STATUS.XML
  • Cron sur mon sur serveur PHP Syno qui dĂ©clenche toutes les minutes
  • fichier PHP … qui ajoute une ligne Ă  chaque cron Ă  mon fichier Syno

mais je ne sais pas Ă©crire le fichier PHP

J’ai mis en place SaveIPX4V3.php qui fonctionne correctement.
J’ai essayé de modifier mais je n’y arrive pas car je ne connais pas ce langage

Mes recherches sont restées vaines, pourtant, c’est une situation qui me parait basique

Merci pour votre aide ou pour m’aiguiller vers un tuto déjà fait, dans la mesure ou la modif PHP est simple

Cordialement
Yves Puech

1 « J'aime »

Bonjour,

MĂ©thode 1

il peut y avoir plus simple pour sauvegarder une valeur analogique, à intervalle régulier dans un fichier texte :

  • Il faut crĂ©er une sortie virtuelle et rĂ©gler son Tb (exemple 600 pour 10 minutes)
    Cette SV sera rendue clignotante par un scénario. Ce scénario effectuera un push vers le PHP sur Syno :

    scène sur IPX :
    NON SV1 ON PUSH;SV1(tb=600)

  • param du PUSH :

    serveur : adresse Syno
    url ON : monScript.php?time=$TS&a1=$A01&a2=$A02&cptEau=$C01

Voici le code monScript.php Ă  placer sur le synology :

<?php
//url attendue :
//http://ipSyno/DossierWeb/monScript.php?time=$TS&a1=$A01&a2=$A02&cptEau=$C01

$monHisto=fopen('./Histo.csv', 'a+');
fputs($monHisto, $_GET["time"] . ";" . $_GET["a1"] . ";"   . $_GET["a2"] . ";"   . $_GET["cptEau"] . ";"  ."\n");
fclose($monHisto);
?>

Un fichier nommé Histo.csv sera automatiquement créé dans le même dossier que le fichier php.
En ouvrant ce fichier avec un tableur (excel par exemple), il sera facile de faire des stats ou graphiques.

MĂ©thode 2
Evidemment, la précédente méthode permet d’envoyer quelques éléments par push vers le syno. Mais la longueur de l’URL du push est limitée en nb de caractères.
Pour outrepasser cette limite, il faudra effectivement passer par une lecture du fichier Status.xml dans le php, et Ă©crire les valeurs dans le fichier CSV.

exemple de php :

<?php
// Variables Ă  modifier dans ce script
$IPX800_IP = '192.168.X.Y' ;   // Mettre ici l'adresse IP ou le nom DNS de l'IPX800 V4
$IPX800_PORT = '80' ;      // Mettre ici le port d'accès de l'IPX800 - 80 par défaut
$IPX800_USER = 'user' ;    // Mettre ici l'utilisateur pour l'accès restreint si activé sur IPX800 V4
$IPX800_PWD = 'MotDePasse' ;  // Mettre ici le mot de passe User pour l'accès restreint  si activé sur IPX800 V4
$IPX800_RESTREINT = false; //mettre true pour un accès restreint, false si accès non protégé

// URL résultante d'accès au status de l'IPX800
if ( $IPX800_RESTREINT ) {
		$IPX800_URL = "http://{$IPX800_USER}:{$IPX800_PWD}@{$IPX800_IP}:{$IPX800_PORT}/user/status.xml";
} else {
		$IPX800_URL = "http://{$IPX800_IP}:{$IPX800_PORT}/user/status.xml";
}

// Vérification de l'accessibilité de l'IPX800
$ipx800_available= false ;
$ipx800_check = @get_headers($IPX800_URL);
if (strpos($ipx800_check[0],'200 OK') !== false ) { $ipx800_available = true ; }
unset ($ipx800_check );

// Si l'IPX800 est accessible on l'interroge et on sauvegarde le contenu "décodé"
if ( $ipx800_available ) { 
   $ipx800_status = @simplexml_load_file($IPX800_URL);
   //récupération analogique 1
  $IPX800_A1=$ipx800_status->analog0;
  //récupération analogique 2
  $IPX800_A2=$ipx800_status->analog1;
  //Récupération de la valeur du compteur 1
  $IPX800_C1 = $ipx800_status->cpt0; 
  //Récupération statut Relais 8
  $IPX800_R8 = $ipx800_status->led7;
  //sauvegarde dans CSV  
  $monHisto=fopen('./Histo.csv', 'a+');
  fputs($monHisto, date("Y-m-d H:i:s") . ";" . $IPX800_A1 . ";"   . $IPX800_A2 . ";"   . $IPX800_C1 . ";"  . $IPX800_R8 . ";" ."\n");
  fclose($monHisto);
}
?>

cdt

5 « J'aime »

Merci d’avoir pris le temps de me répondre
Je teste tout ça et je reviens vers vous
Cordialement

Je n’ai qu’un mot à dire : PARFAIT
Avec tous mes remerciements
Cordialement
Yves

1 « J'aime »

Bonjour tranquille,

pour info, quelle solution avez-vous choisi?

Bonne journée

Je prends le pari pour la seconde qui permet la sauvegarde de n’importe quelle valeur, d’autant que le syno est déjà prêt :grin:

2 « J'aime »

Pari gagné @fgtoul
En fait, je mets au point une chaufferie bois, et j’ai besoin d’analyser le comportement de la production, du réseau de chaleur et avoir l’oeil sur quelques paramètres supplémentaires comme le basculement fuel.
Tout ça se passe très lentement, donc, hormis de camper dans la chaufferie, j’ai préféré la télérelève
Une fois calée, la collecte de datas sera arrêtée, quelques widgets suffiront

Bonne soirée à vous

2 « J'aime »

petit rappel Ă  toute fin utile :slight_smile:
comme pour les sources de données sur les dashboards, le fichier Status.xml contient les valeurs analogiques brutes.
Il faut donc appliquer les formules des sondes pour la conversion.

Pour avoir l’heure de bascule du fuel, ce serait peut être mieux de faire un PUSH OnEvent dans un scenario

1 « J'aime »

Oui, c’est fait dans le tableur
C’est comme en photo, il est toujours plus fiable de partir sur du RAW :smile:

Tout va lentement, donc les températures ne vont pas vraiment évoluer entre 2 échantillons
Et il m’est intéressant d’avoir une colonne synchro avec mes relevés
S’il me fallait analyser finement un basculement, soit j’échantillonne plus fin, soit j’incorpore l’horodatage manuellement

Je verrais bien, par contre, dans un fichier séparé, un suivi de défaut. et là, le PUSH On Event aurait tout son sens

2 « J'aime »

attention.
La récupération du fichier status.xml peut occuper l’ipx800. Un pulling trop rapide pourrait la mettre à genoux :wink:

Ho
Mais c’est de la daube cette bécane :rofl:

On peut quantifier la charge du micro ou ça casse d’un coup ?

J’ai un IPX que pour la chaufferie, ça devrait aller

oui, très facilement, en fonction de la vitesse des réponses :rofl:

plus sérieusement, dans Status.xml il y a la valeur lps.
plus elle baisse, plus l’ipx800 est chargée.
IPX800 vide, lps est largement au dessus de 10000.
Sur une install chargée, lps est de l’ordre de 5000, voire un peu moins sur une très grosse install.
En dessous de 3000, il faut la mettre sous oxygène :rofl:

Il n’y a aucun ordre de grandeur officiel, ce sont juste des valeurs moyennes remontées par les utilisateurs :wink:

2 « J'aime »

Bonsoir,

Par rapport à ce que je vois sur le forum, ma config ne me parait pas bien grosse et pourtant j’ai un Ips 6827 et un wuc0 779798.
Est-ce la push et Jeedom qui prend du temps processeur ?
J’ai pas beaucoup de tuile
Cordialement
Cyril

bonsoir Tous30

clairement oui

Pour info, Wuc0 ne correspond pas à un indice de performance, mais au nombre de secondes écoulées depuis le redémarrage de l’ipx800.
Je vous invite à aller faire un tour sur ce wiki : La mesure du temps — GCE Electronics

Re bonsoir

Ok merci de votre réponse .

1 « J'aime »

@tous30 : 6827 est une excellente valeur

Bonjour,
je me permet de réactiver ce post car je n’arrive pas à faire fonctionner la solution 1 proposée par @fgtoul .

pour la programmation du scénario je pense être ok, par contre là où je rame c’est avec le fichier php et le push.
sur mon serveur (QNAP) j’ai un dossier « DATA Â» dans lequel je compte rĂ©cupĂ©rer toutes les minutes la valeur analogique et c’est lĂ  que je bloque je ne comprend pas le fichier php… en particulier les 2 lignes en gris

un petit coup de main ?
merci

Bonjour,
En continuant de fouiller sur le forum et en recoupant les infos, je suis encore plus perdu !!!
c’est l’IPX qui envoie les données sur le NAS ou alors c’est le NAS qui demande les infos à l’IPX ?
normalement avec l’utilisation de push ça doit être l’IPX qui envoie au NAS.
c’est vraiment pas clair pour moi plus je cherche moins je comprend :face_with_spiral_eyes:

bonjour,

tout est possible :wink:
l’URL d’un push étant limité en nombre de caractères, comme expliqué plus haut, la méthode dépend du nombre de valeurs à traiter.
Ça dépend aussi de ce que vous souhaitez faire.
bonne journée

J’aimerais juste récupérer dans un fichier CSV les valeurs des entrées analogiques, après la méthode m’importe peu, je dirais la plus simple vu que je suis une bille en comm et programmation :sweat_smile:
Sachant que la solution Notifix ne me convient pas, l’échantillonnage est trop grand.