Watts Live ind i MQTT og Home Assistant

Forudsætning og good-to-know

MQTT opsætning med Watts Live enheden er desværre ret teknisk, men de bør være i gang med at optimere dette flow. De fleste der opsætter det, kommer til at udfordre sig selv på nogle teknologier, de nok aldrig har arbejdet med før. Heriblandt er der eksempelvis brugt Bluetooth Low Energy (BLE). MEN!.. hvis du følger denne guide, så burde det være ret nemt!

Link til deres guide: https://watts.zendesk.com/hc/da/articles/10271861655580-Brug-Watts-Live-sammen-med-Home-Assistant

1. nRF Connect

Hop ind i din telefons app store og hent nRF Connect appen. Denne skal vi bruge til at kommunikere med Watts Live enheden.

2. BLE

Uden at gå for meget i detaljer, så findes der BLE services og BLE characteristics. De kan generelt kendes ud fra at have et UUID ligesom dette: fdcc2493-61be-421b-972c-d0be66b3d4a6

En service (MQTT) kan have mange characteristics (hostname, port, username og password).

Du kan aflæse (READ) og skrive (WRITE) til characteristics, men hver characteristic har en type såsom tekst (TEXT) og tal (UINT16). Det er vigtigt under opsætningen, at du vælger de rigtige typer, for ellers vil opsætningen fejle.

READ ligner en pil ned og WRITE ligner en pil op. Tænk på download og upload.

3. Sluk/genstart af Watts Live

For at genstarte Watts Live enheden, skal du tage den ud af din elmåler og vente indtil LEDerne stopper med at lyse. De må hverken blinke eller være tændt. Dette kan godt tage op til 5 minutter (dog omkring 2-3 minutter ud fra mine tests).

Du skal i alt genstarte din Watts Live enhed to gange.

4. MQTT information

Du kan bruge hvilken som helst MQTT broker såsom Mosquitto eller HiveMQ, men Watts Live understøtter desværre ikke SSL/TLS certifikater. Watts Live understøtter username og password, så du er i det mindste lidt sikret!

Dit Watts Live data findes under dette topic: watts/SERIENUMMER/measurement

SERIENUMMER kan du (desværre) kun finde på det fysiske produkt eller boksens omslag. I mit MQTT Explorer program til Windows, får jeg bare alt lortet serveret på et sølvfad, uden at skulle vælge hvilke topics jeg vil subscribe til. Alternativt kan man hos mange brokere og i mange programmer bare subscribe på #, hvilket burde give det samme.

SERIENUMMER er IKKE det samme som det serienummer du kan se i appen.

Opsætning af BLE characteristics

Start med at tage din Watts Live ud af elmåleren. Vent indtil alle LEDer stopper med at lyse. Sæt den derefter i elmåleren igen, hvorefter LEDerne begynder at blinke igen.

Åbn nRF Connect applikationen på din telefon og tryk på Scan oppe i højre hjørne. På listen burde du nu finde Watts Live, hvorefter du kan trykke på Connect:

Du er nu inde på en ny skærm, hvor du kan se de forskellige services. Find den der har dette UUID:

a2e1ea9b-01e8-4fe5-9b99-35e9cb44d4b6

Udvid den ved at trykke på hele rækken, hvorefter der burde komme en masse characteristics frem (4 i mit tilfælde). Disse characteristics er hostname, port, username og password:

8143af58-b9b8-47ca-911d-ad3564f10d0b – Hostname – TEXT (tekst)

c0175553-1ffd-4eb5-99ca-dc271f4ca050 – Port – UINT16 (tal)

41b6703a-0bac-46b4-a0fa-273f5bf641dc – Username – TEXT (tekst)

a59394ed-b929-41a9-81ab-8a16eec6a28c – Password – TEXT (tekst)

Kan du huske, jeg nævnte at typerne var vigtige? De skal nemlig vælges nu, når du skal til at WRITE dine oplysninger.

Hvis din MQTT broker ikke kræver et login, så skal du bare ignorere username og password. Du behøver ikke skrive en tom streng eller lignende.

