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 
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.