Junkers Therme an eBus-Adapter

Hallo zusammen!

So, ich habe mich die letzten Tage mit einem Adapter für meine Therme gespielt.

Habe auch den eBus-Adapter von Helmut bekommen, und empfange damit auch Daten.
Nun zu meinem Problem, vielleicht hat jemand eine Idee:

Im Debug-Fenster des Serial-Ports sehe ich die Daten in der HEX-Ansicht, allerdings ist jedes Byte in einer eigenen Zeile. Es gibt auch keine Telegramm-Ende-Erkennung. Im Grunde kenn ich nur den Telegramm-Beginn und die Telegrammlänge die je nach Telegrammart unterschiedlich ist.

Meint ihr, man könnte hier etwas machen, oder muss ich auf eine Platine mit µC warten?

Falls jemand ne Idee oder einen Tipp hätte, wäre mir schon sehr geholfen :slight_smile:
oder falls ich etwas vergessen habe hier anzugeben :wink: (mir raucht ja schon leicht der Kopf und ich sehe nur noch HEX-Zeichen :D)

Gruß aus Österreich,
Christian

Hallo Christian,

kennst Du denn das Protokoll.

Im Grunde kenn ich nur den Telegramm-Beginn und die Telegrammlänge die je nach Telegrammart unterschiedlich ist.

Um das zusammen zufügen, hilft die Regvar.

Hier mal was zum spielen aus der Doku.

RegisterVariable: IP-Symcon :: Automatisierungssoftware

… auch noch was zum „schmöckern“…
EBusAdapter Wiki
EBusAdapter Modul

@rwn: mit Protokoll meinst du die Daten im Telegramm? ja, die sind, denke ich schon gut entschlüsselt worden im microkontroller-Forum.
werde mir das mal mit der RegisterVariable ansehen, danke!

@Brownson: naja, nach den Leuten im microkontroller-Forum ist es kein wirklicher eBus, also keine Sync-Zeichen usw. er hat nur große Ähnlichkeit.
trotzdem Danke!

Guten Abend zusammen!

So, hab jetzt ein paar Tage getestet mit dem eBus-Adapter von Helmut. Momentan benutze ich eine selber gelötete Platine mit einer Schaltung vom microkontroller.net - Forum.

Habs sogar mit der RegVar hinbekommen :slight_smile:
Hier mal das Ziel-Script der RegisterVariable:


<?php
if($IPS_SENDER == "Execute") {
	RegVar_SetBuffer(32163 /*[Heizung\Daten\Junkers Bus]*/, '');
	return;
}


// 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;
	if(strlen($data) >= 50) {
		echo "Überlauf: ".strlen($data);
	   RegVar_SetBuffer($IPS_INSTANCE, '');
	   return;
	}

	if (chr(0x88).chr(0x00).chr(0x18) == substr($data, 0, 3)) {    // Kesseldaten
		if(strlen($data) == 31) {
			$daten = mkHEXString($data);
			SetValueString(35232 /*[Heizung\Daten\Kesseldaten]*/, $daten);
			RegVar_SetBuffer($IPS_INSTANCE, '');
		} else {
		   RegVar_SetBuffer($IPS_INSTANCE, $data);
		}
	} elseif(chr(0x88).chr(0x00).chr(0x19) == substr($data, 0, 3)) {  // Heizungsdaten
		if(strlen($data) == 33) {
			$daten = mkHEXString($data);
			SetValueString(27634 /*[Heizung\Daten\Heizungsdaten]*/, $daten);
			RegVar_SetBuffer($IPS_INSTANCE, '');
		} else {
		   RegVar_SetBuffer($IPS_INSTANCE, $data);
		}
	} elseif(chr(0x88).chr(0x00).chr(0x34) == substr($data, 0, 3)) {  // Warmwasserdaten
		if(strlen($data) == 23) {
			$daten = mkHEXString($data);
			SetValueString(28530 /*[Heizung\Daten\Warmwasserdaten]*/, $daten);
			RegVar_SetBuffer($IPS_INSTANCE, '');
		} else {
		   RegVar_SetBuffer($IPS_INSTANCE, $data);
		}
	} elseif(chr(0xFF).chr(0x90).chr(0x00).chr(0xff).chr(0x00) == substr($data, 0, 5)) {  // FW200
		if(strlen($data) == 18) {
			$daten = mkHEXString($data);
			SetValueString(24259 /*[Heizung\Daten\FW200]*/, $daten);
			RegVar_SetBuffer($IPS_INSTANCE, '');
		} else {
		   RegVar_SetBuffer($IPS_INSTANCE, $data);
		}
	} else {
		if (chr(0x88) == $data || chr(0x88).chr(0x00) == $data || chr(0xFF).chr(0x90).chr(0x00) == $data) {
			RegVar_SetBuffer($IPS_INSTANCE, $data);
		} else {
			RegVar_SetBuffer($IPS_INSTANCE, '');
		}
	}
}

function mkHEXString($data) {
	for ($x=0;$x<strlen($data);$x++) {
		$hex[$x+1] = dechex(ord(substr($data,$x,1)));
		$hex[$x+1] = str_pad(trim($hex[$x+1]), 2,0, STR_PAD_LEFT);

	}
	$daten = implode($hex, ' ');

	return $daten;
}

?>

Wie gesagt, ich kenne die Telegrammbeginne und -länge. Mittels der IF, ELSEIF-Abfragen hab ich die jeweils herausgefiltert und speichere die dann in String-Variablen ab.
Sobald eine dieser Variablen aktualisiert wird, werden die in einem eigenen Script aufgeschlüsselt und die Werte in eigene Variablen abgespeichert.

PS: Dennoch werde ich auf eine andere Lösung mittels µC abwarten, die die Telegramme korrekt erzeugt und weiter an den PC schickt. Es kommt ja doch viel Müll über die Schnittstelle rein.

Gruß,
Christian.

Super, da werden sich einige User freuen.

Du weißt, dass ich ein wenig mit µProzessoren, speziel PIC’s bastel?

Wenn Du eine Liste mit gültigen Strings hast, dann versuche ich mich daran.
Ich würde Dir einen PIC mit einem Bootlader zu kommen lassen, so dass ich Dir die neuen Routinen zum ausprobieren per Mail (WWW) zu kommen lassen kann.

Handhabung:
Bootladersoft auf dem PC starten,
PIC per USB in den USB-Port stecken -> der Bootlader erkennt den PIC,
innerhalb von 5 Sekunden auf Connect klicken,
dann neues HexFile aussuchen und auf Laden klicken.

Dann könntest Du den µController austesten und mir per Mail (WWW) berichten

Vorteil: Ich muß nur einmal Porto zahlen :wink:

Bei dem Ausprobieren des E-Busadapter hat die Post DHL ganz gut abkassiert… sodass auch Wupperi gut mal eine Spende gebrauchen könnte.

Gruß Helmut

Ich will Dir immer noch ein Paket schicken mit ein paar Dioden, Kondensatoren und der alten Platine…Komme aber nicht dazu, liege mit meiner IPS Garage in den letzten Zügen. Ist aber nicht vergessen!!!

Hi,

ich habe einen Junkers Brennwertkessel ZSBE 28-3,
kann ich den auch in IPS integrieren?

Gruß.