NEWS
Umzug Daten SQL von altem auf neuen Datenpunkt
-
Hallo, ich habe vor ein paar Tagen begonnen DPs zu über den linkeddevices Adapter bzw. die neue alias Funktion des js-controllers 2.0 abzubilden.
Dabei habe ich auch DPs abgebildet welche zuvor via SQL Adapter Archiviert werden. Beim Anlegen der Linkeddevices Objekte wird die Einstellung SQL übernommen (das hab ich heute festgestellt :)) und somit die Daten 2x in der DB abgelegt:
Jetzt würd ich gerne in der Datenbank, die Daten von hm-rpc.2.xxxxxxxxxxxxxxxx.6.POWER in den neuen 'neutralen' DP linkeddevices.0.energie.steckdosen.pc_power umziehen.
Wie würdet ihr da vorgehen? Meine Idee wäre jetzt, die alten Daten zu exportieren, im CSV die ID zu ändern und das ganze dann wieder in die ts_number zum importieren. Evtl. gibt es ja aber via SQL noch einen einfacheren Weg
-
Hallo,
wie bist du jetzt vorgegangen. Ich habe so etwas Ähnliches geplant. Ich habe mehrere WLAN Steckdosen mit denen ich verschiedene Geräte vermesse. Nach den Messungen würde ich die gerne als seperate Messung in der MySQL Datenbank ablegen.
MfG Sebastian
-
@sf-ing Das ist eine fleisarbeit, hier mal meine SQLs dafür.
Entscheident ist das UPDATE zum Ändern der ID - vorher ein Backup der DB machen, du kannst dir hier logischer weise mit einem Klick alles zerschießen
Grundsätzlich kann man auch mit der Alias Funktion des SQL Adapters arbeiten, aber ich finde im Laufe der Zeit wird das Unübersichtlich.
Vielleicht kann @apollon77 auch bei Gelegenheit in den SQL Adapter eine Migrationsfunktion einbauen?
SELECT * FROM datapoints WHERE NAME LIKE '%hm-rpc.2.000E9569A3178A.1.HUMIDITY%' ORDER BY id SELECT * FROM datapoints WHERE NAME LIKE '%linkeddevices.0.%' ORDER BY id SELECT * FROM datapoints /* Quelle 41 hm-rpc.2.000E9569A3178A.1.HUMIDITY Ziel 262 linkeddevices.0.klima.sensoren.flur_luftfeuchtigkeit ID ändern: - Beide IDs notieren: Quelle / Ziel - ggf. doppelte Einträge aus Quelle löschen - ggf. val anpassen (z.B. Wh in kWh) - UPDATE */ SELECT x1.id AS id ,x2.name AS object ,from_unixtime(floor(ts/1000)) AS 'timestamp' ,ts AS 'unixtime' ,val AS VALUE FROM ts_number x1 JOIN datapoints x2 ON x1.id = x2.id WHERE x1.id IN (262) -- and year(from_unixtime(floor(ts/1000))) = 2019 -- AND ts between 1572548400000 AND 1579443698588 ORDER BY from_unixtime(floor(ts/1000)) desc SELECT COUNT(*) FROM ts_number WHERE id = 262 -- AND ts = 1571608800272 ORDER BY ts desc /* https://www.freeformatter.com/epoch-timestamp-to-date-converter.html 31.10.2019 20:00 1572548400000 30.12.2019 15:00 1577714400000 JETZT 1579443698588 DELETE FROM ts_number WHERE id = 41 AND ts between 1577714400000 AND 1579443698588 DELETE FROM ts_number WHERE id = 237 AND ts = 1572562740126 DELETE FROM ts_number WHERE id in (66,67,68,69) DELETE FROM datapoints WHERE id in (66,67,68,69) DELETE FROM ts_number WHERE id = 41 DELETE FROM datapoints WHERE id = 41 SELECT COUNT(*) FROM ts_number WHERE id = 228 UPDATE iobroker.ts_number SET val = val / 1000 WHERE id = 63 UPDATE iobroker.ts_number SET val = round(val,2) WHERE id = 63 UPDATE iobroker.ts_number SET id = 262 WHERE id = 242 */ SELECT year(x1.datum) AS jahr ,month(x1.datum) AS monat ,round(SUM(x1.wert),2) AS summe_in_kWh FROM ( select x1.id as id ,x2.name as object ,from_unixtime(floor(ts/1000)) as datum ,ts as 'unixtime' ,val as wert from ts_number x1 join datapoints x2 on x1.id = x2.id where x1.id IN (237) -- and year(from_unixtime(floor(ts/1000))) = 2019 order by from_unixtime(floor(ts/1000)) DESC ) x1 GROUP BY year(x1.datum),month(x1.datum) ORDER BY year(x1.datum),month(x1.datum)
Edit: Die {1} ignorieren, hier hat die Forensoftware ein Eigenleben im Code-Tag entwickelt ...
-
Danke für die Rückmeldung, ich gucke mir das mal an.