LAN-Anbindung für BSB-Bus (Brötje, Elco Thision etc.)

Begonnen von justme1968, 29 November 2014, 19:50:40

Vorheriges Thema - Nächstes Thema

Schotty

#375
So, ich habe jetzt erstmal die Parameter gecheckt, die du nachgetragen hast. Nur erstmal auf 'Existenz' und korrekte Anzeige, die einzelnen Einstellmöglichkeiten habe ich noch nicht getestet.
Dabei ist mir Folgendes aufgefallen:

1.) K8 Ferien Heizkreis: Parameter 632 und 633 werden bei meiner Steuerung ja unter 642&643 angezeigt; bei dem Programm wie bei v0.12 nach wie vor unter 632&633, bei 642&643 erscheint 'error 7 - p.n.s.'

2.) K19 Kessel Parameter 2291 Steuerung Bypasspumpe fehlt noch

3.) K28 Konfiguration Parameter 5942 : Statt dessen wird 5941 doppelt angezeigt. Der zweite müsste also sein: 5942 Fühlereingang BX22

4.) K30 Fehlerhistorie 6800-6819 : Bei mir gibt es ja nur die 'geraden' Parameternummern, die 6801 wird bspw. bei 6800 mit angezeigt etc. In v0.12 erschien bisher bei den ungeraden (6801 etc) 'error 7 - p.n.s.', nun erscheint dort 'decoding error'. Die entspr. Fehlermeldung wird nicht bei den zugehörigen geraden Parameternummern (6800 etc) angezeigt.

Hast du noch die Liste mit den Traces, die ich dir geschickt hatte? Sonst poste ich sie nochmal entsprechend.

Ansonsten sieht das alles super aus! :)

Danke & Gruß

Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

gero

Zitat von: Schotty am 31 März 2016, 10:59:40
Andere Fragen:
1.) Bei Parameter 10000 in K38 Raumtemperatur 1 erscheint bei mir 'error 7 - p.n.s.'. Allerdings habe ich derzeit ein originales RGT dran, was ja die Raumtemp. ermittelt und in K36 unter 8740 auch korrekt anzeigt.
Ist P.10000 für einen entsprechenden DS18B20 vorgesehen? Falls ja, wie bzw. wo lege ich fest, welcher der angeschlossenen Sensoren derjenige für die Raumtemp ist?
Der Parameter 10000 ist ein spezieller Parameter, mit der nicht abgefragt werden kann (daher: error 7 - parameter not supported).
Die Raumtemperatur wird mit einer INF Nachricht an die Heizung geschickt, z.B.:
http://192.168.178.88/I10000=21.0

Zitat von: Schotty am 31 März 2016, 10:59:40
2.) Enums werden bei mir nicht bei allen Parametern angezeigt - ist das so richtig und 'normal'?
Enums werden nur bei Parametern angezeigt, die auch den Typ enum haben. Am besten siehst du dazu in den Source Code.


Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

gero

Zitat von: Schotty am 31 März 2016, 12:02:49
1.) K8 Ferien Heizkreis: Parameter 632 und 633 werden bei meiner Steuerung ja unter 642&643 angezeigt; bei dem Programm wie bei v0.12 nach wie vor unter 632&633, bei 642&643 erscheint 'error 7 - p.n.s.'
Es gibt einige Zeilen, die nicht mit der Zeilennummerierung im Bedienteil übereinstimmen. Betroffen sind vor allem alle Zeit- und Ferienprogramme. Der Grund ist, dass im Bedienteil unter einer Zeilennummer teilweise mehrere Kommandos ausgelöst werden. Um die Programmierung zu vereinfachen, habe ich "virtuelle" Zeilennummern verwendet. Parameter 642&643 entsprechen der 6. zu definierenden Periode des Ferienprogramms für Heizkreis 1. Evtl. unterstützt die Brötje nicht so viele Perioden. Oder aber es werden andere Kommando-IDs verwendet. Wenn es dir wichtig ist, bräuchte ich einen kompletten Mitschnitt mit allen möglichen Optionen des Ferienprogramms, kommentiert mit den einzelnen Aktionen auf dem Bedienteil. (Ich habe damals dafür ein Video aufgenommen).

