Buderus Logamatic 4000 / RS232 Gateway

Hallo zusammen,

ich bin neu hier und möchte mich erst mal vorstellen. Ich heisse Hermann und habe IP-Symcon seit Januar 2011 im Einsatz. Verschiedene Sachen im Haus bzw. dem Grundstück werden schon gesteuert (1-Wire) und als nächstes würde ich gerne die Monitordaten der Buderus Heizung in IP-Symcon visualisieren.

zur Hardware:
Die Steuerung der Heizung ist eine Buderus Logamatic 4312 welche intern mit den Modulen über einen CAN-Bus (Buderus sagt dazu ECO-CAN) kommuniziert. Mehrere solcher Steuerungen lassen sich miteinander vernetzen. Mit einem RS232 Gateway lässt sich dieser CAN-Bus auch mit dem PC verbinden und mit geeigneter Hersteller-SW parametrieren bzw. Monitordaten (Temperaturen, Schaltuhren, Stellglieder, Heizkreise etc.) auslesen und Temperaturverläufe grafisch darstellen und mitloggen. Kurzum … die physikalische Verbindung über IP-Symcon (RS232) und der Heizung steht bereits und die Befehlsreferenz zum Auslesen und interpretieren der Monitordaten von Buderus liegt mir auch vor.

Nun meine Frage:

Die RS232 muss über das 3964R Protokoll angesprochen werden. Kann IP-Symcon mit diesem Protokoll umgehen? Das Protokoll wurde von Siemens entwickelt und wurde soweit ich informiert bin bei den S5 Steuerungen eingesetzt. Meine Versuche das Gateway als Pseudo S5 über MPI, AS511 usw. anzubinden blieben bis jetzt allerdings erfolglos. Die Forensuche hat mir in der Vergangenheit schon viel geholfen -> besten Dank an alle dafür :loveips:. Zu diesem Thema habe ich aber nichts brauchbares finden können.

Ich hoffe als Neuling nicht gleich mit der Tür ins Haus gefallen zu sein und würde mich :), falls jemand helfen kann.

Guten Abend Hermann,

so wie es aussieht ist die 3964R Prozedur nur ein Art Softwarehandshake und hat nichts mit der Siemens Schnittstelle zu tun. Hier gibts Infos von Buderus:
LINK

Gruß

Guten Abend Attain,
danke für den Link. Ich kenne diese Doku und genau nach dieser Prozedur muß ich mit dem ECO-Can zu kommunizieren. Würde sich diese Prozedur auch über ein PHP-Script nachbilden lassen?

Gruß,
Hermann

Ja
Ich habe da schon länger mit rumgespielt und der EMS-Bus redet auch mit IPS. Da jeder anders zugreift und das Signal entweder mit IPS oder extern aufbereitet, gibt es keine einheitliche Lösung.
Alles Gebastel.
Aktuell habe ich mal das web KM200 angehängt und staue über die schlechte App.

Schönen Abend allerseits,

habe mir jetzt ein Script „gebastelt“, um die Daten zu empfangen. Ich bekomme aber noch keine saubere 3964R Prozedur hin, was hauptsächlich an meinen kläglichen Programmierkenntnissen zurückzuführen ist. Die Monitordaten der Logamatic werden als Datensätze in eine Datei test.txt abgelegt (siehe Anhang mit <-- Kommentaren versehen). Einige Datensätze werden nur unvollständig bzw. doppelt übertragen. Ich denke, das liegt am fehlenden Check des BCC und am Timing der Übertragung :confused:
Zum Einlesen habe ich mal Info´s an alle Interessierten angehängt.

Wäre toll, wenn mir da jemand weiterhelfen könnte.

<?php
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist
if ($IPS_SENDER == "RegisterVariable")
{
  // bereits im Puffer der Instanz vorhandene Daten in $data kopieren
  $data  = RegVar_GetBuffer($IPS_INSTANCE);
  // neu empfangene Daten an $data anhängen
  $data .= $IPS_VALUE;
  $datahex = ord($IPS_VALUE);
  switch ($datahex) {
	case 2:
		RegVar_SendText($IPS_INSTANCE, chr("16")); // STX -> DLE senden
		break;
	case 3:
      IPS_Sleep(200);
		RegVar_SendText($IPS_INSTANCE, chr("16")); // ETX -> DLE senden
	   break;
	}
  $mda = GetValue(54507 /*[Technik\Heizung\mda]*/); // Merker Normalmodus (0) oder Direktmodus (1)
  if ((strlen($data) >= 9 ) and ($mda == 0)) // Merker Daten werden im Normalmodus von der Logamatic empfangen
  {
      // $data in Blöcke von bis zu 9 Zeichen zerlegen
      $datasets = str_split($data, 9);
      // $data leeren
      $data = "";

      // alle Datensätze durcharbeiten
      for ($i = 0; $i < count($datasets); $i++)
      {
         // vollständige Datensätze (genau 9 Zeichen lang) ausgeben
         if (strlen($datasets[$i]) == 9)
         {
         $string[$i]=$datasets[$i];
			$hexstring[$i]='';
			for ($x=0;$x<strlen($string[$i]);$x++)
				{
 				$hexstring[$i].=dechex(ord(substr($string[$i],$x,1)))." ";
				}
          echo "empfangener Datensatz: ".$hexstring[$i]."
";
         }
         else
         {
          // Unvollständige Datensätze in $data schreiben
          $data = $datasets[$i];
         }
      }
  }
  if (($datahex == 172) and ($mda == 1)) // Merker $mda ==1 Direktmodus, alle Datensätze werden von der Logamatic gesendet
  {
      SetValue(54507 /*[Technik\Heizung\mda]*/, 0);
      $array = explode("\x02\xAB\x00", $data);
      //$array = explode("\x10\x03", $array1[1]);
      $dateiname = "test.txt"; // Name der Datei
		$handler = fOpen($dateiname , "a+");
		for ( $x = 0; $x < count ( $array ); $x++ )
		{
		  echo $x." : ".str2hex($array[$x])."
";
		  $text = ($x." : ".str2hex($array[$x])."
");
		  fWrite($handler , $text);
		}
		fClose($handler);
      $data = "";
  }
  // Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
  RegVar_SetBuffer($IPS_INSTANCE, $data);
}
function str2hex($string) // Funktion String in Hex umwandeln
	{
		$hex='';
		for ($i=0; $i < strlen($string); $i++)
			{
			$hex .=" ".dechex(ord($string[$i]));
			}
		return $hex;
	}
?>

test.txt (4.32 KB)

63011376-Techn-Information Prozedur3964R-01-2001.pdf (54.4 KB)

Monitordaten_System_4000_V1_7747004149_01-2009.pdf (182 KB)

Einstellbare Parameter Logamatic 4000_7747004150_05-2009.pdf (183 KB)

Hallo Hermann,
gibt es hierzu schon neue Erkenntnisse?
Ich habe auch eine Logamatic von Buederus mit ECO-CAN Tool und werde mich die nächsten Wochen mit der Anbindung an IPS befassen.
Grüße