[Modul BETA] Hoymiles Modulwechselrichter mit OpenDTU

Es kommen in allen Instanzen bis auf dem Hoymiles Wechselrichter Instanz direkt Werte im Debüt an.


Wiederverbindung und Neustart klappt wie gesagt ohne Probleme.

Hm, irgendwas scheint mit dem Datenfluss nicht zu funktionieren. Hast du denn im Meldungsfenster oder der Statusanzeige der Konsole Fehler?

Es sind tatsächlich Fehlermeldungen in der Konsole zu sehen.
Ich kann aber leider nichts damit anfangen.

PS: Evtl liegt es daran, dass ich die Datenbank auf Grund ihrer Größe an einen anderen Speicherort umziehen musste.

10.01.2024, 14:20:29 | FlowHandler | Kann Daten nicht zur Instanz #24694 weiterleiten:
Fatal error: Uncaught ArgumentCountError: Too few arguments to function IPSLogger_PhpErrorHandler(), 4 passed in D:\ServerFolders\Symcon\modules.store\com.roastedelectrons.hoymilesopendtu\OpenDTU\module.php on line 127 and exactly 5 expected in D:\ServerFolders\Symcon\scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php:24
Stack trace:
#0 D:\ServerFolders\Symcon\modules.store\com.roastedelectrons.hoymilesopendtu\OpenDTU\module.php(127): IPSLogger_PhpErrorHandler(8192, ‚Function utf8_d…‘, ‚D:\ServerFolder…‘, 127)
#1 C:\Windows\System32-(3): OpenDTU->ReceiveData(‚{„DataID“:"{7F7…‘)
#2 {main}
thrown in D:\ServerFolders\Symcon\scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php on line 24
PHP-Error-Error: Uncaught ArgumentCountError: Too few arguments to function IPSLogger_PhpErrorHandler(), 4 passed in D:\ServerFolders\Symcon\modules.store\com.roastedelectrons.hoymilesopendtu\OpenDTU\module.php on line 127 and exactly 5 expected in D:\ServerFolders\Symcon\scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php:24
Stack trace:
#0 D:\ServerFolders\Symcon\modules.store\com.roastedelectrons.hoymilesopendtu\OpenDTU\module.php(127): IPSLogger_PhpErrorHandler(8192, ‚Function utf8_d…‘, ‚D:\ServerFolder…‘, 127)
#1 C:\Windows\System32-(3): OpenDTU->ReceiveData(‚{„DataID“:"{7F7…‘)
#2 {main}
thrown
Error in Script D:\ServerFolders\Symcon\scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php on Line 24Abort Processing during Fatal-Error: Uncaught ArgumentCountError: Too few arguments to function IPSLogger_PhpErrorHandler(), 4 passed in D:\ServerFolders\Symcon\modules.store\com.roastedelectrons.hoymilesopendtu\OpenDTU\module.php on line 127 and exactly 5 expected in D:\ServerFolders\Symcon\scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php:24
Stack trace:
#0 D:\ServerFolders\Symcon\modules.store\com.roastedelectrons.hoymilesopendtu\OpenDTU\module.php(127): IPSLogger_PhpErrorHandler(8192, ‚Function utf8_d…‘, ‚D:\ServerFolder…‘, 127)
#1 C:\Windows\System32-(3): OpenDTU->ReceiveData(‚{„DataID“:"{7F7…‘)
#2 {main}
thrown
Error in Script D:\ServerFolders\Symcon\scripts\IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php on Line 24

nein

Du hast vor der Installation von IPS 7.0 nicht die Migrationsanleitung gelesen.

  • PHP wurde von 7.4 auf 8.2 aktualisiert. Insbesondere Nutzer der IPSLibrary/IPSLogger sollten VOR dem Update auf IP-Symcon 7.0 diese aktualisieren. Notfalls können die notwendigen Änderungen manuell nachgepflegt werden (Details). Die meisten PHP-Module wurden bereits aktualisiert, sodass diese bereits mit IP-Symcon 7.0 kompatibel sind.

Quelle: V6.4->V7.0 (Q4/2023)

Jetzt musst du das hier per Hand selber ändern. (Und nein, ein nachträgliches Update der IPSLibrary funktioniert nicht)

Hat also nix mit dem Modul zu tun.
Michael

Moin Zusammen,

habe die Anpassungen hoffentlich alle durchgeführt.
Nun laufe ich in neue Fehlermeldungen rein.
11.01.2024, 09:12:50 | FlowHandler | Kann Daten nicht zur Instanz #24694 weiterleiten: PHP-Error-Unknown Error: Function utf8_decode() is deprecated
Error in Script D:\ServerFolders\Symcon\modules.store\com.roastedelectrons.hoymilesopendtu\OpenDTU\module.php on Line 127Abort Processing during Fatal-Error: Function utf8_decode() is deprecated
Error in Script D:\ServerFolders\Symcon\modules.store\com.roastedelectrons.hoymilesopendtu\OpenDTU\module.php on Line 127

