Hallo,
welche Lösungen habt Ihr für das Monitoring eines PIP von MPPsolar?
Ich wollte erst einen Raspi mit der mitgelieferten Software bestücken am USB-Anschluss und per VNC darauf zugreifen. Leider ist das Logging mit dieser Software nicht zufriedenstellend.
Dann bin ich auf solaranzeige.de gestoßen, dort geht es auch per MQTT, womit ich in iobroker visualisieren könnte. Bevor ich mich hiermit beschäftige, frage ich Ersteinmal in die Runde.
Welche Hard- / Softwareanbindung könnt Ihr für einen PIP empfehlen? Etwas in Richtung MQTT und iobroker würde mich sehr interessieren.
Gruß Mark
Hast du schon von "solpiplog" gehört ?
Das funktioniert recht einfach und sendet die Daten per MQTT.
15kWp PV, 15kWh DIY-Akku (7S) mit DIY-BMS V2.0, FelicitySolar 10kWh + Victron Multiplus2, 2xEAuto m. PV-gesteuerter Wallbox (evcc)
Moin,
ich wollte auch SolPipLog nehmen, leider lief das auf meinem alten PI v1 nicht. In der Beschreibung steht auch das erst PI's ab v2 unterstützt werden. Solaranzeige hatte ich auch gesehen, aber nicht weiter verfolgt.
Ich habe das mit einem Python Skript auf dem PI v1 gelöst. Der greift per USB die Daten ab und schickt die sowohl per MQTT an ioBroker als auch an meinen emoncms server (s.u.). Das Skript habe ich mir aber auch nur zusammen geklaut 😋 Das kannst du gerne haben.
https://emoncms.mybergmann.net/dashboard/view?id=1
Es gibt auch fertige Python Libs, mit denen du noch mehr machen kannst als mit meinem Skript. z.B. https://github.com/jblance/mpp-solar
PIP 5048MS | 6x 340Wp mono (2KWp) Ostdach | 14S80P Powerwall
3x MP2 5000 | 11 kWp Ost- + Westdach | 14kWh LFP
Mitsubishi Multi MXZ2F42VF+MSZEF25VGKW+MSZEF35VGK
nen 2er Pi würde ich für solpiplog nicht unbedingt empfehlen.
Das lief bei mir, wenn man mal was am Pi über Teamviewer machen musste, sehr sehr zäh. Mit nem 3b+ ging es.
Das script würde mich interessieren Nick.
Kannst du bitte mal nen screenshot vom iobroker machen?
LG Stefan
12KW Deye 3~ 9*355W, 14*240W, Victron 150/70 9*240W Flachdach Süd und West
PV2: 4*240W Gartenhausfassade Hoymiles 1500
PV3: in Planung Gartenhaus Dach 9*240W & 6*320W weitere 60kwh Akku
Status: ~9,7kwp und 10kwh 18650 19" DIY Powerwall
Hallo Schmue,
anbei das Skript mit ein paar Kommentaren.
Vorarbeiten, soweit ich mich noch erinnere:
apt install pyusb
pip install crc16
pip install paho-mqtt
Und zum autostarten habe ich ein kleine Bashscript erstellt und unter "sudo crontab -e" die folgende Zeile eingetragen
@reboot /pfad/zum/shellscript.sh
shellscript.py
#!/bin/bash
while true; do
python3 /pfad/zum/piplogger.py
sleep 5;
done
piplogger.py
import time
import urllib.request
import os, ssl
import time
import usb.core, usb.util, usb.control
import crc16
import paho.mqtt.client as mqtt
if (not os.environ.get('PYTHONHTTPSVERIFY', '') and getattr(ssl, '_create_unverified_context', None)): ssl._create_default_https_context = ssl._create_unverified_context
apikey = "GEHEIM!!!!"
client = mqtt.Client(client_id="pip", clean_session=True, userdata=None, transport="tcp")
#client.username_pw_set("mqttuser","mqttpasswort") # optional
client.connect("name/IP vom MQTT", port=1883)
mqtttopic = "PV/Inverter" # Topic im MQTT
#Anfangen mit Wechselrichter auslesen
vendorId = 0x0665
productId = 0x5161
interface = 0
dev = usb.core.find(idVendor=vendorId, idProduct=productId)
if dev.is_kernel_driver_active(interface): dev.detach_kernel_driver(interface)
dev.set_interface_altsetting(0,0)
def getCommand(cmd):
cmd = cmd.encode('utf-8')
crc = crc16.crc16xmodem(cmd).to_bytes(2, byteorder='big')
cmd = cmd+crc
cmd = cmd+b'r'
while len(cmd)<8:
cmd = cmd+b''
return cmd
def sendCommand(cmd):
dev.ctrl_transfer(0x21, 0x9, 0x200, 0, cmd)
def getResult(timeout=100):
res=""
i=0
while 'r' not in res and i<20:
try:
res+="".join([chr(i) for i in dev.read(0x81, 8, timeout) if i!=0x00])
except usb.core.USBError as e:
if e.errno == 110:
pass
else:
raise
i+=1
return res
# Je nach Modell muss man evtl. an den Sleep-Zeiten etwas rumspielen
sendCommand(getCommand("0"))
time.sleep(0.05)
getResult()
sendCommand(getCommand('QMOD'))
time.sleep(0.08)
mode=getResult()
time.sleep(0.05)
#print(mode[1]) # //debug
sendCommand(getCommand('QPIGS'))
time.sleep(0.05)
result=getResult()
data=result.split()
ACinputVoltage = data[0].replace('(','') # in V
ACinputFrequency = data[1] # in Hz
ACoutputVoltage = data[2] # in V
ACoutputFrequency = data[3] # in Hz
ACoutputVA = data[4] # in VA
ACoutputPower = data[5] # in W
ACoutputLoad = data[6] # in %
#BUS Voltage = data[7]
BatteryVoltage = data[8] # in V
BatteryChargingCurrent = int(data[9]) # in A
BatteryCapacity = data[10] # in %
#Inverter Heat Sink = data[11] # in °C (glaube ich zumindest)
PVinputCurrentForBattery = data[12] # in A
PVinputVoltage = data[13] # in V
#BatteryVoltage from SCC = data[14]
BatteryDischargeCurrent = int(data[15]) # in A
#flags = data[15].split()
PVinputPower = data[19] # in W
# MQTT publish
client.publish(mqtttopic+"ACinputVoltage",ACinputVoltage)
client.publish(mqtttopic+"ACinputFrequency",ACinputFrequency)
client.publish(mqtttopic+"ACoutputVoltage",ACoutputVoltage)
client.publish(mqtttopic+"ACoutputFrequency",ACoutputFrequency)
client.publish(mqtttopic+"ACoutputVA",ACoutputVA)
client.publish(mqtttopic+"ACoutputPower",ACoutputPower)
client.publish(mqtttopic+"ACoutputLoad",ACoutputLoad)
client.publish(mqtttopic+"BatteryChargingCurrent",BatteryChargingCurrent)
client.publish(mqtttopic+"BatteryCapacity",BatteryCapacity)
client.publish(mqtttopic+"PVinputCurrentForBattery",PVinputCurrentForBattery)
client.publish(mqtttopic+"BatteryDischargeCurrent",BatteryDischargeCurrent)
client.publish(mqtttopic+"PVinputPower",PVinputPower)
client.publish(mqtttopic+"BatteriyChargeDischarge",BatteryChargingCurrent - BatteryDischargeCurrent)
client.disconnect()
# Emoncms Datenversand
url="https://deineigener.emonserver.com/input/post?json={"
url+="{AC%20Spannung:"+ACoutputVoltage
url+=",Netz%20Spannung:"+ACinputVoltage
if(mode[1]=="L"): # Ich glaube wenn Mode L ist, dann ist Bypass aktiv
url+=",Netz%20Watt:"
url+=ACoutputVA
else:
url+=",Netz%20Watt:0"
url+=",AC%20Leistung:"
url+=ACoutputPower
url+=",Batterie%20Spannung:"
url+=BatteryVoltage
url+=",Batterie%20Ampere:"
ampc=BatteryChargingCurrent
ampd=BatteryDischargeCurrent
amp=ampc-ampd
url+=str(amp)
url+=",PV%20Watt:"
url+=PVinputPower
url+=",PV%20Spannung:"
url+=PVinputVoltage
url+=",Wechselrichter%20Auslastung:"
url+=ACoutputLoad
url+=",Battery%20Capacity:"
url+=BatteryCapacity
url+="}&node=1&apikey="
url+=apikey
x=urllib.request.urlopen(url)
PIP 5048MS | 6x 340Wp mono (2KWp) Ostdach | 14S80P Powerwall
3x MP2 5000 | 11 kWp Ost- + Westdach | 14kWh LFP
Mitsubishi Multi MXZ2F42VF+MSZEF25VGKW+MSZEF35VGK
Danke dir 😉
LG Stefan
12KW Deye 3~ 9*355W, 14*240W, Victron 150/70 9*240W Flachdach Süd und West
PV2: 4*240W Gartenhausfassade Hoymiles 1500
PV3: in Planung Gartenhaus Dach 9*240W & 6*320W weitere 60kwh Akku
Status: ~9,7kwp und 10kwh 18650 19" DIY Powerwall
Vielen Dank für die Infos.
Ich würde mir gerne SolPipLog anschauen. Gibt es dazu eine Dokumentation? Ich konnte über den Link oben leider nichts finden.
Die Version von Nick81 gefällt mir auch.
Ich werde mal meinen Raspi 3+ installieren und testen, den brauch ich ja sowieso.
Ich weiss nicht ob es erlaubt ist,
LG Stefan
12KW Deye 3~ 9*355W, 14*240W, Victron 150/70 9*240W Flachdach Süd und West
PV2: 4*240W Gartenhausfassade Hoymiles 1500
PV3: in Planung Gartenhaus Dach 9*240W & 6*320W weitere 60kwh Akku
Status: ~9,7kwp und 10kwh 18650 19" DIY Powerwall
Hallo Nick81
Ich habe einige Fragen zu deiner Version:
- Das funktioniert dann mit dem normalen USB Kabel und mein 5048MG findet den Port?
- Wo finde ich nach Deinen angegeben Installationsroutinen die piplogger.py die editiert werden muss? Und was für ein API Key soll dort hinterlegt werden.
Ich habe im iobroker nur: MQTT User/ Passwort / Server und Port
Sorry bin nicht so Linuxkonform..
Danke und Gruß
Mark
Moin Jungs,
ich hab das auch versucht aber bekomme den scheiß USB Treiber für den Pip nicht ans laufen. Selbst über einen Seriellen USB zu Seriell Adapter ging es nicht.
Hatte einer ähnliche Probleme oder ein Lösung dafür?
Ich hab im Moment Raspian drauf, möglicherweise liegts daran.
So bin etwas weiter, also es scheint am Kernel/Treiber zu liegen, im dmesg los sieht man immer nur die Error -32 Fehler. Auf einem Notebook mit Debian passiert das nicht.
Ich habe auch mal eine stärkere Stromversorgung verwendet, hat auch nichts geändert (das ist die Standardantwort in Raspberry Foren, wenn die keine Ahnung haben).
Ok bin noch etwas weiter, den PIP5048 direkt an den Rapsi scheint extrem problematisch zu sein, das klappt bei mir auch nicht unter einem Debian.
Ich verwende einen USB->RS232 Adapter auf PL2303 Basis und der scheint wohl mit dem Raspi auch nicht zu funktionieren.
Ein FTDI FT232RL Adapter scheint aber bei den meisten zu laufen, also bestellt und dann morgen / Montag testen.
Ich berichte euch.
Viele Grüße
Andreas
Moin zusammen,
@Andreas: Ich habe auch Raspian drauf. Das ist irgendwie eine USBHID Verbindung. Das ist so eine Art "USB Tastatur" die da erkannt wird. Mit dem SolPipLog konnte ich auch keine Verbindung herstellen. Aus dem Grund habe ich das Skript genommen, das läuft aber stabil. Der liest über eine USB Python Lib den USB Port aus und schickt ein paar Daten hin und her.
@Mark:
Das klappt bei meinem 5048MS mit dem normalem USB Kabel, da war bei mir auch eins dabei. Du benötigst eigentlich dafür keinen Treiber.
Der API-Key ist für emoncms, wenn du nur MQTT haben möchtest, benötigst du das ganze Geraffel nicht. Ich kann dir das Skript auch gerne noch etwas umschreiben, wenn du mir sagst, was du brauchst.
Eine Installationsroutine gibt es nicht wirklich. Du benötigst nur das Script (ausführbar machen) und startest es. Wenn es automatisch und kontinuierlich laufen lassen möchtest, muss man noch ein Shellsctipt bauen was das Programm alle X Sekunden ausführt. Kann dir gerne helfen.
PIP 5048MS | 6x 340Wp mono (2KWp) Ostdach | 14S80P Powerwall
3x MP2 5000 | 11 kWp Ost- + Westdach | 14kWh LFP
Mitsubishi Multi MXZ2F42VF+MSZEF25VGKW+MSZEF35VGK
Ich habe gar keine Probleme mit solpiplog.
Mein Pip ist mit dem orginal usb kabel angeschlossen und wird von raspbian als hid erkannt.
Was steht den bei euch in /dev/??
LG Stefan
12KW Deye 3~ 9*355W, 14*240W, Victron 150/70 9*240W Flachdach Süd und West
PV2: 4*240W Gartenhausfassade Hoymiles 1500
PV3: in Planung Gartenhaus Dach 9*240W & 6*320W weitere 60kwh Akku
Status: ~9,7kwp und 10kwh 18650 19" DIY Powerwall
In dev taucht nichts auf, soweit kommt er nicht. Sonst wäre es ja einfach. Solpiplog möchte ich sowieso nicht verwenden, binaries ohne src sind mir zu riskant, vor allem wenn das halbe Betriebssystem statisch einkompiliert ist. Das bisschen schreibe ich mir flott selbst.
Das scheint bei einigen Versionen des Raspberry pis zu passieren, das Internet ist voll von den Fehler, leider keine Lösung. Nur denn rs232 Chip tauschen.
Viele Grüße
Andreas
Verstehe ehrlich gesagt nicht was du meinst. Das Projekt ist auf github dokumentiert.
Aber egsl. Das Problen scheint ja woanders beheimatet zu sein.
Die seriell/usb Komverter zicken ja gerne nal rum. Das würde ich nicht als PI typisches Problem werten
Was sagen denn dmsg und lsub?
LG Stefan
12KW Deye 3~ 9*355W, 14*240W, Victron 150/70 9*240W Flachdach Süd und West
PV2: 4*240W Gartenhausfassade Hoymiles 1500
PV3: in Planung Gartenhaus Dach 9*240W & 6*320W weitere 60kwh Akku
Status: ~9,7kwp und 10kwh 18650 19" DIY Powerwall
Hi Schmue,
/dev/hidraw1 hieß das device, soweit ich mich erinnern kann. Aber SolPipLog konnte trotzdem keine Verbindung herstellen.
PIP 5048MS | 6x 340Wp mono (2KWp) Ostdach | 14S80P Powerwall
3x MP2 5000 | 11 kWp Ost- + Westdach | 14kWh LFP
Mitsubishi Multi MXZ2F42VF+MSZEF25VGKW+MSZEF35VGK