Temperaturwerte aus einem Pelletkessel der FA. ETA auslesen

… ich habe jetzt die Monitorliste händisch angepasst:
Thermostat in:
Thermostat-0 (Knoten 32)und
Thermostat-1 (Knoten 33)
mit sämtlichen Unterpunkten
Weiterhin Variablenmenu analog mit -0 und -1
(Heizungserweiterung-0,…Thermostat-0

Es funktioniert.
Schön wäre noch die automatische Sortierung nach Indexnummer im IPS-Monitorlistenmenü…

Gruß Konny
Wäre nur noch der {MC Empfangspuffer…

Monitorliste.xml.zip (5,8 KB)


Servus aus Franken,
…Ich habe noch zwischendrin immer wieder Fehlermeldungen („Puffer zu kurz“ bzw. )
"A non-numeric value encountered in " .

Blockzitat
Warning: A non-numeric value encountered in /var/lib/symcon/scripts/SCR_EtaFunctions.ips.php on line 371

und ein paar Beispiele aus dem Puffer:

{MC=p<e KM§ ‘N p Y X j N i My}
{MC%ë<!!e!P[- p‘€¸}. (Lesefehler?)
{MC=<!‹!Š!‰ Š ‰ ‹ A a @Qfh@WR}

Vielleicht sind es ja aber auch nur Übertragungsfehler?

Hat jemand ein paar Gedanken dazu?

Gruß Konny

hier der angepasste Cutter (symcon 6) von Joachim:

<?
/*
+------------------------+
Joachim Mistlbacher
www.joko.at
+------------------------+
ETA2IPS Cutter
Version 1.000
+------------------------+
21.01.2011
Da der IPS Cutter nicht den Umfang mitbringt die ETA Datensätze korrekt zu behandeln, musste ein neuer Cutter her.
+------------------------+
*/


require 'SCR_EtaFunctions.ips.php';

// Prueft ob der Datensatz im Buffer vollstaendig ist.
function DatensatzVollstaendig()
{
	//Anzahl der NutzdatenBytes + 6 Bytes fuer Start, Pruefsumme, Endzeichen usw..
	$NutzdatenTemp = (int)(ord(substr(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")),3,1)))+6;
	if ($NutzdatenTemp == strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))))
	{
		return true;
	}
	 else
 	{
		return false;
	}
}

//Buffer Timeout, Buffer wird geleert.
if($_IPS['SENDER'] == "TimerEvent")
{
	// loesche Buffer
	RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
	IPS_SetScriptTimer($_IPS['SELF'],0);
	echo "Buffer Timeout";
} else {
	$ETA_ComID = GetObjectID("ETA_COM_Port"); //Instances ID des COM-Ports
	$COM_String = RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_COM_RegisterVariable"));
 	$COM_String .= @$_IPS['VALUE'];
 	//echo "$COM_String";
 	//IPS_LogMessage(" SCR_Cutter1 "," $COM_String ");
	if (strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))) == 0)
		{
		   //echo "Puffer leer";
			RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),$COM_String); //Buffer ist leer, neue Daten einfuegen
		} else { //Ueberpruefung des neuen Daten Blocks
			if (substr(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")),0,1) == "{") //Wurde ein StartZeichen gefunden?
			{
			//echo "Startzeichen";
				// Ist der Buffer laenger wie 3 Bytes?
				   if (strlen(RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"))) > 3)
				   {
                  //echo "Pufferlaenge";
						//Wurde der gesamte Datensatz uebertragen?
				      if (DatensatzVollstaendig() == true)
				      {
							//echo "Datensatz vollstaendig";
							// Datensatz vollstaendig
						} else {
						   //echo "Datensatz unvollstaendig";
							// Datensatz unvollstaendig
							RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")).$COM_String); //Weitere Daten in Buffer einfuegen
						}
				   } else { // Buffer ist zu kurz fuer gueltigen Datensatz
				      //echo "Puffer zu kurz";
	               RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),RegVar_GetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer")).$COM_String); //Weitere Daten in Buffer einfuegen
				   }
			} else { //Loesche Buffer = fehlerhafte Daten
				RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
				//echo "loesche Puffer";
				IPS_LogMessage(" SCR_Cutter "," fehlerhaft = :$ETA_ComID ");
			}
		}
	      if (DatensatzVollstaendig() == true)
	      {
				// Datensatz vollstaendig
				IPS_RunScriptWait(GetObjectID("ETA/Scripts/SCR_ComStringZerlegen"));
				//echo "Run script SCR_ComStringZerlegen";
				// loesche Buffer
				RegVar_SetBuffer(GetObjectID("ETA/Variablen/Allgemein/ETA_DatenString_Buffer"),"");
			} else {
				IPS_SetScriptTimer($_IPS['SELF'],5);
			}
}

?>

und der Teil der Eta Functions…

//Diese Funktion überprüft die Auswahl der Monitor Parameter und schreibt sie in die Arrays
  function ETA_ParameterAuswahlAnalyse()
  {
 
 
  global $ParameterBlockAnzahl;
  global $ETA_MLP, $ETA_MLP_0, $ETA_MLP_1, $ETA_MLP_2, $ETA_MLP_3, $ETA_MLP_4, $ETA_MLP_5;
   $AnalyseFehler = false;
	$vars = GetObjectList(GetObjectID("ETA/Variablen/Monitor Liste"));


//	print_r($vars);    //nummer der Variablen ausgeben


  	$ETA_MLP = array();
//print_r ($ETA_MLP);

	// Alle Objekte die aktiviert sind in ein Array schreiben
  foreach($vars as $var)
//print_r($var);

  {
   $GetvarName = IPS_GetObject($var);

   if ($GetvarName['ObjectType'] == 2) //Nur ausführen wenn ObjectType eine Variable ist
	{
		$GetvarType = IPS_GetVariable($var);
		//print_r ($GetvarType);
	
		if (($GetvarType['VariableValue'] == 1) AND (substr($GetvarName['ObjectInfo'],0,8) == 'ETA_MLP_'))
	//	if (($GetvarType['VariableValue']['ValueType'] == 1) AND (substr($GetvarName['ObjectInfo'],0,8) == 'ETA_MLP_') AND ($GetvarType['VariableValue']['ValueInteger'] == 1))

		 {
			//$IDTemp = substr($GetvarName['ObjectName'],8,3);
    		$IDTemp = substr($GetvarName['ObjectInfo'],8,3);

		 	//nullen vorne entfernen
    		if ((substr($IDTemp,0,1) == 0))
			{
      		$IDTemp = substr($IDTemp,1,2);
         	if ((substr($IDTemp,0,1) == 0))
				{
            	$IDTemp = substr($IDTemp,1,1);
         	}
    		}
   // 		$array[] = $x;
		$ETA_MLP[] = $IDTemp;
	//		print_r ($ETA_MLP);
   //	array_push($ETA_MLP,$IDTemp);       //original  		$array[] = $x;
		}
	}
  }
  
    //grösse überprüfen
    if (count($ETA_MLP) == 0) {
         write_error("WARNUNG: Mindestens einen Monitor Parameter auswaehlen!", 1);
    		 $AnalyseFehler = true;
        
		  } elseif (count($ETA_MLP) > 120)  {
    	write_error("Warnung: Maximal 120 Monitor Parameter auswählen! Derzeit sind ".count($ETA_MLP)." ausgewaehlt", 1);
      $AnalyseFehler = true;
    } else {

    // Auf doppelte einträge prüfen
    //konny : wo ist der Knoten (0,24,32,33) für verschiedee Platinen mit gleicher Namesbezeichnung aber verschiedener Nutzung Thermostat-0 Thermostat -1?
      $tempArray = array();
      foreach($ETA_MLP as $ETA_MLP_tempID)
      {
        $tempArray[$ETA_MLP_tempID] = MonitorXMLAuslesen(1,$ETA_MLP_tempID, 0, 0).MonitorXMLAuslesen(2,$ETA_MLP_tempID, 0, 0);
      }

      $DoppelteIDs = array_not_unique($tempArray);

      if (!count($DoppelteIDs) == 0)
      {
      //Doppelte Einträge vorhanden
       $AnalyseFehler = true;
	     write_error("Error: Abfrage kann nicht gestartet werden!",1); // 2= General 1= ETA Alarm
	     write_error("Folgende ausgewaehlte Monitor Parameter haben gleiche Zieldaten (Knoten/Index): ",1); // 2= General 1= ETA Alarm
		  SetValueBoolean(GetObjectID("ETA/Meldungen/ETA Status"),false);
         foreach (array_keys($DoppelteIDs) as $DoppelteID)
         {
	    // ergänzung konny knoten/erweiterung
         write_error("ID: ".$DoppelteID."knoten".MonitorXMLAuslesen(6,$DoppelteID, 0, 0)." Name: ".MonitorXMLAuslesen(6,$DoppelteID, 0, 0),1); // 2= General 1= ETA Alarm
         }
      } else {
      //keine doppelte Einträge vorhanden
       $AnalyseFehler = false;
 //Bloecke Arrays befüllen
     $ETA_MLP_0 = array();
      //Block1 Array befüllen
         for($count = 1; ($count <= count($ETA_MLP)) and ($count <= 20); $count++)
            {
               array_push($ETA_MLP_0,$ETA_MLP[$count-1]);
            }
      //Block2 Array befüllen
       if (count($ETA_MLP) > 20) {
       $ETA_MLP_1 = array();
       $ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
         for($count = 21; ($count <= count($ETA_MLP)) and ($count <= 40); $count++)
            {
               array_push($ETA_MLP_1,$ETA_MLP[$count-1]);
            }
      }
     //Block3 Array befüllen
       if (count($ETA_MLP) > 40) {
       $ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
       $ETA_MLP_2 = array();
         for($count = 41; ($count <= count($ETA_MLP)) and ($count <= 60); $count++)
            {
               array_push($ETA_MLP_2,$ETA_MLP[$count-1]);
            }
      }
     //Block4 Array befüllen
       if (count($ETA_MLP) > 60) {
       $ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
       $ETA_MLP_3 = array();
         for($count = 61; ($count <= count($ETA_MLP)) and ($count <= 80); $count++)
            {
               array_push($ETA_MLP_3,$ETA_MLP[$count-1]);
            }
      }
     //Block5 Array befüllen
       if (count($ETA_MLP) > 80) {
       $ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
       $ETA_MLP_4 = array();
         for($count = 81; ($count <= count($ETA_MLP)) and ($count <= 100); $count++)
            {
               array_push($ETA_MLP_4,$ETA_MLP[$count-1]);
            }
      }
     //Block6 Array befüllen
       if (count($ETA_MLP) > 100) {
       $ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
       $ETA_MLP_5 = array();
         for($count = 101; ($count <= count($ETA_MLP)) and ($count <= 120); $count++)
            {
               array_push($ETA_MLP_5,$ETA_MLP[$count-1]);
            }
	 
       }
    }
    }
    return $AnalyseFehler;
  //  print $AnalyseFehler;
  }



Hallo zusammen,
ich habe lange nach einer einfachen Möglichkeit gesucht meinen ETA Pellet Kessel zu visualisieren oder/und zu bedienen.
Ich mache das jetzt über MOD Bus. Grundlagen dazu hatte ich vorab keine. Ich habe mir die entsprechenden Unterlagen bei ETA über download geholt und den Modbus im IPS per Onlinehilfe eingerichtet. Mit Modbus TCP benötigt man keine weitere Hardware und man muss auch keine komplizierten Scripte schreiben. Mein ETA Kessel ist BJ 2014 mit aktuellem Firmwareupdate.
Wenn jemand Interesse hat, kann ich mich gern noch etwas genauer über die Thematik auslassen.
Gruß
Thomas

Hi, wo hast du die Unterlagen zur Schnittstellenbeschreibung her? Finde es auf der ETA Seite irgendwie nicht.
Sollte ja mit einer aktuellen PelletsUnit PU 15 von 2021 auch funktionieren? Grüße

EDIT: Hab’s jetzt doch gefunden

Der Kessel ist m.E. egal. Es geht ums ETAtouch Modul und um dessen Firmwareversion. Der Dokumentendownload bei ETA ist etwas gewöhnungsbedürftig.
Aber offensichtlich hast Du es gefunden. Dann viel Spaß bei der weiteren Arbeit.

Gruß
Thomas

Hallo,
bei meinem Kessel funktionert die Umschaltung „Heizung AN“ und „Heizung AUS“ nicht. Welchen Parameter in der ETA-Konfiguration muss man genau setzen, damit es funktioniert?
Gruß

Hallo Horst,

In den Heizkreiseinstellungen ganz nach unten scrollen.
„SMS erlauben“ muss an sein.
grafik