Problem mit IPS_SetProperty

Hallo Zusammen,

ich bastel gerade an meinem Modul für Deye Wechselrichter. Zunächst werden erst mal für alle möglichen Werte, die aus dem Wechselrichter auslesbar sind Variablen angelegt. Ich hab mir da mal sdas B+GEtech Modul von Nall-Chan angeschaut. Dag gibt es eine Array, in dem die Variablen mit den entsprechenden Modbus-Registern hinterlegt sind. Beim Anlegen der Variablen klappt das auch. Ich habe da ein paar zusätzliche Felder eingefügt, doe ich für die Umrehcnung der Werte brauchen und als Property an die Variablen gebunden.

 $Variables = [];
        foreach (static::$Variables as $Pos => $Variable) {
            $Variables[] = [
                'Ident'    => str_replace(' ', '', $Variable[0]),
                'Name'     => $this->Translate($Variable[0]),
                'VarType'  => $Variable[1],
                'DataType' => $Variable[2],
                'Profile'  => $Variable[3],
                'Address'  => $Variable[4],
                'Function' => $Variable[5],
                'Quantity' => $Variable[6],
		'Factor'   => $Variable[7],
		'Offset'   => $Variable[8],
                'Keep'     => $Variable[9],
                'Pos'      => $Pos + 1
            ];
        }

        $this->RegisterPropertyString('Variables', json_encode($Variables));

Soweit so gut. Wenn ich allerdings im Einstellungen Editor eine VAriable ändere , dann sollten eigentlich über Maintainvariable dch die entsprechenden Variablen entfernt werden und die andern bleiben.

   //Create Variables and check when new Rows in config appear after an update.
        $NewRows = static::$Variables;
        $NewPos = 0;
        $Variables = json_decode($this->ReadPropertyString('Variables'), true);
        foreach ($Variables as $Variable) {
            @$this->MaintainVariable($Variable['Ident'], $Variable['Name'], $Variable['VarType'], $Variable['Profile'], $Variable['Pos'], $Variable['Keep']);
            foreach ($NewRows as $Index => $Row) {
                if ($Variable['Ident'] == str_replace(' ', '', $Row[0])) {
                    unset($NewRows[$Index]);
                }
            }
            if ($NewPos < $Variable['Pos']) {
                $NewPos = $Variable['Pos'];
            }
        }
        if (count($NewRows) != 0) {
            foreach ($NewRows as $NewVariable) {
                $Variables[] = [
                    'Ident'    => str_replace(' ', '', $NewVariable[0]),
                    'Name'     => $this->Translate($NewVariable[0]),
                    'VarType'  => $NewVariable[1],
                    'DataType' => $NewVariable[2],
                    'Profile'  => $NewVariable[3],
                    'Address'  => $NewVariable[4],
                    'Function' => $NewVariable[5],
                    'Quantity' => $NewVariable[6],
                    'Factor'   => $NewVariable[7],
                    'Offset'   => $NewVariable[8],
                    'Keep'     => $NewVariable[9],
                    'Pos'      => ++$NewPos
                ];
            }
            IPS_SetProperty($this->InstanceID, 'Variables', json_encode($Variables));
            IPS_ApplyChanges($this->InstanceID);

Bei mir wirft er da aber zum Beispiel das Feld ‚DataType‘ raus, was in der Folge dazu führt, dass das Modul die Daten nicht mehr abholt und mit die Fehlermldung „Notice: Undefined index: DataType in C:\ProgramData\Symcon\modules\IPSymcom-Deye_Inverter\libs\DeyeModule.php on line 320“ ausgibt.

Ich bin ja davon ausgegangen, dass man mit IPS_SetProperty an eine Variable beliebige Properties hängen kann. oder hab ich da einen Denkfehler. Auf jeden Fall ist mri unklar, warum die Einstellungen nach einem Aktiv- und Inaktivschalten einer Variablen dann nicht mehr funktionieren.

Der zweite Code mit SetProperty darf bei dir nie ausgeführt werden, da hier nur geprüft wird ob neue Zeilen (Variablen) im Array ergänzt wurden. Das kann nur bei einem Module Update passieren.

Dein Fehler wird eher sein, dass deine neuen Felder nicht in der Spalte der Liste enthalten sind. Somit musst du die form.json anpassen.
Michael

Hallo Nall-chan,

danke für den Tipp mit der form.json. Die hatte ich gar nicht auf dem Schirm und genau da lag der Fehler. Die entsprechenden Felder dort ergänzt und es funktioniert prima.

@ThomasWest69
Hallo Thomas,
wenn für Dein Deye-Wechselrichter-Modul noch ein Beta-Tester benötigt wird, würde ich mich gern zur Verfügung stellen. Hab den Deye SUN 600 hier laufen und suche eine Möglichkeit, die Daten in IPS zu bekommen und dort auszuwerten und zu loggen.
Besten Dank im voraus und viele Grüße
Thilo

@ThomasWest69
Hallo Thomas,
darf ich mal nachfragen, wie weit die Entwicklung des Moduls für den Deye-Wechselrichter vorangeschritten ist?
Ich habe auch großes Interesse daran, bin aber auf der Software-Seite nicht so fit, das alleine zu stemmen.
Viele Grüße
Thilo

Any updates? :wink: kann man helfen? Benötige ein solches modul auch :wink:

Lieben Gruß

Hätte auch Interesse an dem Modul und zwei Bosswerk MI-300 Wechselrichter im Einsatz, welche baugleich mit dem Deye sind. Aktuell hole ich mir die Daten von der Solarman-Plattform ins IPS, was leider etwas suboptimal ist.

Da muss ich Dich leider enttäuschen. Mein Modul ist für die großen Hybridwechselrichter der SUNxxK-SGxxLPx-Reihe. Bei Bosswerk sind das die hier Bosswerk Hybrid
Allerdings scheint es bei Bosswerk nur bis 4600W zu gehen. Bei den originalen Deye geht das bis 20kW hoch.

Hallo Thomas,

ich bekomme in Kürze auch meinen Deye Hybridwechselrichter und würde ihn gerne in Symcon einbinden.
Kannst du mir ein paar Stichworte geben, wie deine Integration aussieht (über WLAN-Stick-Logger oder über Solarman-Cloud oder…), damit ich mich weiter einlesen kann? Setzt du auf einem anderen Modul auf oder hast du das von Grund auf entwickelt?

Vielen Dank!
Viele Grüße
Philip