MiguelAngelLV / balance_neto

Componente para Home Assistant que calcula el Balance Neto Horario para instalaciones fotovoltáicas.
34 stars 5 forks source link

Base de datos #15

Closed indicaprichos closed 4 months ago

indicaprichos commented 4 months ago

Buenas tardes: Se que no es una issue pero por mucho que busco información no se como hacerlo. Tengo muchísimos datos y no me gustaría perderlos al poner el balance neto. Uso Mariadb e influxdb con HA. ¿Como hay que hacer esa copia de datos a los nuevos sensores?

Muchas gracias

MiguelAngelLV commented 4 months ago

La forma más sencil... menos complicada, ir a mariadb, localizar en staticstis_meta el sensor original y el nuevo, apuntar sus IDs.

Después buscas en statitics el primer registro con el ID nuevo y apuntas su fecha.

update statistics set metadata_id = NUEVO_ID where metadata_id = ANTIGUO_ID and start < FECHA_PRIMERO

De esta forma, todos los antiguos pasarán a estar en el nuevo.

Después, verás que en el momento de cambio de uno habrá un salto enorme o alguna cosa rara, simplemente desde el editor de estadísticas del propio HA ve a la fecha y lo corriges.

Tendrás que hacer esto con todos los sensores... Es un poco (muy) coñazo, pero por ahora es lo que hay.

indicaprichos commented 4 months ago

La forma más sencil... menos complicada, ir a mariadb, localizar en staticstis_meta el sensor original y el nuevo, apuntar sus IDs.

Después buscas en statitics el primer registro con el ID nuevo y apuntas su fecha.

update statistics set metadata_id = NUEVO_ID where metadata_id = ANTIGUO_ID and start < FECHA_PRIMERO

De esta forma, todos los antiguos pasarán a estar en el nuevo.

Después, verás que en el momento de cambio de uno habrá un salto enorme o alguna cosa rara, simplemente desde el editor de estadísticas del propio HA ve a la fecha y lo corriges.

Tendrás que hacer esto con todos los sensores... Es un poco (muy) coñazo, pero por ahora es lo que hay.

He tenido que modificarlo para que funcionara en mi mariadb

UPDATE `statistics` SET `metadata_id`='NUEVO_ID' WHERE `metadata_id`='ANTIGUO_ID' AND `start_ts` < FECHA_PRIMERO;

Con esto lo que haces es intercambiar las IDs y en el sensor antiguo pierdes todos los datos.

he utilizado esto para insertar todos los datos sin perder los del antiguo

INSERT INTO `statistics` (column1, column2, ..., `metadata_id`)
SELECT column1, column2, ..., 'ANTIGUO_ID'
FROM `statistics`
WHERE `metadata_id` = 'NUEVO_ID' AND `start_ts` < FECHA_PRIMERO;

column1, column2 hay que poner las columnas que hay en stadistics, yo puse estas created_ts, start_ts, state, sum,

Por si le sirve a alguien mas que venga despues.