Zurück zum Inhaltsverzeichnis
Zurück zu Kapitel 5


6. BSB-LAN: Spezialfunktionen


6.1 Loggen von Daten

Verwendung des Adapters als Standalone-Logger mittels BSB-LAN

Stecke eine (möglichst aktuelle) FAT32-formatierte microSD-Karte in den Speicherkartenplatz des Ethernet-Shields, bevor du den Mikrocontroller einschaltest.

Aktiviere vor dem Flashen das Definement #define LOGGER in der Datei BSB_LAN_config.h, füge die zu loggenden Parameter zur Variable log_parameters hinzu und bestimme das Logintervall mit der Variable log_interval. Bitte beachte auch die entsprechenden Punkte in Kap. 2.2.

Kommt ein Olimex ESP32-EVB zum Einsatz (oder wird ein microSD-Kartenadapter an einem ESP32-basierten Board verwendet) und sollen die geloggten Werte auf die microSD-Karte anstatt in den Flash-Speicher geschrieben werden (was sehr zu empfehlen ist!), dann muss das folgende Definement in der Datei BSB_LAN_config.h aktiviert werden: #define ESP32_USE_SD.

Später können während der Laufzeit sowohl das Intervall als auch die Logging-Parameter mittels des Befehls "/L=[Intervall],[Parameter1],...,[Parameter20]" geändert werden.

Sämtliche Daten werden auf der Karte in der Datei datalog.txt im CSV-Format gespeichert und können somit leicht in Excel oder OpenOffice Calc importiert werden.

Der Dateiinhalt kann mit dem URL-Befehl /D eingesehen werden, eine graphische Darstellung der Logdateien erfolgt mittels /DG.

Um die Datei datalog.txt zu löschen und neu zu erstellen, benutze den Befehl /D0.

Die Ausführung des URL-Befehls /D0 sollte außerdem bei der ersten Benutzung erfolgen, da hierdurch die Datei mit dem passenden CSV-Header initiiert wird.

Hinweise
Vereinzelt kann es vorkommen, dass bestimmte microSD-Karten nicht problemlos vom LAN-Shield erkannt werden. In diesem Fall wird eine entspr. Fehlermeldung von BSB-LAN ausgegeben. Sollte bei dir dieser Fall eintreten, so probiere es mit einer anderen, möglichst aktuellen microSD-Karte.
Bitte beachte, dass der Mikrocontroller keine exakte Uhr ist. Auch wenn du bspw. das Intervall auf 60 Sekunden eingestellt hast, weicht die in der Datei dargestellte Zeit (welche von der Heizungssteuerung empfangen wird) möglicherweise davon ab - dies kann bis zu einer Sekunde pro Minute betragen. Sollte eine exakte Logzeit unbedingt erforderlich sein, kannst du die durchschnittliche Zeitabweichung zwischen der Mikrocontroller-Zeit und der wirklichen Zeit ermitteln, das Log-Intervall entsprechend anpassen und bspw. 59 Sekunden anstatt 60 Sekunden einstellen.

Verwendung des Adapters als Remote-Logger

Neben dem Einsatz komplexer Systeme wie bspw. FHEM und den spezifischen Log-Lösungen kann bspw. folgender Befehl periodisch ausgeführt werden (z.B. per cron job):

DATE=`date +%Y%m%d%H%M%S`; wget -qO- http://192.168.178.88/8310/720/710 | egrep "(8310|720|710)" | sed "s/^/$DATE /" >> log.txt  

Das aus diesem Beispiel resultierende Logfile 'log.txt' enthält die aufgezeichneten Werte der Parameter 8310, 720 und 710.
Später kannst du das Logfile basierend auf den Parameternummern sortieren, nutze hierfür den Befehl 'sort':

sort -k2 log.txt

Hinweis
Die IP, ggf. aktivierte optionale Sicherheitsfunktionen, die gewünschten Parameter etc. sind im obigen Beispiel anzupassen.

6.2 IPWE-Erweiterung

