Buderus Logamatic Web KM200 - Reloaded

Ich bin zwar kein Fachmann (los Leute korrigiert mich) aber das mit dem 71Crad solltest du lassen. Dies scheint der Legionellenschutz zu sein.
Da ich kein Brauchwasser-Speicher habe, kann ich dass aber bei mir nicht beobachten.
Michael

Da hast Du recht - aber normal ist das nur 1x pro Woche - meine Heizung macht das aber auch gerne öfter und auch ohne wirkliches Muster.
Jetzt nicht mehr :slight_smile:

Allerdings werde ich die Tage noch ein paar Zeilen einfügen, welche alle zwei Wochen eine vollständige Aufheizung durchführen. Zudem hat es (offenbar - laut dem „schlauen Internet“) auch viel mit stehendem Wasser und Zirkulation zu tun.
Allerdings habe ich zwar ein paar ältere Leitungen (genauso wie neue), aber:

  1. bei fast allen Leitungen wird täglich Wasser entnommen
  2. bei denen wo nichts entnommen wird sitzt die Zirkulation direkt am Wandanschluss
  3. die Zirkulationläuft 3x/h sofern Warmwasser eingeschaltet ist

Das sind schonmal Kriterien die laut Internet positiv zur Vermeidung sind.

Alles Weitere werde ich dann sehen :smiley:
Primär gehts mir ja darum nicht um 21:50 bzw. 7:40 (bei 7:45 auf die Arbeit fahren) nochmal nen „Kessel“ voll warmes Wasser machen was dann ungenutzt kalt wird.

Und ich denke das Problem habe sicher nicht nur ich…

Gruß,
Matthias

Ersteinmal finde ich es klasse, dass Du uns hier am Ergebnis teilhaben lässt.

Aber ich hab damit:

ein Problem.
Vielleicht hast Du ja eine völlig andere Steuerung, denn ich gebe meiner Heizung ganz genau vor, wann und wie lange sie WW aufheizen darf. Ehrlich gesagt, kenn ich das auch nicht anders bei anderen Modellen.

Bei mir heizt sie morgens und abends je einmal für ca 30 Min (wegen Boilervorrang entsprechend angepasst) und wir haben stetsheißes Wasser.

Das mit den 71°C sowie die Zirkulationsphasen der Pumpe kann man in den Parametern anpassen bzw unterbinden.
Will man tatsächlich etwas „abtöten“ dann sollte das Wasser schon kochen, damit Bakterien auch „gar“ werden :).
Wobei selbst da gibt es welche, die 120°C auch noch überleben.
Jeder hat seine Meinung dazu, ich persönlich habe das alles deaktiviert, da ich es für Energieverschwendung halte.

Sehe ich auch so. Schaltprogramm für Warmwasser gibt es genauso wie für die Heizphasen.
Würde ich jetzt auch nicht anders kennen (auch bei anderen Herstellern nicht).
Denn wann braucht man Warmwasser, meist in der Früh wenn man aufsteht und Abends wenn man wieder nach Hause kommt. Am Wochenende ein bisschen anders :slight_smile:

Hatte früher 2 Zeiten für Warmwasser.
5:30 - 6:00 Warmwasser, danach Heizung.
17:30 - 18:00 Warmwasser, danach Heizung.

Die 30 Minuten waren bist jetzt immer ausreichend um den Speicher auf 61°C zu bekommen.
Aber mehr als 2-3°C Verlust im Speicher habe ich eigentlich noch nicht wirklich feststellen können.

Heizzeiten und Warmwasserzeiten sollten sich dabei nicht überschneiden (wegen Warmwasservorrang).

Das stimmt so nicht ganz :smiley:

Habe da was gefunden:

/dhwCircuits/dhw1

/dhwCircuits/dhw1/operationMode
/dhwCircuits/dhw1/waterFlow
/dhwCircuits/dhw1/workingTime
/dhwCircuits/dhw1/activeSwitchProgram
/dhwCircuits/dhw1/switchPrograms
/dhwCircuits/dhw1/temperatureLevels
/dhwCircuits/dhw1/setTemperature
/dhwCircuits/dhw1/actualTemp
/dhwCircuits/dhw1/status

Wobei "/dhwCircuits/dhw1/operationMode " entscheidend ist.
Mögliche Parameter auto, on, off.

Bei mir wirkt sich das nun so aus, dass bei „auto“ die Zeitprogramme für Warmwasser genutzt werden.
Bei „on“ wird Warmwasserbereitung sofort gestartet und bei „off“ gibt’s kein Warmwasser.

Damit steuere ich das nun ein bisschen gezielter, indem ich der Steuerung genau vorgebe wann ich Warmwasser aufbereiten will, da die zwei Zeitfenster für Warmwasserbereitung auch nicht immer optimal waren.

Eine weitere Resturl wäre noch:

/notifications

Damit wird der Fehlerspeicher von der Brennersteuerung (BC10) ausgelesen.

Wieder ein bisschen mehr Spielerei :smiley:

Viel Spaß und Gruß aus Sambia
Manfred

1 „Gefällt mir“

Ich hatte mit einem zähen Legionellenbefall (und anderen Viechern )schon beruflich zu tun. Heftig. Je nach Vorfall kaum zu bekämpfen.
Die Erhöhung der Temperatur auf diese Bereiche hilft schon. Allerdings gibt es auch fehlgeplante Leitungsführungen, die alles zunichte machen. Für Haushalten, bei denen die Zapfstellen regelmäßig genutzt werden, halte ich es aber auch für unnötig.

BTW: kannste Dein Ausleseskript der Schaltzeiten mal abgeben?

Gesendet von iPhone mit Tapatalk

Ja, das stimmt, wenn das System befallen ist, dann wird’s richtig schwer.
Das habe ich leider schon selbst durchgemacht.
Das waren damals sehr interessante Gespräche mit meinem Installateur.
Wieder einiges gelernt, was man falsch machen kann.

Darum zur Info für alle die es interessiert:
Legionellen und Temperatur:
30°C - 45°C => optimale Vermehrung
ab 55°C => keine Vermehrung
ab 60°C => Abtötung!

Gibt genug Quellen wo das nachgelesen/erfragt werden kann (Labor, Installateur, Tante Google befragen).

Warmwasser im Speicher unter 60°C vorzuhalten würde ich auf jeden Fall vermeiden.
Dann ist man zumindest was die Legionellen betrifft halbwegs sicher.

Darum mein Setpoint bei 61°C.
Temperatur bewegt sich dann zwischen 58°C - 63°C.

Seitdem (ca. 10 Jahre) ist Ruhe.

Die Temperatur von 60°C im Speicher hat für mich dann auch noch einen praktischen Aspekt.
60°C im Speicher zu halten braucht auch nicht mehr Energie als z.B. bei 50°C.
Aber der Verbrauch des Warmwassers sinkt wenn es „heißer“ ist, da mehr Kaltwasser beigemischt wird um die gewünschte Temperatur in
z.B. der Dusche zu haben -> Kaltwasser kostet auch Geld, aber Warmwasser noch mehr :rolleyes:
Oder habe ich hier die falsche Logik in Verwendung?

[HR][/HR]
Das Aufheizen des WW-Speichers auf höhere Temperaturen habe ich bis heute nicht verstanden.
Sofern man nicht zufällig eine Ringleitung mit Zirkulationspumpe hat sehe ich darin nicht viel Sinn.
Der Speicher hat dann zwar 70°C oder mehr, aber was ist mit den Leitungen?
Man müsste ja dann genau zu dem Zeitpunkt im Haus rumlaufen und alle Abnahmestellen öffnen und eine gewisse Zeit laufen lassen, damit das komplette System „desinfiziert“ wird, oder nicht?

Bitte um Erfahrungsaustausch :confused:
Lerne gerne etwas neues …

Gruß
Manfred

Funktion für Heizungsprogramme:

function ReadDataProgram($program){
// Programmparameter auslesen
	$data = km200_GetData('/heatingCircuits/hc2/switchPrograms/'.$program);

// Temperatur Tag auslesen
	$day = km200_GetData('/heatingCircuits/hc2/temperatureLevels/day')->value;
// Temperatur Nacht auslesen
	$night = km200_GetData('/heatingCircuits/hc2/temperatureLevels/night')->value;


	$name = substr($data->id, 36);   // Name des Programmes
	$buffer = array();   // Zwischenspeicher für Wochentage

	// Tabellenkopf erstellen
		$content = '<table border="1" rules="groups">
							<colgroup>
    							<col width="70">
    							<col width="70">
    							<col width="95">
  							</colgroup>
							<thead>
								<tr align="center" valign="middle" height="50">
									<th colspan="3">Programm: '.$name.'</th>
								</tr>
								<tr align="center" valign="middle" height="36">
									<th>Tag</th>
									<th>Zeit</th>
									<th>Setpoint</th>
								</tr>
							</thead>';

// Werte auslesen
	foreach($data->switchPoints as $data){

	// Tag aufbereiten
		$search = array("Tu", "We", "Th", "Su");
		$replace = array("Di", "Mi", "Do", "So");

		$dayOfWeek = $data->dayOfWeek;
			$dayOfWeek = str_replace($search, $replace, $dayOfWeek);

	// Schalttemperatur auslesen
		$setpoint = $data->setpoint;
			if($setpoint == "day"){$setpoint = $day."°C";}
			if($setpoint == "night"){$setpoint = $night."°C";}

	// Zeit aufbereiten
		$time = $data->time;
			$time = date("H:i", strtotime(floor($time/60).":".($time%60)));

	// Tabelle mit den Werten füllen
	   if(end($buffer) != $dayOfWeek){
         $content .= '</tbody>';
         }

   	if(end($buffer) == $dayOfWeek){
 			$content .= '<tr align="center" valign="middle" height="30">
			 					<td></td>
								 <td>'.$time.'</td>
								 <td>'.$setpoint.'</td></tr>';
    		}
		else{
			$content .= '<tbody>
								<tr align="center" valign="middle" height="30">
									<td>'.$dayOfWeek.'</td>
									<td>'.$time.'</td>
									<td>'.$setpoint.'</td></tr>';
			}

   	$buffer[] = $dayOfWeek;
		}

		$content .= '</tbody>
					 	<tr align="right" valign="bottom" height="40">
							<td colspan="3">Stand:'.date("d.m.Y, H:i").'</td></tr>
					 	</table>';

	return $content;
	}

Ausgabe in Stringvariable (HTMLBox):

$data = ReadDataProgram("Eigen1");
SetValue(VarID, $data);

[HR][/HR]

Funktion für Warmwasserprogramme:

function ReadDataProgramWW($program){
// Programmparameter auslesen
	$data = km200_GetData('/dhwCircuits/dhw1/switchPrograms/'.$program);

	$name = substr($data->id, 33);   // Name des Programmes
	$buffer = array();   // Zwischenspeicher für Wochentage

	// Tabellenkopf erstellen
		$content = '<table border="1" rules="groups">
							<colgroup>
    							<col width="70">
    							<col width="70">
    							<col width="95">
  							</colgroup>
							<thead>
								<tr align="center" valign="middle" height="50">
									<th colspan="3">Programm: '.$name.'</th>
								</tr>
								<tr align="center" valign="middle" height="36">
									<th>Tag</th>
									<th>Zeit</th>
									<th>Status</th>
								</tr>
							</thead>';

// Werte auslesen
	foreach($data->switchPoints as $data){

	// Tag aufbereiten
		$search = array("Tu", "We", "Th", "Su");
		$replace = array("Di", "Mi", "Do", "So");

		$dayOfWeek = $data->dayOfWeek;
			$dayOfWeek = str_replace($search, $replace, $dayOfWeek);

	// Schalttemperatur auslesen
		$setpoint = $data->setpoint;
			if($setpoint == "on"){$setpoint = "start";}
			if($setpoint == "off"){$setpoint = "stop";}

	// Zeit aufbereiten
		$time = $data->time;
			$time = date("H:i", strtotime(floor($time/60).":".($time%60)));

	// Tabelle mit den Werten füllen
	   if(end($buffer) != $dayOfWeek){
         $content .= '</tbody>';
         }

   	if(end($buffer) == $dayOfWeek){
 			$content .= '<tr align="center" valign="middle" height="30">
			 					<td></td>
								 <td>'.$time.'</td>
								 <td>'.$setpoint.'</td></tr>';
    		}
		else{
			$content .= '<tbody>
								<tr align="center" valign="middle" height="30">
									<td>'.$dayOfWeek.'</td>
									<td>'.$time.'</td>
									<td>'.$setpoint.'</td></tr>';
			}

   	$buffer[] = $dayOfWeek;
		}

		$content .= '</tbody>
					 	<tr align="right" valign="bottom" height="40">
							<td colspan="3">Stand:'.date("d.m.Y, H:i").'</td></tr>
					 	</table>';

	return $content;
	}

Ausgabe in Stringvariable (HTMLBox):

$data = ReadDataProgramWW("Eigen1");
SetValue(VarID, $data);

Je nach Heizungskonfig müssen dann vielleicht die RestUrl’s angepasst werden.

Gruß
Manfred

Danke für das Skript.

Zum Thema drüber. Wir (wie gesagt beruflich) mussten nach dem Befall eine Spezialfirma beauftragen. Erstmal einen Tag Aufklärungsschulung. Totz wochenlanger Spülaktionen mit allen möglich harmlosen und nicht so harmlosen Mitteln, bekamen sie es auch nicht in den Griff. Hier kamen verschiedene Dinge zusammen, die schon bei der Bauplanung falsch liefen. Zum Schluss lief es auf Komplettaustausch der Rohre raus. Zwei große mehrstöckige, mehrflüglige Gebäude und noch relativ jung. War insgesamt ein sehr hoher deutlich 7-stelliger Schaden.
Seitdem hab ich Respekt vor den Viechern aber keine Panik. Das Aerosol ist ja nur gefährlich.
Ich achte aber selbst auf viele Dinge. Z.B. Rückbau von unnötigen Zapfstellen bis zur Abzweigung und nicht nur Stopfen drauf. Nach längerem Urlaub erst einmal Zapfstellen laufen lassen und solche Dinge.

Ich habe gerade nachgesehen (Logano S115) - ich verliere bei 45°C Starttemperatur ca. 5°C pro Stunde (also 4,7 um genau zu sein).

Davon abgesehen fehlt in meiner MC10 das „DHW“ bei den heating circuits. Ich habe den hc1 (schon klar was das ausgeschrieben heißt :D) und das wars.
Ansonsten gibt es nur den operation mode für die Heizung selbst. (day, night, auto)

Wenn das beschriebene möglich wäre hätte ich mir den ganzen Unsinn sparen können :slight_smile:

Btw: Ich habe die MC10 an nem Logano S115 mit 7-Pol. Brenner und dazwischen ein BRM10 Modul.
–> Evtl. liegt es daran (fehlender Heißwasser-Kreis)

Hallo Maeffjus,

bei Deinem Temperaturverlust sieht es ja fast so aus, als ob da die ganze Zeit eine Zirkulation läuft. Wie groß ist der Speicher? Über die Literzahl könnte man auf die abgegebene Energiemenge schließen.

