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.

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)

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
- Klicka på ”NEW DEVICE”
- Klicka på ”OPEN ESPHOME WEB”
- Klicka på ”CONNECT”

- Koppla sedan in D1 Mini till datorn och välj USB-uttaget där D1 Mini är ansluten.
- I mitt fall väljer jag ”USB2.0-Ser! (cu.usbserial-110)”.
- Klicka sedan på ”Anslut”.

- Klicka på ”PREPARE FOR FIRST USE”.
- Klicka på ”INSTALL”.
- Vänta på att ESP installeras.

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

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”.

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:
- Nu kan jag lägga till min D1 Mini i ESPHOME genom att klicka på ”ADOPT” i ESPHome.
- Därefter får jag välja ett namn för min D1 Mini och sedan klickar jag på ”ADOPT”.
- Sedan klickar jag på ”INSTALL”
Min D1 Mini konfigureras nu.

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.
- 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.

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.

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.

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.