Passen Sie die Werte in der Domoticz-Datenbank an
Domoticz läuft auf einer SQLite3-Datenbank. Um Änderungen an der Datenbank vorzunehmen, muss sqlite3 installiert sein.
Bevor Sie Änderungen an der Datenbank vornehmen, sollten Sie Domoticz vorübergehend stoppen und eine Sicherungskopie der Datenbank erstellen.
Um Domoticz zu stoppen, geben Sie den folgenden Befehl im Terminal ein:
sudo-Dienst domoticz.sh beendet
Um eine Sicherungskopie der Domoticz-Datenbank zu erstellen, geben Sie die folgenden Befehle ein:
cd ~/domoticz
cp domoticz.db domoticz.db.bak
Starten Sie SQLite3 und melden Sie sich mit dem folgenden Befehl bei der Domoticz-Datenbank an:
sqlite3-domoticz.db
Praktische Befehle, wenn Sie Änderungen an der Datenbank vornehmen möchten..header-on
.Fashion-Kolumne
.Tabellen
.entsorgen
.Kopfzeile an
Aktiviert oder deaktiviert die Anzeige von Kopfzeilen
Die Spaltenbeschriftungen, die in den ersten beiden Ausgabezeilen erscheinen, können mit dem Punktbefehl „.header“ ein- und ausgeschaltet werden. Im folgenden Beispiel sind die Spaltenbezeichnungen deaktiviert.
sqlite> .headers off sqlite> SELECT * VON Ärzten; 210 dr. John Linga MD211Dr. Peter Halle MBBS 212 Dr. Ke Gee MD213Dr. Pat Fay MD
Hier im obigen Beispiel wird keine Kopfzeile für die Arzttabelle angezeigt. Wenn wir die Kopfzeile der Tabellenspalten sehen möchten, sollte der folgende Befehl ausgeführt werden.
sqlite> .headers auf sqlite> SELECT * VON Ärzten; arzt_id arztname grad ---------- -------------- ---------- 210 dr. John Linga MD211Dr. Peter Halle MBBS 212 Dr. Ke Gee MD213Dr. Pat Fay MD
.Fashion-Kolumne
Das Programm sqlite3 kann die Ergebnisse einer Abfrage in acht verschiedenen Formaten anzeigen: „csv“, „column“, „html“, „insert“, „line“, „list“, „tabs“ und „tcl“. Mit dem Befehl .Mode
es kann ausgewählt werden, wie das Ausgabeformat angezeigt wird.
Wenn der Modus eingestellt ist als Säule
, wird jeder Datensatz in einer separaten Zeile angezeigt, wobei die Daten in Spalten angeordnet sind, um die Lesbarkeit zu verbessern.
sqlite> .mode Spalte sqlite> select * from table1; wählen Sie * aus Tabelle1; 1 Beschreibung1 2 Beschreibung2
.Tabellen
Gibt alle Tabellen in der Datenbank zurück.
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
.entsorgen
Sichert die Datenbank in einem SQL-Textformat. Wenn der Tabellenname angegeben ist, werden nur Tabellen ausgegeben, die dem LIKE-Muster TABLE entsprechen.
sqlite> .dump Fan PRAGMA Foreign_keys=OFF; TRANSAKTION BEGINNEN; CREATE TABLE [Fan] ([DeviceRowID] BIGINT(10) NOT NULL, [Speed] INTEGER NOT NULL, [Date] DATETIME DEFAULT (datetime('now','localtime'))); CREATE INDEX f_id_idx auf Fan(DeviceRowID); CREATE INDEX f_id_date_idx auf Fan(DeviceRowID, Date); BEGEHEN;
In der Tabelle „Temperatur“ werden die Temperaturen des aktuellen Tages gespeichert. Die historischen Werte werden in der Tabelle „Temperature_Calendar“ gespeichert.
Die Aussage SELECT * FROM Temperatur_Kalender;
zeigt alle Temperaturen in der Tabelle „Temperature_Calendar“.
Die Aussage SELECT * FROM Temperature_Calendar WHERE [Datum] = '2021-05-04';
die Temperaturen vom 4. Mai 2021 zulassen.
Wenn Sie alle Temperaturen für den 5. Mai 2021 sehen möchten, verwenden Sie die Anweisung SELECT * FROM Temperature_Calendar WHERE [Datum] < '2021-05-04';
Um die Werte eines bestimmten Geräts zurückzugeben, benötigen wir die korrekte DeviceRowID. Sie finden diese in der Domoticz-Oberfläche, indem Sie die Diagramme öffnen. In der Adressleiste Ihres Browsers sehen Sie die ID (idx) des Geräts. Mit der unten stehenden Aussage können Sie sich die Temperaturwerte des jeweiligen Gerätes anzeigen lassen.
SELECT * FROM Temperature_Calendar WO [DeviceRowID] = 8;
Alte Werte können mit folgender Anweisung aus der Datenbank entfernt werden:
DELETE FROM Temperature_Calendar WHERE [DeviceRowID] = 8 AND [Date] < '2021-05-04';
Mit der UPDATE-Anweisung können Sie bestimmte Werte ändern. Angenommen, wir möchten die maximale Temperatur vom 4. Mai 2021 des Geräts mit idx 8 von 20,9 auf 12,3 anpassen. Dazu verwenden wir die Aussage:
UPDATE Temperature_Calendar SET [Temp_Max] = 12.3 WO [DeviceRowID] = 8 AND [Date] = '2021-05-04';
Wenn Sie die maximalen, minimalen und durchschnittlichen Temperaturen vom 4. Mai 2021 mit einer Anweisung anpassen möchten, verwenden Sie die folgende Anweisung:
UPDATE Temperature_Calendar SET [Temp_Max] = 12,3, [Temp_min] = 5,3, [Temp_avg] = 7,5 WO [DeviceRowID] = 8 AND [Date] = '2021-05-04';
Um SQLite3 zu beenden, verwenden Sie den Befehl .Verlassen
Danach kehren Sie zum Terminal zurück.
Starten Sie Domoticz neu, um das Ergebnis der Änderungen mit dem folgenden Befehl anzuzeigen:
sudo-Dienst domoticz.sh starten
Teilen mit:
- Klick, um über Twitter zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Facebook zu teilen (Wird in neuem Fenster geöffnet)
- Mehr
- Klicken, um einem Freund einen Link per E-Mail zu senden (Wird in neuem Fenster geöffnet)
- Klick, um auf LinkedIn zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Reddit zu teilen (Wird in neuem Fenster geöffnet)
- Klick, um auf Tumblr zu teilen (Wird in neuem Fenster geöffnet)
- Klicken, um auf Telegram zu teilen (Wird in neuem Fenster geöffnet)
- Klicken, um auf WhatsApp zu teilen (Wird in neuem Fenster geöffnet)
Hallo Björn,
Schon raus. Der Counter muss natürlich auch ordentlich angehoben werden.
Nochmals vielen Dank für Ihre klare Erklärung hier.
Hallo René,
Vielen Dank für Ihre Nachricht und die Komplimente.
Schön zu lesen, dass du es selbst herausgefunden hast!
Hallo Björn,
Das ist toll und einfach erklärt! Ich habe es mehrfach erfolgreich eingesetzt.
Aber jetzt habe ich etwas seltsames. Vielleicht verstehst du, was schief läuft.
Ich habe versehentlich einen Wert verworfen, also gibt es jetzt eine Lücke in der Datenbank. Von
INSERT INTO Meter_Calendar(DeviceRowID,value,Counter,Date) VALUES (68,19312,1,'2022-04-02′);
versucht, den Wert umzuschreiben, und es funktioniert gut in den Ansichten Monat und Jahr.
Der kumulierte Ertrag (durch Vergleich generiert), der eine Addition sein sollte, geht jedoch von 149 auf 333 (sollte also 168 sein).
Was läuft hier schief? Und wie kann ich das beheben?
Hallo Björn,
Vielen Dank für Ihre Zeit.
Problem gelöst durch Verwendung des richtigen Speicherbefehls!
Mit freundlichen Grüßen,
Erich
Ich kopiere die domoticz.db nach sqlite, aktualisiere die Stromwerte in der Tabelle Multimeter_Calendar und kopiere die Datenbank zurück.
Aber nach einem vollständigen Neustart von Domoticz ist das Protokoll des P1 immer noch dasselbe.
Wie kann ich den P1-Verlauf in Domoticz aktualisieren und das Ergebnis im p1-Log-Diagramm sehen?
Hallo Eric,
Die historischen Werte des P1-Zählers werden in der Tabelle Multimeter_Calender gespeichert. Aber Sie müssen sicher sein, dass Sie das richtige IDX aktualisieren. In der Datenbank heißt die Spalte DeviceRowID.
Ich habe meine P1-Werte in der Vergangenheit einige Male ohne Probleme aktualisiert. Können Sie ein Beispiel zeigen, was Sie getan haben?
Mit freundlichen Grüßen,
Björn