Passage au MQTT convaincant

Bonjour,

Petite interrogation (il n’y a pas d’idée polémique derrière).

As-tu fait une estimation de la consommation électrique de toute ton installation domotique ? Les Rpi, les périphériques consommateurs, et les chargeurs (en général, convertisseurs en 5V) derrière ?

Perso, toute petite install domotique, j’essaie de limiter au mieux le nombre de ‹ controleurs › domotique alimentés, et les périphériques fonctionnant en wifi.
Je suis peut-être trop timoré, mais j’ai l’impression qu’une installation telle que tu la décrit devient assez consommatrice d’énergie, de manière continue.

Bonjour @JcDenis

Je crois que tu as basculer le BT et le RFXCom en MQTT : content de l’opération ?
Un intérêt vs les plugin classique de ces protocoles ?

Je suis déjà sur zigbee2mqtt et zwavejs2mqtt

Je n’ai pas encore cherché si il y avait des tûtes de bascule du BT et le RFXCom en MQTT.
Je suis sur VM debian sous proxmox

Un message a été scindé en un nouveau sujet : Question mqtt

Bonjour @JcDenis

Je reviens avec mes question pour le BT et le RFXcom tu as suivi quelle tutoriel ?
C’est installé sur VM ou docker ?

Est ce que tu es toujours content de l’opération sur ces deux protocole ?

1 « J'aime »

Lo,

Je vois depuis ton screen que t’utilises bt-mqtt-gateway,
Aurais-tu la possibilité de partager ton stack et ton fichier config.yaml,

Au plaisir,
Merci d’avance pour ton retour et ton partage,

Certes, le Wifi tombe rarement en pannes mais ça peut se produire. L’inconvénient est qu’il est difficile d’avoir une source redondante en wifi.

MQTT ça peut également tomber. Et ; avoir le serveur MQTT sur le même matériel que Jeedom n’est pas forcément le meilleur choix. En cas de pannes du serveur Jeedom, toutes les coms sont perdues.
Une haute disponibilité est préférable.

La connexion filaire pour l’interconnexion des services avec de la redondance est simple à mettre en place.
Par ailleurs, avec une telle redondance on peut facilement implanter des clusters pour certains protocoles. L’une des méthodes simples pour MQTT est par exemple un cluster RabbitMQ très simple à mettre en œuvre sur du conteneur.

Exemple

Version : "3.8"
###################################################################
x-config: &config
  image: rabbitmq:3.9.22-management
  networks:
  - traefik_frontend
  - traefik_telemetry
  ports: 
  - target: 15672
    published: EXPOSEDPORT
    protocol: tcp
    mode: host
 # Prometheus
  - target: 15692
    published: EXPOSEDPORT
    protocol: tcp
    mode: host
  restart: always
  environment: 
  - TZ=Canada/Eastern
  - RABBITMQ_ERLANG_COOKIE=LECOOKIEERLANG
  volumes:
  - /nfs/volumes/config/rabbitmq:/etc/rabbitmq  

x-deploy: &deploy 
    labels:
    - traefik.enable=true
    - traefik.docker.network=traefik_frontend
    - traefik.http.routers.rabbitmq-router.rule=Host(`rabbitmq.nomdedomaine.com`)
    - traefik.http.routers.rabbitmq-router.entrypoints=https
    - traefik.http.routers.rabbitmq-router.middlewares=secured@redis
    - traefik.http.routers.rabbitmq-router.tls.certresolver=CERTRESOLVER
    - traefik.http.services.rabbitmq-service.loadbalancer.server.port=15672
    - traefik.http.services.rabbitmq-service.loadbalancer.healthcheck.interval=10s
    # MQTT TLS
    - traefik.tcp.routers.mqtts-tcp-router.rule=HostSNI(`rabbitmq.nomdedomaine.com`)
    - traefik.tcp.routers.mqtts-tcp-router.entrypoints=mqtts
    - traefik.tcp.routers.mqtts-tcp-router.service=mqtts-tcp-service
    - traefik.tcp.routers.mqtts-tcp-router.tls=true
    - traefik.tcp.routers.mqtts-tcp-router.tls.certresolver=CERTRESOLVER
    - traefik.tcp.services.mqtts-tcp-service.loadbalancer.server.port=1883
    # AMQP
    - traefik.tcp.routers.aqmp-tcp-router.rule=HostSNI(`*`)
    - traefik.tcp.routers.aqmp-tcp-router.entrypoints=amqp
    - traefik.tcp.routers.aqmp-tcp-router.service=amqp-tcp-service
    - traefik.tcp.services.aqmp-tcp-service.loadbalancer.server.port=5672
    replicas: 1
    restart_policy:
      condition: any
      delay: 5s
      max_attempts: 3
      window: 5s
    update_config:
      order: stop-first
      delay: 10s
      failure_action: rollback
      max_failure_ratio: 0.25
    rollback_config:
      order: stop-first
      failure_action: continue

###################################################################

services:
  rabbitmq1:
    <<: *config
    hostname: rabbitmq1
    deploy: 
      <<: *deploy
      placement:
        constraints:
        - node.labels.name == server-1
        
  rabbitmq2:
    <<: *config
    hostname: rabbitmq2
    deploy: 
      <<: *deploy
      placement:
        constraints:
        - node.labels.name == server-2

  rabbitmq3:
    <<: *config
    hostname: rabbitmq3
    deploy: 
      <<: *deploy
      placement:
        constraints:
        - node.labels.name == server-3
        
networks:
  # External
  traefik_frontend:
    external: true
    
  traefik_telemetry:
    external: true

et la config de RabbitMQ pour le cluster

# Cluster configuration
cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq1
cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq2
cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq3

cluster_partition_handling = autoheal

cluster_keepalive_interval = 10000

cluster_name = gaston

Concernant, le protocole Zwave, avec Zwavejs2MQTT, il est possible de conteneuriser et de passer par du monitoring, alerting et des webhooks pour surveiller que tout soit OK, lancer des alertes selon un seuil où il n’y a plus de réponses et tenter de relancer le conteneur. Si la machine est KO, il est certains que ça va être plus compliquer. Malheureusement, on ne peut pas avoir de redondance matérielle (duplication sur plusieurs clés Zwave par exemple).
Autre avantage, on peut faire des ponts MQTT - AMQP au besoin. (Utile dans certains cas pour de l’automatisation de processus par exemple avec nodered ou n8n par exemple)

Cela peut également s’appliquer à d’autres protocoles si on souhaite une haute disponibilité.