Les tables Domoticz

sqlite

Nous avions vu précédemment l’utilisation d’un outil de gestion de base de donnée SQLite

Cette fois ci explorons la base de données Domoticz à la découverte de ses tables, colonnes, liens entre tables…

Bien entendu cette liste n’est pas exhaustive.

La première table à observer est DeviceStatus

DeviceStatus

Cette table contient la liste des périphériques du menu « Dispositifs »

Je ne vais détailler ici que les champs qui me semblent importants :

Nom Rôle
Id C’est le fameux Idx Domoticz
Name Le nom que vous avez donné à ce matériel
Used 1 si il est utilisé, 0 sinon
BatteryLevel Le niveau de batterie
nValue la nValue (souvent 0) voir API JSON
sValue Les sValue, les valeurs reçues séparées par un ; Voir API JSON
LastUpdate La dernière fois que l’on à vu ce matériel AAAA-MM-JJ HH:MM:SS (2016-01-12 08:04:49)

On y retrouve aussi, le delta de correction de température, le flag de protection ….

Cette table est importante dans la mesure ou elle contient toutes les caractéristiques de nos périphériques tels que les Noms, la date de dernière mise à jour.

Toutes les autres tables ,sont des tables des mesures et ne contiennent que des Idx et les valeurs brutes mesurées ainsi que la date (simplification inside), le mon du matériel n’y figure pas par exemple.

Ce qui signifie que si nous voulons afficher le nom du matériel nous devrons toujours aller le chercher dans la table DeviceStatus par l’intermédiaire de son Idx.

En SQL il s’agit de faire une jointure entre deux tables liées entres elles par un point commun ici le Idx nommé Id dans la table DeviceStatus ( 🙄 )

L’instruction à utiliser est soit un WHERE soit JOIN ON. J’utiliserai ici JOIN ON qui me semble plus compréhensible.

Exemple :

SELECT Name, Value3,Date FROM Multimeter JOIN DeviceStatus ON Multimeter.DeviceRowId=DeviceStatus.id order by Date

Explication : Je vais chercher Value3, Date dans la table Multimeter et je JOIN la table DeviceStatus pour aller chercher ce qui est dedans à savoir Name par intermédiaire du DeviceRowId de Multimeter qui est le même que le id  de la table DeviceStatus.

Remarquez que on va chercher la colonne DeviceRowId dans la table Multimeter par un nom_de_la_table.nom_de_la_colonne (Multimeter.DeviceRowID) de même pur Id de DeviceStatus.

Cette requête produit le même résultat de sortie.

SELECT Name, Value3,Date FROM Multimeter, DeviceStatus where DeviceRowId=DeviceStatus.id

N.B Les requêtes SQL sont sensibles à la casse des caractères.

 Quelques autres tables

 

Rôle Table  Colonnes Exemple de requête
Mesures Conso Électrique Multimeter DeviceRowId et Value3 SELECT Name, Value3,Date,LastUpdate  FROM Multimeter JOIN DeviceStatus  ON Multimeter.DeviceRowId=DeviceStatus.id order by Date
Température Temperature  DeviceRowId, Temperature,Humidity, Barometer,DewPoint SELECT Name,Temperature,Humidity, Barometer,DewPoint FROM Temperature JOIN DeviceStatus  ON DeviceRowId=DeviceStatus.id
Les Pourcentages de la carte Mère  Percentage DeviceRowId, Percentage
Pluie Rain DeviceRowId,Total,Rate
Matériel : Utile pour afficher le nom du matériel relié au periphérique. Hardware Name SELECT DeviceStatus.Name,Temperature,Humidity, Barometer,DewPoint ,Hardware.Name FROM Temperature ,DeviceStatus,Hardware  where DeviceRowId=DeviceStatus.id and DeviceStatus.HardwareID=Hardware.ID
Changement d’état des Interrupteurs LightingLog nValue , sValue, Date,DeviceRowID SELECT
Name,LightingLog .nValue , LightingLog .sValue, LightingLog .Date FROM LightingLog JOIN DeviceStatus  ON DeviceRowID=DeviceStatus.id
Mesures UV UV DeviceRowID, Level, Date
Mesures Vent Wind DeviceRowID, Direction,Speed,Gust, Date

Remarquez que l’on peut faire 2 jointures sur deux tables comme dans l’exemple ci dessous ou l’on part de la table Temperature pour recuperer le Idx qui nous servira à la fois dans DeviceStatus pour le nom du périphérique puis par un HardwareID pour aller chercher le mon du matériel dans Hardware

SELECT DeviceStatus.Name,Temperature,Humidity, Barometer,DewPoint ,Hardware.Name FROM Temperature ,DeviceStatus,Hardware  where DeviceRowId=DeviceStatus.id and DeviceStatus.HardwareID=Hardware.ID

 

Quelques exemples

  • Exporter des valeurs d’une table au format csv destinées à un tableur.

De façon générale, la syntaxe est la suivante :

sqlite3 -header -csv /home/pi/domoticz/domoticz.db "ma requete qui va bien;" > out.csv

Avec « ma requete qui va bien » ,une requete SQL qui produit les résultats dont vous avez besoin.

Illustration

Si je reprends l’exemple du tableau ci-dessus avec les valeurs de température on obtient :

 sqlite3 -header -csv /home/pi/domoticz/domoticz.db "SELECT Name,Temperature,Humidity, Barometer,DewPoint FROM Temperature JOIN DeviceStatus  ON DeviceRowId=DeviceStatus.id;" > out.csv
  • Exporter toute la base dans un fichier.
sqlite3 domoticz.db .dump > base.sql
  • Et à la question que vous poserez un jour: Peut on renommer les Idx Domoticz comme bon ne semble la réponse est OUI

Toutefois pensez que cet IDx est présent dans les tables contenant les valeurs (Temperature, Multimeter…) et donc si vous voulez garder un peu d’historique il faudra mettre le nouvel Idx dans ces tables à la place de l’ancien.

 

Voila pour ce tour d’horizon,non exhaustif, de quelques tables Domoticz.

SELECT * FROM BonneJournee

Résultat de recherche d'images pour "base de donnes sqlite"

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/
Posted in domoticz and tagged , , , .