Ce projet permet de lire les informations de la pompe à chaleur Panasonic Aquarea et de rapporter les données soit à un serveur MQTT, soit au format JSON via HTTP.
Un fichier README_DE.md allemand est trouvé ici.
Une version néerlandaise de README_NL.md vous apparaît ici.
Suomen kielellä README_FI.md luettavissa täällä.
L'aide sur la traduction vers d'autres langues est la bienvenue.
La dernière version est disponible ici. Le binaire compilé ESP8266 peut être installé sur un Wemos D1 mini, sur le PCB HeishaMon et généralement sur n'importe quelle carte basée sur ESP8266 compatible avec les paramètres de construction Wemos (au moins 4 Mo de flash). Vous pouvez également télécharger le code et le compiler vous-même (voir les bibliothèques requises ci-dessous). Le binaire ESP32-S3 est destiné à la version la plus récente et la plus volumineuse de heishamon.
HeishaMon est capable de communiquer avec les séries Panasonic Aquarea H, J, K et L&. Confirmés par les utilisateurs, les types de HP que vous pouvez trouver ici
Si vous souhaitez compiler cette image vous-même, assurez-vous d'utiliser les bibliothèques mentionnées et la prise en charge d'un système de fichiers sur l'esp8266, alors sélectionnez l'option flash correcte dans l'ide arduino pour cela.
Au démarrage, sans wifi configuré, un open-wifi-hotspot sera visible vous permettant de configurer votre réseau wifi et votre serveur MQTT. La page de configuration sera située à l'adresse http://192.168.4.1.
Après avoir configuré et démarré, l'image pourra lire et communiquer avec votre pompe à chaleur. La connexion GPIO13/GPIO15 sera utilisée pour les communications afin que vous puissiez garder votre ordinateur/téléchargeur connecté à la carte si vous le souhaitez.
La série 1 (GPIO2) peut être utilisée pour connecter une autre ligne série (GND et TX de la carte uniquement) afin de lire certaines données de débogage.
Toutes les données reçues seront envoyées à différents sujets MQTT (voir ci-dessous pour les descriptions des sujets). Il existe également un sujet MQTT « panasonic_heat_pump/log » qui fournit une journalisation de débogage et un vidage hexadécimal des paquets reçus (si activé dans le portail Web).
Vous pouvez connecter un réseau 1wire sur GPIO4 qui fera rapport dans des sujets MQTT séparés (panasonic_heat_pump/1wire/sensorid).
Le logiciel est également capable de mesurer le Watt sur un port S0 de deux compteurs kWh. Il vous suffit de connecter GPIO12 et GND au S0 d'un compteur kWh et si vous avez besoin d'un deuxième compteur kWh, utilisez GPIO14 et GND. Il fera rapport sur le sujet MQTT panasonic_heat_pump/s0/Watt/1 et panasonic_heat_pump/s0/Watt/2 ainsi que dans la sortie JSON. Vous pouvez remplacer 'Watt' dans la rubrique précédente par 'Watthour' pour obtenir le compteur de consommation en WattHour (par message mqtt) ou par 'WatthourTotal' pour obtenir la consommation totale mesurée en WattHour. Pour synchroniser le WatthourTotal avec votre compteur kWh, publiez la valeur correcte sur MQTT dans le sujet panasonic_heat_pump/s0/WatthourTotal/1 ou panasonic_heat_pump/s0/WatthourTotal/2 avec l'option « conserver » pendant le redémarrage de heishamon. Au redémarrage, heishamon lit cette valeur comme la dernière valeur connue que vous pouvez synchroniser à l'aide de cette méthode.
La mise à jour du micrologiciel est aussi simple que d'aller dans le menu du micrologiciel et, après authentification avec le nom d'utilisateur « admin » et le mot de passe « heisha » (ou autre fourni lors de la configuration), d'y télécharger le binaire.
Une sortie json de toutes les données reçues (pompe à chaleur et 1wire) est disponible sur l'url http://heishamon.local/json (remplacez heishamon.local par l'adresse IP de votre appareil heishamon si MDNS ne fonctionne pas pour vous).
Dans le dossier « intégrations », vous trouverez des exemples sur la manière de connecter votre plateforme d'automatisation au HeishaMon.
La fonctionnalité de règles vous permet de contrôler la pompe à chaleur depuis le HeishaMon lui-même. Ce qui le rend beaucoup plus fiable que de devoir gérer une domotique externe via WiFi. Lors de la publication d'un nouveau jeu de règles, il est immédiatement validé et lorsqu'il est valide, il est utilisé. Lorsqu'un nouvel ensemble de règles n'est pas valide, il sera ignoré et l'ancien ensemble de règles sera à nouveau chargé. Vous pouvez consulter la console pour obtenir des commentaires à ce sujet. Si, d'une manière ou d'une autre, un nouvel ensemble de règles valide plante le HeishaMon, il sera automatiquement désactivé au prochain redémarrage, vous permettant d'apporter des modifications. Cela empêche le HeishaMon d'entrer dans une boucle de démarrage.
Les techniques utilisées dans la bibliothèque de règles vous permettent de travailler avec des ensembles de règles très volumineux, mais la meilleure pratique consiste à la maintenir en dessous de 10 000 octets.
Notez que l'envoi de commandes à la pompe à chaleur se fait de manière asynchrone. Ainsi, les commandes envoyées à la pompe à chaleur au début de votre syntaxe ne seront pas immédiatement reflétées dans les valeurs de la pompe à chaleur ultérieurement. Par conséquent, les valeurs de la pompe à chaleur doivent être lues à partir de la pompe à chaleur elle-même plutôt que celles basées sur les valeurs que vous conservez vous-même.
Deux règles générales sont que les espaces sont obligatoires et que les points-virgules sont utilisés comme caractère de fin de ligne.
L'ensemble de règles utilise la structure de variables suivante :
#
: Globales Ces variables sont accessibles dans tout l'ensemble de règles mais doivent être définies à l'intérieur d'un bloc de règles. N'utilisez pas de variables globales pour toutes vos variables, car cela utilisera constamment de la mémoire.
$
: Locals Ces variables vivent à l'intérieur d'un bloc de règles. Lorsqu'un bloc de règles se termine, ces variables seront nettoyées, libérant ainsi toute mémoire utilisée.
@
: Paramètres de la pompe à chaleur. Ce sont les mêmes que ceux répertoriés dans la page de documentation Gérer les sujets et ceux trouvés sur la page d'accueil de HeishaMon. L'ensemble de règles suit également la logique R/W telle qu'elle est utilisée via les API MQTT et REST. Cela signifie que les sujets lus diffèrent des sujets écrits. Ainsi, la lecture de l'état de la pompe à chaleur se fait via @Heatpump_State
, la modification de l'état de la pompe à chaleur via @SetHeatpump
.
%
: Variables datetime Celles-ci peuvent être utilisées pour les règles basées sur la date et l'heure. Actuellement, %hour
(0 - 23), %minute
(0 - 59), %month
(1 - 12) et day
(1 - 7) sont pris en charge. Tous sont des entiers simples. Une configuration NTP appropriée est nécessaire pour définir la date et l'heure système correctes sur le HeishaMon.
?
: Paramètres du thermostat Ces variables reflètent les paramètres lus sur le thermostat connecté lors de l'utilisation de la fonctionnalité OpenTherm. Lorsque OpenTherm sera pris en charge, cette documentation sera étendue avec des informations plus précises. Ils peuvent consulter l'onglet opentherm pour les variables qui peuvent être utilisées. Les noms sont les mêmes pour la lecture et l'écriture, mais toutes les valeurs ne prennent pas en charge la lecture et/ou l'écriture. L'onglet opentherm le répertorie également.
ds18b20#2800000000000000
: Valeurs de température Dallas 1 fil Utilisez ces variables pour lire la température des capteurs connectés. Ces valeurs sont bien entendu en lecture seule. L'identifiant du capteur doit être placé après le hashtag.
Lorsqu'une variable est appelée mais pas encore définie sur une valeur, la valeur sera NULL
.
Les variables peuvent être de type booléen ( 1
ou 0
), float ( 3.14
), entier ( 10
) et chaîne. La définition des chaînes se fait avec des guillemets simples ou doubles.
Les règles sont écrites dans des blocs event
ou function
. Ce sont des blocages qui se déclenchent lorsque quelque chose se produit ; soit une nouvelle valeur de pompe à chaleur ou de thermostat a été reçue, soit une minuterie s'est déclenchée. Ou peut être utilisé comme fonctions simples
on [event] then [...] end on [name] then [...] end
Les événements peuvent être des paramètres ou des minuteries de pompe à chaleur ou de thermostat :
on @Heatpump_State then [...] end on ?setpoint then [...] end on timer=1 then [...] end
Lors de la définition des fonctions, il vous suffit de nommer votre bloc et vous pouvez ensuite l'appeler depuis n'importe où :
on foobar then [...] end on @Heatpump_State then foobar(); end
Les fonctions peuvent avoir des paramètres que vous pouvez appeler :
on foobar($a, $b, $c) then [...] on @Heatpump_State then foobar(1, 2, 3); end
Si vous appelez une fonction avec moins de valeurs que la fonction prend, tous les autres paramètres auront une valeur NULL.
Il existe actuellement une fonction spéciale qui s'appelle au démarrage du système lorsqu'un nouvel ensemble de règles est enregistré :
on System#Boot then [...] end
Cette fonction spéciale peut être utilisée pour régler initialement vos globaux ou certains timers.
Les opérateurs réguliers sont pris en charge avec leur associativité et leur priorité standard. Cela vous permet également d'utiliser les mathématiques classiques.
&&
: Et
||
: Ou
==
: Égal à`
>=
: Supérieur ou égal à alors
>
: Plus grand alors
<
: Moins alors
<=
: Inférieur ou égal à alors
-
: Moins
%
: Module
*
: Multiplier
/
: Diviser
+
: Plus
^
: Puissance
Les parenthèses peuvent être utilisées pour hiérarchiser les opérateurs, comme cela fonctionnerait en mathématiques normales.
coalesce
Renvoie la première valeur non NULL
. Par exemple, $b = NULL; $a = coalesce($b, 1);
renverra 1. Cette fonction accepte un nombre illimité d'arguments.
max
Renvoie la valeur maximale des paramètres d'entrée.
min
Renvoie la valeur minimale des paramètres d'entrée.
isset
Renvoie un booléen vrai lorsque la variable d'entrée est toujours NULL
dans tous les autres cas, elle renverra faux.
round
Arrondit le flottant d'entrée à l'entier le plus proche.
floor
La plus grande valeur entière inférieure ou égale au flottant d'entrée.
ceil
La plus petite valeur entière supérieure ou égale au flottant d'entrée.
setTimer
Définit une minuterie à déclencher dans X secondes. Le premier paramètre est le numéro de la minuterie et le deuxième paramètre le nombre de secondes avant son déclenchement. Une minuterie ne se déclenche qu'une seule fois et doit donc être réinitialisée pour les événements récurrents. Lorsqu'une minuterie se déclenche, elle déclenche l'événement de minuterie comme décrit ci-dessus. Par exemple
print
Imprime une valeur sur la console.
concat
Concatène diverses valeurs dans une chaîne combinée. Par exemple : @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
Les seules conditions prises en charge sont if
, else
et 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
Une fois que le système de règles sera utilisé par de plus en plus d'utilisateurs, des exemples supplémentaires seront ajoutés à la documentation.
Calculer la GUERRE
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
Point de consigne du thermostat
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
Une réinitialisation d'usine peut être effectuée sur l'interface Web, mais si l'interface Web n'est pas disponible, vous pouvez effectuer une double réinitialisation. La double réinitialisation ne doit être effectuée ni trop rapidement, ni trop lentement. Habituellement, une demi-seconde entre les deux réinitialisations devrait suffire. Pour indiquer que la double réinitialisation a effectué une réinitialisation d'usine, la LED bleue clignotera rapidement (vous devez appuyer à nouveau sur réinitialiser maintenant pour redémarrer HeishaMon à la normale où un point d'accès WiFi devrait être à nouveau visible).
Vous trouverez ci-dessous quelques détails techniques sur le projet. Comment construire vos propres câbles. Comment construire votre propre PCB, etc.
La communication peut être établie via l'une des deux prises : CN-CNT ou CN-NMODE. Si vous disposez d'une interface WiFi Panasonic CZ-TAW1 existante que vous souhaitez remplacer par HeishaMon, il suffit de débrancher le câble du CZ-TAW1 et de vous reconnecter à votre appareil HeishaMon. Cependant, il n'est pas possible d'utiliser HeishaMon et le module CZ-TAW1 d'origine ensemble en tant que périphérique actif. Il est cependant possible de mettre HeishaMon en mode "Listen Only" ce qui permettra à HeishaMon et au module CZ-TAW1 d'origine de coexister. Le seul inconvénient est que HeishaMon est incapable d’envoyer des commandes et d’utiliser l’option PCB en option.
Paramètres de communication : TTL 5 V UART 9600,8,E,1
Brochage CN-CNT (de haut en bas)
1 - +5 V (250 mA)
2 - 0-5V TX (depuis la pompe à chaleur)
3 - 0-5V RX (vers la pompe à chaleur)
4 - +12 V (250 mA)
5 - GND
Brochage CN-NMODE (de gauche à droite)
"Attention ! Comme imprimé sur le PCB, la broche gauche est la broche 4 et la broche droite est la broche 1. Ne comptez pas 1 à 4 en partant de la gauche !
4 - +5 V (250 mA)
3 - 0-5V TX (depuis la pompe à chaleur)
2 - 0-5V RX (vers pompe à chaleur)
1 - GND
HeishaMon sera alimenté par le Panasonic via le câble (alimentation 5 V).
Il est possible de connecter le HeishaMon sur une longue distance. Jusqu'à 5 mètres fonctionnent avec un câblage normal. Pour des distances plus longues, une configuration TTL vers RS485, comme le montre l'image ci-dessous, est possible. Cela nécessite cependant que HeishaMon soit alimenté en externe en utilisant une alimentation 5 V (par exemple à partir d'un câble USB).
Commandes RS-Online
Conrad commande
Utilisez un câble blindé à 4 conducteurs de 24 AWG.
Les PCB nécessaires pour se connecter à la pompe à chaleur sont conçus par les membres du projet et sont répertoriés ci-dessous. La partie la plus importante du matériel est un changement de niveau entre 5 V du Panasonic et 3,3 V du HeishaMon et une ligne d'activation GPIO13/GPIO15 après le démarrage.
Conceptions PCD des membres du projet
Image Wemos D1 bêta
Photo ESP12-F
Pour faciliter les choses, vous pouvez commander un PCB terminé auprès de certains membres du projet :
Boutique de bricolage d'Igor Ybema (alias TheHogNL) basée aux Pays-Bas
planches :
esp8266 par la communauté esp8266 version 3.0.2 Arduino
Toutes les bibliothèques que nous utilisons nécessaires à la compilation.
La liste actuelle des sujets MQTT documentés peut être trouvée ici
Le logiciel prend également en charge la lecture des capteurs de température à 1 fil DS18b20. Une configuration appropriée à 1 fil (avec une résistance de rappel de 4,7 kohms) connectée à GPIO4 sera lue à chaque seconde configurée (minimum 5) et envoyée au sujet panasonic_heat_pump/1wire/"sensor-hex-address". Sur les cartes préfabriquées, cette résistance de 4,7 kohms est déjà installée.
Le plus récent et grand heishamon contient deux relais intégrés qui peuvent être activés et désactivés à l'aide des commandes MQTT. Les relais peuvent être utilisés pour n'importe quelle commutation de contact, même sur secteur 230 V (max 5 A). Par exemple, pour commuter les contacts 230 V de la pompe à chaleur pour contrôler le « thermostat externe », allumer ou éteindre une pompe ou d'autres appareils de moindre puissance. Je ne recommande pas d'utiliser le relais comme interrupteur pour un radiateur électrique car il consomme trop d'énergie. Pour contrôler le relais, envoyez simplement une valeur de 1 ou 0 au sujet MQTT "panasonic_heat_pump/gpio/relay/one" pour le relais un ou "panasonic_heat_pump/gpio/relay/two" pour le relais deux.
Si votre carte heishamon prend en charge opentherm, le logiciel peut également être utilisé pour relier les informations opentherm d'un thermostat compatible à votre domotique via MQTT ou JSON et comme mentionné ci-dessus, il peut également être connecté directement dans les règles pour connecter les informations opentherm à la pompe à chaleur et inversement. , par exemple pour afficher la température extérieure de la pompe à chaleur sur votre thermostat opentherm. Si vous activez la prise en charge d'opentherm dans les paramètres, un nouvel onglet sera visible sur la page Web. Sur cet onglet, vous verrez les valeurs opentherm. Certains sont de type R(ead) et certains sont W(rite), et certains sont les deux. Lire signifie que le thermostat peut lire ces informations à partir du heishamon. Vous fournissez ces informations via MQTT (ou en utilisant les règles) en mettant à jour cette valeur sur la rubrique mqtt 'opentherm/read', par exemple 'panasonic_heat_pump/opentherm/read/outsideTemp'. Les valeurs écrites sont des informations provenant du thermostat, comme « roomTemp ». Ceux-ci sont disponibles sur le sujet mqtt 'opentherm/write'. Vous pouvez utiliser ces valeurs pour modifier le comportement de la pompe à chaleur comme vous le souhaitez en utilisant votre domotique et les commandes mqtt set pour heishamon lors de l'utilisation des règles internes.
Les variables opentherm disponibles sont :
chEnable qui est un booléen indiquant si le chauffage central doit être activé. Ceci est souvent utilisé lorsque le thermostat souhaite chauffer votre maison.
dhwEnable qui est un booléen indiquant si le chauffage de l'ECS doit être activé. Souvent utilisé comme option utilisateur sur le thermostat pour désactiver le chauffage de l'ECS pendant les vacances
CoolingEnable qui est un booléen indiquant si le refroidissement doit être activé. La quantité de refroidissement est demandée dans « coolingControl », voir ci-dessous.
roomTemp est la valeur à virgule flottante de la température ambiante mesurée par le thermostat.
roomTempSet est la valeur à virgule flottante du point de consigne de température ambiante demandé sur le thermostat.
chSetpoint est la valeur à virgule flottante du point de consigne de l'eau calculé par le thermostat. Les thermostats Opentherm tentent de régler ce chSetpoint pour ne pas dépasser le point de consigne de la pièce. Pourrait être utilisé pour régler le point de consigne de l'eau sur la thermopompe, mais la plupart des thermostats répondent trop rapidement par rapport au fonctionnement des thermopompes.
maxRelativeModulation est la quantité de modulation (0-100 %) que la pompe à chaleur (esclave opentherm) est autorisée à utiliser (voir relativeModulation dans les valeurs READ, qui doivent toujours être égales ou inférieures à ce maximum)
CoolingControl est la quantité de refroidissement (0-100 %) que le thermostat demande à la pompe à chaleur. Nécessite un thermostat opentherm avec support de refroidissement.
dhwSetpoint est la valeur à virgule flottante qui est le point de consigne actuel de l'ECS par le thermostat, mais peut également être définie par heishamon pour la remplacer. Cependant, tous les thermostats ne le prennent pas en charge. Il ne doit pas être défini à une valeur supérieure à dhwSetUppBound, voir ci-dessous.
maxTSet est la valeur à virgule flottante qui définit le point de consigne maximum de l'eau. L'utilisateur peut régler cela sur le thermostat ou peut également le régler depuis heishamon. Il ne doit pas être défini à une valeur supérieure à chSetUppBound, voir ci-dessous.
chPressure est la valeur à virgule flottante qui définit la pression de l'eau mesurée du chauffage central fournie par heishamon.
outsideTemp est la valeur à virgule flottante qui définit la température extérieure mesurée du chauffage central fournie par heishamon
inletTemp est la valeur à virgule flottante qui définit la température d'entrée d'eau mesurée du chauffage central fournie par heishamon
outletTemp est la valeur à virgule flottante qui définit la température de sortie d'eau mesurée du chauffage central fournie par heishamon
dhwTemp est la valeur à virgule flottante qui définit la température d'eau chaude mesurée du chauffage central fournie par heishamon.
relativeModulation est la quantité (0-100%) de modulation sur laquelle la pompe à chaleur (esclave opentherm) fonctionne actuellement, doit toujours être inférieure ou égale à la valeur maxRelativeModulation définie par le thermostat.
flameState est une valeur booléenne (envoyer 'true', 'on' ou '1' pour activer) qui définit si le chauffage central fournit de la chaleur centrale.
chState est une valeur booléenne (envoyer 'true', 'on' ou '1' pour activer) qui définit si la pompe à chaleur est en mode pièce/chauffage central (par exemple vanne 3 voies sur pièce, en mode chauffage)
dhwState est une valeur booléenne (envoyer 'true', 'on' ou '1' pour activer) qui définit si la pompe à chaleur est en mode ECS (par exemple vanne 3 voies sur ECS)
CoolingState est une valeur booléenne (envoyer 'true', 'on' ou '1' pour activer) qui définit si la pompe à chaleur est en mode refroidissement ambiant/central (par exemple vanne 3 voies sur pièce, en mode refroidissement)
dhwSetUppBound est une valeur entière comprise entre 0 et 127 qui définit la température maximale d'ECS prise en charge afin que le thermostat ne puisse pas demander un dhwSetpoint supérieur à cela. La valeur par défaut est définie sur 75. Pour remplacer, envoyez un message MQTT à ce sujet et conservez-le afin qu'Heishamon le reçoive à nouveau après le redémarrage.
dhwSetLowBound est une valeur entière comprise entre 0 et 127 qui définit la température minimale d'ECS prise en charge afin que le thermostat ne puisse pas demander un dhwSetpoint inférieur à cela. La valeur par défaut est définie sur 40. Pour remplacer, envoyez un message MQTT à ce sujet et conservez-le afin qu'Heishamon le reçoive à nouveau après le redémarrage.
chSetUppBound est une valeur entière comprise entre 0 et 127 qui définit la température maximale CH (eau de chauffage) prise en charge afin que le thermostat ne puisse pas demander un chSetpoint supérieur à cela. La valeur par défaut est définie sur 65. Pour remplacer, envoyez un message MQTT à ce sujet et conservez-le afin qu'Heishamon le reçoive à nouveau après le redémarrage.
chSetLowBound est une valeur entière comprise entre 0 et 127 qui définit la température minimale CH (eau de chauffage) prise en charge afin que le thermostat ne puisse pas demander un chSetpoint inférieur à cela. La valeur par défaut est définie sur 20. Pour remplacer, envoyez un message MQTT à ce sujet et conservez-le afin qu'Heishamon le reçoive à nouveau après le redémarrage.
La liste actuelle des octets documentés déchiffrés peut être trouvée ici
Ouvrirhab2
Assistante à domicile
Manuel du courtier IO
Domoticz