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.