Innehållsförteckning:

Trådlös MQTT sänggavelkontroll: 5 steg (med bilder)
Trådlös MQTT sänggavelkontroll: 5 steg (med bilder)

Video: Trådlös MQTT sänggavelkontroll: 5 steg (med bilder)

Video: Trådlös MQTT sänggavelkontroll: 5 steg (med bilder)
Video: How to use sock to get unstuck #shorts 2024, Juli
Anonim
Trådlös MQTT sänggavelkontroll
Trådlös MQTT sänggavelkontroll
Trådlös MQTT sänggavelkontroll
Trådlös MQTT sänggavelkontroll

För några år sedan köpte vi en ny memory foam -säng och, som är fallet med de flesta sängar, var du tvungen att också köpa en av deras "godkända baser" för att behålla en garanti. Så vi valde den billigaste basen som också inkluderade möjligheten att höja och sänka sängens huvud. Några dagar senare levererades och installerades vår madrass och vår American Adjustables -bas med trådbundna kontroller (en för varje sida av sängen).

Det första vi märkte var att sladdarna i showroomet som var fina och långa inte var vad vi hade på vår säng! De i utställningslokalen hade tillägg. Dessa förlängningar ingick INTE i vår säng och intressant nog, ingen var intresserad av att sälja oss ett par förlängningskablar. Detta gav oss kontroller som knappt nådde toppen av sängen och som vi var tvungna att vända om för att använda.

Du får vad du betalar för

Efter cirka 6 månader märker vi att dragavlastningskragen på en av kontrollerna började riva. Några månader senare - bar tråd. Snabbspolning ungefär ett år, en av kontrollerna fungerar inte längre och den andra blir lite ryckig.

Återigen var ingen intresserad av att sälja ersättare till oss. Då slog det mig!

"Vänta en jäkla minut! Bygger jag inte ett hemautomatiserings- och KONTROLLSYSTEM?!?"

Steg 1: Upptäckt

Upptäckt
Upptäckt
Upptäckt
Upptäckt

Jag ville se vad jag kunde göra med det jag hade så jag tog den defekta kontrollapparaten och wow! det var mycket skit där inne! Vad var allt detta för? Jag klev tillbaka och tittade bara på linjerna som kom in och ut. Jag kunde se att det fanns en 12 volt matningsledning och en jordledning. De andra två raderna såg ut som signallinjer för de två upp- och nedknapparna. Så jag tog en chans och hoppade precis över 12V -strömförsörjningen till "upp" -linjen. Sängen började röra på sig! Jag flyttade sedan min bygelkabel över till "ned" -linjen och sängen gick ner!

I rutan finns kontakter för ytterligare 4 signalledningar och 4 knappar till. Min bästa gissning är att detta styrkort används i alla deras trådbundna basmodeller och de lägger bara olika ansiktsplattor över brädet efter behov. Så jag hade en arbetsteori. Jag testade matningsledningen för att se om den doppade under användning eller spikade när som helst - nej. Det var väldigt lite strömdragning över signalledningarna men de krävde 12 volt för att aktivera motorn.

Steg 2: Design

Design
Design
Design
Design
Design
Design
Design
Design

Så en enkel kontaktanslutning mellan VCC och signalstiftet är allt som behövs, men hur görs det i mitt system. Två reläer skulle krävas för kontakterna och en ESP8266 skulle fungera för den trådlösa styrenheten. Eftersom reläerna kan kräva mer ström än de digitala stiften kan leverera, är det bäst att använda en optoisolator mellan styrenheten och reläet. Detta gör att en liten signal kan slå på en högre strömbrytare (i detta fall en ljusdriven transistor) och säkert aktivera reläspolen. Dessutom isolerar en optoisolator regulatorn från alla spikar som kan bildas när reläspolen släpps och magnetfältet kollapsar. Lyckligtvis finns relämoduler som redan innehåller all denna krets och till ett ganska lågt pris.

Sängen kommer att vara strömförsörjningen för regulatorn och för att hantera de medföljande 12 volt behöver vi en variabel buck -omvandlare. En mycket billig sådan har länkats nedan och fungerar vackert. 12V-ledningen och GND-ledningarna ansluts till omvandlarens ingångssida och den reglerade 5 volt-sidan ansluter till VCC på NodeMCU och VCC-stiftet på relämodulen. (-) på omvandlaren ansluts till GND-stiften på både relämodulen och NodeMCU.

NodeMCU ansluter till IN1 med D1 (GPIO5) och IN2 med D2 (GPIO4). Uppsignallinjen på bädden ansluts till den normalt öppna skruvterminalen för relä 1 och den nedre signallinjen ansluts till relä 2 normalt öppet kopplingsplintanslutning. Du måste ansluta 12V -kabeln som är ansluten till ingångssidan på buck -omvandlaren också till den andra kopplingsplintanslutningen för Båda relä 1 och 2.

