Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
das Logging war der Schlüssel. Das mit der eigenen Datei hab ich zwar noch nicht hinbekommen, ist aber auch erstmal woascht.
Deine letzte Vermutung trifft tatsächlich zu.
Per Log hab ich mit die verschieden Variablen in der def _json(self) mal ausgeben lassen. Das ganze hab ich mit 29 definierten Items gemacht.
self._items: alle 29 noch da
kostalurl: alle 29 noch da (hatte hier kurzzeitig vermutet die URL sei evtl "zu lang", wird aber komplett ausgegeben und es fehlen Werte "aus der Mitte"
Also URL mal im Browser aufgerufen und siehe da... 25 Rückgabewerte.
Ich denke, genauer kann man es dann nicht mehr eingrenzen.
Jetzt nur die Frage, wie kann ich aus der einen Abfrage möglichst einfach zwei machen, die am besten noch über einen timer oder ähnliches zeitlich weitgenug getrennt werden können, so dass der WR nachkommt.
Mir schwebt da grob folgendes vor (hab aber keine Ahnung wie die korrekte Notation sein müsste).
Sicherlich gibt es da auch einen eleganteren Weg...?
aus:
Code:
for item in self._items:
value = self._keytable[item]
kostalurl +='&dxsEntries=' + str(value)
with urllib.request.urlopen(kostalurl) as url:
data = json.loads(url.read().decode())
for values in data['dxsEntries']:
kostal_key = str(list(self._keytable.keys())[list(self._keytable.values()).index(values['dxsId'])])
value=values['value']
if kostal_key == "operation_status":
self.logger.debug("operation_status" + str(value))
if str(value) == "0":
value = "off"
elif str(value) == "2":
value = "startup"
elif str(value) == "3":
value = "feed in (mpp)"
elif str(value) == "6":
value = "dc voltage low"
else:
value = "unknown"
if kostal_key == "yield_day_kwh":
value = value / 1000
if kostal_key in self._items:
self._items[kostal_key](value)
self.logger.debug("items[" + str(kostal_key) +"] = " +str(value))
self.logger.debug(str(kostalurl))
mach:
Code:
# die ersten 25 Werte holen
for item[1..25] in self._items:
value = self._keytable[item]
kostalurl +='&dxsEntries=' + str(value)
with urllib.request.urlopen(kostalurl) as url:
data = json.loads(url.read().decode())
for values in data['dxsEntries']:
kostal_key = str(list(self._keytable.keys())[list(self._keytable.values()).index(values['dxsId'])])
value=values['value']
if kostal_key == "operation_status":
self.logger.debug("operation_status" + str(value))
if str(value) == "0":
value = "off"
elif str(value) == "2":
value = "startup"
elif str(value) == "3":
value = "feed in (mpp)"
elif str(value) == "6":
value = "dc voltage low"
else:
value = "unknown"
if kostal_key == "yield_day_kwh":
value = value / 1000
if kostal_key in self._items:
self._items[kostal_key](value)
self.logger.debug("items[" + str(kostal_key) +"] = " +str(value))
self.logger.debug(str(kostalurl))
#die nächsten 17 Werte holen
for item[26..42] in self._items:
value = self._keytable[item]
kostalurl +='&dxsEntries=' + str(value)
with urllib.request.urlopen(kostalurl) as url:
data = json.loads(url.read().decode())
for values in data['dxsEntries']:
kostal_key = str(list(self._keytable.keys())[list(self._keytable.values()).index(values['dxsId'])])
value=values['value']
if kostal_key == "operation_status":
self.logger.debug("operation_status" + str(value))
if str(value) == "0":
value = "off"
elif str(value) == "2":
value = "startup"
elif str(value) == "3":
value = "feed in (mpp)"
elif str(value) == "6":
value = "dc voltage low"
else:
value = "unknown"
if kostal_key == "yield_day_kwh":
value = value / 1000
if kostal_key in self._items:
self._items[kostal_key](value)
self.logger.debug("items[" + str(kostal_key) +"] = " +str(value))
self.logger.debug(str(kostalurl))
Hallo zusammen,
ist es korrekt, dass das Kostal Plugin per Json/HTML an den Wechselrichter angebunden wird?
Ich fände ModBus charmant, auch für meinen Wechselrichter. Gibt's da schon was? Ansonsten würde ich mich um ein KostalModbus-Plugin kümmern.
Ich ziehe gerade einige Daten per Logik und könnte auch gleich ein Plugin draus machen...
Kann der Plenticore überhaupt json? Hab's noch nicht probiert.
Es geht ja weniger darum die Daten irgendwie auszulesen, sondern viel mehr um den Spaß am Plugin bauen. Und da es für ModBus offenbar nichts gibt, bietet sich das ja an... ;-)
Hallo zusammen,
ich habe eine erste Version des "Kostalmodbus" - Plugins fertig. Erstmal nur in meinem Fork verfügbar, da sicher noch die ein oder andere Fehlerbehebung folgt: https://github.com/thengsty/plugins/...p/kostalmodbus
Heute hab ich's an meinem Plenticore 8.5 mit Kostal Smart Energy Meter erfolgreich testen können. Leider war dann irgendwann die Sonne weg und der Wechselrichter liefert keine Daten mehr vom Dach. ;-)
Würde mich über Tester freuen.
Sonnige Grüße, Thomas
Ich habe das Plugin auch störungsfrei und stabil im Einsatz mit meinem Plenticore 7. Die Einrichtung des Plugins war ein Kinderspiel. Besten Dank für die Erstellung des Plugins!
Ich denke in der README.md kann beim Plenticore 7 auch tested = yes eingetragen werden.
Sehr cool und vielen Dank an euch fürs testen.
Ich habe noch zwei Kleinigkeiten angepasst und eben einen PR erstellt zur Aufnahme des Plugins ins Dev Repo: https://github.com/smarthomeNG/plugins/pull/313
Habe mich übrigens auch an ein Plugin für den SmartMeter von Kostal gemacht: https://shop.kostal-solar-electric.c...rgy-meter.html
Das Plugin(KsemModbus) ist im gleichen PR zu finden und kann ebenfalls schon getestet werden.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar