Temperaturwerte aus einem Pelletkessel der FA. ETA auslesen

beim 4 Zeilenregler ist es so das man beim drücken " Boiler Extraladen" der Kessel
die eingestellte Temperatur erreichen will…(einmalig)

deim Touchregler kann die diese Funktion auch wieder deaktivieren…

Gruss

Ja, einmalig, deshalb muss das „sommer-Ladenscript“ mit den Pufferkesseltemperaturen und Boilertemperaturen sinnvoll gesteuert werden.


Gruß Konny

Hallo zusammen,

erstmal Danke ich „attain“ für seine Scripte, die mir sehr weitergeholfen haben,
aber auch allen anderen für den sehr ins Detail gehenden Informationsaustausch.

Hab mich letztes Jahr mal mit der Schnittstelle beschäftigt und mit C++ Scripten den Kessel dazu bewegt, mir ein paar Daten zu senden.
Jetzt mit IPS möchte ich das ganze ein wenig aufpeppen.

IPS hab ich die 3.0 installiert, bin also ein Frischling :rolleyes:

Die Scripte, die „attain“ auf der ersten Seite eingestellt hat, hab ich mal ein wenig angepasst.
Muss noch einiges geändert werden, damit jemand der sich die Scripte installiert, diese auch auf das erste mal funktionieren (ID’s der Objekte auslesen z.B.). Hab aktuell einfach zu wenig Zeit dafür.

Geändert hab ich :

  • das die Variablen mit dem echten Namen angelegt werden.
  • das beim erstellen der Variablen auch das Archiv angelegt wird.
  • das die Variablen als Float angelegt werden
    (das ist noch sehr unsauber gelöst, bitte nicht schlagen, mir ist nur aufgefallen, das wenn beim ersten erstellen der Variable diese als INT angelegt wird, wenn der Wert ohne Kommastelle kommt - ändert sich der Wert, wird dieser nicht mehr angezeigt.
    Beispiel: Außentemperatur 16°, Wert von der Heizung kommt dann als 160, vor anlegen der Variable wird $VAR = $VAR / 10; $VAR=16 -> nun wird diese als INT angelegt und mit aktiviertem Archiv bleibt die Variable INT.
    Ändert sich die Temperatur auf 15,9°C, wird der Wert nicht aktualisiert.

    Was interessant wäre:
    Kann man die Einstellungen, die die Heizung hat (z.b. Vorlauftemperatur bei +10°C, -10°C) auch auf Befehl auslesen ?
    Die Heizung überträgt diese ja dann als „MK“ Daten.

Hier mal der Code für das Zerlegen des Strings


<?
//IPS_LogMessage($_IPS['SELF'], $_IPS['VALUE']);
//IPS_LogMessage($_IPS['SELF'], $_IPS['VALUE']);
//IPS_LogMessage($IPS_SELF, $IPS_VALUE);
/*
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*/
$pfadid = 11944 /*[Heizung Werte]*/;
$Anzahl = 13;   // Anzahl der bertragenen Parameter
//$COM_String = $IPS_VALUE; //bernahme des Datenstrings aus dem Registermodul!
$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++){
	//	echo "__$COM_String__";
		$Index = ord($COM_String{$i*5+1});
      echo "-".$Index;
      $Value = 256 * ord($COM_String{$i*5+2}) + ord($COM_String{$i*5+3});
		echo "x".$Value;
		if($Value >= 30000 /*[Objekt #30000 existiert nicht]*/) {                 //Temperatur unter 0 C ?
        $Value = $Value - 65536;
      }
      switch ($Index) {
        Case 18:    //Luftschieber
            $blaname = "Luftschieber";
            $Value = $Value / 10;
			   break;
        Case 19:    //Abgastemperatur
            $blaname = "Abgastemperatur";
            $Value = $Value / 10;
            break;
        Case 20:    //Kesseltemperatur
            $blaname = "Kesseltemperatur";
            $Value = $Value / 10;
            break;
        Case 21:    //Warmwasser im Boiler
            $blaname = "Boilertemperatur";
            $Value = $Value / 10;
            break;
        Case 22:    //Aussentemperatur
            $blaname = "Auentemperatur";
            $Value = $Value / 10;
            break;
		  Case 23:    //Kesselvorlauf
            $blaname = "Kesselvorlauf";
            $Value = $Value / 10;
            break;
		  Case 24:    // Vorlauf MK0
            $blaname = "Vorlauftemperatur MK0";
            $Value = $Value / 10;
            break;
        Case 28:    //Geblsedrehzahl
             $blaname = "Geblsedrehzahl";
            break;
        Case 63:    //Behltervorrat
             $blaname = "Behlterinhalt";
                  $Value = $Value / 10;
            break;
        Case 67:    //Restsauerstoffgehalt im Abgas in %
            $blaname = "Restsauerstoffgehalt";
            break;
        Case 68:    //Gesamtverbrauch
            $Value = $Value / 100;
            $blaname = "Gesamtverbrauch";
            break;
		  Case 73:    // Modus MK0
            $blaname = "Modus MK0";
            break;
		  Case 77:    // Boiler
            $blaname = "Puffer oben";
            $Value = $Value / 10;
		      break;
		  Case 78:    // Boiler
            $blaname = "Puffer unten";
            $Value = $Value / 10;
            break;
        Case 86:    //Pellettsvorrat
            $blaname = "Pelletlager";
                 $Value = $Value * 10;
            break;

/*
XX$Para1  = 19;  //Abgastemperatur
XX$Para2  = 20;  //Kesseltemp
XX$Para3  = 21;  //Boilertemp
XX$Para4  = 22;  //Aussentemp
XX$Para5  = 23;  //Kesselvorlauf
XX$Para6  = 24;  //Vorlauftemperatur
XX$Para7  = 77; //Puffer oben
XX$Para8  = 78; //Puffer unten
XX$Para9  = 86;  //Pelletsvorrat
XX$Para10 = 18;  //Luftschieber in %
XX$Para11 = 28;  //Geblsedrehzahl  in U/min
XX$Para12 = 63; //Behlterinhalt
XX$Para13 = 73; //Tag/Nacht Modus MK0
*/


      }
//    SetValueByName("ETA.$Index", $Value);
    SetValueByName("$blaname", $Value, $pfadid);
  }
}

function SetValueByName($Variable,$Wert,$xpfadid){
//    $id = IPS_GetVariableID($Variable);
    $id = IPS_GetVariableIDByName($Variable, $xpfadid);
   if($id == false) {                         // wenn Variable fehlt: anlegen
       if ($Variable == "Modus MK0") $typ = 1;
       elseif (is_bool($Wert))   $typ = 2;
       elseif (is_int($Wert))    $typ = 2;
       elseif (is_float($Wert))  $typ = 2;
       elseif (is_string($Wert)) $typ = 3;
      $id = IPS_CreateVariable($typ);
     	IPS_SetName($id, $Variable);
      IPS_SetParent($id, $xpfadid);
	   AC_SetLoggingStatus (25633 /*[Archiv]*/,$id,true);
      IPS_ApplyChanges(25633 /*[Archiv]*/);
      }
   SetValue($id,$Wert);                   // Ausgabe der Werte
}
?>

Und so sieht das ganze dann aus:

Wäre mal interessant, wie bei euch der aktuelle Stand ist.
Da ja einige der Post’s schon älter sind, wäre es vielleicht mal ganz nett, wenn Ihr ein paar aktuelle Screnshot’s zusammen mit eurem Code veröffentlicht…

Es grüße euch,
Firemac

Hallo, gibt es eine Möglichkeit auf die Heizungspumpen zuzugreifen?
Da die Pumpen auf der AEC Platine angeschlossen sind kann man die nur ein und ausschalten( über den Ausgangstest am Display) und nicht in der Drehzahl regeln. Gibt’s ne Möglichkeit die zu steuern?
Grüße Chris

