Waarden aanpassen in Domoticz database
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
Dit delen:
- Klik om te delen met Twitter (Wordt in een nieuw venster geopend)
- Klik om te delen op Facebook (Wordt in een nieuw venster geopend)
- Zoeken
- Klik om dit te e-mailen naar een vriend (Wordt in een nieuw venster geopend)
- Klik om op LinkedIn te delen (Wordt in een nieuw venster geopend)
- Gebruiker (Wordt in een nieuw venster geopend)
- Front-end SEO-inspecteur (Wordt in een nieuw venster geopend)
- Statistieken (Wordt in een nieuw venster geopend)
- Meldingen (Wordt in een nieuw venster geopend)
Hoi Björn,
Ben er al uit. De Counter moet natuurlijk ook netjes worden opgehoogd.
Nogmaals bedankt voor je heldere uitleg alhier.
Hoi René,
Bedankt voor je bericht en de complimenten.
Goed om te lezen dat je er zelf bent uitgekomen!
Hoi Björn,
Dit is geweldig, en eenvoudig uitgelegd! Ik heb daar al enige keren succesvol gebruik van gemaakt.
Maar nu heb ik iets raars. Misschien snap jij waar het mis gaat.
Ik heb per ongeluk een waarde weggegooid, en nu zit er dus een gat in de database. Met
INSERT INTO Meter_Calendar (DeviceRowID,value,Counter,Date) VALUES (68,19312,1,’2022-04-02′);
gepoogd de waarde opnieuw te schrijven, en dat gaat goed in de Maand- en Jaar-view.
Echter, de cumulatieve opbrengst (compairing generated), wat een optelsommetje moet zijn, gaat daarbij van 149 naar 333 (zou dus 168 moeten worden).
Wat gaat hier fout? En hoe kan ik dit herstellen?
Hi Björn,
Thank you so much for your time.
Problem solved by using the right save command!
Kind regards,
Eric
I copy the domoticz.db to sqlite, update the electricity values in table Multimeter_Calendar and copy the database back.
But, after a full restart of domoticz, the log of the P1 is still the same.
How can I update P1 history in domoticz and see the result in the p1-log-graph?
Hi Eric,
The historic values of the P1 meter are stored in table Multimeter_Calender. But you have to be sure that you update the right IDX. In the database the column is named DeviceRowID.
I’ve updated my P1 values a few times in the past without any problems. Can you show an example of what you did?
Kind regards,
Björn