Afficher le niveau de la rivière [Jeedom], script, variables et scénarios..


Attention, la solution proposée ici est vraiment tordue!! Mais elle fonctionne.

Idéale comme exercice pour jouer avec les variables, les scénarios, les scripts et .XML

widget-niv-vezere

Etant en zone inondable, j’aime bien connaître régulièrement le niveau de la rivière, en l’occurrence la Vézère.

Jusqu’au moi de septembre, lorsqu’il pleuvait, je fonçait vite voir le site de Vigicrue pour connaître le niveau de la rivière. Pour être alerter, j’utilisais le plugin de Vigilance météo. (Qui est très bien fait d’ailleurs), mais les alertes ne sont pour moi pas assez précises et trop générales sur la région.

Je connais le niveau critique de la rivière, et c’est à partir de ce niveau que je souhaiterai être alerter pour protéger à minima le matériel de la maison.

Posons la problématique (ou le cahier des charges)

 

Problématique:

-Je souhaite afficher sur mon dashboard le niveau de la rivière.

-Je souhaite être alerter à partir d’un certain seuil de niveau de la rivière.

-Je souhaite historiser la mesure pour avoir un graphique de la tendance générale du niveau.

-N’étant pas un bon programmeur de script, je souhaite récupérer les infos via des scénarios et des variables.

 

Ou trouver la valeur ?

Sur le site de Vigicrue, on peut retrouver les valeurs mesuré par les stations proches de chez soi. (Pour moi c’est la station P400101001).

Comme ils sont super sympa chez vigicrue, ils laissent à disposition un accès au fichier XML de la station avec les relevés:

http://www.vigicrues.gouv.fr/services/observations.xml/?CdStationHydro=P400101001

xml

 

Comment fonctionne ce fichier:

-Ce fichier donne une date de création de celui-ci, le nom de la station, la date du début de la série ainsi que la fin et bien sur la série de relevé.

Ce listing est historisé sur un mois. Personnellement je ne souhaite que la dernière valeur du niveau et de la date et de l’heure de la mesure.

 

Utilisation du plugin script:

J’utilise alors le plugin SCRIPT, pour traiter le fichier XML. Voilà ce que ça donne:

script-cache

 

Çà se corse:

En effet ça se corse, le fichier XML est vivant!! Comment retrouver la bonne balise <ObsHydro> ?

J’ai alors lu et relu la documentation JEEDOM, fait un tas de tests, et après plusieurs heures de recherche, EUREKA!!!

Grace au plugin script on peux récupérer des données dans un fichier .xml mais surtout une valeur précise dans un rang précis.

Sous cette forme : Donnees>Series>Serie>ObssHydro>ObsHydro>numerodurang>DtObsHydro

 

çà fonctionne oui mais…..

Bah oui mais le numéro du rang….. il bouge au fur et à mesure des relevés..

Sur le coup je me suis dit c’est pas grave je vais incrémenter cette valeur mais….le rang recul d’une journée toutes les 24h00. L’historique de ce fichier sur un mois… Vous me suivez toujours?

Soit vous savez programmer et vous pouvez trouver la solution par vous-même… soit vous accepter ma solution super MEGA tordue !!!

(en plus on va jouer avec des scénarios et des variables, un super exercice)

 

C’est partie!!

Pour utiliser la requette XML avec un numéro de rang variable, on va utiliser une variable dans la requette, ce qui donne:

Donnees>Series>Serie>ObssHydro>ObsHydro>variable(Rangcrue)>DtObsHydro.

 

script-entier

On va créer ici une variable Rangcrue . Grace à elle on va naviguer dans la série pour récupérer notre valeur.

 

On Calcul la valeur du dernier rang de la série!

Là aussi je me suis arraché les cheveux pour trouver une bonne logique. J’ai fini par trouver ca:

 

Date dernier relevé (Date donnée dans le rang)

Date fin de série: Date donnée en tête du xml. (Indépendant du rang)

 

Si la date du dernier relevé est différente de la date de fin de série            (C’est que mon rang n’est pas le bon)

    Alors:                  Hop boucle imbriquée  (on calcul le rang)

  Si  la date de fin de série est vide   (C’est que mon rang est trop grand, surement due à la suppression d’une journée de valeur)

