[1/5] CREER SON SITE DOMOTIQUE AVEC ZIBASE, NAS SYNOLOGY, MYSQL ET WORDPRESS

Aller à l'article suivant sur le même thème (dispo depuis le 19/06/2013)

SCRIPT "INTELLIGENT" DE RÉCUPÉRATION

DES DONNÉES SONDE EN PULL


Et oui, ma moitié m'a fait une très bonne surprise pour mon anniversaire et m'a offert un NAS SYNOLOGY 213+.

Au delà de toutes les fonctionnalités possibles avec ce NAS (image, vidéo, surveillance, fichier, sauvegarde...), je me suis surtout penché sur le développement de scripts en PHP tournant à intervalle régulier (CRON=tâches planifiées) permettant de récupérer les données de la ZIBASE depuis le NAS.

Cette solution permet de moins solliciter la ZIBASE tout en étant indépendant d'un hébergeur externe. Bien évidemment, cette même solution peut être mise en œuvre sur un PC/SERVEUR, un autre NAS ou tout autre machine pouvant faire tourner du PHP et MYSQL. Je ne détaillerai pas ici la configuration du NAS car plein de tutoriels répondent déjà à ce besoin.

Ce premier article va faire l'objet d'une petite série (si j'arrive à m'y tenir) pour vous présenter une solution complète de restitution des données sous forme instantanée, sous forme de tableaux, de graphes avec gestion des évènements et modifications des sondes utilisées; le tout avec PHP, MYSQL et WORDPRESS parce que je ne suis pas très doué en développement et que cela permet de faciliter la présentation du site tout en intégrant facilement du PHP (via l'extension WORDPRESS Shortcode Exec PHP).

Bon, pour ce premier opus, entrons dans le vif du sujet pour enregistrer en pull les données des sondes. Vous trouverez en pied de ce post un ZIP vous donnant les éléments suivants :
  1.  Répertoire communs :
  •  sous-répertoire db : ce répertoire contient le script SQL permettant de créer les tables de dla base de données. Pour ma part, j'ai créé une base nommée ZIBASE (original le garçon !). Ce script créé :
    • 5 tables permettant d'accueillir les données de différents type de sonde en pull. Les tables concernées sont les suivantes :
      • TEMPERATURE
      • ANENOMETRE
      • PLUVIOMETRE
      • UV
      • ELECTRICITE
    •  3 tables permettant d'accueillir les données de certains actionneurs en push. Les tables concernées sont les suivantes :
      • VMC_ETAT (Etat vitesse 1 ou 2)
      • ALARME_ETAT (Etat ON/OFF)
      • CHAUFFAGE_ETAT (Etat allumé/éteint)
    • 1 table nommée EVENEMENTS permettant d'accueillir et de logger des évènements d'information ou système
    • 1 table nommée PERIPHERIQUES contenant les sondes déclarées dont vous souhaitez enregistrer les données avec les noms de tables dans lesquelles enregistrer les données, le code de la sonde dans la ZIBASE , le nom dans la ZIBASE , le nom en clair et un ordre d'affichage.  Par exemple, voici pour ma part, comment elle est remplie aujourd'hui :
  

Le script CRON PHP interrogeant la zibase en pull, interrogera également la ZIBASE (sur zibase.net) pour mettre à jour le code des sondes dans cette table automatiquement en cas de changement de piles. La mise à jour du code de la sonde se fera grâce au nom du périphérique déclaré en ZIBASE (nommé nom_zibase dans cette table). J'ai préféré utiliser ce système car je ne change jamais le nom de mes sondes et ne voulais pas utiliser "l'Identification des sondes seulement par leur canal" dans les options système de la ZIBASE (limitation du nombre de sondes, ré-association obligatoire de toutes les périphériques, bug...). Chacun jugera de l'intérêt de cette solution.
  • sous-répertoire include  : contient deux fichiers :
    • config.php : contient tous les éléments nécessaires pour se connecter à votre base. Contient également 3 fonctions utilisées dans d'autres scripts :
      • function exec_query($requete) permettant d'exécuter une requete SQL,
      • function date_diff2($date1,$date2,$mode) permettant de calculer une différence entre deux dates,
      • function getSensorList($idprincipalzibase,$tokenzibase) permettant de récupérer toutes les sondes déclarés dans votre ZIBASE. Cette fonction va être appelé dans le CRON pour mettre à jour vos périphériques déclarés dans la table PERIPHERIQUES.
    • connect_db.php : contient uniquement les éléments pour se connecter à la base de données.
  • sous-répertoire lib : contient le fichier zibase.php qui est la librairie PHP développé par Benjamin GAREL que je remercie (voir ici http://bgarel.free.fr/Zibase/). A noter que pour l'instant dans cette librairie, je n'utilise que la fonction function getSensorInfo($idSensor) qui permet de récupérer les valeurs retournées par une sonde donnée. A noter un bug dans la fonction d'origine car Benjamin ne prenait que l'heure GMT de la sonde et non la date complète. Cela posait des problèmes lors de l'enregistrement d’éléments peu de temps après minuit, je récupérai la date du jour avec l'heure de la veille donc 18/06/2013 23:57 au lieu de 17/06/2013 23:57. J'ai corrigé et commenté la modification dans le script que je fourni dans l'archive. 

     2. Répertoire cron

 Ce répertoire ne contient qu'un script enrsondes.php qui fait deux actions principales :
  • mets à jour automatiquement la table PERIPHERIQUES à partir des informations récupérées au niveau de la ZIBASE et de la comparaison avec les données contenues dans la table PERIPHERIQUES,
  •  enregistre automatiquement les données des différentes sondes déclarées dans la table PERIPHERIQUES dans les tables correspondant aux sondes (UV, PLUMIOMETRE, ANENOMETRE, TEMPERATURE, ELECTRICITE).
J'ai essayé de commenter le mieux possible le code pour que vous puissiez vous y retrouver et y apporter des améliorations (il y a de quoi faire).

En résumé, télécharger le ZIP, exécuter le script zibase.sql créant les tables, remplir la table PERIPHERIQUES, modifier le fichier config.php avec les éléments de votre MYSQL, et cela devrait fonctionner.

Télécharger le ZIP

Aller à l'article suivant sur le même thème (dispo depuis le 19/06/2013)

Trois petites remarques supplémentaires :
  • les chemins relatifs ne fonctionnent pas sur les CRON (pas de connaissance du contexte),
  • si vous utilisez un NAS ne pas oublier de renseigner les éléments de notifications pour paramétrer votre smtp dans le panneau de configuration. Sinon, vous pouvez paramétrer ces éléments dans le fichier config.php mais je suis fainéant.
  • Depuis DSM 4.2 sur SYNOLOGY, vous pouvez lancer ces scripts dans le planificateur de tâche sans avoir à entrer dans la partie linux. Néanmoins, il est impossible lancer un CRON tous les jours et tous les 1/4 d'heure (uniqueement toutes les heures). Du coup, j'ai créer 4 tâches différentes qui appel le même script toutes les heures mais chacun avec 1/2 heure de décalage (voir ci-dessous)







51 commentaires:

  1. excellent travail, répond à un vrai besoin, bravo
    Les interfaces graphique Zibase sont vraiment pauvres et nulles quand il s'agit de voir des événements sur le long terme. Ce développement devrait nous permettre d'y accéder

    RépondreSupprimer
  2. Merci pour ce tuto.....je n'ai plus qu'à me faire offrir un NAS Syno.....

    RépondreSupprimer
  3. Merci pour vos encouragements. Ce développement est lié aux partages de chacun qui m'ont largement facilité la tâche; alors merci à vous !

    RépondreSupprimer
  4. bonjour, merci encore pour cette article, j'ai également de mon coté essayé de faire site reprenant mes informations de sondes...
    sur mon syno j'utilise "cronjob editor" qui permet plus de réglage, et notamment le fait de lancer une action toutes les minutes ;)
    sinon j'ai aussi dev une appli pour syno(x86) qui permet la récupération des événements de la zibase (Suivi d'activité) afin d’éviter de demander à chaque fois les informations, c'est elle qui me la fournit.ceci dit je ne m'en sert pas encore, j'utilise le fichier XML renvoyé par flexPc.php.
    voila bonne continuation j'ai hâte de voir ce que ça donnera au final ;)

    RépondreSupprimer
  5. Merci Vincent pour cette info sur "cronjob editor" que je ne connaissais pas. Pas eu le temps ce soir de le tester mais je m'y mets dès que possible et j'éditerai l'article avec cette solution en en plus du planificateur de tâches intégré au syno qui est effectivement un peu léger en terme de paramétrage. Merci aussi pour les infos et ta solution qui est tout aussi sympathique. J'ai utilisé les travaux de Manu1 (onk1) sur un ancien site visible ici http://domotiquezibase.free.fr mais je préfère la méthode pull qui sollicite beaucoup moins la mémoire de la zibase...mais c'est juste un avis :-D

    RépondreSupprimer
    Réponses
    1. Pour information. Il existe également synozwave qui permet d utiliser le nas synology comme box domotique.

      Supprimer
  6. Je reviens vers toi car j'ai une petite question. N'y connaissant rien en nas ( mais vraiment rien) je me demandais si (depuis sa dernière maj) on pouvait utiliser la FreeBox comme,un nas syno ?

    RépondreSupprimer
    Réponses
    1. La freebox serveur avec le nouveau firmware permet notamment le partage de fichier, de photos, l'upload, la visu de tout à distance mais en aucun cas ce n'est un serveur WEB et encore moins un serveur mysql. Donc aucun chance de pouvoir faire tourner ce type de développement sur ta freebox....et je pense que ce n'est pas demain la veille :-D. A bientôt.

      Supprimer
  7. merci pour ce tuto
    je vais essayer d y arriver, j ai le nas, la zibase et les sondes :-)
    question: je n arrive pas à charger ton zip => ça commence mal :-)

    RépondreSupprimer
  8. Bonsoir,
    très beau développement, effectivement, ayant tous les éléments nécessaires à disposition, j'ai essayé de le mettre en pratique...malheureusement je bloque sur un "Problème de connexion" lorsque j'exécute le "Enrsondes.php" depuis un telnet...
    Je n'arrive pas à savoir où je me suis trompé au niveau de la configuration.
    Il n'y a bien que les quelques lignes ci-dessous à personnaliser??
    ==> J'ai simplement un doute sur la Première ligne...à quelle IP Local cela correspond-il?

    $client_config['cookie_domain'] = "@IP_de_la_ZIBASE???"; // ip local
    $client_config['debugMode'] = true; // me sert plus
    $client_config['dbDriver'] = "mysql"; // driver utilisé pour la connexion
    $client_config['dbServer'] = "@IPduNAS_Hebergeant_MySQL"; // serveur de bases de données
    $client_config['dbLogin'] = "zibase"; // login du serveur de bases de données
    $client_config['dbPwd'] = "motdepasseducomptezibase"; // mot de passe du serveur de bases de données
    $client_config['dbName'] = "ZIBASE"; // nom de la base de données
    $client_config['charset'] = "UTF-8";
    $client_config['dbCharset'] = "UTF8";
    $client_config['idzibase'] = "Vu sur Zodianet.net"; //votre id zibase -- utile dans la fonction getSensorList
    $client_config['tokenzibase'] = "Vu sur Zodianet.net"; // votre token zibase -- utile dans la fonction getSensorList
    $client_config['destemailerror'] = "adresse mail"; //emails destinataires des erreurs séparé par des , si besoin

    Pourriez-vous m'éclairer de vos lumières ?:)

    MErci

    RépondreSupprimer
    Réponses
    1. Désolé, j'ai posté trop vite ! :)
      j'ai avancé, c'était un problème de droit sur la base (satanés droits sous MySQL!)
      je bloque maintenant sur l'erreur suivante :

      PHP Fatal error: Call to a member function format() on a non-object in /volume1/web/zibase/cron/enrsondes.php on line 75

      A priori cela correspond au moment de l'exécution de la requête d'insertion :

      $query = "INSERT INTO ".$row['table_insertion']." (date, zone, temp, hygro) VALUES ('".$info[0]->format("Y-m-d H:i:s")."','".$row['nom_zibase']."',".($info[1]/10).",".$info[2].")";

      Une idée? :$
      Merci encore

      Supprimer
  9. Salut Traxxi,

    Bon, je vois que tu y passes tes nuits : -D. Concernant ton erreur, cela ressemble à un problème de connexion SQL. Vérifie que la pages connect_db est correctement inclue dans tes pages ainsi que dans le fichier de config, tu as bien la fonction exec_query($requete) et tous les paramètres des variables globales parfaitement remplis.

    Courage.

    RépondreSupprimer
  10. bonsoir,

    bon finalement ca marche ! J'ai pas changé grand chose, ca a marché un peu tout seul...bizarre...en gros les premiers lancements aboutissaient sur des erreurs, les suivants sont ok...

    Merci encore !:)

    RépondreSupprimer
  11. Bonsoir,
    j ai besoin de votre expertise :-)
    lorsque je lance le enrsondes.php par telnet j ai ces erreurs
    "DiskStation> php enrsondes.php
    
    PHP Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, '<' not found in /volume1/web/zibase1/communs/include/config.php on line 49
    PHP Warning: simplexml_load_string(): no file in /volume1/web/zibase1/communs/include/config.php on line 49
    PHP Warning: simplexml_load_string(): ^ in /volume1/web/zibase1/communs/include/config.php on line 49
    PHP Fatal error: Call to a member function xpath() on a non-object in /volume1/web/zibase1/communs/include/config.php on line 50
    DiskStation>"

    auriez vous une idée?
    en fait je ne rempli as la base sql

    merci
    Phil

    RépondreSupprimer
  12. Salut,

    A priori, tu as des caractères spéciaux dans tes fichiers. Il faut sur google document faire fichier puis télécharger afin d'avoir l'ensemble du ZIP. Dans ce cas, les fichiers sont corrects. Sinon, si tu cliques sur un des fichiers direct dans le navigateur, cela interprète mal les caractères. Sinon, si ce n'est pas cela, as-tu essayé de faire appel à la page par un navigateur ?

    J'espère t'avoir guidé sinon je 'avoue que ce n'est pas très facile sans voir plus de détails

    @+

    RépondreSupprimer
  13. Merci d avoir essayé :-(
    en telechargeant le fichier zip et en reinstallant, j ai les memes erreurs aux memes endroits.
    par le navigateur rien ne se passe, la page reste blanche

    question toutefois, je modifie le fichier conf par notepad, c est correct?

    merci encore
    phil

    RépondreSupprimer
  14. je reviens à la charge :-)
    je suis tetu

    j ai suivi les préco en installant tout le systeme dans le rep zibase au lieu de zibase1

    et maintenant j ai cela comme erreur

    PHP Warning: fopen(http:///sensors.xml): failed to open stream: operation fa iled in /volume1/web/zibase/communs/lib/zibase.php on line 447
    PHP Warning: stream_get_contents() expects parameter 1 to be resource, boolean given in /volume1/web/zibase/communs/lib/zibase.php on line 448
    PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /vol ume1/web/zibase/communs/lib/zibase.php on line 449
    PHP Fatal error: Call to a member function xpath() on a non-object in /volume1/ web/zibase/communs/lib/zibase.php on line 459
    DiskStation>

    HELP Svp

    je galère :-)

    RépondreSupprimer
  15. bon ben ça marche
    fallait mettre l adresse de la zibase dans le cron, fichier enrsondes.php aussi
    :-)


    ah ça force à chercher
    XD

    Phil

    RépondreSupprimer
    Réponses
    1. bonjour
      Quand tu dis de mettre l'adresse de la zibase dans le cron, fichier enrsondes.php, tu mets ça ou ?

      Voici ce que j'ai quand je lance :
      NAS-MAISON> php /volume1/web/zibase/cron/enrsondes.php
      

      via un naviguateur, page blanche.

      suis un peu sec sur le coup :o(

      Merci d'avance

      Supprimer
  16. Bon, félicitations Phil pour cette réussite. J'arrive trop tard. Ceci dit, rien de vaut de chercher par soi-même car ce n'est jamais facile de pouvoir aider à distance. Bravo à toi et bon utilisation de ta zibase et de ce cron...maintenant il reste la suite:-D

    RépondreSupprimer
  17. bonjour,
    J'ai depuis longtemps un nas synology et ton article m'a decidé a me lancer dans l'enregistrement des données. Par contre je débute avec la programmation. J'ai suivi ton tuto mais quand je lance php -f enrsondes.php dans une console j'ai le message
    "probleme dans la selection de la base"
    As tu une idée?
    merci

    RépondreSupprimer
  18. Bonjour,

    Cette erreur est produite par la fonction exec_query se trouvant dans le fichier config.php. Ce message apparait quand la sélection de la base de données échoue. C'est à dire sur cette ligne :
    @mysql_select_db($soft_config['dbName'],$db) or die ("Problème dans la sélection de la base");

    Donc
    * soit ta variable $soft_config['dbName'] contient un nom de base de données INCONNU (dans l'exemple, dans le fichier config.php c'est ZIBASE,

    * soit la connexion de la base n'a pas lieu et cela vient du fichier connect_db.php qui fait appel aux variables $client_config['dbLogin'] et $client_config['dbPwd'] se trouvant dans le fichier config.php (vérifies que tu as bien mis ton login de ton mot de passe de ton serveur MYSQL...dans mon exemple, ces variables sont à blanc

    mais je penche plutôt pour la 1ère solution.

    Je te laisse tester les différentes valeurs de variables et tu devrais trouver le problème.

    Espérant t'avoir aidé, je reste à dispo.

    Domotiquement. Stéphane

    RépondreSupprimer
    Réponses
    1. Bonjour,
      merci pour ta réponse, je m’étais effectivement embrouille avec les identifiants de connection a la base.
      J'ai progresse, maintenant j'ai le même message que phil le 15/07. Je persévère en espérant y arriver ;)
      a+
      Stephen

      Supprimer
  19. Bonjour,
    Est ce que ceci est correct ??
    $client_config['cookie_domain'] = "@IP_de_la_ZIBASE???"; // ip local
    $client_config['debugMode'] = true; // me sert plus
    $client_config['dbDriver'] = "mysql"; // driver utilisé pour la connexion
    $client_config['dbServer'] = "@IPduNAS_Hebergeant_MySQL"; // serveur de bases de données
    $client_config['dbLogin'] = "zibase"; // login du serveur de bases de données
    $client_config['dbPwd'] = "motdepasseducomptezibase"; // mot de passe du serveur de bases de données
    $client_config['dbName'] = "ZIBASE"; // nom de la base de données
    $client_config['charset'] = "UTF-8";
    $client_config['dbCharset'] = "UTF8";
    $client_config['idzibase'] = "Vu sur Zodianet.net"; //votre id zibase -- utile dans la fonction getSensorList
    $client_config['tokenzibase'] = "Vu sur Zodianet.net"; // votre token zibase -- utile dans la fonction getSensorList
    $client_config['destemailerror'] = "adresse mail"; //emails destinataires des erreurs séparé par des , si besoin

    RépondreSupprimer
  20. Bonjour,

    Quelques petites choses :

    $client_config['cookie_domain'] = "@IP_de_la_ZIBASE???"; Non il s'agit de l'IP du serveur donc l'IP local de ton NAS

    $client_config['dbServer'] est le serveur de base de données mysql. Ton script tourant sur le NAS tu peux mettre localhost : cela donne : $client_config['dbServer']= "localhost";

    $client_config['dbLogin'] = "zibase"; il faut mettre ici le login du serveur de bases de données mysql ; il y en a un créé par défaut qui est root. Donc cela donne $client_config['dbLogin']= "root";

    $client_config['dbPwd'] = "motdepasseducomptezibase"; il faut mettre ici le mot de passe du serveur de bases de données mysql; celui que tu as choisi sur le login root

    Espérant t'avoir aidé.

    RépondreSupprimer
  21. Bonjour,
    Moi idem résultat = page blanche !
    j'ai réussi à crée la BDD sur le syno via le script (par contre manquait cette partie du code en debut du fichier :

    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    CREATE DATABASE `zibase` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    USE `zibase`;

    j'ai crée l'arborescence dans le répertoire web comme dans le tuto :
    Zibase - communs - include -config.php et connect_db.php
    Zibase - communs -lib - zibase.php
    Zibase - cron - enrsondes.php

    j'ai mis a jour dans le fichier config.php :

    $client_config['cookie_domain'] = "192.168.0.3"; // ip local du NAS
    $client_config['debugMode'] = true; // me sert plus
    $client_config['dbDriver'] = "mysql"; // dr
    $client_config['dbServer'] = "localhost"; // serveur de bases de données
    $client_config['dbLogin'] = "root"; // login du serveur de bdd
    $client_config['dbPwd'] = "mon mdp acces SQL";// mdp bdd
    $client_config['dbName'] = "zibase"; // nom de la base de données
    $client_config['charset'] = "UTF-8";
    $client_config['dbCharset'] = "UTF8";
    $client_config['idzibase'] = "ZiBASExxxxx"; //mon id zibase
    $client_config['tokenzibase'] = "yyyyyy"; // mon token zibase -
    $client_config['destemailerror']= "adresse@email.com";

    Dans le fichier enrsondes.php j'ai mis à jour la ligne 16:
    // Adresse IP de ma zibase
    $zibase = new ZiBase("192.168.0.5")

    Mon serveur NAS est sous 192.168.0.3 et lorsque je lance manuellement le fichier pour voir s'il alimente la BDD page blanche
    lien du type : http://192.168.0.3/zibase/cron/enrsondes.php
    résultat : page blanche ...

    Qu'est ce que j'ai oublié ?
    quelqu'un peut m'aider ?*
    MErci beaucoup




    RépondreSupprimer
    Réponses
    1. Salut,

      Merci pour tes remarques sur le script SQL.

      Je pense que tu ne dois pas être très loin de la solution. Juste deux petites pistes :
      - Vérifie bien l'arborescence des répertoires (minuscules/majuscules) mais je pense que tu n'as pas de soucis là dessus sinon tu aurais une erreur.
      - As-tu bien remplie la table périphériques avec ceux que tu voulais enregistrer en pull ? Je suis quasi sur que cela vient de là.

      Ensuite tu peux débugger en afficant des messages au cours de l'execution de la page enrsondes.php.

      Espérant t'avoir aidé.

      @+

      Supprimer
  22. "As-tu bien remplie la table périphériques avec ceux que tu voulais enregistrer en pull ? Je suis quasi sur que cela vient de là. "

    JE ne sais pas de quoi vous parler pourriez vous m'apporter plus de précision ?
    Quel fichier ?
    Merci pour votre réactivité !

    RépondreSupprimer
    Réponses
    1. Il s'agit d'une table dans la base de données ZIBAS. Comme dit dans le petit tuto : "•1 table nommée PERIPHERIQUES contenant les sondes déclarées dont vous souhaitez enregistrer les données avec les noms de tables dans lesquelles enregistrer les données, le code de la sonde dans la ZIBASE , le nom dans la ZIBASE , le nom en clair et un ordre d'affichage." tu as une capture d'écran de la mienne.

      C'est à dire que pour que le programme enregistre les données d'une sonde il faut qu'elle soit renseignée dans cette table avec l'identifiant de la sonde, le nom exact déclaré dans ta zibase, le nom que tu veux voir apparaitre dans l'appli, le type de sonde (1), l'ordre, le nom de la table dans laquelle tu veux enregistrer les données (TEMPERATURE par exemple pour une sonde de temperature).

      Il faut donc remplir cette table la première fois à la main via phpmysql par exemple. Tu peux faire le test avec une seule sonde et ensuite ajouter les autres. Ensuite si tu fais une réassociation de sonde dans la zibase (en cas de de changement de pile par exemple) le code de la sonde se mettra automatique à jour dans cette table grâce au nom de la sonde qui lui doit être invariant.

      Tu es au bout de cette première étape :-D

      A très vite.

      Supprimer
  23. Je n'avais effectivement pas fait cela !
    Par contre j'ai renseigné la BDD PERIPHERIQUE avec mes sondes idem que ta copie d'ecran (mais avec mes parametres de sondes)
    en executant http://192.168.0.3/zibase/cron/enrsondes.php j'ai toujours une page blanche :(

    Juste pour confirmer dans l'arborescence apres "web/" zibase c'est bien en minuscule ? comme le reste d'ailleur ?

    N’étant pas du tt expert (learning by doing) je sèche ...

    RépondreSupprimer
  24. Toute l'arboresence est en minuscule effectivement.

    Le fait que tu est une page blanche est normal. Le scrîpt a juste pour vocation d'enregistrer les données en base et n'affiche rien. Il faut que tu regardes dans tes tables (TEMPERATURE par exemple) si elle se remplie avec des données. Si ou c'est gagner et ensuite tu peux lire les articles suivants :-D.

    Bon courage.

    @ +

    RépondreSupprimer
  25. Fonctionne pas ... ma BDD reste vierge ... le plus difficile c'est que pas de msg d'erreur!
    Je recapitule:

    1. Création des BDD à l'aide du fichier zibase.sql
    2. j'ai renseigné la BDD "PERIPHERIQUES" manuellement dans la BDD d’après les infos Zibase (mes sondes)
    3. j'ai renseigné le fichier config.php (lignes 17 à 28)
    Remarque: $client_config['dbName'] = "zibase"; // nom de la base de données
    --> zibase en minuscule ou majuscule ?
    4. j'ai renseigné l'adresse IP Zibase dans le fichier enrsondes.php (ligne 16)

    J'ai verifier et tt me semble correcte ... je seche, du coup je coup et m'y reprend demain soir ... la nuit porte conseil y parait ...

    RépondreSupprimer
  26. j'ai passer la nuit dernière a lire, et relire, vérifier mes paramètres, ma BDD ne s'alimente pas et surtout aucune message d'erreur :(
    je ne sais meme pas par quel bout continuer...
    N’hésitez pas pour un avis ...

    RépondreSupprimer
  27. Bon j'ai tout recommencé du début! et j'ai trouvé le problème ...la BDD sql etait zibase au lieu de ZIBASE .... deux nuit de passé pour cela !
    juste énorme

    Donc pour les futurs personnes désireuse d'installer il faut !
    1. Création des BDD à l'aide du fichier zibase.sql attnetion manque le code qui creer la table
    code ci dessous corrigé :

    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    CREATE DATABASE `ZIBASE` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    USE `ZIBASE`;

    2.Renseigner la BDD "PERIPHERIQUES" manuellement dans la BDD d’après les infos Zibase (vos propres sondes)
    3. RENSEIGNER le fichier config.php (lignes 17 à 28)

    4. REnseigner l'adresse IP Zibase dans le fichier enrsondes.php (ligne 16)
    5. mettre en place la tache planifié selon le rythme voulu !

    Et apres cela devrait fonctionner !!!

    Bon courage à tous !

    RépondreSupprimer
  28. Bravo a toi. 2 nuits c effectivement dur ...juste pour un probleme de casse sur la BDD. Juste pour corriger ton commentaire :
    Le script zibase.SQL créé uniquement les 5 tables et il faut créer manuellement la base nommée ZIBASE ou la créer effectivement en ajoutant ce que tu as mis au début du script.

    En tout cas, merci pour tes commentaires et ton partage pour les futurs volontaires pour mettre en place cette petite solution. Bon courage pour mettre en place la suite :-D

    RépondreSupprimer
  29. bonjour, quand j'exécute http://192.168.2.114/zibase/cron/enrsondes.php ... j'ai ce message, Problème dans cette requète : INSERT INTO EVENEMENTS (type,source, message,notificationmail) VALUES ('Information','NAS','Le périphérique SONDE EXTERIEUR a bien été mis à jour en base avec l'ientifiant sonde OS439177729.',true) Fatal error: Call to a member function format() on a non-object in /volume1/web/zibase/cron/enrsondes.php on line 75

    Je séche, pouvez-vous m'orienter ?

    Merci d'avance,

    Fabien

    RépondreSupprimer
  30. Salut Fabien,

    A la lecture de l'erreur, je pense qu'il s'agit d'un problème de quote que tu as mis dans le message. En effet, tu as mis : 'le périphérique Sonde extérieur a bien été mis à jour avec l'identifiant....'. Le ' pour dire l'identifiant est considéré comme la fermeture de la chaine texte à insérer en base et du coup la suite n'est pas comprise. Il faut donc l'enlever où le rendre non signifiant en le précédant d'un \.

    J'espère que ma réponse est à peu près claire :)

    Bon courage pour la suite.

    Domotiquement.

    RépondreSupprimer
  31. Salut à tous,
    Moi aussi je m'arrache les cheveux...
    La bdd ne se remplit pas.
    Je lance http://192.168.1.12/zibase/cron/enrsondes.php via mon navigateur. (pas d'erreurs sur la page)
    Y-a-t-il un autre moyen de lancer le script afin de voir en détail où ça coince?

    Pour info:
    -Fichier config.php: lignes 17 à 28
    $client_config['cookie_domain'] = "192.168.1.12"; // ip local DU NAS
    $client_config['debugMode'] = true; // me sert plus
    $client_config['dbDriver'] = "mysql"; // driver utilisé pour la connexion
    $client_config['dbServer'] = "localhost"; // serveur de bases de données
    $client_config['dbLogin'] = "root"; // login du serveur de bases de données
    $client_config['dbPwd'] = "xxxxxx"; // mot de passe du serveur de bases de données
    $client_config['dbName'] = "ZIBASE"; // nom de la base de données EN MAJUSCULE COMME DANS LA BDD
    $client_config['charset'] = "UTF-8";
    $client_config['dbCharset'] = "UTF8";
    $client_config['idzibase'] = "ZIBASExxxxx"; //votre id zibase -- utile dans la fonction getSensorList
    $client_config['tokenzibase'] = "xxxxxxxx"; // votre token zibase -- utile dans la fonction getSensorList
    $client_config['destemailerror'] = "xxx.xxx@xxx.com"; //emails destinataires des erreurs séparé par des , si besoin

    Fichier enrsondes.php ligne 16:

    // Adresse IP de ma zibase
    $zibase = new ZiBase("192.168.1.4");

    Arborescence sur le NAS synology:
    web/zibase/


    Aidez moi SVP

    RépondreSupprimer
    Réponses
    1. Salut Fabien,

      Toujours difficile de trouver LA solution à distance. Comme ça, je dirais que tu n'as pas rempli la table PERIPHERIQUES avec les sondes que tu veux enregistrer; ce qui expliquerais que tu sortes du script tout de suite.

      Si ce n'est pas cela, plus globalement, fait afficher des messages à des endroits dans le code pour voir ce qui se passe. Cela permet de "debugger facilement".

      Tu ne dois pas être loin; courage.

      Espérant t'avoir aidé.

      Zibasement.

      Supprimer
    2. Merci de ta réponse rapide.
      Dans la table périphériques, j'ai 6 TEMPERATURE, 1 ANEMOMETRE, 3 ELECTRICITE
      Rien ne se remplit.
      Dommage que je ne puisse pas poster une copie d'écran au cas où je fasse une erreur absurde dont je ne me suis pas rendu compte.

      "fait afficher des messages à des endroits dans le code pour voir ce qui se passe. "

      hmmmm c'est à dire?

      NB: il y a 2 mois; php, sql......c'était du chinois ;) j'arrive tout doucement à me débrouiller. j'ai une autre base qui se remplit de T° en push via des scénarios mais je voudrais passer en pull.

      Zibasement ;)

      Supprimer
    3. Salut Fabien,

      Je comprend. Nous sommes tous passés par l'apprentissage et je suis loin d'être un expert en PHP.

      Pour le deboggage et l'affichage de message dans ton script, ajoute a différents endroit du script PHP des commandes écho; style echo "passage 1"; plus loin echo "passage2";...cela permet d'afficher ces messages a l'écran dans le navigateur, voir par où le script passe, et détecter d'où vient le probleme. Ensuite, de la même façon tu peux afficher des valeurs de variables du script avec echo "valeur variable1: ".$nomdelavariable1; ....etc...c'est le seul moyen de debugger efficacement et de détecter ton problème.

      Espérant t'aider à travers ces quelques conseils...

      Si besoin écrit moi sur mon mail: mr.quellegoule@gmail.com

      @+.

      Supprimer
  32. Ca y est ma base se remplit :) Merci de ton aide Mister!

    Je partage mon erreur afin que vous ne fassiez pas la même:
    Dans le config.php; à la ligne:
    $client_config['idzibase'] = "ZIBASExxxxx"; //votre id zibase -- utile dans la fonction getSensorList

    L'id de la zibase est avec un "i" minuscule et le reste des lettres en majuscule!!!!! soit: ZiBASE123456

    J'ai un peu galéré aussi pour le cron du synology
    Un super tuto ici:
    http://www.myipx800.com/index.php?post/2012/10/28/Programmer-un-cron-sur-Synology

    Si comme moi vous avez un vieux DSM sans planificateur de tâches.

    Via putty; pensez à vous connecter en "root" et non pas en "admin" avec pour mot de passe celui du compte admin.

    Voili voilou :-)

    RépondreSupprimer
  33. Bonsoir,
    Je souhaite savoir si une âme charitable pouvait m'aider à incorporer ces scripts sur mon nas synology ?
    j'ai une zibase que j'utilise pour mes radiateurs (thermostat) et les lumieres, et un nas pour les sauvegardes et les telechargements.
    Je suis débutant niveau zero concernant la mise en ligne de site (j'ai activé worldpress et phpmyadmin)

    RépondreSupprimer
  34. Ce commentaire a été supprimé par son auteur.

    RépondreSupprimer
  35. Bonsoir,
    je suis en train d'essayer de configurer l'archivage à l'aide d'une base Mysql sur un espace free. Quelqu'un a t'il réussi juste pour savoir si ça vaut le coup que je galère ??

    RépondreSupprimer
  36. Bonjour Julien,

    Sur un espace free, tu ne peux malheureusement pas faire de requêtes http sortantes. Donc cette solution ne peut fonctionner. Pour faire cela depuis un espace free, je t'invite a te rendre ici : http://domotiquezibase.free.fr/ZIBASE_SONDE_DEMO/index.php . C'est un précédent site que j'ai fait sur espace free en mode push. A toi de jouer.

    Domotiquement

    RépondreSupprimer
  37. Bonjour,
    J'ai un petit souci au niveau de l'enregistrement en base, celle-ci ne se remplit pas.
    J'ai donc placé une commande echo $query2; dès le début du code pour avancer petit à petit et pour voir à quoi ressemblent les requêtes.
    On se trouve à celle qui va updater le nom de la sonde pour que celle-ci soit conforme.
    J'ai volontairement mis "toto" en base pour que le code aille le changer.

    La requête est la suivante :
    update PERIPHERIQUES set code='OS123456789' where nom_zibase='OS123456789'

    Lorsque je vais lancer directement cette requête dans l'interface phpMyAdmin, j'obtiens le message suivant :
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update PERIPHERIQUES set code='OS123456789' where nom_zibase='OS123456789'' at line 1.

    J'ai l'impression que c'est un souci d'encodage.

    J'ai essayé plusieurs d'encoder mon fichier PHP en UTF-8 et e nUTF-8 sans (BOM) avec le même résultat.

    Ce qui est troublant, c'est que la table EVENEMENT est bien mise à jour mais le message enregistré dans le champ présente des caractère bizares "Le périphérique OS123456789 a bien été mis à jour en base avec l identifiant sonde OS123456789."
    Je précise que j'héberge sur un NAS synology.

    Quelqu'un a déjà rencontré le problème ?

    RépondreSupprimer
  38. Bonjour
    Tout fonctionnes bien chez moi! Sauf le changement de code de la sonde qui n'est pas repéré, je cherche déjà depuis plusieurs jours sans résultat
    Un coup de main serai le bien venue.
    Merci
    et Merci à MisterQuellegoule pour le superbe travail.

    RépondreSupprimer
  39. bonsoir
    j ai suivi les explications et pour le moment ça fonctionne
    j ai passé 3 jours a comprendre car je ne suis pas un specialiste
    merci a MisterQuellegoule de nous faire partager ces connaissances
    merci aussi a arnaud P pour la petite recap qui ma bien aidé

    RépondreSupprimer