I nRF Connect skal du blot klikke på pil op (WRITE) ud fra hver characteristic og så udfylde dem med dine oplysninger. Det kunne ligne noget i denne stil for hostname:

Og for port:

Bemærk at jeg har valgt TEXT for hostname og UINT 16 for port.

Så skal du bare klikke på Send, og så bliver værdierne skrevet direkte til din Watts Live enhed.

Du kan med fordel trykke på pil ned (READ), for at sende et “BLE request” der anmoder om, hvad enheden har gemt for den characteristic. nRF Connect har lidt svært ved at konvertere en UINT 16 om til et normalt tal, så du ser måske et hexadecimal tal i stedet for.

Nu skal du egentligt bare genstarte din Watts Live enhed. Tag strømmen fra, vent til LEDerne stopper med at lyse og sæt den til igen. Hop ind i din yndlings MQTT explorer og se dine nye fantastiske værdier:

Få data ind i Home Assistant

Watts teamet har været så rar at inkludere et par templates til sensors, så man kan hive dataen ud af MQTT og ind i sensors:

mqtt:
  - sensor: &watts_sensor
      name: Positive Active Energy
      device:
        name: Watts Live (SERIAL_NUMBER)
        identifiers: SERIAL_NUMBER
      device_class: energy
      state_class: total
      unit_of_measurement: Wh
      state_topic: watts/SERIAL_NUMBER/measurement
      value_template: "{{ value_json.positive_active_energy }}"
      unique_id: positive_active_energy
  - sensor:
      << : *watts_sensor
      name: Negative Active Energy
      device_class: energy
      state_class: total
      unit_of_measurement: Wh
      value_template: "{{ value_json.negative_active_energy }}"
      unique_id: negative_active_energy
  - sensor:
      << : *watts_sensor
      name: Positive Reactive Energy
      device_class: energy
      state_class: total
      unit_of_measurement: varh
      value_template: "{{ value_json.positive_reactive_energy }}"
      unique_id: positive_reactive_energy
  - sensor:
      << : *watts_sensor
      name: Negative Reactive Energy
      device_class: energy
      state_class: total
      unit_of_measurement: varh
      value_template: "{{ value_json.negative_reactive_energy }}"
      unique_id: negative_reactive_energy
  - sensor:
      << : *watts_sensor
      name: Positive Active Power
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      value_template: "{{ value_json.positive_active_power }}"
      unique_id: positive_active_power
  - sensor:
      << : *watts_sensor
      name: Negative Active Power
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      value_template: "{{ value_json.negative_active_power }}"
      unique_id: negative_active_power
  - sensor:
      << : *watts_sensor
      name: Positive Active Power L1
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      value_template: "{{ value_json.positive_active_power_l1 }}"
      unique_id: positive_active_power_l1
  - sensor:
      << : *watts_sensor
      name: Positive Active Power L2
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      value_template: "{{ value_json.positive_active_power_l2 }}"
      unique_id: positive_active_power_l2
  - sensor:
      << : *watts_sensor
      name: Positive Active Power L3
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      value_template: "{{ value_json.positive_active_power_l3 }}"
      unique_id: positive_active_power_l3
  - sensor:
      << : *watts_sensor
      name: Negative Active Power L1
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      value_template: "{{ value_json.negative_active_power_l1 }}"
      unique_id: negative_active_power_l1
  - sensor:
      << : *watts_sensor
      name: Negative Active Power L2
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      value_template: "{{ value_json.negative_active_power_l2 }}"
      unique_id: negative_active_power_l2
  - sensor:
      << : *watts_sensor
      name: Negative Active Power L3
      device_class: power
      state_class: measurement
      unit_of_measurement: W
      value_template: "{{ value_json.negative_active_power_l3 }}"
      unique_id: negative_active_power_l3
  - sensor:
      << : *watts_sensor
      name: Positive Reactive Power
      device_class: reactive_power
      state_class: measurement
      unit_of_measurement: var
      value_template: "{{ value_json.positive_reactive_power }}"
      unique_id: positive_reactive_power
  - sensor:
      << : *watts_sensor
      name: Negative Reactive Power
      device_class: reactive_power
      state_class: measurement
      unit_of_measurement: var
      value_template: "{{ value_json.negative_reactive_power }}"
      unique_id: negative_reactive_power
  - sensor:
      << : *watts_sensor
      name: Voltage L1
      device_class: voltage
      state_class: measurement
      unit_of_measurement: V
      value_template: "{{ value_json.voltage_l1 }}"
      unique_id: voltage_l1
  - sensor:
      << : *watts_sensor
      name: Voltage L2
      device_class: voltage
      state_class: measurement
      unit_of_measurement: V
      value_template: "{{ value_json.voltage_l2 }}"
      unique_id: voltage_l2
  - sensor:
      << : *watts_sensor
      name: Voltage L3
      device_class: voltage
      state_class: measurement
      unit_of_measurement: V
      value_template: "{{ value_json.voltage_l3 }}"
      unique_id: voltage_l3
  - sensor:
      << : *watts_sensor
      name: Current L1
      device_class: current
      state_class: measurement
      unit_of_measurement: A
      value_template: "{{ value_json.current_l1 }}"
      unique_id: current_l1
  - sensor:
      << : *watts_sensor
      name: Current L2
      device_class: current
      state_class: measurement
      unit_of_measurement: A
      value_template: "{{ value_json.current_l2 }}"
      unique_id: current_l2
  - sensor:
      << : *watts_sensor
      name: Current L3
      device_class: current
      state_class: measurement
      unit_of_measurement: A
      value_template: "{{ value_json.current_l3 }}"
      unique_id: current_l3

