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

Hat schon jemand auf Symcon7 upgegraded?

Hallo

Ja leider
dann geht nichts mehr
Wollte zurück zur 6.4 und hab dabei mein System auf raspberry zerschossen
Suche jetzt nach einer Möglichkeit die 6.4 zu installieren
aber die ist nicht mehr online
Ein backup hab ich

Hallo Mac
Ich hab leider auch mein System zerschossen
… bekommen den Fehler das String+ Int in den Datenabrufe verwendet werden…
In ‚ETa-Funktion‘ ist an der Stelle allerdings nur die Verteilung der Abfragen in Blöcke…

Gruß Konny

Hallo

Bei mir läuft jetzt wieder die 7.0
Habe das mit den Klammern korrigiert
und in der SCR_ETAFUNCTIONS
das : set_time_limit(80); auskommentiert

/*

±-----------------------+

Joachim Mistlbacher

www.joko.at

±-----------------------+

ETA2IPS Functions

Version 1.000

±-----------------------+

21.01.2011

Alle Funktionen

±-----------------------+

*/

//Variablen deklaration

// set_time_limit(80);

Hallo Joachim,
danke für die schnelle Antwort,
Das war bei mir schon auskommentiert…
Allerdings hab ich wahrscheinlich die Blockschleifen $ETa_MLPauf 5x20 (~100) erweitert.
Lief bis update ohne Probleme…

Beim Durchlauf der Datenanforderung:

23132
Fatal error: Uncaught TypeError: Unsupported operand types: string + int in /var/lib/symcon/scripts/SCR_EtaFunctions.ips.php:374
Stack trace:
#0 /var/lib/symcon/scripts/SCR_Datenanforderung.ips.php(22): ETA_ParameterAuswahlAnalyse()
#1 {main}
  thrown in /var/lib/symcon/scripts/SCR_EtaFunctions.ips.php on line 374

Ich weiß nicht wo da der Fehler liegen sollte…

Gruß Konny

@fmac
Joachim ,
kann du mir bitte deine ETA_Function schicken?
Wenn ich die austausche und der Fehler immer noch vorhanden ist, weiß ich das es daran nicht liegt…

Ich hab mal das alte Original rein und bekomm den gleichen Fehler… Zeile 350

Gru0 Konny

…Ich hab es jetzt wieder auf einem alten sd-image mit der Version 6.3 laufen…ohne Probleme …

Sorry
habs jetzt erst gesehen
SCR_EtaFunctions.ips.php.zip (6,7 KB)

Hoffe das geht so
Das Script direkt lässt sich nicht hochladen

Hallo miteinander,
ich bin nun auch Besitzer eines ETA SH30 mit 4 Zeilen Display
und einer TA mit Modbus.
Gibt es eine möglichkeit dass beide kommunizieren?
Ich danke euch.
Josef

Hallo zusammen,

wie kann ich den UTF8-Hex-Fehler in Scripten eleminieren :
KernelMT | Settings: Error for Message KL_WARNING: [json.exception.type_error.316] invalid UTF-8 byte at index 139 : 0x3C … oder 0x96
Muss ich einen anderen Schriftcode verwenden (iso oder cp) ?

Gruß Konny