Alors     je recul mon rang de 150. A évaluer selon le taux de rafraîchissement de vos relevés)

J’attend 2 secondes (Pour être sûre que ma variable est bien à jour)

Je rafraîchis mon script (qui va me recalculer les valeur avec mon nouveau rang)

J’attends 4 secondes (Comme ça parce que j’ai envie)

Je relance mon scénario (Bah oui si je suis remonter trop loin)

 

  SINON    C’est que je ne suis pas trop loin mais pas encore sur le bon rang. Je test le rang suivant

J’incrémente ma variable de 1

J’attends 2 secondes

Je rafraîchi mon script

J’attends 4 secondes

Je relance mon scénario pour vérifier que mon rang est bon.

    FIN DE LA BOUCLE INTERNE

Sinon  (c’est que mes valeurs correspondent)   on fait un STOP.

scenario

 

Oui c’est tordue, mais ça fonctionne. JE SUIS OUVERT A TOUTES SUGGESTIONS pour faire autrement, et si vous n’avez pas compris quelques choses… Posez vos questions…

 

 

 

LBC Concept

Ancien ingénieur dans le secteur de l industrie, je travaillais sur des systèmes de conduite automatisée de ligne de fabrication. Aujourd'hui, j'utilise mes connaissances au service de la domotique.

9 pensées sur “Afficher le niveau de la rivière [Jeedom], script, variables et scénarios..

  • 30 novembre 2016 à 9 h 44 min
    Permalink

    Intéressant.

    Une idée comme ça — absolument pas testée 😉 — est-ce qu’en mettant -1 comme numéro de rang, le plugin script ne retournerai pas le dernier objet de la série ?

    Je n’ai pas trop le temps de tester, mais ça fonctionne, ça simplifierait les choses 🙂

    Répondre
    • 30 novembre 2016 à 10 h 23 min
      Permalink

      Le problème est que le relever peut être de 5 min 10 min ou 15 min. Donc il faut dans ce cas incrémenté ton rang. Mais toutes les 24h tu perds 1 journée de valeurs. Mais comme on ne sais pas combien de valeurs il y avait car c est variable, je recule mon rang et incrémenté à nouveau pour trouver le dernier rang.
      Perso en python shell ou je ne sait quoi on doit pouvoir trouver directement la dernière donnée. Mais ça dépasse malheureusement mais compétences.

      Répondre
    • 30 novembre 2016 à 12 h 04 min
      Permalink

      Ah super!!! Merci pour l’info. Je vais étudier ça et ferai une v2.0
      Avec toutes ces infos je devrais m’en sortir et surtout alléger la manière de faire.

      Répondre
  • 30 novembre 2016 à 16 h 55 min
    Permalink

    Le script d’Hervé est moins bien dans le principe que le fichier présenté ici (le XML direct)
    Pour info je connaissais pas ce fichier direct, je viens de modifier le plugin vigilancemétéo pour Jeedom et il prend cette source, c’est plus naturel. Donc dernière hauteur et la date est remontée aussi, dispo en beta pour le moment.
    Y a le meme genre de fichier xml pour le débit des stations le permettant ?

    Répondre
    • 30 novembre 2016 à 17 h 35 min
      Permalink

      Alors là tu es mon dieu!!
      Merci pour ce retour d’info.
      Pour les autres xml je regarderai ce soir, je n’ ai plus en tête.
      Hâte de tester cette maj.

      Répondre
      • 30 novembre 2016 à 19 h 46 min
        Permalink

        Bon, j’ai regarder dans mon historique et je ne retrouve pas le fichiers pour les débits. Je sais que c’est faisable.
        Perso pour trouver le fichier des niveau d’eau, je suis passer par la:
        http://xml.sandre.eaufrance.fr/exist/
        Tu peux retrouver tout et n’importe quoi, mais pas d’aide à la recherche.

        Répondre
        • 1 décembre 2016 à 8 h 45 min
          Permalink

          C’est fait, si le débit existe il est remonté ainsi que sa date de relevé lui aussi

          Répondre
          • 1 décembre 2016 à 13 h 35 min
            Permalink

            Super. Hâte de tester. Je met mettrai à jour l’article. Je laisserai là méthode parce que ça fait un exemple pour les script et xml et les variables…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *