Home Assistant, ESP32-CAM och automatisk avläsning av en analog vattenmätare

Tänk om man kunde nyttja informationen från sin gamla analoga vattenmätare (som är helt fantastisk och cool) i Home Assistant för att hålla koll på hur mycket vatten som en bostad nyttjar samt skapa automatiska alarm för vattenläckage…

Du kommer behöva:

  • ESP32-CAM med 4MB PSRAM. Jag kör med de här.
  • En USB till TTL adapter, jag använder en AZDelivery FT232RL USB till TTL Seriell Adapter.
  • En Mini USB-sladd. Inte att förväxla med Mikro USB.
  • En 5V adapter. Jag köpte en sådan här.
  • Ett mindre Mikro SD-kort. Större funkar inte. Jag köpte en sådan här.
  • Kopplingskablar, hona-hona. Finns på Kjell eller Amazon, alltid bra att ha.
  • Lite lödningsskills eller en drös sockerbitar eller andra kopplingsdon.

Vi börjar med MQTT på Home Assistant. Installera Mosquitto broker via officiella Add-ons. När det är klart och du kört igång Mosquitto så passa på att skapa en användare. Detta är en vanlig användare i Home Assistant. Du kan skapa användare genom Settings –> People och sedan Users-tabben. Välj lämpligt namn (t.ex. mqtt) och lösenord.

Du bör kunna se MQTT som integration nu under Integrations. Tryck på Configure. Klart för denna stund.

Nu hoppar vi till ESP32-CAM:

Börja med att ta bort den yttre ringen runt själva objektivet. Använd en vass kniv och tryck ut den. Detta behövs för att kunna justera fokus senare. Fäst kameran och tryck ner kopplingen. Kika så att kameran sitter fast i kopplingen.

Se till att ha TTL-adaptern satt till 5V, det kan ställas in på kortet. I mitt fall nedan är det en svart jumper/koppling på vänstra sidan i bilden nedan som går att lyfta av och justera nedåt i bilden för 3V3:

Koppla följande:

IOO till GND (båda på ESP32-CAM) för att starta ESP32-CAM i bootmode.

UOR (ESP32-CAM) till TX (TTL)
UOT (ESP32-CAM) till RX (TTL)
GND (ESP32-CAM) till GND (TTL)
5V (ESP32-CAM) till VCC (TTL)

Koppla ihop allt enligt ovan, sedan koppla in i datorn med USB. Nu ska leden lysa. Öppna sedan https://jomjol.github.io/AI-on-the-edge-device.

Läs igenom om du känner behov och tryck sedan på Connect och välj COM-port, i mitt fall COM4:

Får du inte upp en port som är din adapter kan det bero på saknade drivrutiner. Här kan du hämta CP2102, som är den vanliga.

Välj install!

Klart! Koppla ur USB-kabeln och samtliga kablar från ESP32-CAM. Formatera minneskortet: FAT32, 32 kilobyte, MBR. Stoppa in allt från sdcard-mappen (hämtas här) till rooten på minneskortet och justera i wlan.ini.

ssid = wifi-namnet och password är såklart wifi-lösenordet.

ESP32-CAM i denna lösning behöver 5V. Då inte ESP32-CAM har ett dedikerat uttag för strömförsörjning får man tyvärr fixa ett eget. Det är som tur är inte allt för svårt så länge man antingen kan löda lite eller vet hur man skarvar lite kablar. Jag köpte en billig 5V-adapter från Amazon och klippte av änden, delade på kablarna och skalade upp så jag fick fram kopparledarna. Viktigt att hålla koll på vilken linje som är plus och vilken som är minus. Plus, dvs 5V, är oftast markerad med någon form av streckad linje. Sen så skalade jag av två kabel med hon-kontakter och lödde på dessa på kablarna. Med hjälp av kopplingskablarna kan jag sedan koppla direkt på ESP32-CAM utan att behöva löda på den. Koppla + till 5V och – till GND på ESP32-CAM.

Nu kommer det mekiga. Kameran behöver sitta på ett avstånd från vattenmätaren som är ca 4-10 cm. Det finns en drös mallar man kan printa ut om man har en 3D-skrivare men jag letade rätt på en vattenflaska som var lite större än glaset på vattenmätaren. Rikta kameran nedåt och se till att ha hål för både kameran och flashen (den gula rektangeln).

Leta rätt på IP-adressen via din router eller liknande och knappa in den i webläsaren:

Nu kommer det jobbiga. Man måste skapa nya referensbilder med ”Create New Reference” sedan ”Take Image”. Du kommer då förhoppningsvis se en bild som din ESP32-CAM tar av vattenmätaren. Justera fokus tills bilden är skarp. Justera rotationen så att allt är exakt rakt. Följ sedan guiden genom alla stegen för att ta ut digitala mätaren (siffrorna, blåa nedan), analoga mätarna (gröna) och referensdelarna (röda).

Ställ in MQTT:

Uri är din Home Assistant ip-adress samt port 1883 (om du inte ändrat den). Välj user och password enligt skapad användare i början. Boota om när du ombeds det och förhoppningsvis så kan du börja få ut värden från vattenmätare. Min funkade direkt.

För att få in nyttja datan som skickas till MQTT så behövs några entities skapas:

mqtt:
  sensor:
    - state_topic: "vattenmätare/main/value"
      name: "Watermeter Value"
      unique_id: watermeter_value
      unit_of_measurement: 'm³'
      state_class: total_increasing
      device_class: water # Needs Homeassistant 2022.11!
      icon: 'mdi:water-pump'
      availability_topic: vattenmätare/connection
      payload_available: connected
      payload_not_available: connection lost

    - state_topic: "vattenmätare/main/rate"
      name: "Watermeter Rate"
      unique_id: watermeter_rate
      unit_of_measurement: 'm³/min'
      state_class: measurement
      device_class: water # Needs Homeassistant 2022.11!
      icon: 'mdi:water-pump'
      availability_topic: vattenmätare/connection
      payload_available: connected
      payload_not_available: connection lost

    - state_topic: "vattenmätare/main/error"
      name: "Watermeter Error"
      unique_id: watermeter_error
      icon: "mdi:water-alert"
      availability_topic: vattenmätare/connection
      payload_available: connected
      payload_not_available: connection lost    

    - state_topic: "vattenmätare/uptime"
      name: "Watermeter Uptime"
      unique_id: watermeter_uptime
      unit_of_measurement: 's'
      state_class: measurement
      device_class: duration
      entity_category: diagnostic
      icon: "mdi:timer-outline"
      availability_topic: vattenmätare/connection
      payload_available: connected
      payload_not_available: connection lost

För att få värden i liter så behövs en template sensor skapas:


template:
  - sensor:
    - name: "Vattenmätare, liter"
      unique_id: watermeter_in_l
      icon: "mdi:gauge"
      state: "{{ states('sensor.watermeter_value')|float(default=0) * 1000 }}" # Convert 1 m3 => 1000 l
      unit_of_measurement: l
      availability: "{{ states('sensor.watermeter_value') not in ['unknown', 'unavailable', 'none'] }}"

Checka konfigurationsfilen och boota sedan om. Nu ska du kunna se dina entities under MQTT:

Watermeter Value kan nu läggas till vatten-delen i energi-dashboarden så att man vattenförbruknings automatiskt integreras i Home Assistant på ett snyggt sätt:

Dagsförbrukningen kan också skapas som en entity genom att göra en helper. Välj Utility Meter och följande:


Publicerat

i

, ,

av

Etiketter:

Kommentarer

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *