Lier un radiateur fil pilote avec l’objet Chauffage dans HomeKit

Hello,

Je me lance dans un truc un peu complexe, relier un objet Chauffage dans HomeKit avec un radiateur fil pilote géré par IPX800v5 et X4FP.

Ma config fonctionnelle actuelle :

L’objectif est d’interagir via MQTT avec l’objet HomeKit Heater Cooler.

Pour cela, il faut faire interagir les IO du X4FP pour le radiateur concerné avec 3 variables :
ActiveState : False / True
State : Inactive / Heat
HeatingThresholdTemperature : température en degré Celsius

L’idée est que cela fonctionne dans les 2 sens :
Un choix dans le widget du radiateur sur l’IPX met a jour l’objet HomeKit et une modification dans Maison sur iOS met à jour l’objet X4FP sur l’IPX.

La logique retenue est la suivante, sachant que la température de consigne est définie sur le thermostat du radiateur lui-même :

X4FP sur stop :

  • ActiveState : False
  • State : Inactive
  • HeatingThresholdTemperature : 20

X4FP sur stop frost

  • ActiveState : True
  • State : Heat
  • HeatingThresholdTemperature : 8

X4FP sur confort :

  • ActiveState : True
  • State : Heat
  • HeatingThresholdTemperature : 20

X4FP sur confort-1 :

  • ActiveState : True
  • State : Heat
  • HeatingThresholdTemperature : 19

X4FP sur confort-2:

  • ActiveState : True
  • State : Heat
  • HeatingThresholdTemperature : 18

X4FP sur eco :

  • ActiveState : True
  • State : Heat
  • HeatingThresholdTemperature : 16

Et dans l’autre sens de commande

  • Si ActiveState = False alors X4FP sur Frost
  • Si ActivateState = True HeatingThresholdTemperature > 19.5 alors X4FP sur confort
  • Si ActivateState = True HeatingThresholdTemperature <= 19.5 et > 18.5 alors X4FP sur confort-1
  • Si ActivateState = True HeatingThresholdTemperature <= 18.5 et > 17.5 alors X4FP sur confort-2
  • Si ActivateState = True HeatingThresholdTemperature <= 17.5 et >= 14 alors X4FP sur Eco
    -Si ActivateState = True HeatingThresholdTemperature < 14 alors X4FP sur StopFrost

A ce stade, mon questionnement n’est pas de transférer l’info entre les 2 mondes, façon en MQTT ou bien avec des appels d’URL mais sur la bonne manière d’implémenter ces algos.

En prenant pour hypothèse pour chaque radiateur :

  • les IOs des X4FP
  • 3 variables miroir du monde HomeKit :
    • ActiveState : VirtualIO
    • State : String32
    • HeatingThresholdTemperature : ANA16

Sachant par ailleurs que je vais répéter cela pour 6 radiateurs différents, quelle est la manière élégante et économe d’implémenter cela ? Liens, scénarios, fonctions ?

Pour ceux qui ont déjà fait des choses similaires dans l’IPX, quelle approche me conseillez-vous ?

J’ai commencé à le faire avec le moteur règles, mais j’ai une erreur Mix IO / ANA. Ex sur cette règle ?

Le message d’erreur n’est pas très précis, preneur d’un avis sur ce qui ne va pas ?

Je veux déclencher sur State = True et sur la Tempérarure dans une plage, avec comparaison par rapport à 18,2 et 17,5.

En décomposant de cette manière, j’arrive du coup à implémenter dans le sens Variables MQTT issues de HomeKit vers X4FP :

Ca fait un scénario complet par radiateur, pas très frugal, mais ça a l’air de marcher.

J’ai réussi à implémenter le fonctionnement inverse (on modifie l’objet X4FP et il modifie les états vers les variables HomeKit) :

Le tout pour le fonctionnement dans les 2 sens fait un scénario à 19 règles. Vraiment pas frugal, mais ça fonctionne.

Reste plus qu’à faire la liaison MQTT et tester.

Et pour finir la soirée, ça fonctionne :slight_smile:

Plutôt cool !

J’ai renoncé à gérer le statut State qui n’est pas vraiment utile, c’est possible en restreignant les propriétés de l’objet Heater Cooler dans MQTTThing.

Voici la conf de l’objet MQTTThing pour le radiateur :

        {
            "type": "heaterCooler",
            "name": "Radiateur Test1",
            "topics": {
                "getActive": "IPX/RADIATEUR/TEST1/STATE",
                "setActive": "IPX/RADIATEUR/TEST1/STATE",
                "getCurrentTemperature": "IPX/RADIATEUR/TEST1/TEMPERATURE",
                "getHeatingThresholdTemperature": "IPX/RADIATEUR/TEST1/TEMPERATURE",
                "setHeatingThresholdTemperature": "IPX/RADIATEUR/TEST1/TEMPERATURE"
            },
            "integerValue": true,
            "restrictHeaterCoolerState": [
                0
            ],
            "minTemperature": 8,
            "maxTemperature": 22,
            "accessory": "mqttthing"
        }

Pas très frugal non plus côté MQTT, avec 2 objets utilisés, mais MQTTThing ne sait pas écire en json, uniquement lire.

En résumé, avec un peu de patience, un scénario de 20 règles, … on obtient une interaction fonctionnelle entre HomeKit et un radiateur piloté par X4FP sur un IPX800v5 :muscle:t2:

2 « J'aime »

Je viens de mettre en oeuvre ce système sur 3 zones (il m’en reste 3 à déployer). Mise à part le côté très fastidieux malgré l’utilisation du template de scénario ci-dessous, cela fonctionne très bien !

Homekit_radiateur_FP.json.zip (1,6 Ko)

Si vous voulez vous lancer, je vous mets 4 captures d’écran avec le template rempli pour mieux vous y retrouver. Preneur de vos retours si quelqu’un se lance dans une config similaire.

2 « J'aime »