Gå til innhold
  • Bli medlem
larsi70

GUIDE: Lese Aidon-HAN med Raspberry Pi og visualisere i Grafana

Anbefalte innlegg

Etter mange timer her på forumet og på Google har jeg satt opp et alternativ til Tibber Pulse basert på Raspberry Pi med MBUS til USB Slave modul. Siden det meste jeg har brukt kommer direkte fra tråder på dette forumet tenker jeg å lage en enkel guide til de som ønsker det samme. For spesielt interesserte anbefaler jeg å sjekke ut HAN-Bus tråden på forumet med tilhørende dokumentasjon

Guiden forutsetter et visst datateknisk kunnskapsnivå, men de fleste bør kunne oppnå samme resultat om guide følges slavisk. Guiden er lagt opp for og kun testet på Aidon/Hafslund med 3-fas 230V IT ved bruk av skagmo sine geniale Python-script. Dette kan sannsynligvis skrives om til å fungere på 1 fas 400V TN om man snakker Python.

 

Nødvendig Hardware:
  - Raspberry Pi (jeg bruker 3b+)
    - Minnekort (Micro SD) med plass til OS
    - Micro USB-kabel og USB-adapter som leverer minimum 2A
    - Et eller annet case/kabinett

  - MBUS til USB Slave dings, feks: https://www.aliexpress.com/item/USB-transfer-MBUS-module-slave-module-communication-debug-alternative-TSS721/32719562958.html
  - Vanlig Nettverkskabel
  - Aidon AMS

  Nødvendig software
  - Din favorittdistro, jeg bruker Raspbian (Stretch) Lite: https://www.raspberrypi.org/downloads/raspbian/
  - meter-reading av Skagmo: https://github.com/skagmo/meter_reading
    For visualisering:
      - influxdb
      - Grafana

1. Forbered MBUS-modulen
  - Kapp av RJ45-kontakten i den ene enden av nettverkskabelen
  - Identifiser pin 1 og 2 (de to første pinnene når du ser på kontakten med kontaktpunktene mot deg) De vil sannsynligvis være Grønn og Grønn/Hvit eller Oransje og Oransje/Hvit.
  - Kapp vekk de øvrige kablene og avmantle kablene som korresponderer med pin 1 og 2.
  - Skru de avmantlede lederne inn i MBUS-modulen (såvidt jeg har forstått har det ingen betydning hvilken kabel som går inn i hvilken terminal)
  - Koble MBUS-Modulen inn i en ledig USB-Port på RPi

2. Forbered minnekort for OS
  - Last ned Raspbian
  - Skriv til minnekort på en av måtene beskrevet her: https://www.raspberrypi.org/documentation/installation/installing-images/README.md
  - Definer Wifi og skru på SSH, Wifi er valgfritt og avhengig av om du har tilgang til kablet nett der RPi skal stå (Typisk i sikringsskap).
    - Når imaget er skrevet til minnekortet vil dette få navnet "boot", åpne boot/minnekortet og opprett en fil som heter "wpa_supplicant.conf" Legg inn følgende i fila:

    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    network={
      ssid="NETTVERKSNAVN"
      psk="PASSORD"
      key_mgmt=WPA-PSK
}
    Blir dette gjort riktig vil fila bli plukket opp ved oppstart og Raspbian husker nettverksoppsettet.

    - Opprett en helt tom fil på boot/minnekort som heter SSH, dette vil enable SSH ved oppstart.

  3. Start opp og installer nødvendig software
    - Koble RJ45-kontakten på nettverkskabelen inn i HAN-Pluggen på Aidon AMS
    - Sett minnekortet inn i RPi og koble på strøm.
      - Last over meter_reading fra Skagmo til RPi (feks til /tmp og pakk ut til feks /opt)
      - Last ned/installer pip (Pakkehåndering for Python): wget https://bootstrap.pypa.io/get-pip.py
                                                                                                              python get-pip.py

      - Last ned/installer avhengigheter: sudo pip install pyserial
                                                                    sudo pip install crcmod
                                                                    sudo pip install requests==2.7.0

Din Raspberry Pi har nå all nødvendig HW og SW for å hente data fra HAN-porten. Videre kan man bruke denne dataen litt forskjellig. Jeg kjører "aidon_forward.py" fra "meter_reading"-pakka som forwarder dataene til influxdb som jeg henter ut grafisk i Grafana.

  4. Installere influxdb og Grafana - Jeg kjører influxdb og Grafana på En egen maskin, men det skal være trivielt å sette opp dette på den samme Raspberry Pien som kjører "meter_reading".
    - Installer influxdb, dette er godt dokumentert på nett. (bruk google)
    - Installer Grafana, dette er også godt dokumentert.
    - Opprett databasen du ønsker å dytta data inn i, dette kan gjøres i GUI eller i kommandolinje. GUI: http://IP_TIL_RPI:8083 kommandolinje: "CREATE DATABASE <db-name>"

  5. Kjøre "meter_reading"
    - For å hente målingene og skrive direkte til influxdb kjører man "aidon_forward.py" mot USB-enheten, normalt vil denne finnes under /dev/ttyUSB0. I motsatt fall må man identifisere denne ved å feks kjøre "ls /dev/ttyUSB*".
      - Eks på kommando for å lese fra HAN og skrive til influx: "python aidon_forward.py /dev/ttyUSB0 --influx_host http://localhost:8086 --influx_db HAN"
      - Jeg har opprettet en unit-fil som gjør at jeg kan kalle på dette som en service, dette gjør også at scriptet kjøres opp ved oppstart ved feks strømstans etc.
        - Opprett en .service-fil under /lib/systemd/system/ kall den feks han.service. Eks. nano /lib/systemd/system/han.service
        - Legg inn nødvendig informasjon. eks:

        [Unit]
        Description=Kjorer HAN-Leser
        After=multi-user.target

        [Service]
        Type=idle
        ExecStart=/usr/bin/python /opt/meter_reading/aidon_forward.py /dev/ttyUSB0 --influx_host http://localhost:8086 --influx_db HAN

        [Install]
        WantedBy=multi-user.target

        - Sørg for at den har riktig rettigheter: "chmod 644 /lib/systemd/system/han.service"
        - Reload systemctl daemon og enable servicen: "systemctl daemon-reload" og "systemctl enable han.service"
        - Start servicen: "systemctl start han" eller restart PIen for å se at det fungerer som det skal: "reboot"

        - De som har installert Raspbian med grafisk grensesnitt opplever at man må legge inn en wait før ExecStart for at servicen skal starte riktig, Eks:  "ExecStartPre=/bin/sleep 5"

  6. Opprette Dashboard i Grafana.
    - Gå til din Grafana-instans. I nettleser gå til http://IP_TIL_RPI:3000
    - Logg inn med bruker: admin og passord: admin (det er åpenbart anbefalt å bytte dette)
    - Legg til datasourcen din:
      - Velg influxDB
      - Gi et navn
      - legg inn URL til influx, feks http://localhost:8086
      - Skriv inn databasenavnet du lagde i punkt 4.
      - Save & Test
    - Opprett dashboard og legg til et "panel". Databasen inneholder data om "power", "voltage", "current" og "energy".

    - Se vedlagt JSON for å importere Grafana-dashboard.
 

 

AMS-1560577324551.json

  • Like 4
  • Thanks 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Heisann!

 

Jeg har laget en dekoder som fungerer med den samme MBUS/USB-adapteren du nevner over. Den tar seg _KUN_ av dekoding av seriell-strømmen til JSON, men fungerer med både Aidon, Kamstrup og Kaifa-målere. I tillegg har den en opsjon for å kjøre et program for hver melding, så det er enkelt å lage en systemd unit som bruker f.eks. mosquitto_pub for å sende meldingen til et MQTT-endepunkt. Programmet er skrevet i Perl og skal fungere helt greit på en Raspberry Pi.

 

Her er linken, hvis det skulle være av interesse: https://github.com/robinsmidsrod/ams-han-decoder

 

Personlig bruker jeg det til å sende JSON-meldingene over MQTT (bruker mosquitto) til Node-Red, som igjen kverner litt på meldingene og sender de videre til InfluxDB. Deretter bruker jeg Grafana til å visualisere informasjonen lagret i InfluxDB.

 

-- Robin

Del dette innlegget


Lenke til innlegg
Del på andre sider
10 timer siden, Robin Smidsrød skrev:

Heisann!

 

