pablozg / freeds

Derivador de energía solar excedente
GNU General Public License v3.0
99 stars 35 forks source link

Valores erróneos de carga calculada #83

Closed IvanSanchez closed 1 year ago

IvanSanchez commented 1 year ago

Estoy probando cosas con mi integración experimental de homeassistant. Al ver el histórico de los datos de FreeDS hay algunas cosas que no me terminan de cuadrar.

Por lo que tengo entendido, el valor de carga excedente calculada (que internamente es el campo loadCalcWatts en el JSON de eventos) es únicamente el porcentaje de PWM por el valor configurado de la carga resistiva conectada. Entiendo que esto es un valor ideal, pero me preocupan un par de casos en particular.

En la instalación que estoy probando tenemos conectado un calentador de agua de 1500W 1450W con termostato. Cuando se calienta lo suficiente, se corta el circuito y la carga resistiva baja a cero, pero FreeDS informa de que la carga es la máxima (1450W), como se puede ver en esta gráfica:

image

(Los dos tramos en los que se inyectan a red ~1300W es cuando el termostato del calentador está cortando el circuito).

Por lo que entiendo del código de FreeDS (aunque C++ no es mi fuerte), el valor de PWM se acota entre 0% y 100% en algún momento. Pero si el valor original de PWM (antes de acotarlo) es mucho mayor que 100%, entonces podríamos deducir que la carga resistiva efectiva es menor que la configurada.

El caso: si pudiéramos tener acceso a ese PWM sin acotar, y ponerlo en gráficas y ver cómo se comporta, es posible que seamos capaces de poder estimar la carga efectiva (y, por tanto, la potencia excedente).

El segundo caso que me preocupa es el que la suma wsolar + wgrid - loadCalcWatts sea menor que cero. Esto sucede cuando la producción solar es menor que la carga conectada, y la carga conectada es menor que la configurada (es decir, que te han vendido un calentador de 1500W pero en realidad eso gasta 1400W). Teóricamente sería posible detectar este escenario e informar al usuario.

Es decir, me gustaría poder tener una métrica de la potencia excedente efectiva estimada, además de la potencia excedente teórica u objetivo. Y creo que tener el valor de PWM sin acotar sería un buen primer paso. Como estoy usando el JSON de http://ip-de-mi-freeds/events, pues voy a pedir amablemente que ese valor se añada ahí.

pablozg commented 1 year ago

En la instalación que estoy probando tenemos conectado un calentador de agua de ~1500W~ 1450W con termostato. Cuando se calienta lo suficiente, se corta el circuito y la carga resistiva baja a cero, pero FreeDS informa de que la carga es la máxima (1450W), como se puede ver en esta gráfica:

Si no quieres que te marque el máximo cuando el termo esté caliente tienes la opción de añadir una pinza amperimetrica y el consumo será más real una vez calibrada, pero aún así tendrá errores en la parte media de la medición, ya que no podemos medir la tensión efectiva en ese momento, por lo que se calcula con la constante de 230V.

Por lo que entiendo del código de FreeDS (aunque C++ no es mi fuerte), el valor de PWM se acota entre 0% y 100% en algún momento. Pero si el valor original de PWM (antes de acotarlo) es mucho mayor que 100%, entonces podríamos deducir que la carga resistiva efectiva es menor que la configurada.

No se acota de ninguna forma, los valores de salida del pwm debido a la resolución que tiene es de 0 - 1023, por lo que unicamente se calcula su correspondiente a 0 - 100, por lo tanto nunca vas a tener valores por encima ni por abajo.

El segundo caso que me preocupa es el que la suma wsolar + wgrid - loadCalcWatts sea menor que cero. Esto sucede cuando la producción solar es menor que la carga conectada, y la carga conectada es menor que la configurada (es decir, que te han vendido un calentador de 1500W pero en realidad eso gasta 1400W). Teóricamente sería posible detectar este escenario e informar al usuario.

En ningún caso se usa el valor de loadCalcWatts para calcular el consumo de la instación, el consumo se calcula como potencia solar (inversor) + potencia baterias - potencia de red, ese valor es el que se muestra.

Es decir, me gustaría poder tener una métrica de la potencia excedente efectiva estimada, además de la potencia excedente teórica u objetivo. Y creo que tener el valor de PWM sin acotar sería un buen primer paso. Como estoy usando el JSON de http://ip-de-mi-freeds/events, pues voy a pedir amablemente que ese valor se añada ahí.

Te estás basando en una versión sin soporte, la única versión a la que doy soporte es a la última beta publicada, en este caso la beta 15, aunque en breve sacaré la 16, en las betas se usa websockets para enviar los datos, y no eventos en como en la 1.0.7 rev 2.

IvanSanchez commented 1 year ago

tienes la opción de añadir una pinza amperimetrica [...] los valores de salida del pwm debido a la resolución que tiene es de 0 - 1023, por lo que unicamente se calcula su correspondiente a 0 - 100

Vale, no era consciente de que se podía añadir una pinza, ni de que el valor de PWM es leído en vez de calculado. Los valores tienen sentido ahora que sé de dónde salen.

Sigo teniendo curiosidad por saber si se puede estimar el valor a partir del resto. Supongo que lo intentaré en un futuro, si puedo tener una medición de consumo (a golpe de meter otro shelly más) para ver cómo se comporta en relación al resto de mediciones.

Te estás basando en una versión sin soporte, [...] en las betas se usa websockets para enviar los datos, y no eventos en como en la 1.0.7 rev 2.

Lo tendré en cuenta para hacer mis cosas de frontend y home assistant. No me preocupa mucho, porque tanto SSE como websockets me dan una secuencia de JSON, y supongo que tanto el JSON de eventos (de 1.0.7) como el JSON de websockets (de 1.1.0-beta16) tendrán la misma estructura.