Die Suche im Forum bringt dich hier zur Lösung:

Servus,
Bekomme einen HMT-2250-6T (gibts eigentlich einen ohne -6T?), finde hier aber nirgends dass der Typ unterstützt wird. Oder reicht „HMT“ dass er vom Modul via einer passenden OpenDTU unterstützt wird?

Danke und Gruss
Seppm

Ja sollte unterstützt werden (aber nicht getestet). Im Grunde werden alle WR, die auch von OpenDTU unterstützt werden mit dem Modul funktionieren. Wenn das Modell nicht explizit erkannt wird, kann man einfach UNKOWN wählen - hat für die Funtion (fast) keinen Einfluss.

OKI Doki. Danke Dir.
Dann geh ich mal davon aus dass es geht.

Sehr wichtig wäre mir dass ich dynamisch drosseln kann aus Symcon heraus um immer schön bei den max 600/800 W zu bleiben.
Aber noch ist nix montiert, werde aber berichten wenn es soweit ist.

Erstmal ist die openDTU die ich wollte nicht lieferbar von 3printd-solution.
Dessen DTUs scheinen mir sehr gut und hätte die Fusion genommen für den Fall dass noch mal ein anderer Hoymiles dazu kommt.
Aber vlt. Habt ihr auch noch andere Tipps (mit Display und fertig gebaut).

Cheers Seppm

Moin, hast du mal bei Diamex Shop geschaut ?
Gruß Gerd

Danke Gerd,
super Tipp, dort hab ich jetzt direkt bestellt!
Cheers Seppm

Huhu - hast du das noch so laufen? …hatte das irgendwie übersehen und eine eigene Regelung geschrieben.
Die „steped“ immer um 100er Schritte hoch und runter. Und bei hohem Bedarf, direkt den max Wert.
Deine Version werde ich aber auch mal testen. Bei der Ausführungszeit reagiere ich auf Wert Änderungen von meinem IR Lesekopf am Zähler. Wenn nix schwankt, kann auch die Regelung mehrere Minuten beim selben Wert bleiben. Auch kann ich über die Visu meine Regelwerte vorgeben und es flexibel einstellen. Ist aktuell auch keine Null-Speisung, da ich mir immer -200W Vorhalte für irgendwelche Verbraucher. Wenn der Akku Einzug erhält, wird das natürlich eher auf eine Null-Speisung rauslaufen.

<?php

// Hoymiles Begrentzer qwik
// 2023.07.17 - run version 1
// 2023.07.26 - run version 2
// 2024.02.08 - run faster version 3

//Spielwerte
//$leistungZEist = GetValue(59001);
//$leistungPVsoll = GetValue(42695);

//Werte einlesen
$leistungZEist = GetValue(37825);
$leistungPVsoll = GetValue(49222);
$WRonline = GetValue(47079);
$einAUS = GetValue(22966);

$leistungPVsollRunterAB = GetValue(21899);
$leistungPVsollRunterBIS = GetValue(23335);
$leistungPVsollHochAB = GetValue(50209);
$leistungPVsollHochMAX = GetValue(16560);
$leistungPVsollHochBIS = GetValue(31612);


//Warten auf Variablen
//IPS_Sleep(1000);

//-------------------------------------------------------------------------------------------------------------
// Runter drehen
if (($leistungZEist < $leistungPVsollRunterAB AND $leistungPVsoll > $leistungPVsollRunterBIS) AND $WRonline == true AND $einAUS == true)
	{
    HOYMILES_SetLimitAbsolute(37486,$leistungPVsoll - 100);
    SetValue(49222,$leistungPVsoll - 100);
    $sollEchoR = $leistungPVsoll - 100;
    IPS_LogMessage(IPS_GetName(11753), "Die SOLL Leistung der PV wurde auf $sollEchoR W runter gestellt.");
	}
//-------------------------------------------------------------------------------------------------------------
// Hoch drehen
if (($leistungZEist > $leistungPVsollHochAB AND $leistungPVsoll < $leistungPVsollHochBIS) AND $WRonline == true AND $einAUS == true)
	{
	HOYMILES_SetLimitAbsolute(37486,$leistungPVsoll + 100);			
	SetValue(49222,$leistungPVsoll + 100);
    $sollEchoH = $leistungPVsoll + 100;
    IPS_LogMessage(IPS_GetName(11753), "Die SOLL Leistung der PV wurde auf $sollEchoH W hoch gestellt.");
	}
//-------------------------------------------------------------------------------------------------------------
// Hoch sofort
if (($leistungZEist > $leistungPVsollHochMAX AND $leistungPVsoll < $leistungPVsollHochBIS) AND $WRonline == true AND $einAUS == true)
	{
	HOYMILES_SetLimitAbsolute(37486, $leistungPVsollHochBIS);
    SetValue(49222, $leistungPVsollHochBIS);
    $sollEchoM = $leistungPVsollHochBIS;
    IPS_LogMessage(IPS_GetName(11753), "Die SOLL Leistung der PV wurde auf den MAX Wert von $sollEchoM W gestellt.");
	}
//-------------------------------------------------------------------------------------------------------------
//Testausgabe
//echo "Die SOLL Leistung der PV wurde auf $sollEchoR W runter gestellt.\n";
//echo "Die SOLL Leistung der PV wurde auf $sollEchoH W hoch gestellt.\n"
//echo "Die SOLL Leistung der PV wurde auf den MAX Wert von $sollEchoM W gestellt.\n";	

Aktuell ist er auf 400W sehe ich gerade:

Habt ihr schonmal OpenDTU-onBatteriy ausprobiert?

Einfach das Bin-File opendtu-onbattery-generic (ist dort unter Asset), in der DTU als Firmwareupdate-File in „Firmware-Aktualisierung“ einladen.

In IP_Symcon einen MQTT Client Device (Thema zB /Power Typ String) erstellen, dessen Value ist ein String und der bekommt seine Daten von diesem Script:

<?php
$Power=GetValueFloat(48141);// holt Momentanleistung aus Modbuszähler bei mir
RequestAction(42020, $Power); //in die MQTT Client Device Variable schreiben.

und das Script bekommt ein Ereignis: z.B. alle 2 Sekunden.

Dann unter Einstellungen in der DTU
„Stromzähler“ unter MQTT topic - Stromzähler zB /Power eintragen.

Dann unter „Dynamic Power Limiter Einstellungen“ eure Wünsche der Regelung eintragen.

Ich hatte meine Regelung auch mit einem Script erstellt, funktioniert auch.
Dieses Firmwareupdate in der DTU macht es auch ganz gut.
Man kann auch el. Stromzähler einbinden.

2 „Gefällt mir“

Das muss ich mir genauer ansehen, der erste Versuch führte dazu, dass nichts mehr eingespeist wurde und erst mit Firmware zurück und noch mal zusätzlich booten lief es wieder.

Aber meine Umgebung ist etwas komplex durch Zendure SolarFLow und dreiphasigem Wechselrichter, nur Impulszähler, da muss endlich mal jemand die Modbus-Anbindung einbauen :open_mouth: und man kann in der Firmware sehr viel einstellen.

Klingt so, als wenn keine Zählerdaten ankamen.
Woran scheitert es mit der Modbus Anbindung? Beim Energiezähler oder WR ?
Es gibt seit Gestern eine ganz einfache Modbus RTU Anbindung in Annex ESP32 Basic.
Modbus TCP Anbindung in Annex ESP32 Basic gibt es schon etwas länger.
Funktioniert super.
Wenn jemand Interesse hat, poste ich mal das ESP32 Basic File für beide Möglichkeiten.
Edit: wenn man(n) die Modbus-Registerdaten dann im ESP32 hat, muß/kann man diese Daten per MQTT- oder Json Umwandlung weiter nutzen.

am ausführenden Organ :upside_down_face:, also an mir :rofl:.

Netzwerkumsetzer und Netzteil im Hutschienengehäuse liegen hier schon, ich muss halt nur einbauen und eine Impulsleitung auf Modbus umklemmen, aber es ist immer etwas anderes wichtiger :face_with_peeking_eye:.

@Helmut

Mit der Modbus Anbindung würde es vermutlich jetzt funktionieren, wenn ich die Zählerwerte korrekt übertrage bzw. direkt in OpenDTU-onbat eintrage.

Hast du gesehen, ob man die Steuerung irgendwie einfach (über MQTT) ein- und ausschalten kann?

Wenn ich „onbat“ bin würde ich natürlich gern 0-Einspeisung machen, wenn die Akkus vol sind und ich Überschuss habe, darf der gern in Netz gehen.

Einspeisung macht openDTU bat ganz ordentlich, wenn Du Deinen Energieverbauch per MQTT von IP-Symcon machst, wie ich schon im Beitrag geschrieben hatte.
Und ob Du es Energie oder Power nennst ist wurscht :wink:
Edit Nachtrag: Wie es mit WLAN Wechselrichter ist, das weiß ich nicht.
Meine Einstellung:


Ich führe mal etwas Selbstgespräche.

es gibt drei Modes, die sich über MQTT auf „powerlimiter/cmd/mode“ setzen lassen, damit müsste machbar sein, was ich machen möchte.

0 - Normal operation
2 - Unconditional Full Solar-Passthrough

Das wird dann die nächste Jugend-forscht-Baustelle :smiley: .

Hier in dem Schrieb hatte ich erklärt wie ich den Limit im Hoymiles per MQTT aus IP-Symcon setze, dazu die Bilder von der Post davor, die sollten es aufzeigen, dass es geht. Sind denn Modbus Daten da und kannst Du der openDTU on Batterie die MQTT Daten des Hausverbrauch schicken?
Hast Du denn einen Hoymiles ohne WLAN, dass es passen könnte?