[b]Hallo zusammen,
ein erstes Testscript.
Für alle die mal testen wollen und eventuell noch einen Dump übrig haben.![:smiley: :smiley:](https://community.symcon.de/images/emoji/win10/smiley.png?v=9)
Eine Kategorie mit Namen SML2018 in Root/Home anlegen.
Registervariable unter das Script.
Comport, TCP…usw nach euerer Hardware entsprechend verknüpfen.
z.B. Comport -> Cutter -> Registervariable -> Script.
Im Cutter müssen vorerst noch die Trennzeichen eingetragen werden
Script in der angelegte Kategorie SML2018 einfügen. Name egal.
Variablen werden automatisch angelegt. Wer mit den Nummern nicht klar kommt, kann auch die Namen ändern. Im Testmodus allerdings nicht sehr hilfreich.
Die Leistung wird eventuell noch nicht korrekt angezeigt!
Der Hersteller und die ServerId wird noch nicht ausgegeben!
Ansonsten testen und Fehler in der Auswertung melden.
Wenn ihr einen Dump postet, bitte in Hex und mit den abgelesenen Werten vom Zähler mit den Nummern z.B 1.0.8 => 24 KWh…usw.
Script:[/b]
<?
$smlDataEnergie = array('Wirk-Energie Total Bezug' => chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF),
'Wirk-Energie Tarif 1 Bezug' => chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF),
'Wirk-Energie Tarif 2 Bezug' => chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF),
'Wirk-Energie Total Lieferung' => chr(0x01).chr(0x00).chr(0x02).chr(0x08).chr(0x00).chr(0xFF),
'Wirk-Energie Tarif 1 Lieferung' => chr(0x01).chr(0x00).chr(0x02).chr(0x08).chr(0x01).chr(0xFF),
'Wirk-Energie Tarif 2 Lieferung' => chr(0x01).chr(0x00).chr(0x02).chr(0x08).chr(0x02).chr(0xFF));
$smlDataPower = array('Wirk-Leistung Total1' => chr(0x01).chr(0x00).chr(0x10).chr(0x07).chr(0x00).chr(0xFF),
'Wirk-Leistung Total2' => chr(0x01).chr(0x00).chr(0x0F).chr(0x07).chr(0x00).chr(0xFF),
'Wirkleistung L1' => chr(0x01).chr(0x00).chr(0x23).chr(0x07).chr(0x00).chr(0xFF),
'Wirkleistung L2' => chr(0x01).chr(0x00).chr(0x37).chr(0x07).chr(0x00).chr(0xFF),
'Wirkleistung L3' => chr(0x01).chr(0x00).chr(0x4B).chr(0x07).chr(0x00).chr(0xFF));
if($_IPS['SENDER'] == "RegisterVariable")
{
$sml = explode(chr(0x01).chr(0x77).chr(0x07), $_IPS['VALUE']);
for($i=0; $i < count($sml); $i++)
{
$dataKennung = substr($sml[$i], 0, 6);
$dataWertEnergie = substr($sml[$i], -5, 5);
$dataWertPower = substr($sml[$i], -2, 2);
if(in_array($dataKennung, $smlDataEnergie, true))
{
$smlIndexEnergie = Str2Hex(substr($dataKennung, 2, -1));
$smlValueEnergie = hexdec(Str2Hex($dataWertEnergie))/10000;
$varIdentEnergie = hexdec($smlIndexEnergie);
$ModuleID = @IPS_GetCategoryIDByName("SML2018", 0); // prüfen ob KategorieID exsistiert
$varSml = @IPS_GetObjectIDByIdent("SML_".$varIdentEnergie, $ModuleID); // IDs der Variablen
if(!IPS_VariableExists($varSml)) // Prüfen ob ID der Variablen bereits vorhanden, wenn Nein, anlegen
{
$varSml = IPS_CreateVariable(2); // Variable Float anlegen
@IPS_SetName($varSml, "SML_".$smlIndexEnergie); // Der neu generierten ID einen Namen zuweisen
IPS_SetVariableCustomProfile($varSml, "~Electricity"); // Profil setzen
IPS_SetParent($varSml, $ModuleID); // nach Kategorie verschieben
IPS_SetIdent($varSml, "SML_".$varIdentEnergie);
}
SetValue($varSml, $smlValueEnergie);
}
if(in_array($dataKennung, $smlDataPower, true))
{
$smlIndexPower = Str2Hex(substr($dataKennung, 2, -1));
$smlValuePower = hexdec(Str2Hex($dataWertPower))/100; //verschiedene Teiler !!!
$varIdentPower = hexdec($smlIndexPower);
$ModuleID = @IPS_GetCategoryIDByName("SML2018", 0); // prüfen ob KategorieID exsistiert
$varSml = @IPS_GetObjectIDByIdent("SML_".$varIdentPower, $ModuleID); // IDs der Variablen
if(!IPS_VariableExists($varSml)) // Prüfen ob ID der Variablen bereits vorhanden, wenn Nein, anlegen
{
$varSml = IPS_CreateVariable(2); // Variable Float anlegen
@IPS_SetName($varSml, "SML_".$smlIndexPower); // Der neu generierten ID einen Namen zuweisen
IPS_SetVariableCustomProfile($varSml, "~Watt.14490"); // Profil setzen
IPS_SetParent($varSml, $ModuleID); // nach Kategorie verschieben
IPS_SetIdent($varSml, "SML_".$varIdentPower);
}
SetValue($varSml, $smlValuePower);
}
}
}
function Str2Hex($daten)
{
$hex = "";
for($i=0; $i<strlen($daten); $i++)
$hex .= sprintf("%02X ", ord($daten[$i]));
return $hex;
}?>