Die IPWE-Erweiterung (IPWE = IP-Wetterdaten-Empfänger) stellt eine Möglichkeit dar, zuvor festgelegte Parameter durch den Aufruf einer kurzen URL darzustellen. Um diese tabellarische Übersicht aufzurufen, muss die folgende URL genutzt werden:

<IP-Adresse>/ipwe.cgi

Hinweis
Sollte die optionale Sicherheitsfunktion des Passkeys verwendet werden, so ist der Passkey in diesem Fall ausnahmsweise NICHT der URL hinzuzufügen!

IPWE

Beispiel einer IPWE-Ausgabe.

Um die Funktion der IPWE-Erweiterung zu nutzen, müssen vor dem Flashen des Mikrocontroller zwei Einstellungen in der Datei BSB_lan_config.h vorgenommen werden:

Zusätzlich zu den aufgeführten Parametern werden automatisch die Werte optional angeschlossener Sensoren (DHT22 / DS18B20) dargestellt.
Wenn DS18B20-Sensoren zum Einsatz kommen, werden außerdem die spezifischen Sensor IDs dargestellt. Dies kann man in der letzten Zeile im obigen Beispiel erkennen, dort lautet die spezifische Sensor ID des einzigen angeschlossenen DS18B20-Sensors “284c453d07000082”. Auf diese Weise lassen sich mehrere Sensoren eindeutig identifizieren.

Hinweise
Sollten aus Versehen Parameter zur Anzeige definiert werden, die das spezifische Heizungssystem nicht aufweist, so wird als jeweiliger Wert “0.00” dargestellt. Das heißt aber nicht, dass der Wert des nicht-unterstützen Parameters “0.00” ist! Es ist daher sinnvoll, vor der Definition der anzuzeigenden Parameter zu überprüfen, ob diese auch wirklich vom Heizungssystem bereit gestellt werden.
Da die IPWE-Erweiterung ursprünglich entworfen wurde, um die Messwerte einer spezifischen Funk-Wetterstation darzustellen, machen nicht alle Spalten der Tabelle Sinn, wie bspw. “Windgeschwindigkeit” oder “Regenmenge”. Diese können einfach ignoriert werden. Im Grunde sind bei den normalen Parametern lediglich die beiden Spalten “Beschreibung” und “Temperatur” relevant, da hier die Parameterbezeichnung und der jeweilige Wert dargestellt werden.
Die Darstellungen der jeweiligen Parameterwerte/-einstellungen erfolgen nicht im Klartext, sondern numerisch. Bei dem oben abgebildeten Beispiel ist dies u.a. beim Parameter “1. Brennerstufe T1” gut zu erkennen: Dort steht nicht “Ein”, sondern “255”, was wiederum “Ein” bedeutet.

6.3 Raumtemperatur übermitteln

Mittels einer INF-Nachricht kann eine Raumtemperatur an den Regler gesendet werden, um einen Raumeinfluss bei der Berechnung der VL-Temperatur geltend zu machen. Um diese Funktion zu nutzen, muss die Funktion ‚Raumeinfluss’ vorher im Regler aktiviert und der Einflussfaktor prozentual festgelegt werden (bspw. Parameter 750 für HK1, Parameter 1050 für HK2).
BSB-LAN muss Schreibzugriff gewährt werden (s. Kap. 2.2).
Die Raumtemperatur muss regelmäßig in relativ kurzen Intervallen übermittelt werden, bspw. alle ein oder zwei Minuten.

Hinweis
Dieser Parameter ist nicht abrufbar.

Die folgenden Parameter müssen dafür genutzt werden:

Beispiel:
Der URL-Befehl für den HK1, um eine Raumtemperatur von 19.5°C zu übermitteln, lautet: http://<IP-Adresse>/I10000=19.5

Tipp
Wird nur ein Temperaturwert als Einflussfaktor gemessen und übermittelt, ist die Temperaturmessung in einem Führungs- / Referenzraum zu empfehlen, in dem sich keinerlei weitere Wärmequelle (bspw. Kaminofen, große Fenster in Südlage etc.) befindet.
Werden die Raumtemperaturen von mehreren Räumen erfasst (bspw. mittels entspr. HK-Thermostate oder Raumtemperaturfühler und einer SmartHome-Software), kann es vorteilhaft sein, daraus eine gemittelte Ist- und Soll-Temperatur zu errechnen und an den Wärmeerzeuger zu übermitteln. Ein Beispiel hierfür hat FHEM-Forumsuser “freetz” in diesem Thread zur Verfügung gestellt - vielen Dank dafür!