Hallo besten Dank erst mal an alle hier für eure großartige Arbeit

Ich lese hier schon eine Weile mit, und dank Joko spricht mein ETA SH 30 mit mir
Jetzt hab ich die Heizung um einen Kreis erweitert, und hab mich an das steuern bzw. setzen von Parametern
gemacht
Kann jetzt die Boilerladung ein und ausschalten
Boilerladedifferenz ändern
die Betriebsart des Heizkreises 1 ändern,
aber jetzt beim setzen der Temperaturen für die Heizkurve wird der Wert irgendwie anders berechnet

zB. 30°C wird ausgegeben als 2C(in hex) aber 44 in ASCII/CHAR

pro 1 °C um 10 mehr in ASCII/CHAR

Welche Formel liegt da dahinter ?
die Boilerladediffernz muss ich nur mal 10 rechnen damits passt
aber da

MK 1 Vorlauftemperatur bei +10°C

7B 4D 4B 05 7D 08 00 48 01 2C 7D 30°C 44

7B 4D 4B 05 87 08 00 48 01 36 7D 31°C 54

7B 4D 4B 05 87 08 00 48 01 40 7D 32°C 64

7B 4D 4B 05 87 08 00 48 01 4A 7D 33°C 74

7B 4D 4B 05 87 08 00 48 01 54 7D 34°C 84

7B 4D 4B 05 AF 08 00 48 01 5E 7D 35°C 94

hier noch die Beschreibung
aus der ParameterIndexListe.xml

-<ParameterListRow>
<ID>134</ID>
<Knoten>8</Knoten>
<Index_HByte>0</Index_HByte>
<Index_LByte>72</Index_LByte>
<Datentyp>0</Datentyp>
<Einheit>176</Einheit>
<UN9>0</UN9>
<UN10>0</UN10>
<Teiler>10</Teiler>
<min_Wert_HByte>0</min_Wert_HByte>
<min_Wert_LByte>10</min_Wert_LByte>
<max_Wert_HByte>0</max_Wert_HByte>
<max_Wert_LByte>110</max_Wert_LByte>
<std_Wert_HByte>0</std_Wert_HByte>
<std_Wert_LByte>35</std_Wert_LByte>
<akt_Wert_HByte>1</akt_Wert_HByte>
<akt_Wert_LByte>94</akt_Wert_LByte>
<Ebene>2</Ebene>
<Name>+10°_Aussen</Name>
</ParameterListRow>

vielleicht habt ihr eine Idee dazu

Danke

Hallo
hab weiter geforscht

das ganze hat was mit den "Highwert"bits zu tun
10 bis 25°C ist „Highwert“ „0“
26 bis 51°C ist „Highwert“ „1“
52 bis 76°C ist „Highwert“ „2“
77 bis 102°C ist „Highwert“ „3“
103 bis 110°C (max) ist „Highwert“ „4“

aber die Logik dahinter check ich nicht:confused:

Hallo fmac,

dies ist auch richtig so.
Ich setzte so meine DK0 Temperaturen.
Zu beachten ist , das mit 10 multipliziert werden muß.
hier ein Beispiel mit 40°.
7B 4D 4A 05 B9 10 00 18 01 90 7D
40 ° = 400 dezimal = 01 90 Hex
also highbyte = 1 und lowbyte = 90.
Bedeutet:
0 - 25.5° = 0
25,6-51,1° = 1
usw.

Um bei deinem Beispiel zu bleiben
12c Hex = 300 Dez

kleiner Sciptschnipsel zum umrechnen

$Wert = 300;
$HighWert = ((int)($Wert/256));
$LowWert = $Wert % 256;

Gruß

Das ist es
Besten Dank nochmal:)

Super , dass das so funktioniert.
Danke für die Info.
Ich hab mich schon gewundert wie das umgerechnet wird.
Da muss ich mal meine alten Temperaturänderungstest anpassen.

