Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

State attributes exceed maximum size of 16384 bytes #61

Closed
jnxxx opened this issue Dec 13, 2023 · 3 comments
Closed

State attributes exceed maximum size of 16384 bytes #61

jnxxx opened this issue Dec 13, 2023 · 3 comments

Comments

@jnxxx
Copy link

jnxxx commented Dec 13, 2023

Siden midten af november har jeg haft nogle problemer med denne integration.
Ved opstart skriver den i loggen:

2023-12-11 15:42:14.194 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_temperature_forward exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.195 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_temperature_return exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.196 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_temperature_exp_return exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.196 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_temperature_cooling exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.197 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_start exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.198 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_end exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.198 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_used exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.199 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_exp_used exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.199 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_exp_end exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.201 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_start exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.202 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_end exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.202 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_used exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.203 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_exp_used exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:14.204 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_exp_end exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.453 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_temperature_forward exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.454 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_temperature_return exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.455 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_temperature_exp_return exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.456 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_temperature_cooling exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.461 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_start exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.462 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_end exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.463 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_used exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.464 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_exp_used exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.466 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_energy_exp_end exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.468 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_start exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.469 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_end exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.476 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_used exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.477 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_exp_used exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored
2023-12-11 15:42:15.478 WARNING (Recorder) [homeassistant.components.recorder.db_schema] State attributes for sensor.eforsyning_water_exp_end exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored

Jeg anvender både state med mini-graph-card, attributter med apexcharts-card, samt long-term statistics med standard cards.
Long-term statistics blev i denne periode ikke opdateret mens mini-graph-card stadig gjorde.

Problemet er utvivlsomt det lange array, "data", der indsættes som attribut, og indeholder en måling pr. dag i indeværende år.
Sidst på året bliver det så for stort.
I filen sensor.py, linie Linie 161 har jeg eksperimenteret med flg.:

    self._attrs["data"].append({
        "date" : data_point["DateTo"].split('T')[0],
        "value" : data_point[self.entity_description.attribute_data],
    })

Det bevirker at data array kommer til at se således ud:

data: 
- date: '2023-01-01'
  value: 19385
- date: '2023-01-02'
  value: 19404
- date: '2023-01-03'
  value: 19445
- date: '2023-01-04'
  value: 19473
- date: '2023-01-05'
  value: 19517
  ...

Altså droppes tidsstempel, som blot sagde kl. 0:00 UTC hver dag. Og dermed lidt spild af plads, når nu der er en begrænsning.

Det løser problemet og i hvert fald de grafer jeg anvender fungerer uændret.

@kpoppel
Copy link
Owner

kpoppel commented Dec 13, 2023

Godt input. Det får jeg lige set på.

@kpoppel
Copy link
Owner

kpoppel commented Jun 9, 2024

Jeg har set lidt mere på de her attributter, sådan helt generelt. Der er et par muligheder, da sensorerne også fungerer med "statistics" nu. Og hvis man mangler historikken, kan den opdateres med denne service: https://github.com/klausj1/homeassistant-statistics

Generelt er grafer dannet med data fra attibutterne bare rigtig hurtige, da databasen ikke skal kontaktes.

Så jeg overvejer nu følgende:

  1. Fjerne disse attributter helt - statistics-modulet løser opgaven
  2. Fjerne attributterne på de eksisterende sensorer, men lave en service i stil med den fra weather.get_forecasts som man så kan oprette en template-sensor på hvis man stadig vil bruge dem.
  3. Gøre som foreslået herover og korte ned på datoformatet

Mulighed 1 fjerner problemet med en attributliste, der bare bliver længere og længere. Dokumentationen skal jeg måske have opdateret så Apexchart-eksemplerne bruger statistics i stedet. Ingen nuværende opsætninger vil fortsætte med at fungere rundt omkring. Alle skal opdatere enten apexchart YAML eller gå over til at bruge statistcs card.

Mulighed 2 fjerner også problemet for de, der ikke laver grafer med årets forbrug, eller kun bruger en enkelt eller to af dem. Og hvis man opretter en template-sensor, er det relativt nemt at føre alt videre som det var med en ny sensor, hvis man ikke vil skifte til statistics-data. Alle skal opdatere enten apexchart YAML eller gå over til at bruge statistcs card. Det er en væsentligt større opgave, men eliminerer voksende attributter totalt, og giver en migrationsvej og fortsat adgang til årets løbende data hvis nogle bruger dem til noget andet.

Mulighed 3 er den delvise løsning - attributter forbliver, men vokser (og developer tools bliver stadig langsommere med tilstanddata hen gennem året). Men alt fungerer som det plejer formentlig.

Jeg tænker at release mulighed 3 som det første, men egentlig blot fjerne attributterne helt med tiden, da data findes i statistik-modulet (incl. mere historie!) allerede.

Noter:
Apexchart 'statistics': https://github.com/RomRider/apexcharts-card?tab=readme-ov-file#statistics-options
Statistics card vs. Apexchart 'statistics' (de viser det samme):
image

@kpoppel
Copy link
Owner

kpoppel commented Jun 9, 2024

Release v1.2.7 med mulighed 3 er lagt ud.

@kpoppel kpoppel closed this as completed Sep 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants