PIP 5048MG Monitoring - welche Lösungen?

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.

Hier der Link

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 :yum: 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

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?

Hallo Schmue,

anbei das Skript mit ein paar Kommentaren.

1918=302-iobrokerpv.png

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)

Danke dir :wink:

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,

aber hier:
https://www.photovoltaikforum.com/thread/114101-usb-datenlogger-f%C3%BCr-pip-serie-solpiplog/?pageNo=83

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.

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.

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/??

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.

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?

Hi Schmue,

/dev/hidraw1 hieß das device, soweit ich mich erinnern kann. Aber SolPipLog konnte trotzdem keine Verbindung herstellen.

Moin schmue,
ich erkläre das kurz: Das ist zwar auf GitHub, aber direkt als Binary hochgeladen. Der Sourcecode ist nicht dabei. Auf GitHub kann erstmal jeder alles hochladen .
Da könnte im Prinzip sonstwas drin sein und ihr führt es aus. Damit das Tool auf sovielen Linux Distributionen läuft, muss man extrem viele Libs statisch einkompilieren. Das heißt der Autor hat von seinem Linux eine Menge in diesem Executable drin.
Ich komme nur darauf, weil viele User des Forum extrem auf Sicherheit bedacht sind.
Nachtrag: Ah das ist ja doch der Sourcecode, ganz versteckt bei “Code”, wer konnte denn auch sowas ahnen :lol: :smiley:

Zum Thema: Ich habe mittlerweile den Raspberry zurückgegeben und ein neuer ist unterwegs, es funktioniert nicht mal mehr die Tastatur. Egal welches USB Device: Error -32 Error -71
Ich habe sogar Ubuntu getestet, um einen Raspbian Fehler auszuschließen, aber dasselbe.

Nachtrag: Ah das ist ja doch der Sourcecode, ganz versteckt bei "Code", wer konnte denn auch sowas ahnen :lol: :D
Na siehste ;)
Zum Thema: Ich habe mittlerweile den Raspberry zurückgegeben und ein neuer ist unterwegs, es funktioniert nicht mal mehr die Tastatur. Egal welches USB Device: Error -32 Error -71
Ich habe sogar Ubuntu getestet, um einen Raspbian Fehler auszuschließen, aber dasselbe.
Vielleicht war ja auch weher da der Fehler zu suchen??
Wie gesagt, ich habe mit 2 Raspberrys keine Probleme mit dem org. USB Kabel gehabt.

Läuft jetzt alles super, die USB Schnittstelle vom Raspi war einfach hinüber :smiley: Solpiplog schickt auch alles schön per MQTT und ich konnte alles sofort in mein INflux/Grafana System einbinden.
Mega einfach, wenn das USB funktioniert :lol:

Wie sagte Mr. Miyagi? Klappen immer wenn machen richtig :smiley:

Ich brauche tatsächlich Hilfe bei der Installation.
Es scheitert schon am 1. Befehlsaufruf nach einer Neuinstallation von Rasbian.
- Beim Aufruf “apt pyusb” siehe Screenshot kommt Fehlermeldung.
- Dann habe ich die beiden Dateien angelegt auf dem Desktop wo kopiere ich die hin?

2076=328-Fehler.jpg

pip install crc16 funktionierte scheinbar dann habe ich nocheinmal “sudo apt install pyusb” probiert mit folgender Fehlermeldung:
2076=329-Fehler-2.jpg