Waarden aanpassen in Domoticz database

Waarden aanpassen in Domoticz database

8 mei 2021 6 Door Björn Meijer

Domoticz draait op een SQLite3 database. Om wijzigingen aan te brengen in de database dient sqlite3 te zijn geïnstalleerd.

Voordat je wijzigingen aan gaat brengen in de database is het verstanding om Domoticz tijdelijk te stoppen en om een back-up te maken van de database.

Om Domoticz te stoppen vul je in de terminal onderstaand commando in:

sudo service domoticz.sh stop

Om een back-up te maken van de Domoticz database vul je onderstaande commando’s in:

cd ~/domoticz
cp domoticz.db domoticz.db.bak

Start SQLite3 en log in op de Domoticz database met onderstaand commando:

sqlite3 domoticz.db

Handige commando’s als je wijzigingen gaat aanbrengen in de database.
.header on
.mode column
.tables
.dump

.Header on

Schakelt de weergave van kopteksten in of uit

De kolomlabels die op de eerste twee regels uitvoer verschijnen, kunnen aan en uit worden gezet met de “.header” puntopdracht. In het volgende voorbeeld zijn de kolomlabels uitgeschakeld.

sqlite> .headers off
sqlite> SELECT * FROM doctors;
210         Dr. John Linga  MD
211         Dr. Peter Hall  MBBS
212         Dr. Ke Gee      MD
213         Dr. Pat Fay     MD

Hier in het bovenstaande voorbeeld is er geen koptekst weergegeven voor de dokterstabel. Als we de koptekst van de kolommen van de tabel willen zien, moet het volgende commando worden uitgevoerd.

sqlite> .headers on
sqlite> SELECT * FROM doctors;
doctor_id   doctor_name     degree
----------  --------------  ----------
210         Dr. John Linga  MD
211         Dr. Peter Hall  MBBS
212         Dr. Ke Gee      MD
213         Dr. Pat Fay     MD

.mode column

Het sqlite3-programma kan de resultaten van een query in acht verschillende formaten weergeven: “csv”, “column”, “html”, “insert”, “line”, “list”, “tabs” en “tcl”. Met het commando .mode kan een keuze worden gemaakt hoe het uitvoerformaat wordt weergegeven.

Als de modus is ingesteld als column, wordt elk record op een aparte regel weergegeven met de gegevens uitgelijnd in kolommen, waardoor de leesbaarheid wordt bevorderd.

sqlite> .mode column
sqlite> select * from table1;
select * from table1;
1           descrip1
2           descrip2

.tables

Retourneert alle tabellen in de database.

sqlite> .tables
BackupLog             MobileDevices         Scenes
Cameras               MultiMeter            SetpointTimers
CamerasActiveDevices  MultiMeter_Calendar   SharedDevices
CustomImages          MySensors             Temperature
DeviceStatus          MySensorsChilds       Temperature_Calendar
DeviceToPlansMap      MySensorsVars         TimerPlans
EnoceanSensors        Notifications         Timers
EventMaster           Percentage            ToonDevices
EventRules            Percentage_Calendar   UV
Fan                   Plans                 UV_Calendar
Fan_Calendar          Preferences           UserSessions
Floorplans            PushLink              UserVariables
Hardware              Rain                  Users
LightSubDevices       Rain_Calendar         WOLNodes
LightingLog           SceneDevices          Wind
Meter                 SceneLog              Wind_Calendar
Meter_Calendar        SceneTimers           ZWaveNodes

.dump

Maakt een dump de database in een SQL-tekstindeling. Indien de tablenaam is opgegeven, worden alleen tabellen gedumpt die overeenkomen met het LIKE-patroon TABLE.

sqlite> .dump Fan
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE [Fan] ([DeviceRowID] BIGINT(10) NOT NULL, [Speed] INTEGER NOT NULL, [Date] DATETIME DEFAULT (datetime('now','localtime')));
CREATE INDEX f_id_idx        on Fan(DeviceRowID);
CREATE INDEX f_id_date_idx   on Fan(DeviceRowID, Date);
COMMIT;

Temperaturen van de huidige dag zijn opgeslagen in de tabel “Temperature”. De historische waarden zijn opgeslagen in de tabel “Temperature_Calendar”.

Het statement SELECT * FROM Temperature_Calendar; laat alle temperaturen zien in de tabel “Temperature_Calendar”.

Het statement SELECT * FROM Temperature_Calendar WHERE [Date] = '2021-05-04'; laat de temperaturen van 4 mei 2021.

Wil je alle temperaturen zien voor 5 mei 2021, gebruik dan het statement SELECT * FROM Temperature_Calendar WHERE [Date] < '2021-05-04';

Om de de waarden van een specifiek apparaat retourneren hebben we het juiste DeviceRowID nodig. Deze kun je vinden in de Domoticz-interface door de grafieken te openen. In de adresbalk van je browser zie je het ID (idx) van het apparaat staan. Met onderstaand statement kun je de temperatuurwaarden van het betreffende apparaat weergeven.

SELECT * FROM Temperature_Calendar WHERE [DeviceRowID] = 8;

Oude waarden kun je uit de database verwijderen met het volgende statement:

DELETE FROM Temperature_Calendar WHERE [DeviceRowID] = 8 AND [Date] < '2021-05-04';

Met het UPDATE statement kun je bepaalde waarden aanpassen. Stel, we willen de maximale temperatuur van 4 mei 2021 van het apparaat met idx 8 aanpassen van 20.9 naar 12.3. Hiervoor gebruiken we het statement:

UPDATE Temperature_Calendar SET [Temp_Max] = 12.3 WHERE [DeviceRowID] = 8 AND [Date] = '2021-05-04';

Wil je met één statement de maximale, minimale en de gemiddelde tempartuur van 4 mei 2021 aanpassen, gebruik dan het volgende statement:

UPDATE Temperature_Calendar SET [Temp_Max] = 12.3, [Temp_min] = 5.3, [Temp_avg] = 7.5 WHERE [DeviceRowID] = 8 AND [Date] = '2021-05-04';

Om SQLite3 af te sluiten gebruik je het commando .quit waarna je weer in de terminal terugkomt.

Start Domoticz weer op om het resultaat van de wijzigingen te bekijken met het volgende commando:

sudo service domoticz.sh start