Jeg har laget en dekoder som fungerer med den samme MBUS/USB-adapteren du nevner over. Den tar seg _KUN_ av dekoding av seriell-strømmen til JSON, men fungerer med både Aidon, Kamstrup og Kaifa-målere. I tillegg har den en opsjon for å kjøre et program for hver melding, så det er enkelt å lage en systemd unit som bruker f.eks. mosquitto_pub for å sende meldingen til et MQTT-endepunkt. Programmet er skrevet i Perl og skal fungere helt greit på en Raspberry Pi.

 

Her er linken, hvis det skulle være av interesse: https://github.com/robinsmidsrod/ams-han-decoder

 

Personlig bruker jeg det til å sende JSON-meldingene over MQTT (bruker mosquitto) til Node-Red, som igjen kverner litt på meldingene og sender de videre til InfluxDB. Deretter bruker jeg Grafana til å visualisere informasjonen lagret i InfluxDB.

 

-- Robin

 

Høres fint ut dette, men personlig skjønner jeg ikke helt hvorfor man skal gjøre dette så komplisert, "meter_reading" gjør jo "alt" i én og samme kode så man kan løsrive seg fra MQTT og Node-Red. Jeg syns ihvertfall dette er en stor fordel..

Del dette innlegget


Lenke til innlegg
Del på andre sider
48 minutter siden, larsi70 skrev:

 

Høres fint ut dette, men personlig skjønner jeg ikke helt hvorfor man skal gjøre dette så komplisert, "meter_reading" gjør jo "alt" i én og samme kode så man kan løsrive seg fra MQTT og Node-Red. Jeg syns ihvertfall dette er en stor fordel..

 

Vel, jeg er vel kanskje litt mer old-school Unix, at man skal lage et verktøy som gjør _en_ oppgave, og gjør den bra, mens du tydligvis foretrekker den andre tankegangen (all-in-one tools).

 

Forøvrig så ser jeg på koden til meter_reading at den tar litt snarveier som gjør at den _kun_ fungerer med Aidon-målere. Jeg har fokusert (i min kode) på å dekode korrekt, og det krever nødvendigvis mer kode og fler oppslagstabeller.

 

Programmet mitt har mulighet til å sende meldinger til både Home Assistant (som jeg bruker) eller InfluxDB ved å bruke -p-argumentet (send dekodet melding via standard input til et annet program). Jeg bruker den opsjonen til å sende over MQTT vha. mosquitto_pub, men du kan like gjerne bruke ditt eget program der, som f.eks. konverterer JSON til noe HA skjønner og sende en API-forespørsel til HA om å oppdatere en sensor).

Del dette innlegget


Lenke til innlegg
Del på andre sider
2 minutter siden, Robin Smidsrød skrev:

 

Vel, jeg er vel kanskje litt mer old-school Unix, at man skal lage et verktøy som gjør _en_ oppgave, og gjør den bra, mens du tydligvis foretrekker den andre tankegangen (all-in-one tools).

 

Forøvrig så ser jeg på koden til meter_reading at den tar litt snarveier som gjør at den _kun_ fungerer med Aidon-målere. Jeg har fokusert (i min kode) på å dekode korrekt, og det krever nødvendigvis mer kode og fler oppslagstabeller.

 

Programmet mitt har mulighet til å sende meldinger til både Home Assistant (som jeg bruker) eller InfluxDB ved å bruke -p-argumentet (send dekodet melding via standard input til et annet program). Jeg bruker den opsjonen til å sende over MQTT vha. mosquitto_pub, men du kan like gjerne bruke ditt eget program der, som f.eks. konverterer JSON til noe HA skjønner og sende en API-forespørsel til HA om å oppdatere en sensor).

 

Vel, for en så liten oppgave (les en strøm og konverter til noe forståelig) ser jeg ikke helt problemet med å gjøre det på en plass fremfor å involvere flere forskjellige komponenter, men..

 

Opplegget ditt er sikkert smidig, og de som ønsker kan sikkert implementere det sammen med min guide, tanken her var imidlertid å gjøre det så enkelt som mulig slik at terskelen ble litt lavere. 

 

At "meter_reading" kun fungerer på aidon 3-fas 230V er definitivt en svakhet, helt enig der, men jeg har ikke funnet noen bedre alternativer som er såpass enkle.. Jeg er ikke spesielt god på å kode selv så jeg gidder ikke å prøve å skrive det om heller, det funker for meg, og sannsynligvis alle andre med Aidon og 3-fas 230v nett..

Del dette innlegget


Lenke til innlegg
Del på andre sider

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå

×