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

fabulous

Moin,

ich habe gerade in den Untiefen diese Fadens eine für mich gangbare Lösung gefunden:
Schotty hatte damals vorgeschlagen, den Parameter für die Raumsolltemperatur auszulesen um erkennen zu können welchen Wert die "Präsenz" gerade hat.
Ich werde das mal ausprobieren.

Gruß
Fabian

Scherheinz

#4561
Zitat von: Schotty am 19 April 2020, 17:26:51
@Scherheinz: Dann melde dich am besten einfach, wenn du die finale Version hast, derzeit komme ich eh nicht dazu, das im Handbuch zu ergänzen..

Hallo Schotty,

Hier ist meine neue und andauernde Version.

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.

custom global:
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);
}



custom loop:
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();
      }
    }
}



Gruß Scherheinz

fabulous

#4562
Moin,

die Umsetzung meines Raumgerät Light mit UDP-Interface ist fertig.

EDIT:
Es basiert auf dem zyklischen (alle 30 Sekunden) Empfangen und Senden von UDP-Paketen zwischen zwei Arduinos.

Details findet ihr hier: https://forum.fhem.de/index.php/topic,110599.0.html

@freetz: set() und query() hat funktioniert. Danke!

Gruß
Fabian


Schotty

Zitat von: fabulous am 23 April 2020, 20:57:41
eine Frage zu Parameter 701:
Im Handbuch findet sich folgender Hinweis:
Der letzte Satz irritiert mich. Im Webinterface kann in den Parameter anzeigen.
Wenn ich am RGT die Präsenztaste drücke, ändert er sich aber nicht. Er steht immer auf EIN(141).
Ist das mit "nicht abrufbar" gemeint?
Moin Fabian,
ja, ich glaube das hatte ich damit gemeint ;) Er ist zwar 'abrufbar' (im Sinne von 'irgendwas kommt als Ausgabe'), aber eben nicht als reglerinterner Parameter. Der 701er ist quasi ein 'virtueller Parameter' (entspricht aber jetzt vermutlich nicht 100% der Definition von freetz) und so im Regler eben nicht existent, sondern ist basierend auf der CommandID des Präsenztastendrucks hinzugefügt worden, damit man eben auch via BSB-LAN die Präsenztastenfunktion nutzen kann.
Aber du hast Recht, so wie ich es da geschrieben habe, ist es u.U. etwas verwirrend - eine bessere Formulierung fiel/fällt mir nur (damals und jetzt) nicht ein.. ;)
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Schotty

Zitat von: Scherheinz am 24 April 2020, 20:57:01
Hier ist meine neue und andauernde Version.
Klasse, danke @Scherheinz, dann werde ich es bei nächster Gelegenheit im Handbuch mit aufführen.
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

tintintin

Hallo zusammen,

ich versuche mich seit einiger Zeit an der Verbindung via mqtt. Aber es will nicht klappen.

Wenn ich es richtig verstanden habe, muss ich dafür folgende Einstellungen machen:
- #define MQTTBrokerIP auskommentieren entfernen und IP setzen.
- ich verwende aktuell noch keine SD; darum #define LOGGER auskommentieren.
- gewünschte Parameter bei int log_parameters setzen.

Der Broker läuft aktuell ohne Authentifizierung.

Nachdem das alles erledigt ist, erhalte ich auch im seriellen Monitor die entsprechenden Parameter als Ausgaben.

freetz hat weiter oben beschrieben, dass dort auch ein output... ausgegeben werden müsste. Das tut es nicht.

Und am Broker kommt auch nichts an.
Ich hab zur Sicherheit auch mal manuell über den Broker ne Nachricht verschickt. Die kommt an.
Das Topic lautet doch "BSB-LAN" (ohne "")?

Was habe ich übersehen?

Gruß Martin

Gesendet von meinem SM-A510F mit Tapatalk


Schotty

Hast du in FHEM den MQTT2-Broker genommen und entspr eingerichtet? https://1coderookie.github.io/BSB-LPB-LAN/kap11.html#119-mqtt2-und-fhem
Damit sollte es dann eigtl recht unkompliziert funktionieren. Zumindest hatte ich das mal getestet und es (fast) auf Anhieb hinbekommen - und das will schon was heißen  ;D