Zitat von: Schotty am 31 März 2016, 12:02:49
2.) K19 Kessel Parameter 2291 Steuerung Bypasspumpe fehlt noch
Was wird bei dir angezeigt? Im Code ist der Eintrag mit den Werten aus deinem Trace vorhanden.

Zitat von: Schotty am 31 März 2016, 12:02:49
3.) K28 Konfiguration Parameter 5942 : Statt dessen wird 5941 doppelt angezeigt. Der zweite müsste also sein: 5942 Fühlereingang BX22
Da ist mir ein kleiner Fehler unterlaufen. In der nächsten Version sollte es funktionieren.

Zitat von: Schotty am 31 März 2016, 12:02:49
4.) K30 Fehlerhistorie 6800-6819 : Bei mir gibt es ja nur die 'geraden' Parameternummern, die 6801 wird bspw. bei 6800 mit angezeigt etc. In v0.12 erschien bisher bei den ungeraden (6801 etc) 'error 7 - p.n.s.', nun erscheint dort 'decoding error'. Die entspr. Fehlermeldung wird nicht bei den zugehörigen geraden Parameternummern (6800 etc) angezeigt.
Ich sehe es mir nochmal an. Aber wenn ich mich recht erinnere, ist auch die Fehlerhistorie im Bedienteil vereinfacht. D.h. es wird immer das Datum und der Fehlercode unter einer Bedienzeile angezeigt. In Wirklichkeit werden aber zwei Werte abgefragt. Der decoding error sollte natürlich nicht sein.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

Schotty

Zitat von: gero am 31 März 2016, 16:52:36
Es gibt einige Zeilen, die nicht mit der Zeilennummerierung im Bedienteil übereinstimmen. Betroffen sind vor allem alle Zeit- und Ferienprogramme. Der Grund ist, dass im Bedienteil unter einer Zeilennummer teilweise mehrere Kommandos ausgelöst werden. Um die Programmierung zu vereinfachen, habe ich "virtuelle" Zeilennummern verwendet. Parameter 642&643 entsprechen der 6. zu definierenden Periode des Ferienprogramms für Heizkreis 1. Evtl. unterstützt die Brötje nicht so viele Perioden. Oder aber es werden andere Kommando-IDs verwendet. Wenn es dir wichtig ist, bräuchte ich einen kompletten Mitschnitt mit allen möglichen Optionen des Ferienprogramms, kommentiert mit den einzelnen Aktionen auf dem Bedienteil. (Ich habe damals dafür ein Video aufgenommen).
Achso - nö, ist mir nicht wichtig, danke. Dachte nur, dass das evtl. untergegangen war ;)

Zitat
Was wird bei dir angezeigt? Im Code ist der Eintrag mit den Werten aus deinem Trace vorhanden.
Ääähm - mein Fehler, sorry! Ja, der Eintrag ist definitiv vorhanden - ich Döskopp hatte mich verguckt..  ::)

Zitat
Da ist mir ein kleiner Fehler unterlaufen. In der nächsten Version sollte es funktionieren.
Super, danke!

Zitat
Ich sehe es mir nochmal an. Aber wenn ich mich recht erinnere, ist auch die Fehlerhistorie im Bedienteil vereinfacht. D.h. es wird immer das Datum und der Fehlercode unter einer Bedienzeile angezeigt. In Wirklichkeit werden aber zwei Werte abgefragt. Der decoding error sollte natürlich nicht sein.
Ja, im Display wird es so angezeigt, wie du sagst: Ganz oben rechts Prog.Nr., dann groß die Uhrzeit, danach folgen drei Zeilen. Obere Zeile 'Fehler' und daneben das Datum, mittig 'Historie x', untere Zeile bspw. '131:Brennerstörung'. Klasse, wäre super wenn du das auch noch hinbekommst! Geht mir ja auch nur darum, die entsprechende Fehlermeldung mit deinem Prog angezeigt zu bekommen.. Nochmals danke!