<?
//BoilerMax 
$Node = 32; // Knotennummer beim PEk50=24
$Index_LByte = 151;  // beim PEK50 mit Erweiterung
$Teiler=10;
$Wert = GetValue(27970 /*[ETA\Eta steuern\Parameter Script falsch\BoilerMAX]*/)*$Teiler;

//sicherung Kalkausfällung
if ($Wert>600)
{
$Wert=600;
SetValue(27970 /*[ETA\Eta steuern\Parameter Script falsch\BoilerMAX]*/,60);
echo " Einstellung >60°, Kalkausfällung!, $Wert";
}

//Umrechnung für Kessel
$HighWert = ((int)($Wert/256));
$LowWert = $Wert % 256;


//Prüfsummenberrechnung
$PS = $Node + $Index_LByte + $HighWert + $LowWert;
$PS = $PS & 255;    // Rest aus Division durch 256
//Prüfsummenberechnung Ende

$Daten ="{MJ";                  //Startzeichen und Servicekennung
$Daten .= chr(5);              //Anzahl der Nutzdatenbytes
$Daten .= chr($PS);             //Prüfsumme
$Daten .= chr($Node);
$Daten .= chr(00);            // Index Highwert
$Daten .= chr($Index_LByte);      // Index
$Daten .= chr($HighWert);
$Daten .= chr($LowWert);
$Daten .= "}";

// für Test abgeschalten:
//    ComPort_SendText(38947 /*[ETA_COM_Port]*/, $Daten);
// Kontrolle
    echo " gesendet für   ".$Wert."/10° ".$HighWert.$LowWert." an ETA";
	 SetValueString(12354 /*[ETA\Eta steuern\Status\ EtaSendDaten]*/,$Daten);
?>

heißt 60° bedeuten 2 88 ? Da ist noch ein „Wurm“ drin
Bildschirmfoto 2013-11-09 um 16.09.00.png

Gruß Konny

Juchu,
Das funktioniert schon mal:

<?
//Freigabe Thermostat
$Node = 32; // Knotennummer 
$Index_LByte = 188;  // beim PEK50 mit Erweiterung

//Knopfwert Webfront
$Wert = GetValue(16618 /*[ETA\Eta steuern\Parameter Script \FreigabeThermostat]*/)*10;

//Umrechnung für Kessel
$HighWert = ((int)($Wert/256));
$LowWert = $Wert % 256;

//Prüfsummenberrechnung
$PS = $Node + $Index_LByte + $HighWert + $LowWert;
$PS = $PS & 255;    // Rest aus Division durch 256
//Prüfsummenberechnung Ende

$Daten ="{MJ";                  //Startzeichen und Servicekennung
$Daten .= chr(5);              //Anzahl der Nutzdatenbytes
$Daten .= chr($PS);             //Prüfsumme
$Daten .= chr($Node);
$Daten .= chr(00);            // Index Highwert
$Daten .= chr($Index_LByte);      // Inde
$Daten .= chr($HighWert); //oberer Temperaturwert in HEX
$Daten .= chr($LowWert); //unterer Temperaturwert in HEX
$Daten .= "}";

ComPort_SendText(38947 /*[ETA_COM_Port]*/, $Daten);
SetValueString(12354 /*[ETA\Eta steuern\Status\ EtaSendDaten]*/,$Daten);
?>

Auch der Wert wird richtig übernommen…
Gruß Konny

Wie kann ich die aktuellen Parameter des Knotens vor der Änderung auslesen?

Die eingestellten Monitorwerte werden ja per script dauernd ausgelesen.


