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