Die entsprechenden Einstellmöglichkeiten/Zuordnungen der 'neuen' Parameter werde ich dann demnächst nochmal in Ruhe testen.

Gruß
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

FunkOdyssey

Am Rande: ich habe keine Probleme mit der Fehlerkategorie. Alles wie es soll.

gero

Zitat von: FunkOdyssey am 03 April 2016, 14:12:42
Am Rande: ich habe keine Probleme mit der Fehlerkategorie. Alles wie es soll.
Welches Heizungs-System hast du nochmal? Wenn es ebenfalls eine Broetje ist, muss ich überlegen, wie ich das in der SW löse.
Ich befürchte, dass wir am einem Punkt angelangt sind, an dem die Pflege einer gemeinsamen Software nicht mehr so einfach wird.
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

FunkOdyssey

Ich habe eine Brötje WBS 22E.
Und ich habe keine Probleme. Nicht, dass du das falsch verstanden hast.
Bei mir läuft alles super. Irgendwie mit der 0.13 sogar schneller. Kann aber auch Zufall sein.

Schotty

#382
Die WGB/WBS etc. (also die Gasgeräte) haben m.W. eine andere Steuerung (LMU, nicht RVS) verbaut. Wenn FunkOdyssey also nicht das SOB-definement (SOB=Ölbrenner mit RVS) aktiviert hat, sollten die spezifischen Änderungen doch eigtl. auch gar nicht relevant sein, oder irre ich mich da?
Gruß

EDIT:
Etliche Parameter (bspw. Brennersperrzeit, Gebläse etc.) der Steuerung sind ja bei mir bspw. auch nicht verfügbar, sondern nur bei den Brötje-Gasgeräten. Oder sind die auch alle bei deiner Elco (btw: Öler oder Gas?) verfügbar Gero?
Ich könnte mir vorstellen, dass es einerseits an dem brennerspezifischen Steuerungstyp (LMU, RVS..) liegt, und andererseits sicherlich auch von der Software-Version der ISR abhängig ist.
Btw: Kann man die ISR eigtl. irgendwie updaten..? ;) 
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

FunkOdyssey

Oops. Ich wusste gar nicht, dass es bei euch um SOB geht.
Ich habe eine Gas-Therme und habe keine speziellen Parameter im File geändert.

gero

Hi,

anbei die Version v0.14.
Zumindest bei schotty funktioniert jetzt die Brötje SOB.
Zusätzlich habe ich das Broadcast Handling eingefügt (Option B und B0 - siehe Hilfe). Es ist noch nicht wirklich tiefgehend getestet, daher ist das Feature als experimental gekennzeichnet.


Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

gero

Zitat von: Schotty am 03 April 2016, 20:52:37
Etliche Parameter (bspw. Brennersperrzeit, Gebläse etc.) der Steuerung sind ja bei mir bspw. auch nicht verfügbar, sondern nur bei den Brötje-Gasgeräten. Oder sind die auch alle bei deiner Elco (btw: Öler oder Gas?) verfügbar Gero?
Bie mir ist auch nur ein Subset der Parameter verfügbar.

Zitat von: Schotty am 03 April 2016, 20:52:37
Ich könnte mir vorstellen, dass es einerseits an dem brennerspezifischen Steuerungstyp (LMU, RVS..) liegt, und andererseits sicherlich auch von der Software-Version der ISR abhängig ist.
Btw: Kann man die ISR eigtl. irgendwie updaten..? ;)
Ich habe keine Ahnung, ob ein Update so einfach möglich ist. Wahrscheinlich eher nicht.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

Schotty

Eine erste kurze Rückmeldung zum broadcast: Anscheinend gibt die Steuerung nicht immer zuverlässig den Brennerstop durch, d.h., die Laufzeit wird so lange weiter gemessen, bis (schätzungsweise) nachgefragt wird, ob der Brenner aus ist (habe ich noch nicht mit verbose überprüft). Nur schonmal zur Info, falls jemand schon eifrig den Ölverbrauch berechnen läßt..