Exkurs: Erklärung zum „Raumeinfluss“ bei Berücksichtigung der Raumtemperatur
FHEM-Forumsuser „freetz“ hat die Funktionsweise bzw. das Modell hinter dem „Raumeinfluss“ (Parameter 750) entschlüsselt, so dass die Auswirkungen auf die Vorlauftemperatur verständlicher geworden sind. Vielen Dank dafür!
Sein Beitrag sowie eine Excel-Tabelle zur Berechnung findet sich hier.

Im Folgenden ein Auszug aus seinem Beitrag:

dTV = dTRw * (1 + s) wobei: dTV = resultierende Vorlauftemperaturabweichung dTRw = Raumsollwertkorrektur s = Heizkurvensteilheit (Parameter 720)

Die Raumsollwertkorrektur dTRw berechnet sich wie folgt: dTRw = dTR * Raumeinfluss (Parameter 750) / 10 wobei: dTR = Differenz Raumtemperatur-Ist - Raumtemperatur-Soll

Zusammengeführt lautet die Formel dann: dTV = dTR * Raumeinfluss / 10 * (1 + s)

Bei einer Heizkurve von 1,5 und einer Raumtemperaturabweichung Ist/Soll von 2 Grad und einem Raumtemperatureinfluss von 25% bedeutet das:

dTV = 2 * 25 / 10 * (1 + 1,5) = 12,5 °C Vorlauftemperaturveränderung

Bei 4 °C Abweichung (z.B. nach Ende der Nachtabsenkung) wäre man dann schon bei 25 Grad höherer VL-Temperatur, was vermutlich mehr ist, als das, was man bei Schnellaufheizung (Parameter 770) hinterlegen würde. Die Therme schaltet darüber hinaus bei Erreichen der Raumtemperaturbegrenzung (Parameter 760) auch bei einem RT-Einfluss von nur 1% ab. Für mich hat das die Konsequenz, dass ich den Einfluss auf max. 20% ansetzen werde. Vielleicht reicht sogar 1%, wenn die Heizkurve als solches gut eingestellt ist und der Einfluss dann nur dafür verwendet wird, bei Erreichen der RT-Begrenzung abzuschalten.


6.4 Präsenztaste simulieren

Die Funktion der Präsenztaste, die bei den Raumgeräten vorhanden ist, ist als “Heizbetrieb (temporär)” mit den Spezialparametern

Mit dieser Funktion kann im Automatikbetrieb zwischen den Modi Komfort- und Reduziertheizen im Zeitprogramm umgeschaltet werden. Die jeweilige Umschaltung ist dabei so lange gültig, bis gemäß Zeitprogramm (oder durch eine erneute Benutzung der Präsenztaste) die nächste Umschaltung erfolgt.

Bei aktivem Automatikbetrieb ist dabei
http://<IP-Adresse>/S<Parameter>=1 für den Wechsel auf ‚Betriebsart Reduziert’ und
http://<IP-Adresse>/S<Parameter>=2 für den Wechsel auf ‚Betriebsart Komfort’ zu setzen.

Beispiel:
Der Befehl <URL>/S10110=2 schaltet innerhalb des Automatikbetriebs den HK1 in den Modus Komfortheizen, mit <URL>/S10110=1 schaltet man in den Modus Reduziertheizen.

Hinweise
Die genannten Parameter müssen schreibbar sein (s. Kap. 2.2).
Diese Spezialparameter (10110, 10111, 10112) sind NICHT abrufbar.
Die Präsenztaste ist nur im Automatikbetrieb wirksam!
Der jeweilige Wechsel ist bis zur nächsten Umschaltung des Heizbetriebmodus laut Zeitprogramm gültig.
Bei Usern der BSB-LAN-Version v3.x, in deren reglerspezifischen Datei BSB_LAN_custom_defs.h dieser Befehl noch nicht implementiert ist, kann er selbst nachträglich manuell hinzugefügt werden. Eine entspr. Beschreibung der notwendigen Schritte findet sich in Kap. 2.3.