Ansonsten vielleicht mal deine config.h und ein list des MQTT-Device (in Code-Tags) hier einstellen, dann weiß/findet bestimmt jemand eine Lösung ;)
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Schotty

@freetz: Hast du gesehen, dass @fabulous quasi eine Art Broadcastfunktion umgesetzt hat? Wäre das nicht vielleicht ein schönes generelles Zusatzfeature für BSB-LAN (zumindest hatten wir das Thema mal vor laaanger Zeit)?
https://forum.fhem.de/index.php/topic,110599.0.html
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

freetz

@Martin_L: Ich habe MQTT selber nicht im Einsatz, deswegen kann ich nur bedingt beim Troubleshooting helfen. Probiere sicherheitshalber einmal mit aktiviertdem Logging auf SD-Karte. Ansonsten müssten die anderen, die MQTT nutzen hier mal einspringen, bitte...
@Schotty: Habe ich gesehen, aber noch nicht genauer angeschaut Was meinst Du denn, soll wohin gebroadcastet werden? Macht ja nur Sinn, wenn es eine (standardisierte) Gegenstelle gibt, die dann auch etwas damit anfangen kann...
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

Scherheinz

Zitat von: Martin_L am 26 April 2020, 14:59:00
Hallo zusammen,

ich versuche mich seit einiger Zeit an der Verbindung via mqtt. Aber es will nicht klappen.

Wenn ich es richtig verstanden habe, muss ich dafür folgende Einstellungen machen:
- #define MQTTBrokerIP auskommentieren entfernen und IP setzen.
- ich verwende aktuell noch keine SD; darum #define LOGGER auskommentieren.
- gewünschte Parameter bei int log_parameters setzen.

Der Broker läuft aktuell ohne Authentifizierung.

Nachdem das alles erledigt ist, erhalte ich auch im seriellen Monitor die entsprechenden Parameter als Ausgaben.

freetz hat weiter oben beschrieben, dass dort auch ein output... ausgegeben werden müsste. Das tut es nicht.

Und am Broker kommt auch nichts an.
Ich hab zur Sicherheit auch mal manuell über den Broker ne Nachricht verschickt. Die kommt an.
Das Topic lautet doch "BSB-LAN" (ohne "")?

Was habe ich übersehen?

Gruß Martin

Gesendet von meinem SM-A510F mit Tapatalk

Mein Logger ist aktiviert aber ich werde mal ohne testen bei Gelegenheit.
Ja das Topic ist BSB-LAN ohne alles.

So sieht das bei mir momentan aus:

Schotty

Zitat von: freetz am 26 April 2020, 18:56:22
@Schotty: Habe ich gesehen, aber noch nicht genauer angeschaut
Ah ok, ich wollte nur sicher gehen, dass du es liest - man durchforscht ja nicht immer das Heizungsboard ;)

Zitat
Was meinst Du denn, soll wohin gebroadcastet werden? Macht ja nur Sinn, wenn es eine (standardisierte) Gegenstelle gibt, die dann auch etwas damit anfangen kann...
Auswählbare Parameter an bspw ein selbstgebautes RGT. Aber dank des Beispiels samt Code besteht ja jetzt prinzipiell dazu die Möglichkeit, passt also..
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Scherheinz


/* activate logging on SD-card. Requires a FAT32-formatted Micro-SD card inserted into the Ethernet-Shield's card slot */
//#define LOGGER

