Table des matières:

Commande de tête de lit sans fil MQTT : 5 étapes (avec photos)
Commande de tête de lit sans fil MQTT : 5 étapes (avec photos)

Vidéo: Commande de tête de lit sans fil MQTT : 5 étapes (avec photos)

Vidéo: Commande de tête de lit sans fil MQTT : 5 étapes (avec photos)
Vidéo: MQTT avec Mosquitto et Siemens S7-1200 / S7-1500 --- TIA Portal LMqtt_Publisher / LMqtt_Client 2024, Peut
Anonim
Commande de tête de lit sans fil MQTT
Commande de tête de lit sans fil MQTT
Commande de tête de lit sans fil MQTT
Commande de tête de lit sans fil MQTT

Il y a quelques années, nous avons acheté un nouveau lit en mousse à mémoire de forme et, comme c'est le cas pour la plupart des lits, vous deviez également acheter l'une de leurs "bases approuvées" afin de conserver une garantie. Nous avons donc opté pour la base la moins chère qui comprenait également la possibilité de relever et d'abaisser la tête du lit. Quelques jours plus tard, notre matelas et notre base bon marché American Adjusts avec commandes filaires (une pour chaque côté du lit) ont été livrés et installés.

La première chose que nous avons remarquée, c'est que les cordons du showroom qui étaient beaux et longs n'étaient pas ce que nous avions sur notre lit ! Ceux de la salle d'exposition avaient des extensions. Ces rallonges n'étaient PAS incluses avec notre lit et assez intéressantes, personne n'était intéressé à nous vendre une paire de rallonges. Cela nous laissait des commandes qui atteignaient à peine le haut du lit et que nous devions retourner pour les utiliser.

En avoir pour son argent

Après environ 6 mois, nous remarquons que les colliers de décharge de traction sur l'un des contrôles commençaient à se déchirer. Quelques mois plus tard - fil nu. Avance rapide d'environ un an, l'une des commandes ne fonctionne plus et l'autre devient un peu nerveuse.

Encore une fois, personne n'était intéressé à nous vendre des remplacements. Alors ça m'a frappé !

« Attendez une putain de minute ! Ne suis-je pas en train de construire un système de domotique et de CONTRLE ? ! »

Étape 1: Découverte

Découverte
Découverte
Découverte
Découverte

Je voulais voir ce que je pouvais faire avec ce que j'avais alors j'ai démonté le contrôleur défectueux et wow ! il y avait beaucoup de merde là-dedans ! A quoi servaient tous ces trucs ? J'ai reculé et j'ai juste regardé les lignes entrant et sortant. J'ai pu voir qu'il y avait une ligne d'alimentation de 12 volts et une ligne de masse. Les deux autres lignes ressemblaient à des lignes de signal pour les deux boutons haut et bas. J'ai donc tenté ma chance et j'ai simplement branché l'alimentation 12v sur la ligne de signal "haut". Le lit a commencé à bouger ! J'ai ensuite déplacé mon câble de raccordement sur la ligne de signal "vers le bas" et le lit s'est effondré !

Dans la boîte, il y a des contacts pour 4 lignes de signal supplémentaires et 4 boutons supplémentaires. Ma meilleure hypothèse est que cette carte contrôleur est utilisée dans tous leurs modèles de base câblés et qu'ils placent simplement différentes plaques frontales sur la carte selon les besoins. Donc, j'avais une théorie de travail. J'ai testé la ligne d'alimentation pour voir si elle a plongé pendant l'utilisation ou a augmenté à tout moment - non. Il y avait très peu de courant sur les lignes de signal, mais elles nécessitaient 12 volts pour activer le moteur.

Étape 2: Concevoir

Concevoir
Concevoir
Concevoir
Concevoir
Concevoir
Concevoir
Concevoir
Concevoir

Donc, une simple connexion de contact entre VCC et la broche de signal chacun est tout ce qui est nécessaire, mais comment cela se fait-il dans mon système. Deux relais seraient nécessaires pour les contacts et un ESP8266 fonctionnerait pour le contrôleur sans fil. Étant donné que les relais peuvent nécessiter plus de courant que les broches numériques ne peuvent en fournir, il est préférable d'utiliser un optoisolateur entre le contrôleur et le relais. Cela permettra à un petit signal d'activer un interrupteur à courant plus élevé (dans ce cas, un transistor à commande lumineuse) et d'activer en toute sécurité la bobine du relais. De plus, un optoisolateur isole le contrôleur de toute pointe pouvant se former lorsque la bobine du relais est relâchée et que le champ magnétique s'effondre. Heureusement, il existe des modules relais qui contiennent déjà tous ces circuits et pour un prix assez bas.

Le lit sera l'alimentation électrique du contrôleur et pour gérer les 12 volts fournis, nous aurons besoin d'un convertisseur abaisseur variable. Un très bon marché a été lié ci-dessous et fonctionne à merveille. La ligne 12V et les lignes GND se connectent au côté entrée du convertisseur et le côté régulé 5 volts se connecte au VCC du NodeMCU et à la broche VCC sur le module relais. La masse (-) sur le convertisseur se connecte aux broches GND sur à la fois le module relais et le NodeMCU.

Le NodeMCU se connecte à IN1 à l'aide de D1 (GPIO5) et à IN2 à l'aide de D2 (GPIO4). La ligne de signal vers le haut sur le lit se connecte à la borne à vis normalement ouverte du relais 1 et la ligne de signal vers le bas se connecte au connecteur du bornier normalement ouvert du relais 2. Vous devrez connecter le fil 12v qui est connecté au côté entrée du convertisseur abaisseur également à l'autre connexion du bornier pour les DEUX relais 1 et 2.