Ansonsten wäre es klasse, wenn du es noch so erweitern könntest, dass man -wie jetzt mit den 1wire-Temps- auch die 'B'-Kategorie gleichzeitig mit abfragen kann ;)

Btw: Nochmal danke für die SOB-spezifischen Änderungen - besonders die nun funktionierende Fehlerkategorie erfreut mich seit gestern sehr, macht sie doch die Abfrage der plötzlich auftretenden 131er ungemein 'entspannt' >:(  ;)

Gruß
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

gero

Zitat von: Schotty am 05 April 2016, 10:27:30
Eine erste kurze Rückmeldung zum broadcast: Anscheinend gibt die Steuerung nicht immer zuverlässig den Brennerstop durch, d.h., die Laufzeit wird so lange weiter gemessen, bis (schätzungsweise) nachgefragt wird, ob der Brenner aus ist (habe ich noch nicht mit verbose überprüft). Nur schonmal zur Info, falls jemand schon eifrig den Ölverbrauch berechnen läßt..

Ansonsten wäre es klasse, wenn du es noch so erweitern könntest, dass man -wie jetzt mit den 1wire-Temps- auch die 'B'-Kategorie gleichzeitig mit abfragen kann ;)
Ich werde mir den Broadcast ansehen, sobald wieder etwas Zeit da ist. Es kann auch (in der aktuellen Software) passieren, dass Broadcast-Nachrichten durch Anfragen an die Heizung verloren gehen. Um das zu ändern, muß ich einiges umstellen.
Ich empfehle zur Zeit das BROADCAST Feature nicht zu verwenden, sondern lieber den Status des Brenners zu pollen. Da mein Brenner relativ lange läuft, reicht mir dabei ein Pollintervall von 3 Minuten.

Gruß,
Gero
Odroid C1 - CULV3-868, JeeLink
16 x TX 29 DTH
MAX!: 15x Heizkörperthermostat+, 2x Wandthermostat, 14x Fenserkontakt, 1x Ecotaster
FS20 S4A, FS20IRF, BSB-Heizungssteuerung über Atmega2560
Z-Wave: ZME_UZB1, Fibaro Wall Plug + Motion Sensor

freetz

Hallo Gero,

Mensch, da ist ja seit meinem letzten Besuch einiges passiert, das freut mich sehr!
Ich hätte eine Frage, die ich mangels erweiterter C-Kenntnisse und Unkenntnis der verschiedenen Variablen-Speicher auf dem Arduino nicht selber beantworten bzw. umsetzen kann:

Für die Auswertung wäre es sehr interessant, bei den Werten "Außentemperatur" und "Brennermodulation" nicht (nur) die jeweiligen momentanen Werte abzufragen, sondern den Arduino den Mittelwert der letzten 24h errechnen zu lassen. Dazu würde es sicherlich reichen, die beiden Werte (bei meiner Thision 8326 für Modulation und 8700 für Außentemperatur) z.B. alle fünf Minuten zu pollen und daraus dann den jeweiligen Mittelwert zu bilden (wären bei 24h also pro Parameter 288 Werte).
Wenn man diese beiden Mittelwerte dann über eine URL abrufen könnte, wäre es deutlich einfacher, die Heizung zu optimieren, weil ich dann die Beziehung zwischen Durchschnittstemperatur und Durchschnittsbrennermodulation ins Verhältnis setzen kann, um zu sehen, welche Wirkung die Einstellungen haben.

In Perl würde ich das so umsetzen, dass ich ein Array mit 288 Feldern habe, bei dem ich alle 5 Minuten das nächste fülle und bei Index 289 dann wieder auf 1 (bzw. 0) springe.

Gero, ließe sich das ohne allzu großen Aufwand auch in C umsetzen? Ich scheitere immer daran, die Werte entsprechend zu pollen und dann die Variablen richtig zu typisieren - da bin ich bei Perl einfach zu nachlässig geworden ;).