int log_parameters[20] = {
//  30000,                  // Logging von "rohen" Bus-Datentelegrammen (macht nur als alleiniger Parameter Sinn)
  8700,                   // Außentemperatur
  8743,                   // Vorlauftemperatur


Ja die Werte werden bei mir auch per MQTT übertragen wenn der Logger deaktiviert ist.

Gruß

freetz

Danke für die schnelle Rückmeldung - hatte ich auch so erwartet, aber sicher ist sicher...
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

tintintin

#4573
Vielen Dank für alle Rückmeldungen.

Ich nutze kein FHEM, von daher fällt der Hinweis auf das Handbuch leider raus.
In meinem Fall lauscht Node-Red auf das Topic "BSB-LAN". Eine mit einem MQTT-Testprogramm gesendete Nachricht mit dem Topic kommt auch in Node-Red an.
Der Fehler scheint tatsächlich auf der Senderseite zu bestehen. Der Adapter erfragt zwar die geforderten Parameter von der Steuerung in dem eingestellten Intvall und das ganze ist im Seriellen Monitor zu sehen, es wird aber nicht über MQTT gesendet.

Hier mal, wie von Schotty vorgeschlagen, meine config.h:
/************************************************************************************/
/************************************************************************************/
/* Settings -   BEGIN                                                               */
/************************************************************************************/
/************************************************************************************/

// Upon first installation, rename this file from BSB_lan_config.h.default to BSB_lan_config.h and adjust settings accordingly

/*
* Initialize the Ethernet server library
* with the IP address and port you want to use
* (port 80 is default for HTTP):
*/

#define Port 80
#define IPAddr 192,168,0,250   // please note the commas instead of dots!!! Remove this line when you want DHCP
//#define GatewayIP 192,168,178,1 // Optional: this is usually your router's IP address. Please note the commas instead of dots!!!
//#define DNSIP 192,168,178,1 // Only set this variable if your DNS server is different from your router's IP address (GatewayIP). Please note the commas instead of dots!!!
//#define SubnetIP 255,255,255,0  // Please use commas insteaf of dots!!!

/* Select language; so far German is the most complete, with English following.
* Available languages are: Czech (CZ), German (DE), Danish (DK), English (EN), Spanish (ES), Finnish (FI),
* French (FR), Greek (EL), Hungarian (HU), Italian (IT), Dutch (NL), Polish (PL), Russian (RU), Swedish (SE),
* Slovenian (SI) and Turkish (TR).
* Incomplete languages will automagically be filled up with English translations first, and if no English translation
* is available, fallback will take place to German.
*/
#define LANG DE

//#define WIFI  // activate if you are using an ESP8266 AT-firmware based WiFi module
char ssid[] = "Your_WiFi_name_goes_here";            // your network SSID (name)
char pass[] = "Your_WiFi_password_goes_here";        // your network password

/* SECURITY OPTIONS
* There are several options to control and protect access to your heating system. However, keep 
* in mind, that even activating all three options are no guarantee that a versatile intruder with
* access to your (W)LAN won't be able to gain access. In any case, no encryption of data streams
* is provided from the Arduino itself. Use VPN or a SSL proxy if that is a must for you and connect
* the Arduino wired to the VPN server or SSL proxy. On the other hand, someone with this amount
* of criminal activity will probably have it easier just to access your heating system face-to-face ;)
*/

/*
* if PASSKEY is defined, the URL has to contain the defined passkey as first element
* e.g.
* http://192.168.178.88/1234/                - to view the main website (don't forget the trailing slash!)
* http://192.168.178.88/1234/K               - to list all categories
* http://192.168.178.88/1234/8700/8740/8741  - to list parameters 8700, 8740 and 8741 in one request
*/
//#define PASSKEY "1234"

/* activate IP-address-based access. Only the last segment of the client's IP address is matched, as it is assumed that
* requests are made from the same subnet only. So if your trusted client's IP is 192.168.178.20, you have to set
* TRUSTED_IP to 20.
*/
//#define TRUSTED_IP 20
//#define TRUSTED_IP2 30

/* activate HTTP-Auth authentification to provide username/password based access. No encryption!
* Default sets username to "atari" and password to "800xl". Visit a website like
* https://www.base64encode.org/
* to encode your own username/password combination in the format username:password
* and replace the YXRhcmk6ODAweGw= string below accordingly.
*/
#define USER_PASS_B64 "??????????????????"

/* select your heating system (default may work for other systems)
* Set fixed_device_family and fixed_device_variant to your device family and variant (parameters 6225 and 6226) here
* if autodetect does not work or heating system is not running when Arduino is powered on
* You may use other device family numbers to test commands from other heating systems at your own risk
*/
static const int fixed_device_family = 163;
static const int fixed_device_variant = 5;

// Hide unknown parameters from web display (parameters will still be queried!)
//#define HIDE_UNKNOWN

/*
* Define the pin for one wire temperature sensors
*/
//#define ONE_WIRE_BUS 3

// Define the pins for DHT temperature/humidity sensors
//#define DHT_BUS 2,3

// Create 24h averages from these parameters
int avg_parameters[20] = {
//  8700,                   // Außentemperatur
//  8326                    // Brenner-Modulation
};

/* activate logging on SD-card. Requires a FAT32-formatted Micro-SD card inserted into the Ethernet-Shield's card slot */
// #define LOGGER

int log_parameters[20] = {
//  30000,                  // Logging von "rohen" Bus-Datentelegrammen (macht nur als alleiniger Parameter Sinn)
  8700,                   // Außentemperatur
  8830,                   // Warmwassertemperatur
  8740,                   // Raumtemperatur Ist
  8741,                   // Raumtemperatur Soll
//  8743,                   // Vorlauftemperatur
//  8314,                   // Rücklauftemperatur
//  20000,                  // Spezialparameter: Brenner-Laufzeit Stufe 1(/B)
//  20001,                  // Spezialparameter: Brenner-Takte Stufe 1 (/B)
//  20002,                  // Spezialparameter: Brenner-Laufzeit Stufe 2(/B)
//  20003,                  // Spezialparameter: Brenner-Takte Stufe 2 (/B)
//  20004,                  // Spezialparameter: TWW-Laufzeit (/B)
//  20005,                  // Spezialparameter: TWW-Takte (/B)
//  20006,                  // Spezialparameter: 24h-Durchschnittswerte (/A)
//  20101,                  // Spezialparameter 20100-20199: DHT22-Sensoren 1-100 (/T)
//  20200                   // Spezialparameter 20200-20299: DS18B20-Sensoren 1-100 (/T)
};

unsigned long log_interval = 60;    // logging interval in seconds
boolean log_unknown_only = 1;         // should we log only unknown commands when logging bus telegrams?
boolean log_bc_only = 0;              // should we log only broadcast commands (dest = 0x7f) when logging bus telegrams?

// Activate sending log_parameters to MQTT broker every log_interval seconds
#define MQTTBrokerIP 192,168,0,248 // Please use commas insteaf of dots!!!
//#define MQTTUsername "User" // Set username for MQTT broker here or comment out if no username/password is used.
//#define MQTTPassword "Pass" // Set password for MQTT broker here or comment out if no password is used.
//#define MQTTTopicPrefix "BSB-LAN" // Choose the "topic" for MQTT messages here


// Activate IPWE extension (http://xxx.xxx.xxx.xxx/ipwe.cgi)
#define IPWE

// Parameters to be displayed in IPWE extension
const int ipwe_parameters[] = {
  8700,                   // Außentemperatur
  8743,                   // Vorlauftemperatur
  8314,                   // Rücklauftemperatur
  8750,                   // Gebläsedrehzahl
  8830,                   // Warmwassertemperatur
  8740,                   // Raumtemperatur Ist
  8741,                   // Raumtemperatur Soll
  8326,                   // Brenner-Modulation
  8337,                   // Startzähler Brenner
  8703,                   // Aussentemperatur gedämpft
  8704                    // Aussentemperatur gemischt
};

//#define MAX_CUL 192,168,178,5                  // IP of CUNO/CUNX/modified MAX!Cube

const char max_device_list[] PROGMEM = {        // list of MAX! wall/heating thermostats that should be polled
  "KEQ0502326"                                  // use MAX! serial numbers here which have to have exactly 10 characters
  "KEQ0505080"
};

// defines the number of retries for the query command
#define QUERY_RETRIES  3

/* enable /N URL command to reset Arduino - might not work on older boards */
#define RESET

/*
*  Enter a MAC address, found either on the EthernetShield or use the one below.
*/
static byte mac[] = { 0x00, 0x80, 0x41, 0x19, 0x69, 0x90 };

// Setting bus pins and bus type
// Bus bus (RX pin, TX pin, parameter 3, parameter 4)
// Software Serial needs special pins for RX: 10-13, 50-53, 62(A8)-69(A15)
// W5100 ethernet shield uses the following pins: 10, 50-53
// BSB:
// - optional third parameter sets own address, defaults to 0x42 (LAN in serial monitor)
// - use BSB bus(68,69,6) to define device as RGT1
// LPB:
// - optional third and fourth parameter set own and destination address (high nibble = segment, low nibble = device minus 1)
// - defaults to 0x42 for own address and 0x00 for destination address, i.e. segment 4, device 3 for Arduino/BSB-LAN and segment 0, device 1 for heating system
// PPS:
// - optional third parameter set to "1" enables writing to heater - only use this if there is no other room controller (such as QAA50/QAA70) active. Fourth parameter does not have any effect.
BSB bus(68,69); // BSB bus(19,18); // pin 19,18 = USART Serial1
constexpr uint8_t bus_type = 0;  // set bus system at boot: 0 = BSB, 1 = LPB, 2 = PPS
//#define QAA_TYPE  0x53  // 0x53 = QAA70, 0x52 = QAA50

// Protect these pins from accidental GPIO access
constexpr byte exclude_GPIO[] = {0, 1, 4, 10, 11, 12, 13, 18, 19, 20, 21, 22, 23, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69};

// If set to 1, all messages on the bus are printed to the PC
// hardware serial interface
byte verbose = 1;
byte monitor = 0;

// defines default flag for parameters (use "#define DEFAULT_FLAG 0" to make (almost) all parameters writeable)
#define DEFAULT_FLAG FL_RONLY

// include commands from BSB_lan_custom.h to be executed at the end of each main loop
//#define CUSTOM_COMMANDS

// Check for new versions when accessing BSB-LAN's main page
#define VERSION_CHECK 1

//#define DEBUG
//#define DebugTelnet 1   // Uncomment this to send debug messages to telnet client instead of serial port

/************************************************************************************/
/************************************************************************************/
/* Settings -   END                                                                 */
/************************************************************************************/
/************************************************************************************/



@Scherheinz:
Empfängst Du auch die in deiner Config eingestellten Parameter? Oder nur deine Akkuwerte?

Edit: @ Scherheinz: Die Frage ist in deinem Screenshot beantwortet. Hab's gerade entdeckt.

Noch zur Ergänzung: ich hab aktuell Version 0.43 aufgespielt in der Hoffnung, dass es damit geht. Hatte vorher die 0.44 Version. Nachdem es da ja nochmal eine Änderung bei MQTT gegeben hat, dachte ich an einen eventuellen Fehler dort.

Edit2:
Hier noch die Ausgabe vom Seriellen Monitor

20:41:00.392 -> LAN->HEIZ QUR 8700 Diagnose Verbraucher -  Außentemperatur:
20:41:00.439 -> DC C2 00 0B 06 3D 05 05 21 B9 7C
20:41:00.439 -> HEIZ->LAN ANS 8700 Diagnose Verbraucher -  Außentemperatur: 18.0 &deg;C
20:41:00.439 -> DC 80 42 0E 07 05 3D 05 21 00 04 81 F0 30
20:41:00.439 -> #8700: 18.0 &deg;C
20:41:00.627 -> LAN->HEIZ QUR 8830 Diagnose Verbraucher -  Trinkwassertemperatur 1:
20:41:00.674 -> DC C2 00 0B 06 3D 31 05 2F 41 D7
20:41:00.674 -> HEIZ->LAN ANS 8830 Diagnose Verbraucher -  Trinkwassertemperatur 1: 79.7 &deg;C
20:41:00.721 -> DC 80 42 0E 07 31 3D 05 2F 00 13 ED FD EF
20:41:00.721 -> #8830: 79.7 &deg;C
20:41:00.861 -> LAN->HEIZ QUR 8740 Diagnose Verbraucher -  Raumtemperatur 1:
20:41:00.908 -> DC C2 00 0B 06 3D 2D 05 1E 51 A7
20:41:00.908 -> HEIZ->LAN ANS 8740 Diagnose Verbraucher -  Raumtemperatur 1: --- &deg;C
20:41:00.955 -> DC 80 42 0E 07 2D 3D 05 1E 01 0C 80 5B D4
20:41:00.955 -> #8740: --- &deg;C
20:41:01.142 -> LAN->HEIZ QUR 8741 Diagnose Verbraucher -  Raumsollwert 1:
20:41:01.189 -> DC C2 00 0B 06 3D 2D 05 93 11 82
20:41:01.189 -> HEIZ->LAN ANS 8741 Diagnose Verbraucher -  Raumsollwert 1: 21.0 &deg;C
20:41:01.236 -> DC 80 42 0E 07 2D 3D 05 93 00 05 40 EB 8E
20:41:01.236 -> #8741: 21.0 &deg;C


Danke.
Gruß Martin

Scherheinz

Wenn auch nur optional, ich würde mal folgende Sachen zum Test aktivieren:

#define MQTTTopicPrefix "BSB-LAN"
#define MQTTDeviceID "ElcoTest"