les pièces

  • 1 - NodeMCU
  • 1 - Module de relais Duel avec isolation de courant
  • 1 - Convertisseur buck entrée/sortie variable
  • 1 - PCB de la planche à pain
  • Fil de cuivre toronné de calibre 22
  • 2 - vis M3x8

Étape 3: Enceinte

Enceinte
Enceinte

L'enceinte peut être trouvée ici:

J'ai conçu un boîtier simple avec Tinkercad qui permet au câble de commande du lit d'entrer dans la boîte entre les supports de décharge de traction à l'intérieur de la boîte. Il y a des fentes pour une attache zip ici qui aideraient à empêcher le câble de glisser, mais dans mon cas, l'ajustement était très ajusté et n'en avait pas besoin. Le couvercle est boulonné avec 2 vis M3x 8. Je recommanderais de télécharger le code et de tester le système avant de le monter dans la boîte.

J'ai utilisé de la colle chaude pour maintenir les planches en place, mais cela n'est peut-être pas nécessaire.

Étape 4: Coder

Le code peut être trouvé ici:

REMARQUE: ce projet utilise la bibliothèque pubsubclient qui peut être ajoutée dans le gestionnaire de bibliothèque de l'IDE Arduino

Le code ici est assez basique et a été conçu sur la base du type Cover MQTT dans Home Assistant. L'idée ici est simple: lorsque vous appuyez sur le bouton haut ou bas de l'assistant domestique, le relais approprié se ferme jusqu'à ce que la commande d'arrêt soit reçue OU que le système atteigne un temps d'activation maximum et s'arrête.

Le temps maximum est destiné à une mesure de sécurité au cas où l'utilisateur oublie de l'arrêter ou si la commande a été envoyée accidentellement et qu'il est peu probable que quelqu'un l'arrête. Nous ne voulons pas que le relais soit allumé indéfiniment ou qu'il y ait des problèmes inattendus avec le lit en raison d'une fermeture de contact prolongée.

Dans mon code, ce délai d'attente est de 20 secondes et peut être ajusté dans le bloc de variable globale en haut du code.

Une deuxième précaution de sécurité était de toujours s'assurer que si j'active un relais, une désactivation intentionnelle de l'autre est toujours appelée, même si le dernier état était déjà éteint. Je ne veux pas envoyer 12v sur les deux lignes de signal car je ne sais pas ce que cela fera au lit.

En dehors de cela, le lit publie qu'il est disponible toutes les 60 secondes et c'est tout. Pas de cloches ni de sifflets ici. Comme le lit n'a pas de retour de position, je n'ai pas pu en renvoyer à Home Assistant.

Étape 5: Exemple d'intégration

Exemple d'intégration
Exemple d'intégration
Exemple d'intégration
Exemple d'intégration

Le code que j'ai écrit utilise MQTT pour communiquer via WiFi et peut donc communiquer avec n'importe quel concentrateur ou appareil d'automatisation utilisant MQTT. J'utilise Home Assistant qui a un courtier MQTT intégré. Voici un exemple de ma configuration HA.

Dans HA, j'ai un fichier cover.yaml avec la définition suivante:

- plate-forme: mqtt

name: "Master Bed Headboard" command_topic: "master_bed_control/cmd" Availability_topic: "master_bed_control/availability" qos: 0 keep: false payload_open: "UP" payload_close: "DOWN" payload_stop: "STOP" payload_available: "online" payload_not_available: " hors ligne" optimiste: vrai

Cela me donne une entrée dans mon interface HA avec un bouton haut/arrêt/bas défini avec l'action décrite ci-dessus.

De plus, j'ai défini deux boutons sur mon panneau de commande de chevet (Instructable / Blog Post) pour relever et abaisser la tête de lit. Les boutons du panneau de commande sont définis comme des capteurs MQTT:

- plate-forme: mqtt

state_topic: "bedside_cp1/button5" nom: "Bedside CP1 Button 5" icône: mdi:circle

- plate-forme: mqtt

state_topic: "bedside_cp1/button6" nom: "Bedside CP1 Button 6" icône: mdi:circle

… et 4 règles d'automatisation pour le moment où chaque bouton est enfoncé et relâché. Lorsqu'il est enfoncé, la commande de montée ou de descente est envoyée au lit selon le bouton qui a été activé, lorsque le bouton est relâché, la commande d'arrêt est envoyée:

- identifiant: '1548308650383'

alias: MBR Bedside CP Button 5a déclencheur: - entity_id: sensor.bedside_cp1_button_5 de: 'Off' plate-forme: état à: 'On' condition: action: - data: entity_id: 'cover.master_bed_headboard' service: cover.open_cover - id: '1548308758911' alias: MBR Bedside CP Button 5b trigger: - entity_id: sensor.bedside_cp1_button_5 de: 'On' platform: state to: 'Off' condition: action: - data: entity_id: service 'cover.master_bed_headboard': cover.stop_cover - id: '1548308863495' alias: MBR Bedside CP Button 6a trigger: - entity_id: sensor.bedside_cp1_button_6 de: 'Off' platform: state to: 'On' condition: action: - data: entity_id: ' service cover.master_bed_headboard': cover.close_cover - id: '1548308911467' alias: MBR Bedside CP Button 6b trigger: - entity_id: sensor.bedside_cp1_button_6 de: 'On' platform: state to: 'Off' condition: action: - données: entity_id: service 'cover.master_bed_headboard': cover.stop_cover

Conseillé: