Toujours dans le but de déplacer toutes mes automatisations Domoticz vers Node-RED, je me suis attaqué à mon simulateur de présence.

Sur Domoticz, j'avais mis en place un système compliqué qui générait via un script Python des heures aléatoires et les ajoutait dans des variables Domoticz.
Je me servais ensuite des ces différentes heures pour créer un planning afin d'allumer et éteindre mes lumières.

Je suis très attaché au coté aléatoire parce que ça ne me semble pas très intelligent, lors d'une absence, d'allumer puis éteindre les lumières toujours à la même heure.

J'ai tardé à migrer ce système sous Node-RED parce que cela me semblait trop compliqué. Et en fait pas du tout !

Domoticz vers Node-RED

Dans Domoticz, j'ai conservé mon capteur virtuel qui est un simple bouton on/off. L'appui sur ce bouton va être récupéré dans Node-RED pour deux choses :

  • Ajouter l'état dans un topic MQTT spécifique
  • Répercuter cet état dans une variable globale Node-RED

simulation_presence

Le flow est assez simple et je ne vais pas le détailler plus que ça :

  • Je souscris au topic domoticz/out, je filtre sur l'IDX de mon capteur virtuel, et je récupère l'état (nvalue) que je reporte ensuite dans un topic spécifique (exemple : internal/simulation_presence/state) sous la forme On/Off
  • Lorsque ce topic spécifique est modifié, j'ajoute la valeur dans une variable globale Node-RED (exemple : global.simulation_presence)

Planning

simulation_presence_planning-1

Pour la partie planning, j'ai utilisé le plugin (palette) eztimer qui permet une programmation horaire très poussée en incluant notamment un offset random.

Sur mon node eztimer j'ai configuré :

  • Les jours concernés
  • Le type de timer (on/off)
  • L'heure de début (on) et de fin (off) en incluant un offset random

En fonction de l'évènement (on/off), mon payload passe respectivement à 1 ou 0.

A la sortie de ce node, je vérifie l'état de ma variable globale et en fonction du payload reçu, je peux soit allumer soit éteindre mes lumières (ou tout autre action : allumer une prise, la télévision, mettre de la musique, etc.).

Le flow correspondant :

[
    {
        "id": "58384177.d243f",
        "type": "eztimer",
        "z": "4822a4b8.947954",
        "name": "Lumière Bureau",
        "debug": false,
        "autoname": "17:00:00 - 23:00:00",
        "tag": "",
        "suspended": false,
        "sendEventsOnSuspend": false,
        "lat": "",
        "lon": "",
        "timerType": "1",
        "startupMessage": false,
        "ontype": "2",
        "ontimesun": "dawn",
        "ontimetod": "17:00:00",
        "onpropertytype": "msg",
        "onproperty": "payload",
        "onvaluetype": "num",
        "onvalue": 1,
        "onoffset": "30",
        "onrandomoffset": true,
        "onsuppressrepeats": false,
        "offtype": "2",
        "offtimesun": "dusk",
        "offtimetod": "23:00:00",
        "offduration": "00:01:00",
        "offpropertytype": "msg",
        "offproperty": "payload",
        "offvaluetype": "num",
        "offvalue": 0,
        "offoffset": "30",
        "offrandomoffset": true,
        "offsuppressrepeats": false,
        "mon": true,
        "tue": true,
        "wed": true,
        "thu": true,
        "fri": true,
        "sat": true,
        "sun": true,
        "x": 120,
        "y": 900,
        "wires": [
            [
                "6f97c378.647d4c"
            ]
        ]
    },
    {
        "id": "ffbf54e5.9786e8",
        "type": "switch",
        "z": "4822a4b8.947954",
        "name": "Check on/off",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "1",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "0",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 2,
        "x": 490,
        "y": 900,
        "wires": [
            [
                "9e052a73.66d308"
            ],
            [
                "eb0bbf15.78d73"
            ]
        ]
    },
    {
        "id": "9e052a73.66d308",
        "type": "change",
        "z": "4822a4b8.947954",
        "name": "Turn on",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "ON",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 680,
        "y": 880,
        "wires": [
            [
                "a5b733a1.cd81c"
            ]
        ]
    },
    {
        "id": "eb0bbf15.78d73",
        "type": "change",
        "z": "4822a4b8.947954",
        "name": "Turn off",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "OFF",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 680,
        "y": 920,
        "wires": [
            [
                "a5b733a1.cd81c"
            ]
        ]
    },
    {
        "id": "a5b733a1.cd81c",
        "type": "mqtt out",
        "z": "4822a4b8.947954",
        "name": "Zigbee2MQTT",
        "topic": "zigbee2mqtt/group_ampoules_bureau/set",
        "qos": "",
        "retain": "",
        "broker": "1949a812.2568e8",
        "x": 860,
        "y": 900,
        "wires": []
    },
    {
        "id": "6f97c378.647d4c",
        "type": "switch",
        "z": "4822a4b8.947954",
        "name": "Check variable",
        "property": "simulation_presence",
        "propertyType": "global",
        "rules": [
            {
                "t": "eq",
                "v": "On",
                "vt": "str"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 1,
        "x": 320,
        "y": 900,
        "wires": [
            [
                "ffbf54e5.9786e8"
            ]
        ]
    },
    {
        "id": "1949a812.2568e8",
        "type": "mqtt-broker",
        "name": "Mosquitto",
        "broker": "192.168.0.47",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthRetain": "false",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closeRetain": "false",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willRetain": "false",
        "willPayload": ""
    }
]