edit
oh, sehe gerade, S115 (hatte es für die Ofenbezeichnung gehalten :wink:
das wären bei 115l mit 5° Verlust ca. 2,4kWh. Etwas viel finde ich. Ich hoffe, da habe ich mich nicht verrechnet.
Das sieht mir eher nach einem verlust pro Tag aus…
/edit

Gruß
Fabian

Das wäre echt heftig. Dauerzirkulation und fehlende Isolierung vielleicht.

Gesendet von iPhone mit Tapatalk

Ich habe auch einen S115.
Und wie schon geschrieben, mein Temperaturverlust hält sich für mein Empfinden noch in Grenzen.

@Boui:
Na so heftig war’s bei mir dann doch nicht.
Im Keller wurden ein paar sehr alte Bleileitungen getauscht und der Rest vom System mit einer Chemielösung durchgespühlt. Und seitdem ist ruhe.

@Maeffjus:
Die Resturl /dhwCircuits/ liefert bei Dir kein Ergebnis? Sollte aber im MC10 vorhanden sein.

Mhm, ich habe bei mir zumindest festgestellt, dass es eine Menge Resturls gibt, die aber nur dann von Slash’s Ausleseskript angelegt werden wenn diese einen Wert zurückgeben. Dies ist aber stark von den eingestellten Parametern der Heizungssteurung abhängig.

Urlaubsfunktionen, Heizkurven, Reinigungsprogramme etc.

Gruß
Manfred

via Sony Xperia Z Ultra

@Maeffjus:
Die Resturl /dhwCircuits/ liefert bei Dir kein Ergebnis? Sollte aber im MC10 vorhanden sein.

Mhm, ich habe bei mir zumindest festgestellt, dass es eine Menge Resturls gibt, die aber nur dann von Slash’s Ausleseskript angelegt werden wenn diese einen Wert zurückgeben. Dies ist aber stark von den eingestellten Parametern der Heizungssteurung abhängig.

Urlaubsfunktionen, Heizkurven, Reinigungsprogramme etc.

Hmm also so ist es ja auch evtl bei mir - weiß ich jetzt garnicht…
Wie bekomme ich die Resturl denn wenn das Ausleseskript sie nicht erfasst?
Und wenn dort keine Werte sind, heißt das doch auch umgekehrt, dass ich da wohl keine Funktion hinter steckt oder?

Naja zum WW - also ich habe das nochmal beobachtet:

Je höher die Temp, desto höher der Verlust (klar, Logarythmisches dT) - ich habe allerdings bei dem was ich als Beispiel genannt habe auch zwischendurch geduscht :smiley: - Asche über mein Haupt.
Also ich gehe mal von 2,5-3°C/h aus…
Gruß,
Matthias

Hallo,

da ich in Kürze eine Buderus Heizung mit web KM200 haben werde, bin ich überaus dankbar für die Enträtselung der Steuerung. Ich habe das schon bei anderen Buderus Steuerungen verfolgt, wie man durch reverse engineering die Informationen aus der Nase ziehen mußte. Ich werde, sobald ich die Hardware habe, mich an der Suche beteiligen.
BTW Honeywell hat sich vor Jahren ähnlich blöd getan mit Informationen ihrer damals uralten Steuerung. Die Firmen meinen immer, man baut das Ding nach. In den meisten Fällen entdeckt man Bugs und könnte dadurch ja den Firmen als Beta-Tester helfen, aber vor sowas haben die immer Angst. Wahrscheinlich ist es oberpeinlich, wenn man die Fehler findet.

Also weiter so, ich bin dabei und vielen Dank für die bisherigen Arbeiten.

mk

Also entschlüsselt ist es ja. Unbekannt ist da IMHO nichts mehr. Aktuell dreht sich die Sache nur noch um die Einbindung in IPS.
Aber prima, wenn Du unterstützen kannst.

[SIZE=3]Schönen guten,

Würde dann mal bitte Freiwillige suchen, die mal testen ob das was ich da gebastelt habe auch bei anderen Anlagen funktioniert. Ist mal ein erster Entwurf, noch nicht ganz fertig. Im Moment ist ein bisschen wenig Zeit zum „rumspielen“.[/SIZE]


// Funktion Fehlerspeicher auslesen
// ---------------------------------
function ReadFaultHistory(){
// Meldungsarray
$message = array("dcd" => array("BC10" => 'Brennersteuerung',
										  "A01" => 'Allgemeine EMS-Funktion',
										  "A02" => 'Brennersteuerung',
										  "A11" => 'Raumcontroller',
										  "A12" => 'Weichenmodul - WM10',
										  "A18" => 'Raumcontroller',
										  "A21" => 'Raumcontroller Heizkreis 1',
										  "A22" => 'Raumcontroller Heizkreis 2',
										  "A31" => 'Mischermodul Heizkreis 1 - MM10',
										  "A32" => 'Mischermodul Heizkreis 2 - MM10',
										  "A51" => 'Solarmodul - SM10',
										  "AD1" => 'SAFe/Heizkessel',
										  "EE" => ' Interner Fehler am SAFe'),
					  "cat" => array("B" => array('B', 'blockierender Fehler, läuft nach Fehlerbehebung selbsttätig weiter'),
					  					  "L" => array('V', 'verriegelnder Fehler, muss nach Fehlerbehebung manuell entriegelt werden'),
										  "A" => array('A', 'Anlagenfehler (im Raumcontroller protokoliert)'),
										  "H" => array('H', 'Servicemeldung (Wartungsmeldung)')),
					  "BC10" => array("500" => 'Keine Spannung Sicherheitsrelais',
										   "501" => 'Sicherheitsrelais hängt',
										   "502" => 'Keine Spannungsversorgung Brennstoffrelais 1',
										   "503" => 'Brennstoffrelais 1 hängt',
										   "508" => 'Zu hoher Flammfühler-Strom',
										   "509" => 'Eingang Flammenfühler defekt',
										   "519" => 'Flammensignal nach Brennerabschaltung',
										   "510" => 'Fremdlicht vorbelüftung',
										   "511" => 'Keine Flamme innerhalb der Sicherheitszeit',
										   "512" => 'Flammenabriss innerhalb der Sicherheitszeit',
										   "513" => 'Flammenabriss innerhalb der Nachzündzeit',
										   "514" => 'Flammenabriss innerhalb der Stabilisierungszeit',
										   "515" => 'Flammenabriss in BEtrieb 1. + 2. Stufe',
										   "516" => 'Flammenabriss Umschaltung 1. Stufe',
										   "517" => 'Flammenabriss in Betrieb 1. Stufe',
										   "518" => 'Flammenabriss Umschaltung 1. + 2. Stufe',
										   "520" => 'Vorlauf-STB',
										   "521" => 'Temperaturdifferenz im Kesselvorlauffühler zu groß',
										   "522" => 'Kesselvorlauffühler defekt',
										   "523" => 'Kesselvorlauffühler defekt (Kabelbruch)',
										   "524" => 'Kesselvorlauffühler defekt (Kurzschluss)',
  									      "525" => 'Abags-STB',
										   "526" => 'Temperaturdifferenz im Abgastemperaturfühler zu groß',
										   "527" => 'Abgastemperaturfühler defekt',
										   "529" => 'Abgastemperaturfühler defekt (Kurzschluss)',
										   "528" => 'Abgastemperaturfühler defekt (Kabelbruch)',
										   "530" => 'Abgastemperatur zu hoch',
										   "531" => 'Wassermangel',
										   "535" => 'Lufttemperatur zu hoch',
										   "536" => 'Falsche Anbringung Lufttemperatur-/Abgastemperaturfühler',
										   "537" => 'Keine Drehzahlrückmeldung',
										   "538" => 'Brennergebläse zu langsam',
										   "540" => 'Brennergebläse zu schnell',
										   "542" => 'Kommunikation mit SAFe unvollständig',
										   "543" => 'Keine Kommunikation mit SAFe',
										   "548" => 'Zuviele Wiederholungen (Brennerstarts)',
										   "549" => 'Sicherheitskette hat geöffnet',
										   "550" => 'Unterspannung',
										   "551" => 'Spannungsunterbrechung',
									 	   "552" => 'Zu viele Entstörungen über Schnittstelle',
										   "553" => 'Zu viele Flammenabrisse',
										   "XXX" => 'Interner Fehler'),
					  "A01" => array("800" => 'Außenfühler ist defekt',
										  "808" => 'Warmwassserfühler 1 ist defekt',
										  "809" => 'Warmwasserfühler 2 ist defekt',
										  "810" => 'Warmwasser bleibt kalt',
										  "811" => 'Thermische Desinfektion wurde abgebrochen',
										  "816" => 'Keine Kommunikations mit UBA/MC10, DBA, UBA-H3 oder MCM10',
										  "828" => 'Wasserdruckseonsor ist defekt'),
					  "A02" => array("816" => 'Keine Kommunikation mit BC10'),
					  "A11" => array("801" => 'Interner Fehler',
										  "802" => 'Uhrzeit noch nicht eingestellt',
										  "803" => 'Datum noch nicht eingestellt',
										  "804" => 'Interner Fehler',
										  "806" => 'Raumtemperaturfühler defekt',
										  "816" => 'Keine Kommunikation mit RC35',
										  "821" => 'Raumregelung gewählt, aber keine Fernbedienung Heizkreis 1',
										  "822" => 'Raumregelung gewählt, aber keine Fernbedienung Heizkreis 2',
										  "823" => 'Frostschutz gewählt, aber keine Fernbedienung Heizkreis 1',
										  "824" => 'Frostschutz gewählt, aber keine Fernbedienung Heizkreis 2',
										  "826" => 'Raumtemperaturfühler für Heizkreis 1 defekt',
										  "827" => 'Raumtemperaturfühler für Heizkreis 2 defekt',
										  "828" => 'Wasserdrucksensor defekt',
										  "829" => 'Raumcontroller ohne Heizkreis'),
					  "A12" => array("815" => 'Fühler Weichenmodul defekt',
										  "816" => 'Keine Kommunikation mit Weichenmodul'),
					  "A18" => array("825" => 'Adressenkonflikt -> zwei Master-Bedieneinheiten im System'),
					  "A21" => array("806" => 'Raumtemperaturfühler für Heizkreis 1 defekt',
										  "816" => 'Keine Kommunikation mit Bedieneinheit Heizkreis 1',
										  "829" => 'RC20/RF als Fernbedienung',
										  "830" => 'Schwache BAtterie Bedieneinheit Funk Heizkreis 1',
										  "839" => 'Keine Funkkommunikation mit Bedieneinheit Heizkreis 1 - Funkstörung',
										  "842" => 'Frostschutz gewählt, aber keine Fernbedienung Heizkreis 1',
										  "843" => 'Raumregelung gewählt, aber keine Fernbedienung Heizkreis 1'),
					  "A22" => array("806" => 'Raumtemperaturfühler für Heizkreis 2 defekt',
										  "816" => 'Keine Kommunikation mit Bedieneinheit Heizkreis 2',
										  "829" => 'RC20/RF als Fernbedienung',
										  "830" => 'Schwache Batterie Bedieneinheit Funk Heizkreis 2',
										  "839" => 'Keine Funkkommunikation mit Bedieneinheit Heizkreis 2 - Funkstörung',
										  "842" => 'Frostschutz gewählt, aber keine Fernbedienung Heizkreis 2',
										  "843" => 'Raumregelung gewählt, aber keine Fernbedienung Heizkreis 2'),
					  "A31" => array("807" => 'Vorlauffühler Heizkreis 1 defekt',
										  "816" => 'Keine Kommunikation mit Heizkreis 1 Mischermodul'),
					  "A32" => array("807" => 'Vorlauffühler Heizkreis 2 defekt',
										  "816" => 'Keine Kommunikation mit Heizkreis 2 Mischermodul'),
					  "A51" => array("812" => 'Einstellungen Solar falsch',
										  "813" => 'Kollektorfühler defekt',
										  "814" => 'Warmwasserspeicher und Kollektorfühler defekt',
										  "816" => 'Solarmodul - SM10 nicht vorhanden, bzw. keine Kommunikation'),
					  "AD1" => array("817" => 'Lufttemperatursensor defekt',
										  "818" => 'Heizkessel bleibt kalt',
										  "819" => 'Dauersignal vom Brennstoffvorwärmer',
										  "820" => 'Brennstoff zu kalt'),
					  "H" => array("1" => 'Abgastemperatur zu hoch',
										"2" => 'Brennergebläse zu langsam',
										"3" => 'Betriebsstunden abgelaufen',
										"4" => 'Niedriger Flammenfühler-Strom',
										"5" => 'Hoher Zündverzug',
										"6" => 'Häufiger Flammenabriss',
										"8" => 'Eingestelltres Wartungsdatum wurde erreicht'));

// *****************************************************************************

// Fehlerspeicher auslesen
	$data = km200_GetData('/notifications');

		$buffer = array();   // Zwischenspeicher für Tabellenaufbau

	// Tabellenkopf erstellen
		$content = '<table border="1" rules="groups">
							<colgroup>
    							<col width="20">
    							<col width="55">
    							<col width="450">
    							<col width="150">
  							</colgroup>
							<thead>
								<tr align="center" valign="middle" height="50">
									<th colspan="4">Anlagenfehlerspeicher</th>
								</tr>
								<tr height="36">
									<th align="center" valign="middle">Art</th>
									<th align="center" valign="middle">FC</th>
									<th align="left" valign="middle">Meldung</th>
									<th align="left" valign="middle">Datum / Zeit</th>
								</tr>
							</thead>';

	foreach($data->values as $data){
		if(array_key_exists($data->dcd, $message['dcd'])){
			$dcd = $data->dcd;
			}
		else{
		   $dcd = "BC10";
		   }

	// Tabelle mit den Werten füllen
	   if(end($buffer) != $dcd){
         $content .= '</tbody>';
         }

   	if(end($buffer) == $dcd){
 			$content .= '<tr height="30">
								<td align="center" valign="middle">'.$message['cat'][$data->cat][0].'</td>
								<td align="center" valign="middle">'.$data->ccd.'</td>';
								if($dcd == "BC10"){
									$content .= '<td align="left" valign="middle">'.$data->dcd.' - '.$message[$dcd][$data->ccd].'</td>';
									}
								else{
								   $content .= '<td align="left" valign="middle">'.$message[$dcd][$data->ccd].'</td>';
								   }
			$content .=	'<td align="left" valign="middle">'.substr($data->t, 8, -9).".".substr($data->t, 5, -12).".".substr($data->t, 0, -15).", ".substr($data->t, 11, -6).":".substr($data->t, 14, -3).'</td></tr>';
    		}
		else{
			$content .= '<tbody>
								<tr align="left" valign="middle" height="50">
									<th colspan="4">'.$dcd.' - '.$message['dcd'][$dcd].'</th>
								</tr>
								<tr height="30">
									<td align="center" valign="middle">'.$message['cat'][$data->cat][0].'</td>
									<td align="center" valign="middle">'.$data->ccd.'</td>';
								if($dcd == "BC10"){
									$content .= '<td align="left" valign="middle">'.$data->dcd.' - '.$message[$dcd][$data->ccd].'</td>';
									}
								else{
								   $content .= '<td align="left" valign="middle">'.$message[$dcd][$data->ccd].'</td>';
								   }
			$content .=	'<td align="left" valign="middle">'.substr($data->t, 8, -9).".".substr($data->t, 5, -12).".".substr($data->t, 0, -15).", ".substr($data->t, 11, -6).":".substr($data->t, 14, -3).'</td></tr>';
			}

   	$buffer[] = $dcd;
		}

		$content .= '</tbody>
					 	<tr align="left" valign="middle" height="20">
					 		<td colspan="4"></td></tr>
					 	<tr align="left" valign="middle" height="20"><td></td>
					 		<td colspan="3">'.$message['cat']['B'][0].' ..... '.$message['cat']['B'][1].'</td></tr>
						<tr align="left" valign="middle" height="20"><td></td>
					 		<td colspan="3">'.$message['cat']['L'][0].' ..... '.$message['cat']['L'][1].'</td></tr>
					 	<tr align="left" valign="middle" height="20"><td></td>
					 		<td colspan="3">'.$message['cat']['A'][0].' ..... '.$message['cat']['A'][1].'</td></tr>
					 	<tr align="left" valign="middle" height="20"><td></td>
       			 		<td colspan="3">'.$message['cat']['H'][0].' ..... '.$message['cat']['H'][1].'</td></tr>
					 	<tr align="left" valign="middle" height="20">
					 		<td colspan="4"></td></tr>
  					 	<tbody>
					 	<tr align="right" valign="bottom" height="40">
							<td colspan="4">Stand: '.date("d.m.Y, H:i").'</td></tr>
						</tbody>
					 	</table>';

	return $content;
	}

Besten Dank,
Gruß
Manfred

Hallo Manni,

vielen Dank für deine Mühe.
Bei mir sehen die Notifications leider ein bisserl anders aus.
Ich hänge mal die Ausgabe von print_r() an.

Gerd

ems.txt (2.84 KB)

Moin,

ich würd ja gern mitreden können. Aber bei mir gibt es /notifications nicht. :frowning:
Habt ihr irgendwo etwas aktiviert, damit das kommt? Ich kann mir nicht vorstellen, dass dies nur bei bestimmten Anlagen vorkommt?!

Hallo Spoosie,

du brauchst nur eine Abfrage machen:
$data = km200_GetData(’/notifications’);
print_r($data);

Dann siehst du was da rauskommt. :wink:

Gerd

Erstmal Danke an Manfred

Bei mir auch. Muss aber erst nachschaun, was sich dahinter verbirgt.

Hier mal ein Link zu den Fehlercodes.