Ich glaube, dass auch andere von dieser Funktion profitieren würden, gerade weil es ja in den letzten Posts auch um das Verhalten der Heizung ging.

Viele Grüße

F.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

freetz

#389
Ok, es ging nun doch einfacher, als ich gedacht hatte und ich habe es nun doch selber geschafft, das so umzusetzen. Für den Fall, dass es auch für andere interessant sein könnte, hier die Code-Snippets, die ich hinzugefügt habe. Da ich momentan noch mit der Version 0.12 arbeite, ist es so vielleicht einfacher, als wenn ich den kompletten Sketch hochlade:

In der Global-Sektion:
double logAvgTemp[289];
byte logAvgModulation[289];
word AvgIndex = 0;
word AnzIndexValues = 0;
double AvgTemp = 0;
double AvgModulation = 0;
static unsigned long nextSwitchTime = millis();


In der Loop-Funktion:
  if (nextSwitchTime < millis() ) {
    logAvgTemp[AvgIndex]=strtod(query(8700,8700,1),NULL);
    logAvgModulation[AvgIndex]=strtod(query(8326,8326,1),NULL);
    AvgIndex++;
    AnzIndexValues++;
    if (AvgIndex > 287) {AvgIndex = 0;}
    if (AnzIndexValues > 288) {AnzIndexValues = 288;}
    nextSwitchTime = millis() + 300000;
  }


In der IPWE-Extension (darüber erfolgt die Ausgabe), vor der Zeile #ifdef ONEWIRE_SENSORS:

  AvgTemp = 0;
  AvgModulation = 0;

  if (AnzIndexValues > 0) {
    for (i=0; i<AnzIndexValues; i++) {
      AvgTemp = AvgTemp + logAvgTemp[i];
      AvgModulation = AvgModulation + logAvgModulation[i];
      client.println(logAvgModulation[i]);
    }
    AvgTemp = AvgTemp / AnzIndexValues;
    AvgModulation = AvgModulation / AnzIndexValues;
  }

  client.print(F("<tr><td>T<br></td><td>"));
  client.print(sensor_anz+2);
  client.print(F("<br></td><td>"));
  client.print(F("AvgTemp"));
  client.print(F("<br></td><td>"));
  client.print(AvgTemp);
  client.print(F("<br></td><td>0<br></td><td>0<br></td><td>0<br></td></tr>"));

  client.print(F("<tr><td>T<br></td><td>"));
  client.print(sensor_anz+3);
  client.print(F("<br></td><td>"));
  client.print(F("AvgModulation"));
  client.print(F("<br></td><td>"));
  client.print(AvgModulation);
  client.print(F("<br></td><td>0<br></td><td>0<br></td><td>0<br></td></tr>"));


Für die Modulation wäre eine etwas dichtere Überwachung sicher nicht schlecht, weil man dann etwaige Spikes oder bei häufiger Taktung genauere Ergebnisse bekommen würde, aber mehr macht der Speicher des Arduino Mega nicht mit. Ich habe daher schon bei der Modulation auf den Variablen-Typ "Word" gesetzt, da der nur 2 statt 4 Byte benötigt. Obwohl der Speicher auch mit "Double" nur zu 91% belegt war, kam es da zu seltsamen Verhaltensweisen. Jetzt, mit etwas mehr Puffer (81%) scheint es recht stabil zu laufen.

Man könnte die genauere Abtastrate dadurch umsetzen, indem man zwar z.B. jede Minute pollt und aus fünf Minutenwerten dann einen Mittelwert bildet, den man dann nach dem fünften Wert in das Array ablegt. Vielleicht gibt es aber auch einen noch eleganteren Weg?

Für meine Bedürfnisse reicht es aber erst einmal, jetzt bin ich mal gespannt, wie sich bestimmte Änderungen an der Konfiguration der Heizung in Abhängigkeit zur Durchschnittstemperatur bzw -modulation auswirken...

Viele Grüße

F.

EDIT: Variablen-Typisierung nach Hinweis von Gero korrigiert.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan