Este proyecto permite leer información de la bomba de calor Panasonic Aquarea e informar los datos a un servidor MQTT o en formato JSON a través de HTTP.
Eine deutschsprachige README_DE.md se encuentra aquí.
Een nederlandse vertaling README_NL.md vind je hier.
Suomen kielellä README_FI.md luettavissa täällä.
Se agradece la ayuda con la traducción a otros idiomas.
La última versión está disponible aquí. El binario compilado ESP8266 se puede instalar en un Wemos D1 mini, en la PCB HeishaMon y, en general, en cualquier placa basada en ESP8266 compatible con la configuración de compilación de Wemos (al menos 4 MB de flash). También puede descargar el código y compilarlo usted mismo (consulte las bibliotecas requeridas a continuación). El binario ESP32-S3 es para la versión más nueva y grande de heishamon.
HeishaMon puede comunicarse con Panasonic Aquarea series H, J, K y L&. Los tipos de HP confirmados por los usuarios se pueden encontrar aquí.
Si desea compilar esta imagen usted mismo, asegúrese de utilizar las bibliotecas mencionadas y la compatibilidad con un sistema de archivos en el esp8266, así que seleccione la opción flash correcta en arduino ide para eso.
Al iniciar, sin un wifi configurado, se verá un punto de acceso wifi abierto que le permitirá configurar su red wifi y su servidor MQTT. La página de configuración estará ubicada en http://192.168.4.1.
Después de configurar y arrancar, la imagen podrá leer y hablar con su bomba de calor. La conexión GPIO13/GPIO15 se utilizará para las comunicaciones, por lo que puede mantener su computadora/cargador conectado a la placa si lo desea.
La serie 1 (GPIO2) se puede utilizar para conectar otra línea serie (GND y TX desde la placa únicamente) para leer algunos datos de depuración.
Todos los datos recibidos se enviarán a diferentes temas MQTT (consulte las descripciones de los temas a continuación). También hay un tema MQTT 'panasonic_heat_pump/log' que proporciona un registro de depuración y un volcado hexadecimal de los paquetes recibidos (si está habilitado en el portal web).
Puede conectar una red de 1 cable en GPIO4 que informará en temas MQTT separados (panasonic_heat_pump/1wire/sensorid).
El software también puede medir vatios en un puerto S0 de dos medidores de kWh. Sólo necesitas conectar GPIO12 y GND al S0 de un medidor de kWh y si necesitas un segundo medidor de kWh usa GPIO14 y GND. Informará sobre el tema MQTT panasonic_heat_pump/s0/Watt/1 y panasonic_heat_pump/s0/Watt/2 y también en la salida JSON. Puede reemplazar 'Watt' en el tema anterior con 'Watthour' para obtener el contador de consumo en WattHour (por mensaje mqtt) o 'WatthourTotal' para obtener el consumo total medido en WattHour. Para sincronizar WatthourTotal con su medidor de kWh, publique el valor correcto en MQTT en el tema panasonic_heat_pump/s0/WatthourTotal/1 o panasonic_heat_pump/s0/WatthourTotal/2 con la opción 'retener' mientras heishamon se reinicia. Al reiniciar, heishamon lee este valor como el último valor conocido que puede sincronizar utilizando este método.
Actualizar el firmware es tan fácil como ir al menú de firmware y, después de la autenticación con el nombre de usuario 'admin' y la contraseña 'heisha' (u otra proporcionada durante la configuración), cargar el binario allí.
Una salida json de todos los datos recibidos (bomba de calor y 1wire) está disponible en la URL http://heishamon.local/json (reemplace heishamon.local con la dirección IP de su dispositivo heishamon si MDNS no funciona para usted).
Dentro de la carpeta 'integraciones' puede encontrar ejemplos de cómo conectar su plataforma de automatización a HeishaMon.
La funcionalidad de reglas le permite controlar la bomba de calor desde el propio HeishaMon. Lo que lo hace mucho más confiable que tener que lidiar con domótica externa a través de WiFi. Cuando se publica un nuevo conjunto de reglas, se valida inmediatamente y, cuando es válido, se utiliza. Cuando un nuevo conjunto de reglas no es válido, se ignorará y el antiguo conjunto de reglas se cargará nuevamente. Puede consultar la consola para obtener comentarios sobre esto. Si de alguna manera un nuevo conjunto de reglas válido bloquea HeishaMon, se desactivará automáticamente en el próximo reinicio, lo que le permitirá realizar cambios. Esto evita que HeishaMon entre en un bucle de arranque.
Las técnicas utilizadas en la biblioteca de reglas le permiten trabajar con conjuntos de reglas muy grandes, pero la mejor práctica es mantenerlos por debajo de 10.000 bytes.
Tenga en cuenta que el envío de comandos a la bomba de calor se realiza de forma asincrónica. Por lo tanto, los comandos enviados a la bomba de calor al comienzo de su sintaxis no se reflejarán inmediatamente en los valores de la bomba de calor más adelante. Por lo tanto, los valores de la bomba de calor deben leerse desde la propia bomba de calor en lugar de aquellos basados en los valores que usted mismo mantiene.
Dos reglas generales son que los espacios son obligatorios y el punto y coma se utilizan como carácter de fin de línea.
El conjunto de reglas utiliza la siguiente estructura de variables:
#
: Globales Se puede acceder a estas variables a través del conjunto de reglas, pero deben definirse dentro de un bloque de reglas. No use globales para todas sus variables, porque usará memoria de manera persistente.
$
: Locales Estas variables viven dentro de un bloque de reglas. Cuando finaliza un bloque de reglas, estas variables se limpiarán, liberando la memoria utilizada.
@
: Parámetros de la bomba de calor Estos son los mismos que se enumeran en la página de documentación Administrar temas y que se encuentran en la página de inicio de HeishaMon. El conjunto de reglas también sigue la lógica R/W utilizada a través de MQTT y REST API. Eso significa que los temas de lectura difieren de los temas de escritura. Entonces, la lectura del estado de la bomba de calor se realiza a través de @Heatpump_State
y el cambio del estado de la bomba de calor a través de @SetHeatpump
.
%
: variables de fecha y hora. Se pueden utilizar para reglas basadas en fecha y hora. Actualmente se admiten %hour
(0 - 23), %minute
(0 - 59), %month
(1 - 12) y day
(1 - 7). Todos son números enteros simples. Se necesita una configuración NTP adecuada para establecer la fecha y hora correctas del sistema en HeishaMon.
?
: Parámetros del termostato Estas variables reflejan los parámetros leídos del termostato conectado cuando se utiliza la funcionalidad OpenTherm. Cuando OpenTherm sea compatible, esta documentación se ampliará con información más precisa. Pueden consultar la pestaña opentherm para conocer las variables que se pueden utilizar. Los nombres son los mismos para lectura y escritura, pero no todos los valores admiten lectura y/o escritura. La pestaña opentherm también enumera esto.
ds18b20#2800000000000000
: Valores de temperatura de 1 cable de Dallas Utilice estas variables para leer la temperatura de los sensores conectados. Por supuesto, estos valores son de solo lectura. La identificación del sensor debe colocarse después del hashtag.
Cuando se llama a una variable pero aún no se le ha asignado un valor, el valor será NULL
.
Las variables pueden ser de tipo booleano ( 1
o 0
), flotante ( 3.14
), entera ( 10
) y cadena. La definición de cadenas se realiza con comillas simples o dobles.
Las reglas están escritas en bloques event
o function
. Estos son bloqueos que se activan cuando algo sucedió; Se ha recibido un nuevo valor de la bomba de calor o del termostato o se ha activado un temporizador. O puede usarse como funciones simples
on [event] then [...] end on [name] then [...] end
Los eventos pueden ser parámetros o temporizadores de la bomba de calor o del termostato:
on @Heatpump_State then [...] end on ?setpoint then [...] end on timer=1 then [...] end
Al definir funciones, simplemente nombra tu bloque y luego puedes llamarlo desde cualquier otro lugar:
on foobar then [...] end on @Heatpump_State then foobar(); end
Las funciones pueden tener parámetros a los que puedes llamar:
on foobar($a, $b, $c) then [...] on @Heatpump_State then foobar(1, 2, 3); end
Si llama a una función con menos valores de los que toma la función, todos los demás parámetros tendrán un valor NULL.
Actualmente existe una función especial que llama cuando se inicia el sistema cuando se guarda un nuevo conjunto de reglas:
on System#Boot then [...] end
Esta función especial se puede utilizar para configurar inicialmente sus valores globales o ciertos temporizadores.
Los operadores regulares son compatibles con su asociatividad y precedencia estándar. Esto le permite también utilizar matemáticas regulares.
&&
: Y
||
: O
==
: Igual`
>=
: Mayor o igual que entonces
>
: Mayor entonces
<
: Menor entonces
<=
: Menor o igual entonces
-
: Menos
%
: Módulo
*
: Multiplicar
/
: Dividir
+
: Más
^
: Poder
Los paréntesis se pueden utilizar para priorizar operadores como funcionaría en matemáticas normales.
coalesce
Devuelve el primer valor no NULL
. Por ejemplo, $b = NULL; $a = coalesce($b, 1);
devolverá 1. Esta función acepta un número ilimitado de argumentos.
max
Devuelve el valor máximo de los parámetros de entrada.
min
Devuelve el valor mínimo de los parámetros de entrada.
isset
Devuelve booleano verdadero cuando la variable de entrada sigue siendo NULL
en cualquier otro caso, devolverá falso.
round
Redondea el valor flotante de entrada al entero más cercano.
floor
El valor entero más grande menor o igual que el valor flotante de entrada.
ceil
El valor entero más pequeño mayor o igual que el valor flotante de entrada.
setTimer
Establece un temporizador para que se active en X segundos. El primer parámetro es el número del temporizador y el segundo parámetro el número de segundos antes de que se dispare. Un temporizador solo se activa una vez, por lo que debe restablecerse para eventos recurrentes. Cuando se activa un temporizador, se activará el evento del temporizador como se describe anteriormente. P.ej
print
Imprime un valor en la consola.
concat
Concatena varios valores en una cadena combinada. Por ejemplo: @SetCurves = concat('{zone1:{heat:{target:{high:', @Z1_Heat_Curve_Target_High_Temp, ',low:32}}}}');
on System#Boot then setTimer(3, 60); end on timer=3 then [...] setTimer(3, 60); end
Las únicas condiciones admitidas son if
, else
y elseif
:
if [condition] then [...] else if [condition] then [...] end end
if [condition] then [...] elseif [condition] then if [condition] then [...] else [...] end elseif [condition] then [...] else [...] end
Una vez que el sistema de reglas sea utilizado por más y más usuarios, se agregarán ejemplos adicionales a la documentación.
Calculando la GUERRA
on calcWar($Ta1, $Tb1, $Ta2, $Tb2) then #maxTa = $Ta1; if @Outside_Temp >= $Tb1 then #maxTa = $Ta1; elseif @Outside_Temp <= $Tb2 then #maxTa = $Ta2; else #maxTa = $Ta1 + (($Tb1 - @Outside_Temp) * ($Ta2 - $Ta1) / ($Tb1 - $Tb2)); end end
Punto de ajuste del termostato
on ?roomTemp then calcWar(32, 14, 41, -4); $margin = 0.25; if ?roomTemp > (?roomTempSet + $margin) then if @Heatpump_State == 1 then @SetHeatpump = 0; end elseif ?roomTemp < (?roomTempSet - $margin) then if @Heatpump_State == 0 then @SetHeatpump = 1; end else @SetZ1HeatRequestTemperature = round(#maxTa); end end
Se puede realizar un restablecimiento de fábrica en la interfaz web, pero si la interfaz web no está disponible, puede realizar un restablecimiento doble. El doble reinicio no debe realizarse ni demasiado rápido ni demasiado lento. Por lo general, medio segundo entre ambos reinicios debería ser suficiente. Para indicar que el doble restablecimiento realizó un restablecimiento de fábrica, el LED azul parpadeará rápidamente (debe presionar restablecer nuevamente ahora para reiniciar HeishaMon a la normalidad, donde un punto de acceso WiFi debería volver a ser visible).
A continuación puede encontrar algunos detalles técnicos sobre el proyecto. Cómo construir tus propios cables. Cómo construir tu propia PCB, etc.
La comunicación se puede establecer a través de uno de los dos sockets: CN-CNT o CN-NMODE. Si tiene una interfaz WiFi Panasonic CZ-TAW1 existente que desea reemplazar con HeishaMon, solo es cuestión de desconectar el cable del CZ-TAW1 y volver a conectarlo a su dispositivo HeishaMon. Sin embargo, no es posible utilizar HeishaMon y el módulo CZ-TAW1 original juntos como dispositivo activo. Sin embargo, es posible poner HeishaMon en modo "Sólo escucha", lo que permitirá que HeishaMon y el módulo CZ-TAW1 original coexistan. El único inconveniente de esto es que HeishaMon no puede enviar comandos ni utilizar la opción de PCB opcional.
Parámetros de comunicación: TTL 5V UART 9600,8,E,1
Distribución de pines CN-CNT (de arriba a abajo)
1 - +5V (250mA)
2 - 0-5V TX (de la bomba de calor)
3 - 0-5V RX (a bomba de calor)
4 - +12V (250mA)
5 - TIERRA
Distribución de pines CN-NMODE (de izquierda a derecha)
"¡Advertencia! Tal como está impreso en la PCB, el pin izquierdo es el pin 4 y el pin derecho es el pin 1. ¡No cuente del 1 al 4 desde la izquierda!
4 - +5V (250mA)
3 - 0-5V TX (de la bomba de calor)
2 - 0-5V RX (a bomba de calor)
1 - TIERRA
HeishaMon recibirá energía de Panasonic a través del cable (alimentación de 5v).
Es posible conectar el HeishaMon a larga distancia. Hasta 5 metros funcionan con cableado normal. Para distancias más largas, es posible una configuración de TTL a RS485 como se muestra en la imagen a continuación. Sin embargo, requiere que HeishaMon reciba alimentación externa con alimentación de 5 V (por ejemplo, desde un cable USB).
Pedidos RS-Online
órdenes de conrado
Utilice algún cable de 4 conductores blindado 24 AWG.
Los PCB necesarios para conectarse a la bomba de calor están diseñados por los miembros del proyecto y se enumeran a continuación. La parte más importante del hardware es un cambio de nivel entre 5v de Panasonic a 3.3v de HeishaMon y una línea de habilitación GPIO13/GPIO15 después del arranque.
Diseños PCD de los miembros del proyecto.
Imagen Wemos D1 beta
Imagen ESP12-F
Para facilitar las cosas, puede solicitar una PCB completa a algunos miembros del proyecto:
Tienda Tindie de Igor Ybema (también conocido como TheHogNL) con sede en los Países Bajos.
tableros:
esp8266 por la comunidad esp8266 versión 3.0.2 Arduino
Todas las bibliotecas que utilizamos son necesarias para compilar.
La lista actual de temas MQTT documentados se puede encontrar aquí
El software también admite la lectura de sensores de temperatura de 1 cable ds18b20. Se leerá una configuración adecuada de 1 cable (con resistencia pull-up de 4,7 kohm) conectada a GPIO4 cada segundo configurado (mínimo 5) y se enviará al tema panasonic_heat_pump/1wire/"sensor-hex-address". En las placas prefabricadas ya está instalada esta resistencia de 4,7 kohm.
El heishamon más nuevo y grande contiene dos relés integrados que se pueden encender y apagar mediante comandos MQTT. Los relés se pueden utilizar para cualquier conmutación de contactos, incluso para redes de 230 V (máx. 5 A). Por ejemplo, para activar los contactos de 230 V de la bomba de calor para controlar el "termostato externo", encender o apagar una bomba u otros dispositivos de menor potencia. No recomiendo utilizar el relé como interruptor para un calentador eléctrico ya que consume demasiada energía. Para controlar el relé simplemente envíe un valor de 1 o 0 al tema MQTT "panasonic_heat_pump/gpio/relay/one" para el relé uno o "panasonic_heat_pump/gpio/relay/two" para el relé dos.
Si su placa heishamon es compatible con opentherm, el software también se puede utilizar para conectar la información de opentherm desde un termostato compatible con la automatización de su hogar a través de MQTT o JSON y, como se mencionó anteriormente, también se puede conectar directamente en las reglas para conectar la información de opentherm a la bomba de calor y viceversa. , por ejemplo para mostrar la temperatura exterior de la bomba de calor en su termostato opentherm. Si habilita la compatibilidad con opentherm en la configuración, habrá una nueva pestaña visible en la página web. En esa pestaña verá los valores de opentherm. Algunos son de tipo R(ead) y otros son W(rite), y algunos son ambos. Leer significa que el termostato puede leer esa información del heishamon. Usted proporciona esa información a través de MQTT (o usando las reglas) actualizando este valor en el tema 'opentherm/read' de mqtt, por ejemplo, 'panasonic_heat_pump/opentherm/read/outsideTemp'. Los valores de escritura son información del termostato, como 'roomTemp'. Estos están disponibles en el tema 'opentherm/write' de mqtt. Puede usar estos valores para cambiar el comportamiento de la bomba de calor de la forma que desee usando la automatización del hogar y los comandos mqtt set para controlar el uso de las reglas internas.
Las variables opentherm disponibles son:
chEnable, que es un valor booleano que muestra si se debe habilitar la calefacción central. Esto se usa a menudo cuando el termostato quiere calentar su casa.
dhwEnable que es un booleano que muestra si se debe habilitar la calefacción de ACS. A menudo se utiliza como opción de usuario en el termostato para desactivar la calefacción de ACS durante las vacaciones.
CoolingEnable, que es un valor booleano que muestra si se debe habilitar el enfriamiento. La cantidad de enfriamiento se solicita en 'coolingControl', consulte a continuación.
roomTemp es el valor de coma flotante de la temperatura ambiente medida por el termostato
roomTempSet es el valor de coma flotante del punto de ajuste de temperatura ambiente solicitado en el termostato
chSetpoint es el valor en coma flotante del punto de ajuste de agua calculado por el termostato. Los termostatos Opentherm intentan configurar este chSetpoint para no sobrepasar el setpoint de la habitación. Podría usarse para establecer el punto de ajuste del agua en la bomba de calor, pero la mayoría de los termostatos responden demasiado rápido en comparación con el funcionamiento de las bombas de calor.
maxRelativeModulation es la cantidad de modulación (0-100%) que la bomba de calor (esclava opentherm) puede usar (consulte la modulación relativa en los valores READ, que siempre debe ser igual o inferior a este máximo).
CoolingControl es la cantidad de enfriamiento (0-100%) que el termostato solicita a la bomba de calor. Requiere un termostato opentherm con soporte de refrigeración.
dhwSetpoint es el valor de punto flotante que es el punto de ajuste actual de ACS por termostato, pero también puede ser configurado por heishamon para anularlo. Sin embargo, no todos los termostatos admiten esto. No debe establecerse en un valor superior a dhwSetUppBound, consulte a continuación.
maxTSet es el valor de punto flotante que define el punto de ajuste máximo del agua. El usuario puede configurar esto en el termostato o también desde heishamon. No debe establecerse en un valor superior a chSetUppBound, ver más abajo.
chPressure es el valor de coma flotante que define la presión medida del agua de la calefacción central proporcionada por heishamon
outsideTemp es el valor de coma flotante que define la temperatura exterior medida de la calefacción central proporcionada por heishamon
inletTemp es el valor de coma flotante que define la temperatura medida de entrada del agua de la calefacción central proporcionada por heishamon
outletTemp es el valor de coma flotante que define la temperatura medida de salida del agua de la calefacción central proporcionada por heishamon
dhwTemp es el valor de coma flotante que define la temperatura medida del agua caliente sanitaria de la calefacción central proporcionada por heishamon
La modulación relativa es la cantidad (0-100 %) de modulación en la que la bomba de calor (esclava opentherm) está funcionando actualmente; siempre debe ser menor o igual que la modulación relativa máxima establecida por el termostato.
flameState es un valor booleano (envíe 'verdadero', 'encendido' o '1' para habilitar) que define si la calefacción central está proporcionando calor central.
chState es un valor booleano (envíe 'true', 'on' o '1' para habilitar) que define si la bomba de calor está en modo habitación/calefacción central (por ejemplo, válvula de 3 vías en habitación, en modo calefacción)
dhwState es un valor booleano (envíe 'true', 'on' o '1' para habilitar) que define si la bomba de calor está en modo ACS (por ejemplo, válvula de 3 vías en ACS)
CoolingState es un valor booleano (envíe 'verdadero', 'encendido' o '1' para habilitar) que define si la bomba de calor está en modo de refrigeración ambiental/central (por ejemplo, válvula de 3 vías en la habitación, en modo de refrigeración).
dhwSetUppBound es un valor entero de 0 a 127 que establece la temperatura máxima de ACS admitida para que el termostato no pueda solicitar un dhwSetpoint superior a este. El valor predeterminado está configurado en 75. Para anularlo, envíe un mensaje MQTT a este tema y consérvelo para que heishamon lo reciba nuevamente después del reinicio.
dhwSetLowBound es un valor entero de 0 a 127 que establece la temperatura mínima de ACS admitida para que el termostato no pueda solicitar un dhwSetpoint inferior a este. El valor predeterminado está configurado en 40. Para anularlo, envíe un mensaje MQTT a este tema y reténgalo para que heishamon lo reciba nuevamente después del reinicio.
chSetUppBound es un valor entero de 0 a 127 que establece la temperatura máxima de CH (agua de calefacción) admitida para que el termostato no pueda solicitar un chSetpoint superior a este. El valor predeterminado está configurado en 65. Para anularlo, envíe un mensaje MQTT a este tema y consérvelo para que heishamon lo reciba nuevamente después del reinicio.
chSetLowBound es un valor entero de 0 a 127 que establece la temperatura mínima de CH (agua de calefacción) admitida para que el termostato no pueda solicitar un chSetpoint inferior a este. El valor predeterminado está configurado en 20. Para anularlo, envíe un mensaje MQTT a este tema y consérvelo para que heishamon lo reciba nuevamente después del reinicio.
La lista actual de bytes documentados descifrados se puede encontrar aquí
Openhab2
Asistente de hogar
Manual de IOBroker
Domótica