Hallo @juergen852 ,
wir haben auch einen PK, und auch das (glaube ich überflüssige) Internet Gateway als auch das KNX Interface. Ich hatte Hargassner bzgl. des KNX Interfaces (Weinzierl KNX IP BAOS 771) angeschrieben und um Spezifikation gebeten, da sich hier sehr bedekt gehalten wird mit Dokumentation. Die haben um persönliche Kontaktaufnahme gebeten, was ich erst heute wieder in Angriff genommen habe… und auch erst heute über deinen Post gestolpert bin.
Ich hatte damals auch gesucht und leider nur sehr wenig gefunden.
Mein heutiges Verständnis ist, dass man das Internet Gateway nur braucht um Hargassner die Daten in deren Cloud zu schicken und die App zu bedienen.
Der Kessel muss/kann ja auch direkt an’s Netzwerk via LAN angeschlossen werden.
Ich habe dann einen Register Variable angelegt, und den dazugehörigen (übergeordnete Instanz) Client Socket mit der IP des Kessels und Port 23 konfiguriert.
Dazu habe ich ein Skript zusammengeklöppelt, das die Registervariable ausliest und wenn noch nicht vorhanden, eine Variable (mit Ident) dazu anlegt:
<?php
$debug = false;
$raw = 53889; // Variabel (STRING) für die konvertierte Registervariable
$counter = 39625; // Variable (INT) um nicht sekündlich zu aktualisieren
$count = GetValue($counter);
//echo $count;
if ($count == 0)
{
$ParentID = IPS_GetParent($_IPS['SELF']);
if ($_IPS['SENDER'] == "RegisterVariable") {
// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
$data = RegVar_GetBuffer($_IPS['INSTANCE']);
$data .= $_IPS['VALUE'];
$hex = bin2hex($data);
$conv = Hex2Str($hex);
$res = trim($conv);
SetValue($raw, $res);
}
$res = GetValue($raw);
$lst = explode(' ', $res);
//print_r ($lst);
$i = 1;
foreach ($lst as &$value){
// VariablenID ermitteln, wenn nicht vorhanden, dann erstellen
$VarID=GetVarID($ParentID, $i, $value); // 0=bool, 1=int, 2=float, 3=string
IPS_SetPosition($VarID, 2*$i);
// Variablenwert aktualisieren, wenn unterschiedlich
$ObjID= IPS_GetObjectIDByIdent ($i, $ParentID);
$old=GetValue($ObjID);
if ($old == $value)
//if (1==2)
{
//SetValue($VarID, str_replace('.', ',',$value));
//echo $VarID;
}
else {
//echo $i."\n";
SetValue($VarID, str_replace('.', ',',$value)); /* Die Variable wird separat dupliziert für "nur digitale Werte */
IPS_SetHidden($VarID, false);
// Varwert aktualisieren ENDE
}
$i = $i+ 1;
}
unset ($value) ;
//print_r($dig);
//SetValue(18015, $json);
if ($debug == true){
echo "\n";
echo "\n";
}
}
if ($count == 0) {
SetValue($counter, 60);
//echo "Test";
}
else {
//echo "counter";
$count = $count-1;
SetValue($counter, $count);
}
// **************************************************************************
// Hilfsfunktionen
// **************************************************************************
// Diese Funktion dient zum Ermitteln einer Variablen-ID anhand des Ident
// Wenn die Variable nicht existiert, wird sie angelegt
function GetVarID($parentid, $ident, $value)
{
$varid = @IPS_GetObjectIDByIdent($ident, $parentid);
if ($varid === false)
{
$ScriptID = $_IPS['SELF'];
if (ctype_alpha($value) or (strlen($value)>>1 and substr($value, 0,1) == '0')) //( is_float ($value))
{
$vartyp = 3; //string
//echo $value.' -> '.$vartyp.' string: '.($value)."\n";
}
elseif (ctype_digit($value))
{
$vartyp = 1; // int
//echo $value.' -> '.$vartyp.' decimal: '.intval($value)."\n";
}
else
{
$vartyp = 2; // float
//echo $value.' -> '.$vartyp.' float: '.floatval($value)."\n";
}
$varid = IPS_CreateVariable($vartyp);
IPS_SetParent($varid, $parentid);
IPS_SetIdent($varid, $ident);
IPS_SetName($varid, $ident);
IPS_SetInfo($varid, "This Variable was created by Script #$ScriptID");
IPS_SetHidden($varid, true);
// IPS_SetVariableCustomProfile($varid, "~String");
}
return $varid;
}
function Hex2Str($hex){
$string='';
for ($i=0; $i < strlen($hex)-1; $i+=2){
$string .= chr(hexdec($hex[$i].$hex[$i+1]));
}
return $string;
}
?>
VORSICHT!!!, bei mir sind dadurch 527 Variablen angelegt worden.
Das Skript braucht zusätzlich:
- 1 String Variable in die der konvertierte Datensatz geschrieben wird (war für Debugzwecke)
- 1 Integer Variable in der ein Counter gesetzt wird
Den Counter habe ich eingebaut, da ich nicht sekündlich alle 527 Variablen aktualisieren wollte…
Das ist „dreckig“ hingedengelt, aber ich habe die Daten damit erst mal reinbekommen. Die große Frage ist dann die Interpretation der Daten, dazu hab ich nichts offizielle gefunden. Das Beste war noch hier:
KNX Forum: Hargassner Pelletsheizung
Für mich war das erstmal OK, ich habe die Daten vom Display des Gerätes mit den angelegten Variablen verglichen und konnte das für mich Wichtigste zuordnen. Was mir ein paar mal (nach Updates der Kesselsoftware) vorgekommen ist, ist dass einige wenige vorher angelegt Variablen nicht mehr vom Datentyp gepasst haben, d.h. Hargasser spielt dadran auch rum, also VORSICHT.
Evtl. ist es ja noch aktuell und hilft, ich kümmere mich jetzt um die KNX Anbindung, evtl. lässt sich dadurch auf die Interpretation der Daten zurückschließen, dass schaue ich mir dann an.
VG
Frank