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

freetz

Ja, der Due hatte da Probleme, aber die hatte ich eigentlich gedacht behoben zu haben. So oder so sollte es keine Probleme geben, wenn das free() nach dem connect() auftritt. Trennung von Port und Host kann ich überlegen, wenn eh' wieder ein breaking change bzgl. EEPROM ansteht. Ansonsten müssen ohne weiteren Grund wieder alle User ihre Konfiguration neu aufsetzen, das versuche ich nach Möglichkeit zu vermeiden.

Ich kann immer noch nicht ganz glauben, dass das wirklich der Grund für das Problem ist, weil in 4.2.1 das free() deutlich früher im Code vorkommt, insofern die möglichen zerstörerischen Einflüsse eigentlich größer als jetzt sein müssten. Aber wie gesagt, wir werden es sehen...
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

carbonara

juhu, dass hat geholfen!

ich packe die Ausgabe vom Compilieren (Warnings) mal mit dran,
evtl wichtig für Euch.

Danke sehr bis hier hin.

Ist der Issue jetzt noch notwendig?
(my english is not the yellow from the egg)
Heizung: MHG ProCon E25, BSB-LAN: Arduino DUE , Volkszähler, Home Assistant

thetaphi

#7082
Hi,
ich habe einen total simplen fix. Man sollte generell malloc/free nicht unbedingt zu häufig in der embedded world benutzen, vor allem nicht wenn die Größe eh statisch ist und zur Kompilationszeit schon feststeht..

Der Fix ist relativ einfach: der derzeitige Code allokiert einen exakt gleich großen Buffer wie das Config-Feld mit host:port. Die größe ist statisch und zur Kompilationszeit bekannt. Daher: Statt dessen einfach als lokale Variable auf dem Stack, wie an den anderen Stellen im selben Code weiter unten für den Topic usw. Das free kommt dann weg. Dadurch verschwindet das nach exit aus der Funktion vom Stack.

Das hat zwar immer noch den Nachteil, dass nach der Connection und return aus der Funktion immer noch ein "toter Pointer" in der PubSubClient Instanz stehen bleibt, aber das stört nicht, solange man nicht neu connecten will. Da das nur hier geschieht können wir sicher sein, dass das Feld vor dem Connect immer gesetzt ist.

BSB_LAN/include/mqtt_handler.h | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/BSB_LAN/include/mqtt_handler.h b/BSB_LAN/include/mqtt_handler.h
index 60c8d211..01247c48 100644
--- a/BSB_LAN/include/mqtt_handler.h
+++ b/BSB_LAN/include/mqtt_handler.h
@@ -202,7 +202,7 @@ bool mqtt_connect() {
      return false;
    }
 
-    char* tempstr = (char*)malloc(sizeof(mqtt_broker_addr));  // make a copy of mqtt_broker_addr for destructive strtok operation
+    char tempstr[sizeof(mqtt_broker_addr)];  // make a copy of mqtt_broker_addr for destructive strtok operation
    strcpy(tempstr, mqtt_broker_addr);
    uint16_t mqtt_port = 1883;
    char* mqtt_host = strtok(tempstr,":");  // hostname is before an optional colon that separates the port
@@ -210,7 +210,6 @@ bool mqtt_connect() {
    if (token != 0) {
      mqtt_port = atoi(token);
    }
-    free(tempstr);
 
    char* MQTTUser = NULL;
    if(MQTTUsername[0]) {

Das funktioniert problemlos mit ESP32 hier.

thetaphi

Zitat von: carbonara am 25 Januar 2025, 13:01:33Ist der Issue jetzt noch notwendig?
(my english is not the yellow from the egg)

Ich mache jetzt einen Pull Request, da ist der Issue quasi schon mit drinnen. Ich verweise auf den Text hier. Es wäre noch ganz gut wenn du das mal oben in dem DIFF auch mal nachstellen kannst (- => Zeile muss weg, + => Zeile dazu). Kurzum oben das char* tempst ändern und das free ganz weg.

thetaphi

Hier ist der Fix als Pull Request. Ich habe alles wichtige inkl der Analyse hinzugefügt: https://github.com/fredlcore/BSB-LAN/pull/717

Bei mir läuft das.

carbonara

Änderung wie gewünscht gemacht,
und es funtz auch so!
;D
Heizung: MHG ProCon E25, BSB-LAN: Arduino DUE , Volkszähler, Home Assistant

thetaphi

Perfekt. Dann sollte der PR das Problem elegant lösen.

carbonara

Grüße gehen aus Oldenburg raus Richtung hintern Deich
Heizung: MHG ProCon E25, BSB-LAN: Arduino DUE , Volkszähler, Home Assistant

freetz

Prima, danke, PR ist gemerged und sollte nun so laufen.
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

thetaphi

Zitat von: carbonara am 25 Januar 2025, 13:51:42Grüße gehen aus Oldenburg raus Richtung hintern Deich

Gruß aus Bremen achtern diek.

carbonara

Hallo Frederik,
hier noch eine kleine Anmerkung:
Erst Deine letzte Änderung hat nun die neue MQTT-Nachrichten-Struktur (/status) bei mir aktiv werden lassen.
Durch den "Fehler" hatte ich quasi gar nicht mitbekommen, das ich das noch in meinem Home Assistant abändern muß, da die Nachrichten
noch wie zuvor (Vers. 4.1.xx) gesendet wurden, obwohl ich ja schon die 4.2.1 verwendet hatte.

Danke jedenfalls für Deine promte Reaktion!
Heizung: MHG ProCon E25, BSB-LAN: Arduino DUE , Volkszähler, Home Assistant

mimk97

Hat mal jemand ein Zeitprogramm komplett deaktiviert für einen Tag?

carbonara

Hallo, ich bin etwas verwirrt über die Beschriftung einiger Parameter.
zB:
1498 Heizkreis 3 - Betriebsniveauumschaltung Heizkreis 1: 1 - Reduziert

müßte es nicht richtigerweise heißen:
1498 Heizkreis 3 - Betriebsniveauumschaltung Heizkreis 3: 1 - Reduziert
?
LG
Heizung: MHG ProCon E25, BSB-LAN: Arduino DUE , Volkszähler, Home Assistant

freetz

Die Texte kommen quasi aus der Heizung, bzw. dann aus dem "Katalog" des Raumgeräts. Vielleicht kann es da auch zu Fehlern bei irgendeiner Zuordnung kommen, aber da kann ich in meinem Umwandlungsprozess nichts dran drehen. Du kannst das aber natürlich in Deiner _defs.h so ändern, wie Du magst, diese bleibt ja auf Dauer so, wie sie ist.
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

thetaphi

#7094
Hi,

Zitat von: mimk97 am 27 Januar 2025, 09:09:51Hat mal jemand ein Zeitprogramm komplett deaktiviert für einen Tag?

Eigentlich solltest du in BSB-LAN im Zeitprogramm für den Tag alle Uhrzeiten durch Lattenkreuze ersetzen können.

Aus zum Beispiel "06:30-22:30 ##:##-##:## ##:##-##:##" mache "##:##-##:## ##:##-##:## ##:##-##:##".

Habe es nicht getestet, aber so sollte es gehen.