Gå till innehåll

Guide: Styr VVB med servo och Home Assistant

I den här guiden beskriver jag hur man kan styra termostaten på en VVB (varmvattenberedare) med hjälp av ett servo.

Bakgrund:

Eftersom att jag har timpris på elen hemma så vill jag kunna styra så att varmvattenberedaren används när elen är som billigast.

När det har varit timmar med ovanligt höga priser så har jag lyft bort skyddskåpan till min VVB och manuellt vridit ner termostaten för att min VVB inte ska värma vattnet när priset är högt. När priset sedan har gått ner så har jag fått vrida upp temperaturen.

Nu ville jag dock hitta en lösning för att automatisera detta.

Lösning för att styra VVB

Det finns några olika sätt att styra sin VVB på.

Alternativ 1: Bryt strömmen med en kontaktor

Den snyggaste lösningen enligt mig är att bryta strömmen till VVB:en. En lösning för detta skulle kunna vara att använda en kontaktor och sedan styra den med exempelvis en infälld fjärrströmbrytare (ex. Shelly 1).

Detta är antagligen den lösningen som jag kommer använda mig av framöver, men med tanke på att detta kräver en kontaktor och en elektriker så har jag valt att börja med alternativ 2.

Alternativ 2: Justera termostaten med ett servo

Om man inte vill installera en kontaktor för att bryta strömmen så kan man automatisera så att man vrider på vredet till termostaten på VVB:en med hjälp av ett servo.

Eftersom att jag hade både servo och ESP8266 (D1 Mini) liggandes hemma så var det här en passande lösning för mig att testa.

D1 Mini koppling mot servo SG90.

Vad som behövs:

För att styra vredet på min VVB har jag valt att använda ett servo. Det servot jag använde var SG90 som jag köpt på Kjell & Company.

Sedan använder jag en D1 Mini (ESP8266) för att styra servon.

Utöver ovanstående så har jag sedan några kablar och en USB-strömadapter (5V) som används för att driva min D1 Mini.

  • Styrenhet (D1 Mini)
  • Servo (SG90)
  • Kablar
  • Strömförsörjning (5V, USB)
D1 Mini med 5V, G och D2 kopplad till servon.

Steg 1:

Det första steget är att se till att man har ESPHome installerat i Home Assistant.
Om man inte redan installerat ESPHome så kan det vara bra att läsa min guide om hur man kommer igång med ESPHome först.

Steg 2:

Nästa steg är att öppna ESPhome i Home Assistant:

Inställningar – Tillägg – ESPHome – Öppna webbgränssnitt

  1. Klicka på ”NEW DEVICE
  2. Klicka på ”OPEN ESPHOME WEB
  3. Klicka på ”CONNECT
Knappen ”connect” i ESPHome.
  1. Koppla sedan in D1 Mini till datorn och välj USB-uttaget där D1 Mini är ansluten.
  2. I mitt fall väljer jag ”USB2.0-Ser! (cu.usbserial-110)”.
  3. Klicka sedan på ”Anslut”.
Val av port där min D1 Mini är inkopplad.
  1. Klicka på ”PREPARE FOR FIRST USE”.
  2. Klicka på ”INSTALL”.
  3. Vänta på att ESP installeras.
D1 Mini konfigureras via ESPHome.

När konfetti-emojin syns så är det färdigt.

Vy som visar när konfigurationen är installerad.

Steg 3:

Nästa steg är att ange wifi-uppgifter så att min D1 Mini kan ansluta till mitt nätverk.

Jag väljer därför ”CONNECT TO WI-FI”.

Anslutning till wifi för D1 Mini.


Därefter fyller jag i mina wifi-uppgifter för det nätverk som jag önskar ansluta till och klickar sedan på ”CONNECT”.
Sedan kan jag klicka på ”CLOSE”.

Steg 4:

  1. Nu kan jag lägga till min D1 Mini i ESPHOME genom att klicka på ”ADOPT” i ESPHome.
  2. Därefter får jag välja ett namn för min D1 Mini och sedan klickar jag på ”ADOPT”.
  3. Sedan klickar jag på ”INSTALL
    Min D1 Mini konfigureras nu.
Koden kompileras och överförs till min D1 Mini.


Efter ett tag så bör det stå ”INFO Successfully uploaded program.”
Sedan kommer det fram en lila text som bekräftar att min D1 Mini har anslutit till nätverket.

  1. Jag kan därefter klicka på ”STOP”.

Steg 5:

Nästa steg är att redigera konfigurationen av min D1 Mini.
Detta gör jag genom att i ESPHome klicka på ”EDIT” under min D1 Mini-enhet.

Jag kan då se att jag har följande kod:

esphome:
  name: esphome-web-6b7059
  friendly_name: VVB-servo

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: ....

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: ....
    password: ....

captive_portal:

Jag byter då ut koden till följande:

esphome:
  name: esphome-web-6b7059
  friendly_name: VVBservo

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: ...
  services:
    - service: control_servo
      variables:
        level: float
      then:
        - servo.write:
            id: my_servo
            level: !lambda 'return level / 100.0;'

ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: ...
    password: ...

captive_portal:
    
# Konfigurera servo
servo:
  - id: my_servo
    output: pwm_output

output:
  - platform: esp8266_pwm
    id: pwm_output
    pin: D2
    frequency: 50 Hz

binary_sensor:
  - platform: status
    name: "Servo device status"

Förklaring av koden:

Jag anger att jag använder en D1 Mini och att signalen till servon ska skickas från PIN D2. Jag skapar också en tjänst som jag kan anropa i HA som gör att värdet som skickas till servon är mellan -1.0 och 1.0.

Längst ner lägger jag även till en binär sensor som visar status för min D1 Mini, så jag kan se om den är ansluten eller inte.

För att ladda upp min nya kod så väljer jag ”INSTALL”.

Sedan väljer jag ”Wirelessly” som gör att HA skickar koden till min D1 Mini via wifi.

Överför kod via ESPHome till min D1 Mini.

Koden är nu överförd till min D1 Mini.

För att sedan koppla ihop Home Assistant med min D1 Mini så att jag kan få tillgång till all data i Home Assistant så går jag in på:

Inställningar – Enheter och tjänster – ESPHome

Där kan jag då välja ”KONFIGURERA” och sedan klicka vidare. Det gör att min D1 Mini nu är hopkopplad med Home Assistant.

Ihopkoppling av D1 Mini med Home Assistant.

Nästa steg är att skapa en sensor (input_number) i Home Assistant som kan styra min D1 Mini.

Jag lägger därför till följande i min configuration.yaml:

input_number:
  # Servo
  servo_control:
    initial: 0
    min: -100
    max: 100
    step: 1
    mode: slider

Det gör att jag får en slider-sensor i Home Assistant som heter ”servo control”.

Genom att starta om Home Assistant kan jag nu lägga till mina nya entiteter:

Det som nu återstår är att koppla ihop så att den nya entiteten ”servo control” styr min D1 Mini. Detta gör jag genom att lägga in följande automatisering i Home Assistant:

alias: Skicka servovärde till D1 Mini
trigger:
  - platform: state
    entity_id: input_number.servo_control
action:
  - service: esphome.esphome_web_6b7059_control_servo
    data_template:
      level: "{{ trigger.to_state.state | int }}"

esphome.esphome_web_6b7059_control_servo är namnet på tjänsten som jag har skapat i ESPHome.

Detta gör att slidern (servo control) nu styr min servo.

D1 mini med servo SG90 inkopplade under min varmvattenberedare.

För att placera servon under vredet har jag skrivit ut en enkel ställning med hjälp av min 3D-skrivare.
Jag har även skrivit ut ett case till min D1 Mini med hjälp av 3D-skrivaren.

Resultat

Jag kan nu styra vredet på min termostat i Home Assistant med hjälp av slidern (servo control). Detta gör att jag vrida ner termostaten direkt från Home Assistant när jag inte vill att min VVB ska värma vattnet.

Detta gör att jag nu kan skapa automatiseringar med min nya sensor som exempelvis sänker termostaten vissa tider eller när elpriset är högt.

OBS! Tänk på risken för legionella

Om man håller på och ändrar temperaturen på vattnet i sin VVB så är det viktigt att tänka på risken för tillväxt av legionella. Det är därför viktigt att man hettar upp vattnet med jämna mellanrum så att bakterierna dör. Mer information om legionella finns på Boverkets webbplats.