[ATTACH=CONFIG]23455[/ATTACH

Oder hab ich jetzt einen Denkfehler. Einstellwerte, Parameter und Monitorliste?..
Gruß Konny

Kann mir mal eine Fehlermeldung also Kommando IM posten, damit ich wies wie es aufgebaut ist . Gibt es eine Übersicht welche Fehler kommen können?
Grüße Christian

Wie komme ich an die Statusmeldungen wie Kessel Ein, Kessel Aus, Puffer fordert an ???
Kann dazu jemand was sagen?
An die Fehlermeldungen konnte ich durch Fühlerabklemmen kommen, bloß die Statusmeldungen werden nicht
Jemand hier im Forum hat ja die Stati wie im Bild schon.
Welche Kommandos muss man da schicken?
Wäre sehr dankbar für eure Hilfe.

Hallo,

vorab: ich bin kein IP-Symcon Benutzer hoffe aber auf Toleranz eurerseits :wink:
Ich habe einen SH 20 TWIN und möchte mich über eine SPS mit dem Kessel unterhalten.
Nur leider antwortet der mir nicht :frowning:
Ich habe diesen Thread bereits 2 mal gelesen und komme nicht auf mein Problem.
Um sicherzugehen das meine SPS funktioniert habe ich ein kleines .NET tool als eta „simulation“ geschrieben.
Damit funktioniert die Kommunikation zwischen SPS und PC wunderbar.

Beim Telegramm aufbau bin ich mir auch ziemlich sicher das er richtig ist.
Damit möchte ich beispielsweise alle 10 Sekunden den Pufferladezustand von mein Scheitholzkessel abholen:
0x7B 0x4D 0x43 0x04 0x5D 0x0A 0x08 0x00 0x4B 0x7D
Aber leider zuckt der Kessel mit keinem einzigen Bit…

Im ersten Beitrag hat Attain geschrieben das von dem 9-Poligen Stecker nur RX, TX und GND gebraucht werden.
Kann es sein das evtl noch TRS und CTS Pin 7/8 benötigt werden?

Hat sonst jemand eine Idee was ich falsch machen könnte?

mfg

hallo sps

das mit RX, TX, GND genügt als Verbindung, selber getestet mit Hyperterminal…
Habe die Protokollbeschreibung von http://ulrich-franzke.de/ verwendet.

lg AH54

danke für die info,
die ulrich-franzke.de Seite hat mir bereits viel geholfen…

gibt es eine Möglichkeit zu überprüfen ob die RS232 Schnittstelle am Bedienpannel generell funktioniert?
Ich vermute langsam das die einen Treffer weg hat da ich weder mit der SPS noch mit einem PC eine Antwort erhalte…

grüße

Hallo sps,

Node: 08h ist richtig?
Baudrate auf 19200?

Ansonsten Laptop direkt an den Kessel, Hyperterminal an, einen Wert an der Steuerung ändern, dann muß auch was im Laptop ankommen.

Melde Dich ruhig nochmal mit den Ergebnissen.

Gruß
Attain

Hi,
Baudrate hab ich auf 19200 und Node 0x08 sollte auch stimmen (dip-Drehschalter ist wie default auf 0. Da es ein TWIN und kein reiner Scheitholzkessel ist hab ich auch mal 0x10 probiert, hilft aber auch nix… )
Hab mir jetzt nochmal ein neues Kabel gelötet und wie empfohlen direkt mit Laptop und Hyperterminal verbunden.
Anfordern verschiedener Temperaturwerte bleibt unbeantwortet.

Habe jetzt noch „SMS Erlauben“ auf „ja“ gesetzt und habe es mit einem Kessel einschalten (0x7B 0x49 0x48 0x02 0x10 0x10 0x00 0x7D) probiert.
-> leider wieder keine Reaktion.

Was mir gerade noch aufgefallen ist:
-> Ich wollte in der Hoffnung ein Fehlernachricht (IM) zu bekommen, einen Fehler provozieren (ohne gleich einen Fühler abschrauben zu müssen).
Früher habe ich ein „Abgasgebläße blockiert“ bekommen wenn ich dieses über den Bedienschalter auf „aus“ gesetzt habe und gleichzeitig die Tür geöffnet habe.
Jetzt wird die Schalterstellung ignoriert und das Gebläße läuft bei offener Tür trotzdem los (ohne Fehlermeldung)??
Habe bisher (außer die Kollektor MAX Temperatur letzten Sommer) noch keine Parameter selbst geändert.

Hat damit jemand schon mal Erfahrung gemacht?
Hat der Kessel evtl irgendeinen Not-betriebsmodus in dem auch die RS232 nicht mehr bedient wird?

Glaube ich muss mal bei eta anrufen…

lg

Hallo,
in den letzten Seiten wird immer wieder die Frage nach den aktuellen Parameter (nicht Monitorwerte) gestellt,
wie man die dann auslesen und ändern kann.

In dem SCR-Script von mistljo Erstellung der Parameterliste:

<ParameterIndexListe>
</ParameterIndexListe>
XML;
				//Wenn kein XML File vorhanden dann neues erstellen
				if (file_exists('ParameterIndexListe.xml')) {
				   echo "Parameter Index Liste bereits vorhanden";
				} else {
				   write_error("Parameter Index Liste wird erstellt...",3);
			      $xml = new SimpleXMLElement($xmlstr);
			      $xml->asXML('ParameterIndexListe.xml');
			      //Befehl schicken
	            Datenanfodern_STOP($ETA_ComID);
	           	$ParameterIndexListeStart ="{MH";
	  			  	$ParameterIndexListeStartBytes = chr(01) . chr(00) . chr(00);
	           	$ParameterIndexListeEndZeichen = "}";
	            //Zusammensetzen
	            $Daten = $ParameterIndexListeStart . $ParameterIndexListeStartBytes . $ParameterIndexListeEndZeichen;
	            $MonitorListeStatus = false;
	            ComPort_SendText($ETA_ComID, $Daten);
			 }

-<ParameterListRow>

Muss scheinbar die aktuelle Datenanforderung ausschalten?
(oder ist die Abfrage trotzdem mit „{MH“; möglich?)
Wie komme ich da ran?
Müssen ALLE aktuellen Parameter abgerufen werden und dann den Einzelwert im XML/csv suchen?
Oder gibt es die Möglichkeit einen bestimmten Knoten anzusprechen: (MF ? MH? )
Es fehlt das Script mit der direkten Abfrage des Knotens

Aus der Protokollliste:

PC->ETA Code PC<->ETA Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
Abfrage der Einstellwerte MF > //Profi { M F 2 3 0 3 }
Rückgabe Einstellwerte Mg < { M g Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ParamterWert
Abfrage der Paramenter Liste (Alle START) MH > { M H 1 0 0 }
Abfrage der Paramenter Liste -weiteren Werte abfragen MH > { M H 1 1 1 }
ParamenterListe Rückgabe (Alle START) Mi < { M i 7 30 ? ? ? ? ALLE }
ParameterListe Rückgabe Mi < { M i ? ? ? ? ? ? Text }
ParamenterListe Rückgabe ENDE Mi < { M i 0 0 }
Einstellwert setzen MJ > { M J 5 130 33 0 96 0 1 }
Einstellwert setzen acknowledge MK < { M K 5 130 33 0 96 0 1 }

So, dann bräuchten wir den Einzelwert, z. B max Boiler , bei mir:

-
184
32
<Index_HByte>0</Index_HByte>
<Index_LByte>151</Index_LByte>

<akt_Wert_HByte>2</akt_Wert_HByte>
<akt_Wert_LByte>88</akt_Wert_LByte>
2
Boiler_MAX

Es müsste die Variable „Boiler max“ zum Eintragen und Darstellen angelegt sein.

Auf Seite 5 und 6 wurde ja schon mit den Temperatureinstellung und Sommer/Winter experimentiert.

Attain.

$Index = 90;
$HighWert = 0;
$LowWert = 0; //0->Winter / 1->Sommer

//Prüfsummenberechnung
$PS = $Node + $Index + $HighWert + $LowWert;
$PS = $PS & 255;

$Daten ="{MJ"; //Startzeichen und Servicekennung
$Daten .= chr(5); //Anzahl der Nutzdatenbytes
$Daten .= chr($PS); //Prüfsumme(alle Nutzdatenbytes addiert, modulo 256)
$Daten .= chr($Node); // Knotennummer der Heizung
$Daten .= chr(00); // Index (Highbyte)
$Daten .= chr($Index); // Index (Lowbyte)
$Daten .= chr($HighWert); //Wert
$Daten .= chr($LowWert);
$Daten .= „}“;

ComPort_SendText($ID, $Daten);

und ich ändere max. Boiler wie schon auf der Seite zuvor beschrieben:

 <?
//BoilerMax 
$Node = 32; // Knotennummer beim PEk50=24
$Index_LByte = 151;  // beim PEK50 mit Erweiterung
$Teiler=10;
$Wert = GetValue(27970 /*[ETA\Eta steuern\Parameter Script falsch\BoilerMAX]*/)*$Teiler;

//sicherung Kalkausfällung
if ($Wert>600)
{
$Wert=600;
SetValue(27970 /*[ETA\Eta steuern\Parameter Script falsch\BoilerMAX]*/,60);
echo " Einstellung >60°, Kalkausfällung!, $Wert";
}

//Umrechnung für Kessel
$HighWert = ((int)($Wert/256));
$LowWert = $Wert % 256;


//Prüfsummenberrechnung
$PS = $Node + $Index_LByte + $HighWert + $LowWert;
$PS = $PS & 255;    // Rest aus Division durch 256
//Prüfsummenberechnung Ende

$Daten ="{MJ";                  //Startzeichen und Servicekennung
$Daten .= chr(5);              //Anzahl der Nutzdatenbytes
$Daten .= chr($PS);             //Prüfsumme
$Daten .= chr($Node);
$Daten .= chr(00);            // Index Highwert
$Daten .= chr($Index_LByte);      // Index
$Daten .= chr($HighWert);
$Daten .= chr($LowWert);
$Daten .= "}";

// für Test abgeschalten:
//    ComPort_SendText(38947 /*[ETA_COM_Port]*/, $Daten);
// Kontrolle
    echo " gesendet für   ".$Wert."/10° ".$HighWert.$LowWert." an ETA";
     SetValueString(12354 /*[ETA\Eta steuern\Status\ EtaSendDaten]*/,$Daten);
?> 

Konny

Hallo Joachim,

kannst du mir sagen was ich ändern muss damit ich die Bestätigungscode lesen kann?

in Com-String zerlegen?

	if(substr($COM_String,0,3) == "{IM")
	{
			$ErrorText = substr($COM_String,5);
			$ErrorText = rtrim($ErrorText,"}");
	      write_error($ErrorText,1); // 2= General 1= ETA Alarm

oder kommt da nicht mehr, bzw nur die SMS-Meldungen?

in ETA_Functions

//Diese Function schreibt die Error logs für das Webfrontend
function write_error($Meldung, $Type)
{
   if ($Type == 1) { // ETA Alarm
       SetValueString(GetObjectID("ETA/Meldungen/ETA Alarmmeldungen"),GetValueString(GetObjectID("ETA/Meldungen/ETA Alarmmeldungen")) .date("Y.m.d, H:i:s"). " " .$Meldung ."</BR>");
       SetValueBoolean(GetObjectID("ETA/Meldungen/ETA Status"),false);
	   	IPS_SetHidden(GetObjectID("ETA/Meldungen/ETA Alarmmeldungen"), false); //Objekt verstecken
	   	WFC_Reload(GetObjectID("WebFront Configurator"));
       }
   if ($Type == 2) { //General Alarm
       SetValueString(GetObjectID("Allgemein/Variablen/IPS Alarm"),GetValueString(GetObjectID("Allgemein/Variablen/IPS Alarm")) .date("Y.m.d, H:i:s"). " " .$Meldung ."</BR>");
         SetValueBoolean(GetObjectID("Allgemein/Variablen/IPS_Alarm_Bool"),true);
      }
   if ($Type == 3) { //Setup Log
		 SetValueString(GetObjectID("ETA/Setup/Setup_log"),GetValueString(GetObjectID("ETA/Setup/Setup_log")) .date("Y.m.d, H:i:s"). " " . $Meldung ."</BR>");
      }
}


Gruß Konny