Page 1 sur 2

[LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 14:34
par i9987popo
Bonjour,

voici ma problématique, sous Domoticz, j'ai développé un programme qui Thermostat afin de gérer la gestion du poêle à granulés. J'aimerais l'amméliorer en y ajoutant une détection de fenêtres ouvertes (notamment quand Madame toile et ouvre les fenêtres ou aère la maison).En effet elle ne pense pas à désactiver le thermostat. Du coup le poêle se met en route alors que les fenêtres sont ouvertes ... Pas très écologique tout cela.
Ayant des capteurs de température, on s'aperçoit très vite e l'ouverte de feneêtres ou porte la température chute à minima de 1° en 5/10 minutes, surtout à cette période dans le Nord Ouest de la France.
J'aimerais donc comparer la valeur de ma température actuelle avec celle d'il y a 10 minutes. Ma question : Comment récupérer la valeur d'il y a 10 minutes avec mon script LUA ?
Comment puis-je me connecter à la bdd SQLite ?
Concernant la requête exacte pour extraire la valeur, je n'y ai pas réfléchi mais je devrais pouvoir trouver facilement.

Merci de votre retour à tous.

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 14:37
par vil1driver
Salut,

Enregistre toutes les 10 minutes ta temp dans une variable ;)

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 14:54
par lost
vil1driver a écrit : Enregistre toutes les 10 minutes ta temp dans une variable ;)
Cela manque un peu de ne pas pouvoir avoir de variable statiques, qui seraient conservées entre les appels d'un script. Je n'ai pas connaissance de ceci en Lua... Et ici, il faudra aussi enregistrer le temps du dernier enregistrement car un script time c'est appelé toutes les minutes. Ce qui complexifie encore en plus de générer une charge de travail d'appel de script et de comparaison de temps inutile 9 fois sur 10.

Cela oblige à créer une variable utilisateur domoticz, donc une dépendance crée hors script. Ce n'est pas très propre et ne facilite pas la portabilité aisée des scripts.

L'autre solution, ce serait de gérer de l'extérieur. Par exemple via un script Python exécuté en service avec une boucle infinie mise en sleep pour 10mn à la fin de chaque exécution... et qui agirait via l'API HTTP/JSON sur le switch de l'interface domoticz activant globalement le chauffage: Temp baisse de plus de X°C en 10mn = on coupe. Remonte de plus de Y°C en 10mn, on remets.

Pour des trucs simples (comme ici... le python ne devient vraiment utile que si on doit faire des trucs plus complexes en JSON avec Domoticz), un bash sans boucle appelé via un job cron toutes les 10mn peut aussi faire l'affaire.

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 15:06
par jackslayter
c'est la seule solution dans Dz, sur un script tu es obligé de stocker une variable quelque part car il tourne en bloucle.

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 15:20
par vil1driver
lost a écrit :
vil1driver a écrit : Enregistre toutes les 10 minutes ta temp dans une variable ;)
Cela manque un peu de ne pas pouvoir avoir de variable statiques, qui seraient conservées entre les appels d'un script. Je n'ai pas connaissance de ceci en Lua...
ah ba si justement ça existe
c'est extrêmement utilisé dans de nombreux scripts ici sur ce forum pourtant.
depuis plus d'un an que tu utilises domoticz tu n'as jamais entendu parlé de variables utilisateur ? :?
menu réglage > plus d'options > variables utilisateur

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 17:05
par i9987popo
Donc sinon il n'existe aucun moyen en LUa d'accèder à la base SQLite de Domoticz par une connexion à la Bdd et des requêtes ?
Sinon je vais voir pour adapter mon code en python ou php pour pouvoir aller rechercher des valeurs dans la Bdd SQLite.
L'avantage c'était que la je pouvais modifier mon code de n'importe où. La ce sera un peu plus délicat, il me faudra un client ftp pour transférer le programme . Tant pis.
Car avec la porte ouverte j'ai d'autres améliorations à faire, comme avec mon capteur dans les combles qui m'est très utile pour connaître si le soleil chauffe la maison ou pas. Mais même chose il me faut récupérer des valeurs précédentes pour déterminer ma pente et savoir si je dois chauffer la maison au poêle ou si je laisse le soleil chauffer la maison.

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 17:10
par vil1driver
tu peux faire tout cela en lua et sans client ftp... mais si tu préfères t'embêter avec la base et risquer de tout casser..

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 17:34
par i9987popo
Enfin avec un simplement un select, je ne risque pas de casser ma base ...
Je ne modifie rien, je veux juste récupérer une info d'il y a 5 ou 10 min.
C'est risqué à ce point ?

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 18:16
par lost
vil1driver a écrit : ah ba si justement ça existe
c'est extrêmement utilisé dans de nombreux scripts ici sur ce forum pourtant.
depuis plus d'un an que tu utilises domoticz tu n'as jamais entendu parlé de variables utilisateur ? :?
menu réglage > plus d'options > variables utilisateur
Je connais ces variables utilisateur et en utilises... mais comme un pis-aller!

On s'est mal compris en fait: Je parlais d'une déclaration d'un type de variable statique (au sens de ce qui existe pour une fonction écrite en C), déclarée ainsi dans le source Lua qui l'utilise et sans dépendance à une une déclaration externe dans le clicodrome de Domoticz... avec ses limites (devoir la déclarer en dehors de son source, limité à du texte...).

Je trouve que cela manque!

Re: [LUA] Script et accès base SQLite

Publié : 24 oct. 2017, 19:58
par Chrominator
Pas besoin d'accéder directement à la base, il faut simplement lire les valeurs qui forment le graphique si un historique à 5 mn d’intervalle te convient.

Par exemple :

Code : Tout sélectionner

http://<ip domoticz>:<port domoticz>/json.htm?type=graph&sensor=temp&idx=<idx de ton capteur de température>&range=day
Ce qui renvoie (j'évite de poster toutes les lignes) ;) :

Code : Tout sélectionner

{
  "result": [
    {
      "d": "2017-10-23 19:45",
      "hu": "61",
      "te": 21.4
    },
    {
      "d": "2017-10-23 19:50",
      "hu": "62",
      "te": 21.3
    },
    {
      "d": "2017-10-23 19:55",
      "hu": "62",
      "te": 21.3
    },
    {
      "d": "2017-10-23 20:00",
      "hu": "62",
      "te": 21.3
    },
    {
      "d": "2017-10-23 20:05",
      "hu": "63",
      "te": 21.3
    },
    {
      "d": "2017-10-23 20:10",
      "hu": "63",
      "te": 21.3
    },
    {
      "d": "2017-10-23 20:15",
      "hu": "63",
      "te": 21.2
    },
    {
      "d": "2017-10-23 20:20",
      "hu": "63",
      "te": 21.1
    },
    {
      "d": "2017-10-23 20:25",
      "hu": "63",
      "te": 21.1
    },
    {
      "d": "2017-10-23 20:30",
 
Extrait de la doc Domoticz :
Temperature

/json.htm?type=graph&sensor=temp&idx=IDX&range=day
/json.htm?type=graph&sensor=temp&idx=IDX&range=month
/json.htm?type=graph&sensor=temp&idx=IDX&range=year