Hi,
Thanks for the script that creates all the 173 variables. After running I noticed that some key variables where missing in the script. Especially the ones that keep track of the used power per phase (L1,L2 and L3). Thanks to B+G E Tech GmbH for there manual I was able to add the missing registers to the script. It now goes to 191 variables!
Have fun with the 18 extra variables!
Robert
<?
/*----------------------------Ausleseadressen--------------------------------*/
/* Anlegen Setzen auf 0 Um die entsprechende Instanz nicht anzulegen oder zu löschen.
1 Um die entsprechende Instanz anzulegen bzw. nicht zu löschen.
2 Wie 1, es wird zusätzlich die Variable unter der Instanz benannt
mit $Bezeichnung
oder, wenn $VarName existiert, mit $VarName Siehe Beispiel unter Spannung L1
3 wie 1 zusätzlich werden WFE Links erstellt.
4 wie 2 zusätzlich werden WFE Links erstellt. */
/* Auskommentieren des Profils bewirkt, das der Variable kein Variablenprofil zugewiesen wird.
Profile ohne "Tilde" müssen, wenn gewünscht, vorher selbst angelegt werden.
Die Jeweils erste Kommentarzeile ist die Beschreibung aus dem Handbuch,
die Bezeichnung ist von mir teilweise übersetzt und kann natürlich frei gewählt werden */
/* TextVor -Nach Kann Frei gelassen werden. */
/*--------------------------------Config-------------------------------------*/
$ParentId = 47198 /*[Hardware\ModBus\SDM630]*/; //Dort werden die Instanzen angelegt.
$SplitterId = 35396 /*[ModBus SDM630 Gateway]*/; //Id des Modbus RTU Spliters
$WFEId = 17908; // Nur relevant bei $Anlegen > 2
$TextVor = ""; // z.B. $TextVor = "UV_EG";
$TextNach = "";
/*----------------------------Ausleseadressen--------------------------------*/
//Phase 1 line to neutral volts
$Anlegen[1] = 2;
$Bezeichnung[1] = "Voltage L1";
//$VarName[1] = "Variablen Name";
$Profil[1] = "~Volt";
//Phase 2 line to neutral volts
$Anlegen[2] = 2;
$Bezeichnung[2] = "Voltage L2";
$Profil[2] = "~Volt";
//Phase 3 line to neutral volts
$Anlegen[3] = 2;
$Bezeichnung[3] = "Voltage L3";
$Profil[3] = "~Volt";
//Phase 1 current
$Anlegen[4] = 2;
$Bezeichnung[4] = "Current L1";
$Profil[4] = "~Ampere";
//Phase 2 current
$Anlegen[5] = 2;
$Bezeichnung[5] = "Current L2";
$Profil[5] = "~Ampere";
//Phase 3 current
$Anlegen[6] = 2;
$Bezeichnung[6] = "Current L3";
$Profil[6] = "~Ampere";
//Phase 1 Power
$Anlegen[7] = 2;
$Bezeichnung[7] = "Power L1";
$Profil[7] = "~Watt.3680";
//Phase 2 Power
$Anlegen[8] = 2;
$Bezeichnung[8] = "Power L2";
$Profil[8] = "~Watt.3680";
//Phase 3 Power
$Anlegen[9] = 2;
$Bezeichnung[9] = "Power L3";
$Profil[9] = "~Watt.3680";
//Phase 1 volt amps
$Anlegen[10] = 0;
$Bezeichnung[10] = "ScheinPower L1";
//$Profil[10] = "VoltAmpere";
//Phase 2 volt amps
$Anlegen[11] = 0;
$Bezeichnung[11] = "ScheinPower L2";
//$Profil[11] = "VoltAmpere";
//Phase 3 volt amps
$Anlegen[12] = 0;
$Bezeichnung[12] = "Scheinleistung L3";
//$Profil[12] = "VoltAmpere";
//Phase 1 volt amps reactive
$Anlegen[13] = 0;
$Bezeichnung[13] = "Blindleistung L1";
//$Profil[13] = "VAr";
//Phase 2 volt amps reactive
$Anlegen[14] = 0;
$Bezeichnung[14] = "Blindleistung L2";
//$Profil[14] = "VAr";
//Phase 3 volt amps reactive
$Anlegen[15] = 0;
$Bezeichnung[15] = "Blindleistung L3";
//$Profil[15] = "VAr";
//Phase 1 power factor (1)
$Anlegen[16] = 0;
$Bezeichnung[16] = "Power Faktor L1";
//$Profil[16] = "None";
//Phase 2 power factor (1)
$Anlegen[17] = 0;
$Bezeichnung[17] = "Power Faktor L2";
//$Profil[17] = "None";
//Phase 3 power factor (1)
$Anlegen[18] = 0;
$Bezeichnung[18] = "Power Faktor L3";
//$Profil[18] = "None";
//Phase 1 phase angle
$Anlegen[19] = 0;
$Bezeichnung[19] = "Phase Angel L1";
//$Profil[19] = "Degrees";
//Phase 2 phase angle
$Anlegen[20] = 0;
$Bezeichnung[20] = "Phase Angel L2";
//$Profil[20] = "Degrees";
//Phase 3 phase angle
$Anlegen[21] = 0;
$Bezeichnung[21] = "Phase Angel L3";
//$Profil[21] = "Degrees";
//Average line to neutral Volts
$Anlegen[22] = 0;
$Bezeichnung[22] = "Average to neutral Volts";
$Profil[22] = "~Volt";
//Average line current
$Anlegen[24] = 2;
$Bezeichnung[24] = "Average Current";
$Profil[24] = "~Ampere";
//Sum of line Currents
$Anlegen[25] = 2;
$Bezeichnung[25] = "Sum Currents";
$Profil[25] = "~Ampere";
//Total system power
$Anlegen[27] = 2;
$Bezeichnung[27] = "Total Sytem Power";
$Profil[27] = "~Watt.14490";
//Total system volts amps
$Anlegen[29] = 0;
$Bezeichnung[29] = "Scheinleistung Insgesamt";
//$Profil[29] = "VA";
//Total system VAr
$Anlegen[31] = 0;
$Bezeichnung[31] = "Blindleistung Insgesamt";
//$Profil[31] = "VAr";
//Total system power factor
$Anlegen[32] = 0;
$Bezeichnung[32] = "Power Faktor Insgesamt";
//$Profil[32] = "None";
//Total system phase angle
$Anlegen[34] = 0;
$Bezeichnung[34] = "Phasenwinkel Insgesamt";
//$Profil[34] = "Degrees";
//Frequency of supply voltages
$Anlegen[36] = 0;
$Bezeichnung[36] = "Frequency of supply voltages";
//$Profil[36] = "Hz";
//Import Wh since last reset(2)
$Anlegen[37] = 2;
$Bezeichnung[37] = "Total Consumption";
$Profil[37] = "~Electricity";
//Export Wh since last reset(2)
$Anlegen[38] = 0;
$Bezeichnung[38] = "Export Wh since last reset(2)";
//$Profil[38] = "kWh/MWh";
//Import VArh since last reset(2)
$Anlegen[39] = 0;
$Bezeichnung[39] = "Import VArh since last reset(2)";
//$Profil[39] = "kVArh/MVArh";
//Export VArh since last reset(2)
$Anlegen[40] = 0;
$Bezeichnung[40] = "Export VArh since last reset(2)";
//$Profil[40] = "kVArh/MVArh";
//VAh since last reset(2)
$Anlegen[41] = 0;
$Bezeichnung[41] = "VAh since last reset(2)";
//$Profil[41] = "kVAh/MVAh";
//Ah since last reset(3)
$Anlegen[42] = 2;
$Bezeichnung[42] = "Ah since last reset(3)";
//$Profil[42] = "Ah/kAh";
//Total system power demand (4)
$Anlegen[43] = 2;
$Bezeichnung[43] = "Total system power demand (4)";
$Profil[43] = "~Watt.14490";
//Maximum total system power
$Anlegen[44] = 2;
$Bezeichnung[44] = "Maximum total system power";
$Profil[44] = "~Watt.14490";
//Total system VA demand
$Anlegen[51] = 0;
$Bezeichnung[51] = "Total system VA demand";
//$Profil[51] = "VA";
//Maximum total system VA demand
$Anlegen[52] = 0;
$Bezeichnung[52] = "Maximum total system VA demand";
//$Profil[52] = "VA";
//Neutral current demand
$Anlegen[53] = 0;
$Bezeichnung[53] = "Neutral current demand";
$Profil[53] = "~Ampere";
//Maximum neutral current demand
$Anlegen[54] = 0;
$Bezeichnung[54] = "Maximum neutral current demand";
$Profil[54] = "~Ampere";
//Line 1 to Line 2 volts
$Anlegen[101] = 0;
$Bezeichnung[101] = "Spannung zwischen L1 und L2";
$Profil[101] = "~Volt";
//Line 2 to Line 3 volts
$Anlegen[102] = 0;
$Bezeichnung[102] = "Spannung zwischen L2 und L3";
$Profil[102] = "~Volt";
//Line 3 to Line 1 volts
$Anlegen[103] = 0;
$Bezeichnung[103] = "Spannung zwischen L1 und L3";
$Profil[103] = "~Volt";
//Average line to line volts
$Anlegen[104] = 0;
$Bezeichnung[104] = "Spannung zwischen den Phasen durchschnittlich";
$Profil[104] = "~Volt";
//Neutral current
$Anlegen[113] = 0;
$Bezeichnung[113] = "Strom auf dem Neutralleiter";
$Profil[113] = "~Ampere";
//Phase 1 L/N volts THD
$Anlegen[118] = 0;
$Bezeichnung[118] = "Phase 1 L/N volts THD";
//$Profil[118] = "%";
//Phase 2 L/N volts THD
$Anlegen[119] = 0;
$Bezeichnung[119] = "Phase 2 L/N volts THD";
//$Profil[119] = "%";
//Phase 3 L/N volts THD
$Anlegen[120] = 0;
$Bezeichnung[120] = "Phase 3 L/N volts THD";
//$Profil[120] = "%";
//Phase 1 Current THD
$Anlegen[121] = 0;
$Bezeichnung[121] = "Phase 1 Current THD";
//$Profil[121] = "%";
//Phase 2 Current THD
$Anlegen[122] = 0;
$Bezeichnung[122] = "Phase 2 Current THD";
//$Profil[122] = "%";
//Phase 3 Current THD
$Anlegen[123] = 0;
$Bezeichnung[123] = "Phase 3 Current THD";
//$Profil[123] = "%";
//Average line to neutral volts THD
$Anlegen[125] = 0;
$Bezeichnung[125] = "Average line to neutral volts THD";
//$Profil[125] = "%";
//Average line current THD
$Anlegen[126] = 0;
$Bezeichnung[126] = "Average line current THD";
//$Profil[126] = "%";
//Total system power factor (5)
$Anlegen[128] = 0;
$Bezeichnung[128] = "Total system power factor (5)";
//$Profil[128] = "Degrees";
//Phase 1 current demand
$Anlegen[130] = 0;
$Bezeichnung[130] = "Phase 1 current demand";
$Profil[130] = "~Ampere";
//Phase 2 current demand
$Anlegen[131] = 0;
$Bezeichnung[131] = "Phase 2 current demand";
$Profil[131] = "~Ampere";
//Phase 3 current demand
$Anlegen[132] = 0;
$Bezeichnung[132] = "Phase 3 current demand";
$Profil[132] = "~Ampere";
//Maximum phase 1 current demand
$Anlegen[133] = 2;
$Bezeichnung[133] = "Maximum phase 1 current demand";
$Profil[133] = "~Ampere";
//Maximum phase 2 current demand
$Anlegen[134] = 2;
$Bezeichnung[134] = "Maximum phase 2 current demand";
$Profil[134] = "~Ampere";
//Maximum phase 3 current demand
$Anlegen[135] = 2;
$Bezeichnung[135] = "Maximum phase 3 current demand";
$Profil[135] = "~Ampere";
//Line 1 to line 2 volts THD
$Anlegen[168] = 0;
$Bezeichnung[168] = "Line 1 to line 2 volts THD";
//$Profil[168] = "%";
//Line 2 to line 3 volts THD
$Anlegen[169] = 0;
$Bezeichnung[169] = "Line 2 to line 3 volts THD";
//$Profil[169] = "%";
//Line 3 to line 1 volts THD
$Anlegen[170] = 0;
$Bezeichnung[170] = "Line 3 to line 1 volts THD";
//$Profil[170] = "%";
//Average line to line volts THD
$Anlegen[171] = 0;
$Bezeichnung[171] = "Average line to line volts THD";
//$Profil[171] = "%";
//Total active energy
$Anlegen[172] = 0;
$Bezeichnung[172] = "Total active energy";
$Profil[172] = "~Electricity";
//Total reactive energy
$Anlegen[173] = 0;
$Bezeichnung[173] = "Total reactive energy";
//$Profil[173] = "kVarh";
// L1 Import Total kWh
$Anlegen[174] = 2;
$Bezeichnung[174] = "L1 Import Total kWh";
$Profil[174] = "~Electricity";
// L2 Import Total kWh
$Anlegen[175] = 2;
$Bezeichnung[175] = "L2 Import Total kWh";
$Profil[175] = "~Electricity";
// L3 Import Total kWh
$Anlegen[176] = 2;
$Bezeichnung[176] = "L3 Import Total kWh";
$Profil[176] = "~Electricity";
// L1 Export Total kWh
$Anlegen[177] = 0;
$Bezeichnung[177] = "L1 Export Total kWh";
$Profil[177] = "~Electricity";
// L2 Export Total kWh
$Anlegen[178] = 0;
$Bezeichnung[178] = "L2 Export Total kWh";
$Profil[178] = "~Electricity";
// L3 Export Total kWh
$Anlegen[179] = 0;
$Bezeichnung[179] = "L3 Export Total kWh";
$Profil[179] = "~Electricity";
// L1 Total kWh
$Anlegen[180] = 2;
$Bezeichnung[180] = "L1 Total kWh";
$Profil[180] = "~Electricity";
// L2 Total kWh
$Anlegen[181] = 2;
$Bezeichnung[181] = "L2 Total kWh";
$Profil[181] = "~Electricity";
// L3 Total kWh
$Anlegen[182] = 2;
$Bezeichnung[182] = "L3 Total kWh";
$Profil[182] = "~Electricity";
// L1 Import Total kVarh
$Anlegen[183] = 0;
$Bezeichnung[183] = "L1 Import Total kVarh";
//$Profil[183] = "kVarh";
// L2 Import Total kVarh
$Anlegen[184] = 0;
$Bezeichnung[184] = "L2 Import Total kVarh";
//$Profil[184] = "kVarh";
// L3 Import Total kVarh
$Anlegen[185] = 0;
$Bezeichnung[185] = "L3 Import Total kVarh";
//$Profil[185] = "kVarh";
// L1 Export Total kVarh
$Anlegen[186] = 0;
$Bezeichnung[186] = "L1 Export Total kVarh";
//$Profil[186] = "kVarh";
// L2 Export Total kVarh
$Anlegen[187] = 0;
$Bezeichnung[187] = "L2 Export Total kVarh";
//$Profil[187] = "kVarh";
// L3 Export Total kVarh
$Anlegen[188] = 0;
$Bezeichnung[188] = "L3 Export Total kVarh";
//$Profil[188] = "kVarh";
// L1 Total kVarh
$Anlegen[189] = 0;
$Bezeichnung[189] = "L1 Total kVarh";
//$Profil[189] = "kVarh";
// L2 Total kVarh
$Anlegen[190] = 0;
$Bezeichnung[190] = "L2 Total kVarh";
//$Profil[190] = "kVarh";
// L2 Total kVarh
$Anlegen[190] = 0;
$Bezeichnung[190] = "L2 Total kVarh";
//$Profil[190] = "kVarh";
// L3 Total kVarh
$Anlegen[191] = 2;
$Bezeichnung[191] = "L3 Total kVarh";
//$Profil[191] = "kVarh";
/*---------------------------------------------------------------------------*/
for ($i = 1; $i <=191; $i++)
{
$InstanzId = @IPS_GetObjectIDByIdent ($i , $ParentId);
if($InstanzId != false)
{
$ChildIds = IPS_GetChildrenIDs($InstanzId);
IPS_SetName($InstanzId, "$TextVor $Bezeichnung[$i] $TextNach");
if(isset($Profil[$i]))
IPS_SetVariableCustomProfile($ChildIds[0], $Profil[$i]);
if(isset($VarName[$i]) && ($Anlegen[$i] === 2 || $Anlegen[$i] === 4))
{
IPS_SetName ($ChildIds[0], $VarName[$i]);
echo ("$Bezeichnung[$i]: Bezeichnungen aktualisiert
");
}elseif (isset($Anlegen[$i]) && ($Anlegen[$i] === 2 || $Anlegen[$i] === 4))
{
IPS_SetName ($ChildIds[0], "$TextVor $Bezeichnung[$i] $TextNach");
echo ("$Bezeichnung[$i]: Bezeichnungen aktualisiert
");
}
if(isset($VarName[$i]) && $Anlegen[$i] >=3)
SetLinkByName($WFEId, $VarName[$i], $ChildIds[0], "BGETechInstall$i");
elseif (isset ($Anlegen[$i]) && $Anlegen[$i] >=3)
SetLinkByName($WFEId, $Bezeichnung[$i], $ChildIds[0], "BGETechInstall$i");
}
if(isset($Anlegen[$i]) && $Anlegen[$i] >= 1)
{
if ($InstanzId === false)
{
$InstanzId = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}");
IPS_SetParent ($InstanzId, $ParentId);
IPS_SetName($InstanzId, "$TextVor $Bezeichnung[$i] $TextNach");
IPS_SetIdent ($InstanzId, $i);
IPS_SetProperty ($InstanzId , "WriteAddress", 0);
IPS_SetProperty ($InstanzId , "EmulateStatus", false);
IPS_SetProperty ($InstanzId , "ReadAddress", ($i-1)*2);
IPS_SetProperty ($InstanzId , "DataType", 7);
IPS_SetProperty ($InstanzId , "ReadFunctionCode" , 4);
IPS_SetProperty ($InstanzId , "WriteFunctionCode" , 0);
IPS_SetProperty ($InstanzId , "Poller", 5000);
IPS_DisconnectInstance($InstanzId);
IPS_ConnectInstance ($InstanzId, $SplitterId);
IPS_ApplyChanges($InstanzId);
$ChildIds = IPS_GetChildrenIDs($InstanzId);
if(isset($Profil[$i]))
IPS_SetVariableCustomProfile($ChildIds[0], $Profil[$i]);
if(isset($VarName[$i]) && ($Anlegen[$i] === 2 || $Anlegen[$i] === 4))
{
IPS_SetName ($ChildIds[0], $VarName[$i]);
}elseif (isset($Anlegen[$i]) && ($Anlegen[$i] === 2 || $Anlegen[$i] === 4))
IPS_SetName ($ChildIds[0], "$TextVor $Bezeichnung[$i] $TextNach");
if(isset($VarName[$i]) && $Anlegen[$i] >=3)
SetLinkByName($WFEId, $VarName[$i], $ChildIds[0], "BGETechInstall$i");
elseif ($Anlegen[$i] >=3)
SetLinkByName($WFEId, $Bezeichnung[$i], $ChildIds[0], "BGETechInstall$i");
echo ("$Bezeichnung[$i]: Instanz erfolgreich angelegt
");
}elseif($Anlegen[$i] >= 1)
echo ("$Bezeichnung[$i]: Instanz schon vorhanden
");
}elseif (isset($Anlegen[$i]) && !$InstanzId === false && $Anlegen[$i] === 0)
{
IPS_DeleteLink (IPS_GetObjectIDByIdent ("BGETechInstall$i", $WFEId ));
foreach ($ChildIds as $ChildId)
IPS_DeleteVariable($ChildId);
if (IPS_DeleteInstance ($InstanzId));
echo ("$Bezeichnung[$i]: Instanz gelöscht
");
}
}
function SetLinkByName($parentID, $name, $targetID, $Ident)
{
$LinkId = @IPS_GetObjectIDByIdent ($Ident, $parentID );
if($LinkId === false)
{
$LinkId = IPS_CreateLink(); //Link anlegen
IPS_SetLinkTargetID($LinkId, $targetID);
IPS_SetParent($LinkId, $parentID);
IPS_SetIdent ($LinkId, $Ident);
}
IPS_SetName($LinkId, $name); //Link benennen
return $LinkId;
}
?>