Temperaturwerte aus einem Pelletkessel der FA. ETA auslesen

Danke fmac,

ich hab’s mal installiert…

  • Deinen Scripts haben leider bei Dir "WebFront Configurator, bei mir leider „WebFront“
  • die Anlage des Prüfsummenordners „Prüfsummenfehler“ ist verwurstelt.(Installscript 303. umlaut ü)
  • Übergabe Übergabe 91-93 WFC_SendNotification(22801 /[Objekt #22801 existiert nicht]/,"->GetObjectID("WebFront…
  • „Grundaten laden oder zurücksetzen“ ebenso geänderter Umlautfehler
  • die Variablen kann ich nicht automatisch erstellen lassen, solange ich nichts über die Schnitstelle bekomme (ttyUSB0)

undefined function:

ComPort_SendText(
COMPort_GetDevices(… SCR_Startup.ips.php on line 10
EC_SetStartupScript( … SCR_ETA_install.ips.php on line 317

Da hab ich leider keine Ahnung und keine Doku…

Wie wurstel ich diese Befehle um? USB_SendText(…)???
oder hier:
RegVar_SendText — IP-Symcon :: Automatisierungssoftware
oder hier:
Migration (V3.2->V3.3) — IP-Symcon :: Automatisierungssoftware
-Neu: COMPort_* heißt jetzt SPRT_* und WWWReader_* heißt jetzt WWW_*
…test


und
Bildschirmfoto 2015-12-22 um 16.10.30.png
…uii

Gibt es einen Unterschied zwischen COMPort_ und ComPort_ ?
Gruß Konny

WebFront darfst du selbst anpassen :slight_smile:

Umlaute…vermutlich einfach nur das Skript neu abspeichern in UTF8. Oder den Text in ein IPS-Skript rein kopieren.

Doku > Befehlsreferenz — IP-Symcon :: Automatisierungssoftware

Grüße,
Chris

Danke,
yes we can…

Rückblickend:

  • WebFront Configurator (-Namen) ändern ist schlecht. (hab’s in den Scripten komplett geändert( WebFront)
  • ComPort_ durch SPRT_ ersetzt.
  • ttyUSB0 (bei mir ttyUSB1) händisch angelegt und im Script stillgelegt.
  • über bestehendes Eta drüber gebügelt (Monitorliste, Parameterliste , Variablen vorhanden).

installationscripts
Archive.zip (20.5 KB)

Gruß Konny

Hallo,

hat sich noch jemand mit der Displaysteuerung und Rückmeldung auseinandergesetzt?

Tastenprinzip:

<?
//__ __ __ __ __ xx __
//7B 49 54 01 31 02 7D {IT.1.} Auf
//7B 49 54 01 31 03 7D {IT.1.} Ab
//7B 49 54 01 31 01 7D {IT.1.} Ja
//7B 49 54 01 31 04 7D {IT.1.} Zurück
//7B 49 54 01 31 00 7D {IT.1.} Ändern

//7B 49 54 01 31 05 7D {IT.1.} Info
//7B 49 54 01 31 07 7D {IT.1.} Entaschen
//7B 49 54 01 31 06 7D {IT.1.} Kessel I/O

//7B 49 49 01 30 30 7D {II.00} Abfrage Aus
//7B 49 49 01 31 31 7D {II.11} Abfrage Ein
$Node = 01;
$Index_LByte = 31;

//SetValue(53351 /*[ETA steuern\Tasten Display\Tasten\AB]*/,1);
$Taste=03; // direkte Eingabe
//Prüfsummenberrechnung
$PS = $Node + $Index_LByte + $Taste;
//$PS = $Node + $Index_LByte + $HighWert + $LowWert;
$PS = $PS & 255;    // Rest aus Division durch 256
//Prüfsummenberechnung Ende

$Daten ="{MT";                  //Startzeichen und Servicekennung
$Daten .= chr(5);              //Anzahl der Nutzdatenbytes
$Daten .= chr($PS);             //Prüfsumme
$Daten .= chr(01);
$Daten .= chr(31);
$Daten .= chr(03);   // TASTE ZURÜCK, direkte Eingabe
$Daten .= "}";

//Tastencode senden
SPRT_SendText(38947 /*[ETA_COM_Port]*/, $Daten);

//Kontrollstring
	SetValueString(12354 /*[ETA steuern\Skripte\ EtaSendDaten]*/,$Daten);
	sleep(0.5); //in sekunden
// Taster rücksetzen
	SetValue(53351 /*[ETA steuern\Tasten Display\Tasten\AB]*/,0);
// Kontroll Notiz
	WFC_SendNotification(37729 /*[WebFront]*/,"AB","",0,1);
?>

Mir fehlen noch die Rückmeldungen und der Handbetrieb.

Gruß Konny

Hallo

Das sieht ja geil aus :slight_smile:

Respekt !!!

…ich wollte noch schnell 2015 die USB-Schnittstelle fixieren (udev).

ttyUSB_Eta statt ttyUSB*.

# Datei: /etc/udev/rules.d/20_ETA.rules
# Gerät EZA mit PL2303 Seriellwandler an USB
SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", SYMLINK+="ttyUSB_ETA" 

Das geht nicht?!
USB-Port.png

hier aus dem Terminal:

ein letzter Tip ?

@fmac … ist nur IPSView…

Guten Rutsch
Konny

Hallo,

wenn keine Meldungen von ETA reinkommen liegt das meistens daran, dass der ttyUSB-Port nicht mehr stimmt, deshalb:
Aktuelles Datum und Zeit der Livedaten prüfen (mit Minutenversatz) und dann Port-ttyUSB umschalten:

<?
// aktuelle Livedaten auslesen, letzter Satz
//String zerlegen da nicht parsebar

	$String1=substr(getValueString(43250 /*[ETA\Meldungen\Live Daten]*/),0,11);
	echo " LiveDaten ETA: $String1 ";
	list ($tag, $monat, $jahr) = explode(" ",$String1);
	//	echo "$tag $monat $jahr 
";

	$String2=substr(getValueString(43250 /*[ETA\Meldungen\Live Daten]*/),11,6);
	echo "$String2 
";
	list ($stunde, $minute) = explode(":",$String2,3);
   //	echo "Stunde: $stunde; Minuten: $minute; Sekunde: $sekunde 
";
	

// AKtuelles Datum und Zeit
		$timestamp = time();
		$datum1 =date("d M Y h:i ",$timestamp); //heute
		echo " Aktuelle Zeit: $datum1 
 
";
		
//Versatz
	$minutenVersatz=getValue(42255 /*[ETA steuern\Datenfluss\Minutenversatz]*/);
	$datum_neu= date("d M Y h:i",$timestamp-60*$minutenVersatz);
	echo "Versatzt: $minutenVersatz  Minuten 
";
	echo "Sollzeit:    $datum_neu 
";

$datum2 = $tag." ".$monat." ".$jahr." ".$stunde.":".$minute ;
echo "Ausgelesen:  $datum2
";

if (($timestamp  = strtotime($datum2)) === false) {
    echo "Die Zeichenkette ($datum2) ist nicht parsebar 
.";
	} else {
    //echo "Kontrolle $datum2 == " . date('d M Y h:i     ', $timestamp);
  	}
  
$ttyUSB=GEtValue(51196 /*[ETA steuern\Datenfluss	tyUSB]*/);
echo "ttyUSB ist $ttyUSB 
";

If ($datum_neu > $datum1)
   	{
   	echo "$datum1 Älter als $datum2 
";
   	//SetValue(51196 /*[ETA steuern\Datenfluss	tyUSB]*/,1);//ttyUSB umschalten
   	
	   
	   	If ($ttyUSB==0)
			{
			SetValueFloat(51196 /*[ETA steuern\Datenfluss	tyUSB]*/,1);
			}
			else
			{
			SetValueFloat(51196 /*[ETA steuern\Datenfluss	tyUSB]*/,0);
			}
		
		}
   	else
		{
   	echo " 
 Meldungen sind aktuell $datum2";
   	
   	}
$ttyUSB=GEtValue(51196 /*[ETA steuern\Datenfluss	tyUSB]*/);
echo "
 ttyUSB ist $ttyUSB 
";

?>

USB umschalten:

<?
// Comports tauschen
// Comport Status
$config1 = IPS_GetConfiguration(38947 /*[ETA_COM_Port]*/);
$config2 = IPS_GetConfiguration(33162 /*[M-Bus_Com_Port]*/);
echo " ETA-Com $config1 
 M-Bus-Com $config2 
";
$ttyUSB=GEtValue(51196 /*[ETA steuern\Datenfluss	tyUSB]*/);
echo "ttyUSB ist $ttyUSB 
";

//ausschalten
SetValue(44980 /*[ETA\Setup\Datenabfrage]*/,0);
IPS_SetProperty ( 38947 /*[ETA_COM_Port]*/, "Open", 0 );
IPS_SetProperty ( 33162 /*[M-Bus_Com_Port]*/, "Open", 0 );
echo "Com-Ports werden ausgeschalten 
";
//ETA auf USB0

switch  ($ttyUSB) {
	case 0:
		IPS_SetProperty ( 38947 /*[ETA_COM_Port]*/, "Port", "/dev/ttyUSB0" );
		IPS_SetProperty ( 33162 /*[M-Bus_Com_Port]*/, "Port", "/dev/ttyUSB1" );
		echo "ETA auf USB0 gestellt 
";
   	break;
	case 1:
		IPS_SetProperty ( 38947 /*[ETA_COM_Port]*/, "Port", "/dev/ttyUSB1" );
		IPS_SetProperty ( 33162 /*[M-Bus_Com_Port]*/, "Port", "/dev/ttyUSB0" );
		echo "ETA auf USB1 gestellt 
";
		break;
	case 2:
		//IPS_SetProperty ( 38947 /*[ETA_COM_Port]*/, "Port", "/dev/ttyUSB1" );
		//IPS_SetProperty ( 33162 /*[M-Bus_Com_Port]*/, "Port", "/dev/ttyUSB0" );
		echo "nicht erlaubt 
";
		break;
}
//Einschalten
IPS_SetProperty ( 38947 /*[ETA_COM_Port]*/, "Open", 1 );
IPS_SetProperty ( 33162 /*[M-Bus_Com_Port]*/, "Open", 1 );
SetValue(44980 /*[ETA\Setup\Datenabfrage]*/,1);
echo "Com-Ports wieder eingeschalten";
?>

ttyUSB als Float mit 0,1,2,3,4 und Text -Profil ttyUSB1,…
Minutenversatz für maximale Zeitverzögerung als Integer
EInstellungen ETA ttyUSB: 19200/8/1/keine

Gruß Konny

Hallo,

nach dem Update auf 4.0 musste ich bei den Skripten einiges anpassen.
Vielen Dank Konny! Deine Skripte für den ETA Ofen waren sehr hilfreich :slight_smile:

Die Daten kommen jetzt auch wieder rein, nur beim Laden der Grunddaten kommt die Meldung (siehe Bild).
Habt Ihr eine Idee, was ich tun muss? Stehe grad auf dem Schlauch!

Vielen Dank!

Gruß

Christian

Hallo zusammen,

ich versuche seit geraumer Zeit erfolglos das Skript für meinen ETA zum laufen zu bringen. Ich nutze IPS 4.1 und einen Raspberry 2. Das Skript hier aus dem Forum zur Grundinstallation bekomme ich noch zum laufen, allerdings bricht mir das laden der Grunddaten jedesmal ab. Siehe dazu auch die Fehlermeldung:

Hab schon einiges Probiert, gerade was die Hardware angeht, aber an der Anbindung der ETA-Steuerung an den Raspi scheint es nicht zu liegen. Die Instanz 15541 ist der Script.Timer für Skript SCR_Cutter. Nachdem die Routine Grunddaten laden mit dem Fehler oben abgelaufen ist, erscheint auch das Skript SCR_COM_String zerlegen als fehlerhaft.

Kann mir hier jemand weiterhelfen? Hatte jemand schon mal ein ähnliches Problem.
Bin ziemlich ratlos.
Besten Dank im Voraus.

Gruß Markus

Nachdem mein Ofen seit langem so läuft,
habe ich es bisher vermieden die Grundaten neu einzulesen.

Nach einem Ansturz hatte ich auch mal ziemliche Mühe dies wieder up to date zu bringen.
Ich habe mit dem Einlesecript sehr lage herumexperimentiert, bis dies wieder klappte:

Darum:
Never change a running system…

Ist auch so lange her, ich kann auch nichts mehr zur Grundinstallation sagen :frowning:
Schau mal Seite 13,14,…

Gruß Konny

Hallo zusammen,

so jetzt hab ich eine 2.te Erweiterung (AEH-23-0) auf den CAN-Bus integriert und möchte die Monitorwerte anpassen.

Can-Bus:

  • Bedienfeld (Endwiederstand)
  • AEH-23-0 (Heizkreiserweiterung 1 mit Knoten 1 auf Platine)
  • Kessel
  • AEH-23-w (Bestehende Heizkreisekreiserweiterung 0 Knoten 0 Bestand)

Der erste Versuch überhaupt etwas neu einzulesen hatte den Verlust des Gesamtsystemes zur Folge, da de Variablen gelöscht wurden…

Jetzt werd ich es mal händisch versuchen ohne das Gesamtsystem neu einzulesen.

Hat jemand einen Tip…

Gruß Konny

Hi,

wenn ich das richtig in der Erinnerung habe, können die halbwegs aktuellen ETAs alle ModbusTCP Master.

Ich werfe euch daher mal was über den Zaun… Anbindung ModbusTCP Master Devices an Symcon:

Howto: Technische Alternative per ModbusTCP über FHEM an Symcon anbinden

Viele Grüße
Predi

Hallo,

ich versuche gerade meinen ETA PE15 30KW auszulesen.
Ich habe alles wie am Thread-Anfang beschrieben durchgeführt und der Kessel scheint auch zu antworten. Zumindest bekomme ich alle 90sec folgende Meldung:

24.12.2017 07:29:24 | Register Variable | <br />
<b>Notice</b>: Undefined variable: IPS_VALUE in <b>/var/lib/symcon/scripts/22803.ips.php</b> on line <b>9</b><br />

Kann es sein das das Empfangs-Skript fehlerhaft ist, da sich mittlerweile einiges in IPS geändert hat?

   <? 
/* 
File     : COM_string_zerlegen.ips.php 
Trigger  : durch Registermodul bei Dateneingang 
dieses Script dient dazu den Datenstring der von der "ETA" Heizung gesendet wird, 
in einzelne Variablen zu zerlegen*/ 

$Anzahl = 20;   // Anzahl der übertragenen Parameter 
$COM_String = $IPS_VALUE; //übernahme des Datenstrings aus dem Registermodul! 
/* ######## Einstellwerte ############## 
Werte die z.b. am Bedienpult der Heizung eingestellt werden, 
werden durch die Heizung mit der Kennung "MK" auf der Schnittstelle ausgegeben. 
Hier werden diese in IPS Variablen abgespeichert.*/ 
if(substr($COM_String,0,2) == "MK") { 
  $Index = 256 * ord($COM_String{5}) + ord($COM_String{6}); 
  $Value = 256 * ord($COM_String{7}) + ord($COM_String{8}); 
  SetValueByName("ETA.Set.$Index", $Value); 
} 
/*######### Fehlermeldungen ########### 
Fehlermeldungen werden durch die Kennung "IM" auf der Schnittstelle ausgegeben 
*/ 
if(substr($COM_String,0,2) == "IM") {     // Fehlermeldungen 
  IPS_LogMessage( "ETA PE 15", substr($COM_String,4) ); 
  // Mail/SMS senden u.s.w 
} 
/*######### Messwerte############ 
Temperaturen und alle anderen Werte werden mit der Kennung "MD" ausgegeben 
Abspeichern der Werte in IPS Variablen*/ 
if (strlen($COM_String) == $Anzahl *5 + 4   //kompletter Datensatz empfangen? 
    AND substr($COM_String,0,2) == "MD")    //Kennung "MD"? 
     { 
    for ($i=01; $i<=$Anzahl; $i++){ 
      $Index = ord($COM_String{$i*5+1}); 
      $Value = 256 * ord($COM_String{$i*5+2}) + ord($COM_String{$i*5+3}); 
      if($Value >= 30000) {                 //Temperatur unter 0 C ? 
        $Value = $Value - 65536; 
      } 
      switch ($Index) { 
        Case 86:    //Pellettsvorrat 
        Case 67:    //Restsauerstoffgehalt im Abgas in % 
        Case 68:    //Gesamtverbrauch 
            $Value = $Value / 100; 
            break; 
        Case 63:    //Behältervorrat 
        Case 19:    //Abgastemperatur 
        Case 20:    //Kesseltemperatur 
        Case 23:    //Kesselvorlauf 
        Case 18:    //Luftschieber 
        Case 21:    //Warmwasser im Boiler 
        Case 22:    //Aussentemperatur 
        Case 24:    // Vorlauf MK0 
            $Value = $Value / 10; 
            break; 
      } 
    SetValueByName("ETA.$Index", $Value); 
  } 
} 

function SetValueByName($Variable,$Wert){ 
    $id = IPS_GetVariableID($Variable); 
   if($id == 0) {                         // wenn Variable fehlt: anlegen 
       if     (is_bool($Wert))   $typ = 0; 
       elseif (is_int($Wert))    $typ = 1; 
       elseif (is_float($Wert))  $typ = 2; 
       elseif (is_string($Wert)) $typ = 3; 
      $id = IPS_CreateVariable($typ); 
      IPS_SetName($id,$Variable); 
      } 
   SetValue($id,$Wert);                   // Ausgabe der Werte 
} 
?> 

Viele Grüße
Torsten

jetzt hab ich in der Zeile 9

$IPS_VALUE

in

$_IPS[‚VALUE‘]

geändert.

Nun kommt unter Meldungen

24.12.2017 10:30:32*| Register Variable*|

ohne weitere Angaben.

Es werden aber immer noch keine Variablen mit den Werten des Kessels geschrieben.

Jetzt klappt’s.

Es mussten noch die Anzahl der angeforderten Parameter in beiden Skripten angepasst werden. Die Werte müssen gleich sein.
Außerdem hab ich im Empfangsskript in der Zeile 60 GetVaribleID in GetVariableIDByName geändert und die ID des Ordners hinzugefügt in dem die Variablen angelegt sind bzw. werden sollen.

<? 
/* 
File     : Datenanforderung_ETA.ips.php 
*/ 
// Konfigurationsteil 
$ID = 53048 /*[Serial Port]*/;;  //Instances ID des COM-Ports 
$Anzahl =18;  // Anzahl der Auszulesenden Parameter 
$Para1 = 19;  //Abgastemperatur 
$Para2 = 20;  //Kesseltemp 
$Para3 = 21;  //Boilertemp 
$Para4 = 22;  //Aussentemp 
$Para5 = 23;  //Kesselvorlauf 
$Para6 = 24;  //Vorlauftemperatur 
$Para7 = 86;  //Pelletsvorrat 
$Para8 = 18;  //Luftschieber in % 
$Para9 = 28;  //Gebläsedrehzahl  in U/min 
$Para10 = 63; //Behälterinhalt 
$Para11 = 70; //Tag/Nacht Modus Direktkreis 
$Para12 = 108; //Boiler Extra Laden
$Para13 = 54; 
$Para14 = 55; 
$Para15 = 56; 
$Para16 = 57; 
$Para17 = 58; 
$Para18 = 59; 
$Para19 = 73; //Tag/Nacht Modus MK0 

$HighByte = 0; //normalerweise immer 0 
$Intervall = 90;  // RefreshTime , aller wieviele Sekunden sollen die Daten von der Heizung gesendet werden 
$Node = 16;  //hier: Pelletkessel  bis 30kW(16 + 0 ) 
//NodeNr: Setzt sich aus der Grundnummer + der Knotenschalterstellung zusammen. 

//Knotenschalter: 
//Der Schalter (dip-Switch oder Drehschalter) befindet sich auf der Platine und steht standardmssig auf  0. 

//Grundnummer: 
//Scheitholzkessel: 0x08   (8 decimal) 
//Pelletskessel bis 30 kW: 0x10  (16 decimal) 
//Pelletskessel ab 35 kW: 0x18   (24 decimal) 
//Hackgutfeuerung: Hauptplatine 0x18, Drehstromplatine 0x28 
//Heizungserweiterung: 0x20   (32 decimal) 

// Konfigurationsteil Ende 

//Prüfsummenberrechnung 
$PS = ($Anzahl * $Node) + ( $Anzahl * $HighByte) + $Intervall; 
for ($i=1; $i<=$Anzahl; $i++) 
  { 
  $a = "Para" . $i; 
  $PS = $PS + $$a; 
  } 
$PS = $PS & 255;    // Rest aus Division durch 256 

//Prüfsummenberechnung Ende 

//Datenstring "bauen" 
//1. Byte     Startzeichen: immer { entspr. hex  0x7B 
//2. und 3. Byte    Servicekennung    (hier: "MC") 
//4. Byte      Anzahl der Nutzdatenbytes 
//5. Byte      Prfsumme: alle Nutzdatenbytes addiert, modulo 256 
//ab 6. Byte   Byte RefreshTime [sec.] (binr) und jeweils 3 byte Nutzdaten pro Parameter (1.Byte NodeNr (binr)  2. + 3. Byte: uword Monitorlistenindex (binr, zuerst HB,dann LB) 
//letztes Byte    Stoppzeichen immer } entspr. hex  0x7D 

$Daten ="{MC";                  //Startzeichen und Servicekennung 
$Daten .= chr(1+($Anzahl*3));   //Anzahl der Nutzdatenbytes ( RefreshTime + Anzahl * 3 byte) 
$Daten .= chr($PS);             //Prfsumme 
$Daten .= chr($Intervall); 
for ($i=1; $i<=$Anzahl; $i++)   //Die n Anzahl Parameter 
  { 
  $a = "Para" . $i; 
  $Daten .= chr($Node) . chr($HighByte) . chr($$a);   //...jeweils 3 byte 
  } 
$Daten .= "}";                   //Stoppzeichen 
//Datenstring "bauen" Ende 

//Datenstring ausgeben 
SPRT_SendText($ID, $Daten); 

?> 
  <? 
/* 
File     : COM_string_zerlegen.ips.php 
Trigger  : durch Registermodul bei Dateneingang 
dieses Script dient dazu den Datenstring der von der "ETA" Heizung gesendet wird, 
in einzelne Variablen zu zerlegen*/ 

$Anzahl = 18;   // Anzahl der übertragenen Parameter 
$COM_String = $_IPS['VALUE']; //übernahme des Datenstrings aus dem Registermodul! 
/* ######## Einstellwerte ############## 
Werte die z.b. am Bedienpult der Heizung eingestellt werden, 
werden durch die Heizung mit der Kennung "MK" auf der Schnittstelle ausgegeben. 
Hier werden diese in IPS Variablen abgespeichert.*/ 
if(substr($COM_String,0,2) == "MK") { 
  $Index = 256 * ord($COM_String{5}) + ord($COM_String{6}); 
  $Value = 256 * ord($COM_String{7}) + ord($COM_String{8}); 
  SetValueByName("ETA.Set.$Index", $Value); 
} 
/*######### Fehlermeldungen ########### 
Fehlermeldungen werden durch die Kennung "IM" auf der Schnittstelle ausgegeben 
*/ 
if(substr($COM_String,0,2) == "IM") {     // Fehlermeldungen 
  IPS_LogMessage( "ETA PE 15", substr($COM_String,4) ); 
  // Mail/SMS senden u.s.w 
} 
/*######### Messwerte############ 
Temperaturen und alle anderen Werte werden mit der Kennung "MD" ausgegeben 
Abspeichern der Werte in IPS Variablen*/ 
if (strlen($COM_String) == $Anzahl *5 + 4   //kompletter Datensatz empfangen? 
    AND substr($COM_String,0,2) == "MD")    //Kennung "MD"? 
     { 
    for ($i=01; $i<=$Anzahl; $i++){ 
      $Index = ord($COM_String{$i*5+1}); 
      $Value = 256 * ord($COM_String{$i*5+2}) + ord($COM_String{$i*5+3}); 
      if($Value >= 30000) {                 //Temperatur unter 0 C ? 
        $Value = $Value - 65536; 
      } 
      switch ($Index) { 
        Case 86:    //Pellettsvorrat 
        Case 67:    //Restsauerstoffgehalt im Abgas in % 
        Case 68:    //Gesamtverbrauch 
            $Value = $Value / 100; 
            break; 
        Case 63:    //Behältervorrat 
        Case 19:    //Abgastemperatur 
        Case 20:    //Kesseltemperatur 
        Case 23:    //Kesselvorlauf 
        Case 18:    //Luftschieber 
        Case 21:    //Warmwasser im Boiler 
        Case 22:    //Aussentemperatur 
        Case 24:    // Vorlauf MK0 
            $Value = $Value / 10; 
            break; 
      } 
    SetValueByName("ETA.$Index", $Value); 
  } 
} 

function SetValueByName($Variable,$Wert){ 
    $id = IPS_GetVariableIDByName($Variable, 18604 /*[ETA]*/); 
   if($id == false) {                         // wenn Variable fehlt: anlegen 
       if     (is_bool($Wert))   $typ = 0; 
       elseif (is_int($Wert))    $typ = 1; 
       elseif (is_float($Wert))  $typ = 2; 
       elseif (is_string($Wert)) $typ = 3; 
      $id = IPS_CreateVariable($typ); 
      IPS_SetName($id,$Variable);
	  IPS_SetParent($id, 18604 /*[ETA]*/); 
      } 
   SetValue($id,$Wert);                   // Ausgabe der Werte 
} 
?>

Hallo Thorsten,

danke für die Hinweise. Ja nach 10 Jahren mussten doch einige Befehle angepasst werden.
Obwohl ich selber noch auf IPS-Version 3.X bin.

Beitrag 1 ist editiert.

Attain

[symcon 5.5] Im Script SCR_Grunddaten einlesen müssen bei der Anlage der xml-Files der Eintrag in Anführungszeichen gemacht werden, sonst funktioniert das nicht:

$xmlstr = ‚<?xml version="1.0" encoding="UTF-8"?>‘;
$xmlstr .= <<<XML


XML;

in SCR_COMSTRINGZERLEGEN müssen die COM_String {} Klammern mit COM_String [ ] ersetzt werden.
Gruß Konny

Hallo …
ich hab mein System 5.5 mit ETA PSK50 neu aufgesetzt.

Bis auf die Verarbeitung von Doppelten-Namens-Werten, die auf den verschiedenen Platinen mit unterschiedlichen Knoten (0,24,32,33 Erweiterungsknoten) vorkommen ,
und einer Fehlermeldung bei {MC…} mit zu kurzen Puffer funktioniert es.

Mit der Rückmeldung vom Kessel mit {MC… komm ich nicht weiter , die geschickt angelegten Skripte ETA.Funktion usw. für mich schnell zu unübersichtlich in den Schleifen werden.
Vielleicht kann mir jemand weiterhelfen.

Bei den Doppelten Namenswerten verstehe ich allerdings nicht, wo das Problem ist, da diese ja mit dem Knoten (Platine) und dem LowByte indiziert werden.
Ebenso werden die Monitorwerte richtig angelegt.
Nach meiner ParameterListe sind auch alle , bis evtl. auf den Namen, verschieden, und ich kann damit die Parameter ändern.
Ich möchte die verschiedenen „Thermostat“-Relais auch nutzen…

Gruß Konny
Kopie von Monitorliste.xlsx.zip (21,8 KB)

Kopie von ParameterListe.xlsx.zip (35,5 KB)

Hallo Konny,

da ich die umfangreichen Scripte von Mistljo nie genutzt habe, kann ich Dir so aus dem Kopf nicht helfen.
Die Anpassung die ich bei mir zur 5.5. gemacht habe, betraf den Array Zugriff mit geschweiften Klammern. Dies ist mit der aktuellen PHP Version nicht mehr zulässig.
Aus:

      $Knoten = ord($COM_String{$i*5-1});
      $Index = ord($COM_String{$i*5+1}); //LByte

Muss werden:

      $Knoten = ord($COM_String[$i*5-1]);
      $Index = ord($COM_String[$i*5+1}]); //LByte

Gruß

Hallo Attain,
…Ja … die geschweiften Klammern hatte ich schon raus… funktioniert ja auch soweit…
trotzdem Danke…
Vielleicht taucht Joachim aus dem Hintergrund auf…

Gruß Konny