Delar

  • 1 - NodeMCU
  • 1 - Duellrelämodul med strömisolering
  • 1 - Variabel input/output buck -omvandlare
  • 1 - Brödbräda PCB
  • 22 gauge strängad kopparkärntråd
  • 2 - M3x 8 skruvar

Steg 3: Kapsling

Inhägnad
Inhägnad

Höljet hittar du här:

Jag konstruerade ett enkelt skåp med Tinkercad som gör att sängkontrollkabeln kan komma in i lådan mellan dragavlastningsfästen inuti lådan. Det finns platser för en dragkedja här som skulle hjälpa till att hålla kabeln från att glida, men i mitt fall var passformen väldigt tät och behövde den inte. Locket skruvas fast med 2 M3x 8 skruvar. Jag rekommenderar att du laddar upp koden och testar systemet innan du monterar den i lådan.

Jag använde varmt lim för att hålla brädorna på plats men det kanske inte är nödvändigt.

Steg 4: Kod

Koden finns här:

OBS: Detta projekt använder pubsubclient -biblioteket som kan läggas till i Library Manager i Arduino IDE

Koden här är ganska grundläggande och designades baserat på Cover MQTT -typen i Home Assistant. Tanken här är enkel: när du trycker på upp- eller nedknappen i hemassistenten stängs lämpligt relä tills stoppkommandot tas emot ELLER systemet når en maximal aktiveringstid och stannar.

Maxtiden är avsedd som en säkerhetsåtgärd om användaren glömmer att stoppa den eller om kommandot av misstag skickades och det är osannolikt att någon kommer att stoppa det. Vi vill inte ha reläet på obestämd tid eller några oväntade problem med sängen på grund av långvarig kontaktstängning.

I min kod är denna timeout 20 sekunder och kan justeras i det globala variabelblocket högst upp i koden.

En andra säkerhetsåtgärd var att alltid se till att om jag aktiverar det ena reläet alltid en avsiktlig avaktivering av det andra kallas, även om det sista läget redan var avstängt. Jag vill inte skicka 12v ner på båda signalledningarna eftersom jag inte vet vad det kommer att göra med sängen.

Förutom det publicerar sängen att den är tillgänglig var 60: e sekund och det är det. Inga klockor eller visselpipor här. Eftersom sängen inte har positionsåterkoppling kunde jag inte skicka tillbaka någon till Home Assistant.

Steg 5: Exempel på integration

Exempel på integration
Exempel på integration
Exempel på integration
Exempel på integration

Koden jag skrev använder MQTT för att kommunicera över WiFi och kan därför kommunicera med valfri automationshub eller enhet som använder MQTT. Jag använder Home Assistant som har en inbyggd MQTT -mäklare. Nedan är ett exempel på min HA -konfiguration.

I HA har jag en covers.yaml -fil med följande definition:

- plattform: mqtt

name: "Master Bed Headboard" command_topic: "master_bed_control/cmd" availability_topic: "master_bed_control/availability" qos: 0 behold: false payload_open: "UP" payload_close: "DOWN" payload_stop: "STOP" payload_available: "online" payload_not_available: " offline "optimistiskt: sant

Detta ger mig en post i mitt HA -gränssnitt med en upp/stopp/ned -knapp inställd med åtgärden enligt beskrivningen ovan.

Dessutom har jag definierat två knappar på min sängkontrollpanel (instruerbar / blogginlägg) för att höja och sänka sänggaveln. Knapparna på kontrollpanelen definieras som MQTT -sensorer:

- plattform: mqtt

state_topic: "bedside_cp1/button5" namn: "sängkanten CP1 knapp 5" ikon: mdi: cirkel

- plattform: mqtt

state_topic: "bedside_cp1/button6" namn: "Sängkants -CP1 -knapp 6" -ikon: mdi: cirkel

… och 4 automatiseringsregler för när varje knapp trycks och släpps. När den trycks in skickas kommandot upp eller ner till sängen beroende på vilken knapp som aktiverades, när knappen släpps skickas stoppkommandot:

- id: '1548308650383'

alias: MBR Bedside CP Button 5a trigger: - entity_id: sensor.bedside_cp1_button_5 from: 'Off' platform: state to: '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 from: 'On' platform: state to: 'Off' condition: action: - data: entity_id: 'cover.master_bed_headboard' service: cover.stop_cover - id: '1548308863495' alias: MBR Bedside CP Button 6a trigger: - entity_id: sensor.bedside_cp1_button_6 from: 'Off' platform: state to: 'On' condition: action: - data: entity_id: ' cover.master_bed_headboard 'service: cover.close_cover - id:' 1548308911467 'alias: MBR Bedside CP Button 6b trigger: - entity_id: sensor.bedside_cp1_button_6 from:' On 'platform: state to:' Off 'condition: action: - data: entity_id: 'cover.master_bed_headboard' service: cover.stop_cover

Rekommenderad: