Hargassner Nano-PK 20-32 kW Pellet Heizung

Hallo,

seit heute habe ich eine pk 20-32 im Keller incl. dem Modem zur Übermittlung der Daten an das Hargassner-Portal.

Ich würde da aber gerne auch Symcon wieder andocken.
Habe zusätzlich das Internet-Gateway, Modbus-TCP und KNX bietet Hargassner auch an, aber sind ziemlich teuer.

Hat da jemand schon was hin bekommen?

Was ich bisher fand:
https://www.mikrocontroller.net/topic/267831

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

Hallo,

ja, das Gateway braucht man nur für die App/Webfrontend, per Telnet geht man direkt auf die Steuerung. (Wusste ich damals nicht, drum habe ich das Gateway auch gekauft.)

Ich hatte mir mittlerweile mit einem Python-Script aus irgend einem Forum beholfen. Das liest die Variablen aus (cronjob) und schreibt sie in eine csv, die ich dann mit Symcon auslese.
Und ja, Hargassner ändert die Reihenfolge der Variablen gelegentlich… Die Aufstellung im KNX-Forum von 2018 dürfte nur noch teilweise stimmen.

Ich habe mir die für mich wichtigen Werte aus dem CSV einach durch Vergleich mit den Daten in der App oder den Füllstand über „Wert an der Steuerung ändern und schauen wo es im CSV auftaucht“ herausgesucht.

Ich muss heute Abend mal zuhause nachschauen, was da noch funktioniert.

Deine Idee mit der Registervariablen ist gut, muss mal schauen, wenn ich Zeit finde.
Du bist da besser in PHP als ich…

KNX-Adapter:
Die wollen ziemlich viel Geld dafür und geben vermutlich über KNX auch nur einen Teil der Variablen raus. Doku fand ich nirgends.

Lange Rede:
Im Dauerbetrieb brauch ich eigentlich nur den Füllstand der Pellets (den ermittelt Hargassner rechnerisch, der weicht bei 4 Tonnen Tank auch schnell mal 100-300kg vom tatsächlichen Vorrat ab) und Fehlermeldungen, wenn die Aschelade voll ist.
Beide Infos beziehe ich derzeit über die App.

Das ganze „Bei welcher Aussentemperatur brauche ich wieviele KG“ oder „Wie viel Pellets brauche ich im Sommer für Warmwasser“ habe ich aufgegeben…
Muss halt warm sein und tanken sollte ich, wenn die Pellets günstig sind…

@eeFrank Hier hat einer was interessantes gebaut:

Er unterscheidet auch nach Firmware-Stand und hat die Zuordnungen drin:

Hier die Firmware-Stände

wow, mächtig.
Mal sehen ob da was zum recyclen dabei ist.

Den Aufwand den er da betrieben hat ist enorm. Er scheint aber auch nur ganz bestimmte Parameter auszulesen, vor allem Heizzeiten /Warmwasserbereitung und ein paar Kesseldaten (Status, Pelletverbrauch und Lagerstand, Raugaszug, Leistung und Fehler).

Ich verstehe schon dass man zu undokumentieren Features nichts ausfühliches finden. Ich verstehe allerdings überhaupt nicht (und habe dafür auch kein Verständnis), dass es zu der (sehr kostspieligen) KNX Schnittstelle keine Dokumenation gibt. Bei Zettel zum elektrischen Anschluss stand lediglich dass man dazu an Hargassner eine Email schreiben soll.
Das habe ich getan.
Die Antwort war dann, dass ich doch bitte unter angegebener Telefonnummer (aus der Email) anrufe bzw. eine Telefonnummer zum Rückruf schicken möchte. Dazu finde ich dann keine Worte mehr und stell mir schon die Frage ob so ein Produkt überhaupt verkauft werden dürfte.