6.5 Manuellen TWW-Push ausführen

Bei einigen Reglern ist die (nahezu undokumentierte) Funktion eines manuellen Trinkwasser-Pushs verfügbar. Um einen manuellen TWW-Push auszulösen, muss dazu die TWW-Taste an der ISR-Bedieneinheit gedrückt und für etwa drei Sekunden gehalten werden, bis im Display eine entsprechende Meldung erscheint.

Bei entsprechenden Reglern kann diese Funktion mittels eines SET-Befehls erfolgen: http://<IP-Adresse>/S10019=1 Der Spezialparameter 10019 muss dazu schreibbar sein (s. Kap. 2.2).


6.6 Datum, Uhrzeit und Zeitprogramme verändern

Das Verändern der Uhrzeit und der Zeitprogramme ist nur über einen speziellen URL-Befehl möglich, es ist nicht über das Webinterface möglich.
Um die Funktion zu nutzen, muss BSB-LAN Schreibzugriff gewährt werden (s. Kap. 2.2).

Datum und Uhrzeit verändern
Der folgende Befehl stellt das Datum auf den 04.01.2019 und die Uhrzeit auf 20:15 Uhr:
/S0=04.01.2019_20:15:00
Mit dieser Funktion ist es möglich, die Uhrzeit- und Datumseinstellungen bspw. mit einem NTP Zeitserver abzugleichen.

Zeitprogramme verändern
Der folgende Befehl setzt das Zeitprogramm für Mittwoch beim Heizkreis 1 (Parameter 502) auf 05:00-22:00 Uhr:
/S502=05:00-22:00_xx:xx-xx:xx_xx:xx-xx:xx

Zeitprogramm löschen
Um ein Zeitprogramm zu löschen muss man als Uhrzeit „128:00“ eingeben.
Wenn also bspw. für Dienstag drei Zeitprogramme gesetzt wurden, und nun nur das erste von 5-22h behalten möchte, muss folgender Befehl genutzt werden:
/S502=05:00-22:00_128:00-128:00_128:00-128:00


6.7 Übermitteln einer alternativen Außentemperatur

Bei bestimmten Reglermodellen ist es möglich, diverse Funkkomponenten anzuschließen, u.a. auch einen Funk-Außentemperaturfühler. Mittels BSB-LAN ist es bei diesen kompatiblen Reglern möglich, dem Heizungsregler eine anderweitig ermittelte Außentemperatur (AT) zu übermitteln. Dies ist insbesondere für Nutzer komplexerer Hausautomationsinstallationen interessant, die bspw. eine Wetterstation an einem günstigeren Standort als dem des heizungsseitigen Außentemperaturfühlers installiert haben.

Als kompatible Regler sind bisher einige Reglermodelle der Reihen LMS und RVS gemeldet worden (Stand Oktober 2019). Ältere Reglergenerationen wie bspw. LMU oder RVA sind anscheinend nicht kompatibel.

Um zu testen, ob der eigene Regler kompatibel ist, kann -zusätzlich neben der Überprüfung des Reglertyps- im Vorfeld <ip>/Q oder gezielt ein Abruf der Parameter <ip>/10003/10004 ausgeführt werden.
Wenn als Rückmeldung bei Parameter 10003 die Außentemperatur (oder “—”) angezeigt wird, so ist die Funktion nach bisherigem Kenntnisstand verfügbar.
Wenn hingegen ein “error 7” gemeldet wird, so ist die Funktion leider nicht verfügbar.

Im Zweifelsfall sollte einfach versucht werden, eine alternative AT wie nachfolgend beschrieben zu senden. Ein nachfolgender Abruf des Parameters 8700 gibt Aufschluss darüber, ob der zuvor gesendete Wert übernommen wurde.

