P1 port als energiemeter voor SolarEdge omvormer

Zou jij ook graag beter inzicht in het Import, Export en energie verbruik willen hebben in de SolarEdge monitoring site, maar niet de €225 uitgeven voor een SE-MTR-3Y-400V-A solarEdge energie meter... (want je hebt toch gratis van je netbeheerder al een energie meter..) lees dan verder. 

Met behulp van een eenvoudige computer zoals een Raspberry Pi's en voor enkele euro's aan hardware is dit mogelijk als je al een slimme meter hebt. 

De SolarEdge app geeft dan productie, netto gebruik, in & export weer.

Software
Algemene werking
Serial port on the Raspberry Pi (RPI)
TTL naar RS485 /Modbus Adapter Module module
SolarEdge Configuratie






Hardware

  • Raspberry Pi + USB voeding + SD kaart (andere hardware is goed mogelijk, bv oude laptop of iets dergelijks, zolang het een redelijk recente linux kan draaien zit het goed).
    In mijn geval heb ik een oude RPI2 gebruikt die al een tijdje stof aan het happen was
  • P1 hardware (in mijn geval 1 transitor + weerstand kosten ca € 0,50)
    Andere meer kan en klare mogelijkheden zijn ook te koop.
  • TTL naar RS485 /Modbus Adapter Module €4 of als je het snel wil hebben via amazon
    NB. Belangrijk om een module te kopen die 3.3V kan hebben, niet een 5V versie

Software


Algemene werking

De P1 poort op de Energie Meter geeft elke seconde een bericht met daarin het huidige energie verbruik, meterstanden en enkele andere details.

Met de P1 reader software wordt het P1 bericht omgezet in een json bericht en met MQTT protocol naar de Mosquitto server gestuurd. De Mosquitto server stuurt dit json bericht door aan SolarEdge Proxy.

De SolarEdge Meter Proxy python script ontvangt de P1 json berichten via MQTT en emuleert een modbus SolarEdge energie meter. Voor SolarEdge omvormer lijkt dus alsof er een reguliere solarEdge energie is aangesloten.

Het voordeel van het gebruik van MQTT in deze setup is dat je de P1 meter info in meerdere applicaties kan gebruiken (ik gebruik het o.a. ook om mijn verbruik in Openhab home automation inzichtelijk te maken) en dat de P1 meter niet bij de SolarEdge omvormer hoeft te staan. (in mijn geval staat de omvormer ver van de meterkast)  



Serial port on the Raspberry Pi (RPI)


Als je een RPI gebruikt kan je de serial port(en) gebruiken, en is het niet nodig een USB to Serial dongle te gebruikten. Mocht je geen RPI gebruiken dan moet je een USB naar TTL serial dongle kopen. (voor dit project zijn er 2seriele poorten nodig, een voor de P1 meter en een voor de modbus kant)

Om de serial port op de RPI te gebruiken:

1) Ken de rechten toe aan de pi user (of een ander user als je een andere username gebruikt)

sudo usermod -a -G dialout pi

2) Enable de hadware UART (serial port) op de RPI pin header:

sudo raspi-config
  • Select Interfacing Options
  • Select Serial
  • "Would you like a login shell to be accessible over serial?" Select <No>
  • "Would you like the serial port hardware to be enabled?" Select <Yes>
Herstart de RPI hierna
Je zou de seriele poort hierna moeten zien.
Afhankelijk van je model is de seriele poort:    /dev/ttyS0  of   /dev/ttyAMA0 

Verbind TTL naar RS485 /Modbus Adapter Module module


 
Pin RPI RS485
1 3V3 VCC
6GND GND
8 UART0 TX TX
10 UART0 RX RX

Testen kan evt met:
minicom -D /dev/ttyS0
/dev/ttyAMA0


De verbinding tussen de MQTT server en de SolarEdge wordt gemaakt door
Solaredge Meterproxy with P1 MQTT customization https://github.com/nmakel/solaredge_meterproxy

semp-rtu.py -C mqtt.conf

example config mqtt.conf
[server]
# Serving serial device, connected to the SolarEdge inverter.
# optional, default: /dev/ttyUSB0
#device = /dev/ttyUSB0
device = /dev/ttyS0
#device = /dev/ttyAMA0

# Serving serial baud rate.
# optional, default: 9600
baud = 9600

# Parity setting, N, E or O
# optional, default: E
#parity = E
parity = N

# Serving serial timeout, depends on line speed.
# optional, float, default: 1
#timeout = 1
timeout = .1

# Logging level, CRITICAL, ERROR, WARNING, INFO, DEBUG
# optional, default: INFO
#log_level = INFO

# Masqueraded meters, comma separated.
# optional, default: ''
meters = meter1

# Meters defined in [server] need a config section, one per meter.
# Depending on the type of meter that is to be masqueraded, you can
# define a number of generic and type specific variables.

# Modbus address of the meter as defined in the SolarEdge inverter.
# This value needs to be unique.
# optional, default: 2
#dst_address = 2

# Source meter type, which corresponds to a script in /devices.
# The generic.py device returns null values.
# optional, default: generic
#type = generic

# Masqueraded serial number. # Need not be correct, must be unique, must be an integer. # optional, default: 987654 #serial_number = 987654 # Current transformer amperage rating. # optional, default: 5 #ct_current = 50 # Current transformer direction inversion, set to 1 if required. # optional, default: 0 #ct_inverted = 0 # Offset between phases, set to 0, 90, 120 or 180. # optional, default: 0 #phase_offset = 120 # Number of seconds between value refreshes. # optional, default: 5 #refresh_rate = 5 log_level=DEBUG [meter1] type = mqtt host = 192.168.1.1 dst_address = 2 meterValuesTopic = /energy/meter willTopic = /energy/will refresh_rate = 15 #serial_number = "0x0D010552"

enkele opmerkingen:
  • Om juiste kommunicatie te krijgen is het belangrijk om de timeout kort te zetten  timeout = .1 
  • Alleen 1ste modbus werkt (op mijn inverter)
  • Oude firmware kan niet onderweg met de meters. Zorg dat je de laaste firmware hebt of doe een SolarEdge firmware update 
  • host address en topics zijn afhankelijk van je MQTT server
  • De integratie verwacht dat de waardes die door de solaredge verwekt moeten worden in een json formatted bericht gestuurd worden.

P1 meter naar MQTT

Hardware om P1 meter te lezen:
Er zijn meerdere mogelijkheden, afhankelijk of je een soldeerbout in je hand wil nemen of meer 'off the shelf'* Arduino / ESP32 met weerstand & transistor (de weerstand & transistor zorgen ervoor dat het signaal van de P1 geinverteerd wordt en een gewoon serial signaal wordt). Dit is wat ik zelf gebruik.
* USB serial port... hier een post van 10jaar geleden :-) http://zonnigbreda.blogsp...itlezen-via-p1-poort.html
* FTDI serialtoUSB kabel (aliexpress zoek op ftdi usb to serial, +/- €2) + de transistor & weerstand als boven
* OTS bv https://www.sossolutions.nl/slimme-meter-kabel dit is eigenlijk het zelfde als de hierboven maar dan 10x de prijs... maar wel meteen klaar met het juiste stekkertje eraan

Voor de software kant zijn er ook verschillende mogelijkheden.
Andere mogelijkheden zijn oa. via homeautomation software zoals home assistant.
In dat geval zal je mqtt.py in de devices map van solaredge_meterproxy moeten aanpassen om de juiste waarden te vinden, Bijvoorbeeld:
 lastValues['power_active'] = lastValues['powerImportedActual'] - lastValues['powerExportedActual']

Reacties

  1. Marcel, met interesse lees ik je P1 SolarEdge verhaal. Nou heb ik twee SolarEdge inverters. Ik neem aan dat dat geen probleem is? Met die RPI en toebehoren kan ik alle twee Solaredge's implementeren? Dank! Groet, Sander

    BeantwoordenVerwijderen
    Reacties
    1. Hallo Sander,
      Ik heb ook 2 SolarEdge omvormers.
      Je hoeft de modbus maar op een van de 2 aan te sluiten. In de app zie je het totaal plaatje

      Verwijderen
  2. Hoi Marcel, met veel interesse lees ik hier je blog. In essentie is de ModBus meetmanier een lokale meetmanier ipv de globale manier waarbij via Wifi of de Ethernet poort alle data bij SolarEdge wordt bewaard en dan de data wordt gepresenteerd in de app. Ik ben op zoek naar een eenvoudigere manier om de data (Real-Time) te kunnen gebruiken in b.v. home assistant en dat de communicatie door een ESP32 wordt verzorgd ipv een Raspberry-Pi.

    BeantwoordenVerwijderen
  3. hallo Han,
    Als je enkel de data wil gebruiken om lokaal in te lezen in HA is er een eenvoudigere manier. Dan hoef je de meterdata niet naar SolarEdge te sturen.
    1) Om solaredge data in HA te krijgen kan je ModBus Measurement Daemon
    https://github.com/volkszaehler/mbmd gebruiken. Hiervoor heb je geen speciale modbux hardware nodig, dat kan via modbus TCP protocol. mbmd genereerd dan mqtt messages die je in HA kan gebruiken.
    2) Om je stroomverbuik te meten en zichtbaar in HA zijn er diverse P1 poort reader applicatie en hardware oplossingen. oa. de versie hier in de blog, maar er zijn er talloze. hardware wise, kan je ook alle kanten op zelf solderen van seriele poort (zie hier bv https://zonnigbreda.blogspot.com/2012/05/energie-meter-uitlezen-via-p1-poort.html ) maar tegewoordig ook gewoon als stekkertje in de winkel te krijgen.

    BeantwoordenVerwijderen
    Reacties
    1. Marcel bedankt voor je antwoord. Ik was al aan het kijken even snel naar MBMD maar ik kwam erachter dat Modbus over TCP alleen werkt met een LAN aansluiting aan de omvromer. Ik heb alleen Wifi op de omvormer nu en ik zag al in de setup dat ModBus alleen aan te zetten in het LAN Config deel. Ik moet dan speciaal een switch gaan bijplaatsen in de garage omdat mijn wifi AP maar 1 poortje vrij heeft wat de Philips HUE bridge al gebruikt.

      Verwijderen
  4. Mijn vraag is hoe ik dit integreer in Domoticz? Dus ik heb ./mbmd draaien en nu wil ik dat de waarde van de opgewekte energie in Domoticz kan worden weergegeven. (overigens wil Domoticz ook op poort 8080 maar dat poortnummer kan aangepast worden)

    BeantwoordenVerwijderen

Een reactie posten

Populaire posts van deze blog

Onkyo TX-NR656 hacking

Energie meter uitlezen via P1 poort