Page 1 sur 1

Hint : Récupérer les valeurs instantanées d'un capteur rfxcom

Publié : 28 mai 2016, 11:00
par aleph0
Bonjour à tous,

Dans un post précedent (viewtopic.php?f=8&t=1930#p17408) je me demandais comment récupérer les valeurs instantanées de mon owl. J'avais besoin d'une résolution plus fine que les 5min du petit log de domoticz pour analyser la marche/arrêt de certains appareil.

J'ai finalement trouvé une solution que je souhaite partager avec vous : Il s'agit simplement d'un tout petit script Lua de type device, qui s'exécute donc à chaque update d'un capteur, et qui va enregistrer dans une base mysql les valeurs instantanées :

Le setup :
  • * Mon capteur OWL s'appelle "owl" dans domotocz ; pas très original mais ça a le mérite d'être clair :)
    * J'ai un serveur mysql sur la même machine qui exécute domoticz
    * la base de donnée s'appelle cm160, l'utilisateur qui a le droit d'écriture sur cette base s'appelle aussi cm160
    * la table s'appelle rawdata et contient :
    • - un champs rd_id en autoincrement,
      - un champs rd_date de type DATETIME qui contient l'horodatage de la mesure
      - un champs rd_w de type FLOAT qui contient la consommation instantanée à la date de la mesure

Code : Tout sélectionner

local mesure = "owl"

commandArray = {}
if (devicechanged[mesure]) then
        date_stamp=os.date("%Y-%m-%d %H:%M:%S")
        actual_conso, compteur, dum2 = string.match(otherdevices_svalues[mesure],"(%d+.%d*);(%d+).(%d*)")

        exec_mysql="echo \"INSERT INTO rawdata(rd_date,rd_w) VALUES ('"..date_stamp.."','"..actual_conso.."')\" | mysql -D cm160 -u cm160 --password=censuré"
        -- print(exec_mysql)

        status,errorString=os.execute(exec_mysql)
        -- print(status,errorString )
end
return commandArray
J'avais dans un premier temps essayé en passant par l'API mysql de lua (voir ici http://www.tutorialspoint.com/lua/lua_d ... access.htm) mais ça ne marche qu'un temps. Cette solution provoquait des fuites mémoire sur domoticz et fini par planter au bout de 12-18h :( En passant par un os.execute, c'est moins élégant, mais plus stable !

Re: Hint : Récupérer les valeurs instantanées d'un capteur rfxcom

Publié : 17 sept. 2016, 12:22
par chenaillou
Hello,

Je déterre ce post car ce sujet m’intéresse tout particulièrement. Je suis nouveau dans l'utilisation de DomoticZ et j'ai un cas d'usage assez particulier aussi car je monitore ma consommation et ma production d'énergie en triphasé, à l'aide de 2 OWL CM180i qui me remontent chacun indépendamment la partie consommation pure et la partie "réseau" incluant injection et consommation.
j'utilise donc en tout 6 canaux sur 2 * CM180i + le monitoring de l'onduleur SMA qui me donne la partie production pure ainsi que les valeurs de tension imposée au réseau par l'onduleur.

Tout comme toi, j'ai exactement le même besoin en terme de résolution, à savoir descendre au minimum de ce qu'il est possible de faire avec le CM180i pour remonter les consommations instantanées de certains consommateurs qui tirent beaucoup d'électricité sur de très courtes périodes (démarrage moteur triphasé) afin de pouvoir déclencher des action derrière en conséquence (délestage de phase par exemple). En fait je me doute que je ne pourrais pas forcément descendre en dessous des 30s de résolution, mais même déjà 30s ça m'aiderait beaucoup. Typiquement un four ou un radiateur qui se met/remet en route ne tire du jus que pendant une courte période, souvent moins d'une minute et donc descendre sous les 5 min est indispensable.

J'ai regardé avec attention ce post, car tout comme toi je cherchais une méthode pour grapher dans domoticz surtout avec une période à 30s, et je ne trouvais pas moyen de le faire par "défaut" avec domoticz.
Ton script est très bien, mais de ce que je comprend, tu stockes les valeurs dans une DB MySQL à part, et non dans la base de Domoticz et tu travailles donc en dehors de domoticz sur ces valeurs d'après ce que j'en comprend.
Je ne connais pas grand chose au fonctionnement de domoticz en interne, mais de ce que j'en comprend, le système de graphe est basé sur des valeurs stockées en DB également.
Du coup peux-tu expliciter comment ton script te permet d'avoir des graphes plus précis dans Domoticz ou bien si tu le fais avec un autre outil externe de génération des graphes ?
J'imagine que ton script est déclenché sur chaque event de ton rfxtrx433 et donc de cette façon tu remontes toutes les valeurs possibles ?

merci d'avance

Re: Hint : Récupérer les valeurs instantanées d'un capteur rfxcom

Publié : 20 sept. 2016, 11:35
par aleph0
J'ai regardé avec attention ce post, car tout comme toi je cherchais une méthode pour grapher dans domoticz surtout avec une période à 30s, et je ne trouvais pas moyen de le faire par "défaut" avec domoticz.
Je te rassure tout de suite : moi non plus j'ai pas trouvé pour faire ça dans domoticz !
Ton script est très bien, mais de ce que je comprend, tu stockes les valeurs dans une DB MySQL à part, et non dans la base de Domoticz et tu travailles donc en dehors de domoticz sur ces valeurs d'après ce que j'en comprend.
Oui, c'est exactement ça. Je me sentais pas de ré-injecter les données dans la db de domoticz, même si, dans une table à part, ça doit être faisable. Mais ça ne me paraît pas être une bonne idée car ça reste des données in-interprétables par domoticz, ça modifie la structure de la db standard, risquant de provoquer des soucis ou des pertes de données si dans une future mise à jour domoticz décide de changer la structure de sa base, etc. C'est pourquoi j'ai préféré une base à part. Comme d'un autre côté, j'ai besoin d'exploiter cette base depuis une autre machine que celle qui enregistre, j'ai choisi mysql pour ses capacités de connectivité réseau
Je ne connais pas grand chose au fonctionnement de domoticz en interne, mais de ce que j'en comprend, le système de graphe est basé sur des valeurs stockées en DB également.
Du coup peux-tu expliciter comment ton script te permet d'avoir des graphes plus précis dans Domoticz ou bien si tu le fais avec un autre outil externe de génération des graphes ?
J'utilise des outils externes pour exploiter ces données : des requêtes mysql pour accéder aux données, des scripts bash, awk ou autre pour les travailler et gnuplot pour les graphes. Au besoin, les scripts bash peuvent informer en retour domoticz de la mise en route ou l'arrêt d'un appareil via l'api json
J'imagine que ton script est déclenché sur chaque event de ton rfxtrx433 et donc de cette façon tu remontes toutes les valeurs possibles ?
Oui, c'est ça : Le script est déclenché sur chaque changement d'un capteur domoticz. La première chose que fait le script est de vérifier si le capteur qui a changé est bien l'owl, auquel cas il enregistre la valeur reçue dans mysql. Dans le cas contraire le script ne fait rien

Re: Hint : Récupérer les valeurs instantanées d'un capteur rfxcom

Publié : 28 sept. 2016, 09:01
par chenaillou
Je te remercie beaucoup pour toutes ces réponses, ... bon bah il n'y a plus qu'a mettre les mains dedans :)

très bonne idée le passage par l'API json de Domoticz .. :) mais du coup ça me conforte un peu dans l'idée de me monter mon propre système de monitoring from scratch ..