Für die Verwendung der Funktion der alternativen Außentemperaturübermittlung mittels BSB-LAN muss der kabelgebundene Außentemperaturfühler der Heizung zwingend vom Regler getrennt werden (da der Regler die alternative AT ansonsten scheinbar nicht annimmt). Die darauf folgende Fehlermeldung des Heizungsreglers “Fehler 10: Aussenfühler” scheint den Betrieb zwar nicht zu stören, kann/sollte aber abgeschaltet werden. Dazu führt man den Parameter 6200 “Fühler speichern” einmal aus (auf JA stellen und bestätigen). Soll der kabelgebundene Fühler irgendwann wieder zum Einsatz kommen, so sollte nach erfolgtem Anschluss erneut Parameter 6200 “Fühler speichern” (-> JA -> bestätigen) ausgeführt werden. Somit ist der kabelgebundene AT-Fühler wieder im Heizungsregler registriert.

Der Funk-Außentemperaturfühler scheint die gemessene AT ca. minütlich zu übermitteln. Bleibt diese Meldung aus, so scheint der Regler nach etwa 10-11 Minuten auf einen intern hinterlegten Wert zurückzugreifen. Zusätzlich erscheint die o.g. Fehlermeldung erneut. Es ist also empfehlenswert, die alternative AT via BSB-LAN etwa alle ein bis zwei Minuten zu übertragen.

Um die Funktion zu nutzen, muss BSB-LAN Schreibzugriff gewährt (s. Kap. 2.2) und die AT mit dem Befehl
<ip>/I10003=xx
übermittelt werden, wobei xx die betreffende AT in °C ist. Nachkommawerte sind möglich, als Komma ist ein Punkt einzufügen.

Beispiel:
Mit <ip>/I10003=16.4 wird dem Heizungsregler die AT von 16.4°C mitgeteilt; <ip>/I10003=9 übermittelt 9°C AT.

Hinweis
Wird nur bei Parameter 10004 die Außentemperatur angezeigt, so ist die Funktion nach bisherigem Kenntnisstand nicht verfügbar. Das Übermitteln der alternativen AT kann in diesem Fall aber trotzdem wie beschrieben getestet werden, allerdings muss dann der Parameter 10004 anstelle von 10003 verwendet werden: <ip>/10004=xx.

6.8 Eigenen Code in BSB-LAN einbinden

BSB-LAN bietet die Möglichkeit, eigenen Code einzubinden.
Dazu muss das entspr. Definement in der Datei BSB_LAN_config.h aktiviert und der Code entspr. in den Dateien BSB_LAN_custom.h, BSB_LAN_custom_global.h sowie BSB_LAN_custom_setup.h hinzugefügt werden.
Im Ordner “custom_functions” sind Beispiele zu finden.
Bitte lies das entspr. Readme für weitere Informationen.

FHEM-Forumuser “Scherheinz” hat ein anderes Verwendungsbeispiel zur Verfügung gestellt (siehe Forumsbeitrag).
Vielen Dank dafür!

Nachfolgend das erwähnte Beispiel:
Beschreibung:
“Alle 20 Sekunden wird über einen Spannungsteiler die Akku Spannung eingelesen. Dann wird aus den letzten 10 Werten ein gleitender Mittelwert ermittelt und per MQTT an FHEM weitergeleitet” (Zitat aus dem oben verlinkten Beitrag).

Einbindung:
Der folgende Code muss in die Datei BSB_LAN_custom_global.h eingefügt werden:

const int akkuPin = A0;
int akkuWert = 0;
float akkuSpg = 12.00;
char tempBuffer[100];
int j;

void Filtern(float &FiltVal, int NewVal, int FF){ //gleitender Mittelwert bilden aus den 10 letzten Werten
  FiltVal= ((FiltVal * FF) + NewVal) / (FF +1);
}

Der folgende Code muss in die Datei BSB_LAN_custom.h eingefügt werden:

if (custom_timer > custom_timer_compare + 20000) {    // alle 20 Sekunden 
  custom_timer_compare = millis();

akkuWert = analogRead(akkuPin); // Spannung messen         

akkuWert = map(akkuWert, 500, 1023, 0, 150); // umwandeln auf 0 - 15V
akkuWert = akkuWert / 10.00;

Filtern(akkuSpg, akkuWert, 9); //gleitender Mittelwert bilden aus den 10 letzten Werten
if (j++ > 10) akkuWert=1;  // nach 10 Werten Sprung auf 1
 
if (!MQTTClient.connected()) {
      MQTTClient.setServer(MQTTBroker, 1883);
      int retries = 0;
      while (!MQTTClient.connected() && retries < 3) {
        MQTTClient.connect("BSB-LAN", MQTTUser, MQTTPass);
        retries++;
        if (!MQTTClient.connected()) {
          delay(1000);
          DebugOutput.println(F("Failed to connect to MQTT broker, retrying..."));
        }
        MQTTClient.publish("AkkuSpannung",dtostrf(akkuSpg, 6, 1, tempBuffer));
        MQTTClient.disconnect();
      }
    }
}

6.9 Verwenden der Webserver-Funktion

Die Webserver-Funktion wurde von User “dukess” entwickelt, der ebenfalls die nachfolgenden Informationen hinsichtlich der Benutzung zur Verfügung stellte.
Vielen Dank!

Wenn das zugehörige Definement ‘#define webserver’ in BSB_LAN_config.h aktiviert wurde, kann BSB-LAN als Webserver fungieren, der außerdem statische Komprimierung unterstützt. Um diese Funktion zu verwenden müssen folgende Punkte berücksichtigt werden:

Die folgenden Beispiele verdeutlichen die Benutzung:

Hinweis
Wenn die optionale PASSKEY-Funktion verwendet wird, muss der PASSKEY wie immer der URL hinzugefügt werden.

6.10 Benutzen des alternativen AJAX Webinterface

Die AJAX Webserverfunktion wurde ebenfalls von User “dukess” entwickelt.
Bitte sieh dir die entspr. Beschreibung hinsichtlich der Benutzung in seinem AJAX repo an.
Vielen Dank!


6.11 Raumgerät-Emulation

Mit dem BSB-LAN-Setup lässt sich ein Raumgerät emulieren, dazu ist zusätzliche Hardware erforderlich.

Im Code implementiert sind folgende Funktionen:

Um die Funktionen zu nutzen sind die entspr. Einträge in der Konfiguration vorzunehmen, dies kann entweder durch Änderungen in der Datei BSB_LAN_config.h oder über das Webinterface (Menüpunkt “Einstellungen”) erfolgen.

Nachfolgend einige Hinweise für die jeweiligen Funktionen.

Raumtemperatur

Taster für TWW-Push und Präsenztastenfunktion


6.12 EEPROM-Löschung mittels Pinkontakten

Grundsätzlich kann das EEPROM via Webinterface mit dem Befehl /NE gelöscht werden. Es kann aber in bestimmten Situationen (bspw. wenn kein Zugriff auf das Webinterface möglich ist) nötig sein, das EEPROM auch ohne Nutzung des URL-Befehls zu löschen.

Hierfür müssen

beim Start oder Reboot kurzzeitig miteinander verbunden werden.
Nach erfolgreichem Löschen blinkt die Arduino-/ESP32-LED vier Sekunden lang.
Beim erneuten Start werden dann die (Vor-)Einstellungen aus der Datei BSB_LAN_config.h übernommen, eine Anpassung kann danach wie gewohnt bspw. via Webinterface erfolgen.

Die o.g. Pins zum Löschen können bei Bedarf auch individuell in der Datei BSB_LAN_config.h über das Definement #define EEPROM_ERASING_PIN XX gesetzt werden.

Alternativ kann der Microcontroller aber auch über die serielle Schnittstelle angeschlossen werden und über den Serial Monitor die Zeichenkette /NE gesendet werden, ggf. mit vorangestelltem Passkey (also dann z.B. /1234/NE ). Dann wird ebenfalls das EEPROM gelöscht.
ESP32-Nutzer können außerdem in der ArduinoIDE vor einem erneuten Flashen unter “Werkzeuge” den Eintrag “Erase All Flash Before Sketch Upload” auf “Enabled” stellen, dann wird vor dem Upload der gesamte Flashbereich einmal gelöscht.


ko-fi


Weiter zu Kapitel 7
Zurück zum Inhaltsverzeichnis