Jeg bruger desværre en lidt anden måde at sætte MQTT sensors op, så jeg har eksempelvis dette i min configuration.yaml fil:

mqtt:
  sensor: !include mqtt_sensor.yaml

Og i min mqtt_sensor.yaml fil har jeg så været nødt til at tilføje state_topic: watts/SERIAL_NUMBER/measurement for hver eneste:

 - name: Positive Active Power
   device_class: power
   state_class: measurement
   unit_of_measurement: W
   state_topic: watts/MIT ID HER SOM TEKST/measurement
   value_template: "{{ value_json.positive_active_power }}"
   unique_id: positive_active_power

 - name: Negative Active Power
   device_class: power
   state_class: measurement
   unit_of_measurement: W
   state_topic: watts/MIT ID HER SOM TEKST/measurement
   value_template: "{{ value_json.negative_active_power }}"
   unique_id: negative_active_power

Hvis nogen ved hvordan man benytter sig af “variabler” ligesom i deres eksempel, så skriv gerne!

Genstart Home Assistant efter du har fået værdierne ind, så burde du nu få en masse sensors med værdierne i:

Derefter kan du lave en ny sensor, som tæller værdien op løbende, hvor du så kan tilføje den til Energy tabben i Home Assistant, hvor du kan få bonuspoint, hvis du har sat Energi Data Service op til at trække prisen i samme omgang:

template:
  - sensor:
      - name: "Watts Live lifetime consumption"
        unit_of_measurement: "Wh"
        state: "{{ states('sensor.positive_active_power') }}"
        state_class: "total_increasing"
        device_class: "energy"

Disclaimer: Jeg er ikke 100% sikker på, det er sådan det fungerer, hvis man har solceller, inverter og så videre. Hvis nogen ved mere om det, så prik gerne til mig.

Watts har også lavet deres egne Apex Charts grafer og sensors, som du kan bruge eller drage inspiration fra. Dem finder du i deres guide og kan eksempelvis se sådan her ud:

Too long, did not read (for nørderne)

  1. Genstart din Watts Live enhed og vent indtil LEDerne slukker, før du kobler den til igen
  2. Forbind til den med nRF Connect eller lignende og find servicen a2e1ea9b-01e8-4fe5-9b99-35e9cb44d4b6
  3. Skriv værdierne til disse characteristics (undlad username og password, hvis du ikke har det):
    • 8143af58-b9b8-47ca-911d-ad3564f10d0b – Hostname – TEXT (tekst)
    • c0175553-1ffd-4eb5-99ca-dc271f4ca050 – Port – UINT16 (tal)
    • 41b6703a-0bac-46b4-a0fa-273f5bf641dc – Username – TEXT (tekst)
    • a59394ed-b929-41a9-81ab-8a16eec6a28c – Password – TEXT (tekst)
  4. Genstart din Watts Live enhed

31 svar til “Watts Live ind i MQTT og Home Assistant”

  1. Ivan Skotte Trampedach Avatar
    Ivan Skotte Trampedach

    tak for vejledning. Virkede indtil Template sensor som jeg ikke kan få til at virke med den template. Så jeg bruger watts vejl. og beskrivelse for tidligere versioner.
    Er der en oversætter for hvad de enkelte sensore er oversat til dansk f.eks. Negativ Activ Energy og Positiv Active Energy ?

    1. Morten Avatar

      Hmm hvilken fejl får du med min sensor? Hvis du ikke har gjort præcis ligesom mig, hvor du har en !include mqtt_sensor.yaml (eller andet filnavn), så vil det fejle, ja. Jeg ved desværre ikke om der findes et form for katalog over de enkelte sensorer, men det meste burde give mening synes jeg.

    2. Jonas Gudtmann Avatar
      Jonas Gudtmann

      Er det sådan en beskrivelse her du leder efter? https://watts.zendesk.com/hc/da/articles/10367439587996

      1. Ivan Trampedach Avatar
        Ivan Trampedach

        Lige nøjagtigt!
        Tak.

  2. Kim Avatar
    Kim

    Sikkert et dumt spørgsmål, men forbinder den til HA via. Bluetooth? Kræver det så, at ens HA er tæt på Watts måleren?
    Jeg kører det på en Raspberry pi 3 som har indbygget BT.

  3. Kim Avatar
    Kim

    Det var så et dumt spørgsmål. Der står jo direkte på deres side: Watts Live Echelon kræver en 2.4GHz WiFi forbindelse ved måleren

    1. Morten Avatar

      Haha, ingen dumme spørgsmål her. Korrekt at den hopper på via WiFi og sender MQTT dataen over WiFi. Bluetooth bruges udelukkende til MQTT opsætningen, mig bekendt.

  4. Peter Avatar
    Peter

    Tak for en super fin guide, som gjorde det ganske nemt at få det hele sat op.
    Jeg har dog et problem med at få min “total_increasing” template sensor til at virke ordentligt.
    Som i dit eksempel benytter jeg state fra “sensor.positive_active_power”, men min nye sensor “Watts Live lifetime consumption” sensor tæller ikke kun op som jeg ville have forventet, nej den tæller lige så meget nedad.

    Eksempel: 0.306 – 0.304 – 0.302 – 0.309 – 0.332

    Har nogen oplevet noget af det samme og evt. kender til en løsning?

    1. Morten Avatar

      Jeg oplever lidt i samme stil, desværre. Jeg har måske misforstået hvordan den her sensor virker. Hvis det er den der overhovedet skal bruges. Værdierne burde ændre sig, men den skal være total_increasing fordi der “bagved” så bliver talt op. Tror jeg. Jeg har lige prøvet at ændre den til kWh (og divideret nummeret med 1000), så må vi se om det hjælper herfra. Tallet i energi tabben er i hvert fald stukket heeelt af!

    2. Søren Lundsgaard Avatar
      Søren Lundsgaard

      Jeg bruger positive_active_energy som sensor i energisektionen. Det fungerer og den tæller op i løbet af dagen.
      Se evt. https://watts.zendesk.com/hc/da/articles/10367439587996

      1. Peter Avatar
        Peter

        Det var lige præcis dét jeg også fik fundet frem til, efter at have læst Watts egen beskrivelse af mqqt payloads. Energy Dashboard skal altså bare have positive_active_energy direkte ind. Da jeg har behov for at få oprettet individuelle sensorer på daglig , ugentlig, månedlig og årlig forbrug, har jeg blot lavet en række utility_meter sensorer ved siden af. Det virker perfekt, så alt er godt nu.. 🙂

        1. Bent Avatar
          Bent

          Hej Peter,
          Vil du dele koden til de sensorer for daglig, ugentlig og månedlig forbrug?

  5. Michael Avatar
    Michael

    Nu findes der jo ingen dumme spørgsmål har jeg læst længere oppe, så… 🙂

    Det hostname der skal skrives i Watts modulet, er det adressen på ens Home Assistant?
    Jeg går ud fra at det er der man installerer MQTT?

    1. Morten Avatar

      Det er hvor end du rammer din (typisk) port 1883. Du kan installere din MQTT broker hvor du har lyst, og så prøve at ramme den med MQTT Explorer eller lignende værktøjer. Hvis du tilgår HA på 192.168.1.123:8123, og du har installeret Mosquitto inde i HA, så er der en god chance for at hostname blot er 192.168.1.123 – altså samme som din HA.

  6. Henrik Avatar
    Henrik

    danskhomeassistantgruppe rabat koden virker ikke mere

    1. Morten Avatar

      Korrekt – tak fordi du mindede mig om det. Den udløb desværre i dag.

      1. Kim Avatar
        Kim

        Man kan få 20% indtil d.24/9 her: https://watts.zendesk.com/hc/da/articles/10271861655580-Brug-Watts-Live-sammen-med-Home-Assistant

        Tilbud:
        I denne uge kører vi tilbud på Watts Live med 20% med rabatkoden:
        wattslive20
        Gældende til og med: 24. september 2023
        https://shop.watts.dk/

  7. Niels Pryds Avatar
    Niels Pryds

    Hej!
    Jeg havde det indtryk at data fra el-måleren var krypteret med to unikke nøgler som skulle rekvireres fra forsyningsselskabet.
    Skal disse nøgler ikke også konfigureres i Watts modulet?

    1. Morten Avatar

      Jo, men den del foregår i selve opsætningen af Watts Live modulet. Du kan se nærmere omkring krypteringsnøglerne her: https://shop.watts.dk/netselskaber/

  8. Niels Pryds Avatar
    Niels Pryds

    Ahh, så man skal bruge Watts App’en til den del af opsætningen? Egentlig sjovt at de ikke har lavet BT opsætningen via App’en også, de kunne have fået et væsentlig bedre (mindre kompliceret) UI setup på den måde.

    1. Morten Avatar

      Yes, lige præcis. Jeg er under den opfattelse at MQTT opsætningen bliver forbedret, da de bare skulle have det ud på markedet hurtigst muligt (som jo er forståeligt). Det tager nu ellers ikke mange minutter at gøre det på denne måde, men det er lidt besværligt.

  9. Sune Avatar
    Sune

    Tak for guiden.

    Det er noget af det mere avancerede jeg har lavet i HA, men det lykkedes til sidst 🙂

    Jeg gik selv i “fælden” med din sensor til at tælle op og missede at Watts linker til følgende side, hvor de nævner at bruge positive_active_energy i HA energytrackeren: https://watts.zendesk.com/hc/da/articles/10367439587996

  10. Niels Pryds Avatar
    Niels Pryds

    Til dem der kommer i samme situation som mig:
    For et års tid siden rekvirerede jeg krypteringsnøgle via email hos Radius, disse blev tilsendt efterfølgende fra Kamstrup. Jeg fik tilsendt gpk60 og gpk61 nøglerne og disse har virket fint på mit hjemmelavede HAN modul.
    Efter skift til Watts Live har der været lidt problemer med at få det til at virke, indtil jeg blev oplyst at det var gpk11 nøglen jeg skulle bruge, denne kan rekvireres via dette link, “https://encryptionkey.azurewebsites.net/encryption-key”

    Håber det kan spare andre for nogle spildte timer. :o)

  11. Raphael Dörnen Avatar
    Raphael Dörnen

    Hi alle sammen,
    my written Danish is a bit weak sorry for that.
    First thanks for the guide! I got my reader yesterday and love it.
    The only thing I can not get to work is the authenticated MQTT access.
    Anyone had similar issues?
    I chose the text format and the username + password but I can see in my Mosquito logs that the access gets denied. All other devices connect seamlessly with the same username/ password. Once I switch to unauthorized it works and I can see my Watts data coming in. Any ideas? I tried to push both username and password multiple times to the reader but no success.
    Tak!

    1. Morten Avatar

      Hmm not really sure about that, to be honest. Does your username or password contain any unusual characters? Is the encoding set to UTF-8?

      1. Raphael Dörnen Avatar
        Raphael Dörnen

        Thanks for getting back to me so quickly!
        No unusual characters, just numbers and letters, but its 39 chars long. I ensured the UTF-8 format.
        Maybe I hit some char limit.

        1. Morten Avatar

          Hmm I just spoke to Watts about it, and the character limit is 64. I was worried it might be 32. They don’t have a good suggestion what it could be. Can you connect to your MQTT instance using the username and password using something like MQTT Explorer?

          1. Raphael Dörnen Avatar
            Raphael Dörnen

            Hey Morten,
            sorry for the late reply.
            I had ensured with MQTT Explorer that my credentials worked as expected and also recently had added a Ulanzi clock (which I can highly recommend ;)) via MQTT.
            Long story short, I created a new MQTT user with no capital letter and a shorter password and that did the trick 🙂
            The energy reader works now as expected and I love it. Next plan is to add some solar panels to my roof and a battery storage. You don’t happen to have some experience with that? 🙂
            I also wanna start reading out my fjernvame somehow but not sure if there is a similar Watts reader for that.
            Thanks again!!

  12. Uffe O Avatar
    Uffe O

    Watts giver 30% rabat på modulet i weekenden 25-26 november, se detaljer i Watts appen

  13. Jeppe W Avatar
    Jeppe W

    Mange tak for en fantastisk og nem at forstå guide.
    Med hensyn til variabler i separat folder ser det ud til at jeg har fundet en løsning.

    Så for dem som ikke har fået det til at virke endnu i en separat folder eller er ved at sæt det op for første gang. Så var det det her jeg gjorde:

    I configuration yaml skrev jeg følgende:

    mqtt: !include mqtt_sensor.yaml

    I stedet for:
    mqtt:
    sensor: !include mqtt_sensor.yaml

    I mqtt_sensor.yaml copy pastede jeg bare alt den konfiguration fra Watts live dokumentationen pånær MQTT:

    Her er de 2 første sensor’ere som eksempel(serial nr skal selvfølgelig udskiftet):
    – sensor: &watts_sensor
    name: Positive Active Energy
    device:
    name: Watts Live (SERIAL_NUMBER)
    identifiers: SERIAL_NUMBER1
    device_class: energy
    state_class: total
    unit_of_measurement: Wh
    state_topic: watts/SERIAL_NUMBER/measurement
    value_template: “{{ value_json.positive_active_energy }}”
    unique_id: positive_active_energy
    – sensor:
    << : *watts_sensor
    name: Negative Active Energy
    device_class: energy
    state_class: total
    unit_of_measurement: Wh
    value_template: "{{ value_json.negative_active_energy }}"
    unique_id: negative_active_energy

  14. Jeppe W Avatar
    Jeppe W

    Kan se den ikke beholder mellemrum hvis linjen starter med mellemrum når jeg slår kommentaren op, så her er config igen hvor * bliver brugt som mellemrum, så der hvor der er * skifter man det bare ud med mellemrum(pånær den her *watts_sensor):

    **- sensor: &watts_sensor
    ******name: Positive Active Energy
    ******device:
    ********name: Watts Live (11D1045220005661)
    ********identifiers: 11D1045220005661
    ******device_class: energy
    ******state_class: total
    ******unit_of_measurement: Wh
    ******state_topic: watts/11D1045220005661/measurement
    ******value_template: “{{ value_json.positive_active_energy }}”
    ******unique_id: positive_active_energy
    **- sensor:
    ******<< : *watts_sensor
    ******name: Negative Active Energy
    ******device_class: energy
    ******state_class: total
    ******unit_of_measurement: Wh
    ******value_template: "{{ value_json.negative_active_energy }}"
    ******unique_id: negative_active_energy

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *