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

DerFrischling

Hallo,


ich habe ein Problem, dass der Webserver (bzw des Ethernet Shield) zuverlässig immer nach dem 1. Loggingintervall abstürzt bzw. Arduino und Ethernet Shield resettet.


========Details ==============
HW:
- BSB-LAN 0.42
- Sunfounder MEGA 2560 R3
- AZ Delivery (Amazon) W5100 Ethernet Shield mit SD
- Platine bestückt wie in Anleitung beschrieben
- microSD 2GB FAT32 formatiert


Was funktioniert:
- Ich kann beliebige Werte aus meiner Brötje mit ISR plus auslesen :)
- SStarting SD ..ok; Kopfzeile wurde auch auf SD geschrieben. Darüber hinaus aber keine weiteren Messwerte.


Versuch 1: Nach Boot Webserver erreichbar bis nach dem definiertem LogIntervall (30sek, 300sek, 3600sek spielt keine Rolle) auf die microSD geschrieben werden soll, dann Freeze. Pingbar, Webserver ging nicht mehr. Wenn ich Logging über /L=0,0 abschaltet läuft das Ganze endlos ohne Probleme weiter.
-> Gelesen vom 511er-Bug f. Ethernet-Shield clones  :o -> 2x 100 Ohm PINs 1/2 bzw 3/6 eingelötet, hoffte aus Besserung. Sieht jetzt aus wie hier: http://i.imgur.com/iYKaItu.png


Heute Versuch 2: mit 2x 100 Ohm eingelötet: Kein Freeze, aber reset von Arduino (bzw. Shield + Arduino). Beispiel LogIntervall = 30sek:

23:05:47.701 -> Waiting 3 seconds to give Ethernet shield time to get ready...
23:05:51.697 -> Device family: 90
23:05:51.697 -> Device variant: 239
23:06:18.130 -> My X⸮⸮⸮⸮⸮ 9
23:06:18.130 -> Destination address: 0
23:06:18.130 -> READY
23:06:18.130 -> Size of cmdtbl1: 16847
23:06:18.130 -> Size of cmdtbl2: 29019
23:06:18.130 -> free RAM:4773
23:06:18.130 -> 192.168.3.234
23:06:18.130 -> Starting SD..ok
23:06:18.734 -> Waiting 3 seconds to give Ethernet shield time to get ready...
23:06:22.730 -> Device family: 90
23:06:22.730 -> Device variant: 239
23:06:49.164 -> My⸮X⸮⸮⸮⸮⸮ 9
23:06:49.164 -> Destination address: 0
23:06:49.164 -> READY
23:06:49.164 -> Size of cmdtbl1: 16847
23:06:49.164 -> Size of cmdtbl2: 29019
23:06:49.164 -> free RAM:4773
23:06:49.164 -> 192.168.3.234
23:06:49.164 -> Starting SD..ok
23:06:49.768 -> Waiting 3 seconds to give Ethernet shield time to get ready...
23:06:53.763 -> Device family: 90
23:06:53.763 -> Device variant: 239
23:07:20.196 -> My⸮X⸮⸮⸮⸮⸮ 9
23:07:20.196 -> Destination address: 0
23:07:20.196 -> READY
23:07:20.196 -> Size of cmdtbl1: 16847
23:07:20.196 -> Size of cmdtbl2: 29019
23:07:20.196 -> free RAM:4773
23:07:20.196 -> 192.168.3.234
23:07:20.196 -> Starting SD..ok
23:07:20.800 -> Waiting 3 seconds to give Ethernet shield time to get ready...
23:07:24.796 -> Device family: 90
23:07:24.796 -> Device variant: 239
23:07:51.230 -> My⸮X⸮⸮⸮⸮⸮ 9
23:07:51.230 -> Destination address: 0
23:07:51.230 -> READY
23:07:51.230 -> Size of cmdtbl1: 16847
23:07:51.230 -> Size of cmdtbl2: 29019
23:07:51.230 -> free RAM:4773
23:07:51.230 -> 192.168.3.234
23:07:51.230 -> Starting SD..ok
23:07:51.833 -> Waiting 3 seconds to give Ethernet shield time to get ready...
23:07:55.829 -> Device family: 90
23:07:55.829 -> Device variant: 239




Wo könnte der Fehler liegen? (Vielen Dank vorab!)


freetz

Erst einmal danke für die ausführliche Fehlermeldung und dass Du vorher schon im Thread recherchiert und ausprobiert hast, das kommt nicht so häufig vor ;)...
Kannst Du einmal die datalog.txt auf der SD-Karte am Rechner bearbeiten und abspeichern und dann schauen, ob Du sie mit /D angezeigt bekommst? Wenn ja, kannst Du sie dann mit /D0 löschen und schauen, dass sie dann mit dem Header neu angelegt wird? Wenn das alles reibungslos klappt, dann würde es mich wundern, warum der Absturz dann gerade beim Loggen eines Datenwertes passiert, aber da müsste ich dann noch mal genauer schaue, bzw. Debug-Meldungen einbauen...
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

DerFrischling

Direkt ausprobiert: Kann gelesen werden, kann zurückgesetzt werden:

1. Editieren am PC

2. /D

Milliseconds;Date;Parameter;Description;Value;Unit
123;20190606;DummyParam;YetAnotherDescription;42;Dunno


3. /D0  meldet erfolgreich 'Datei datalog.txt entfernt und neu generiert.'

4. nochmals /D:

Milliseconds;Date;Parameter;Description;Value;Unit



Ich mutmaße, dass das Problem bereits vor dem Versuch des Loggens auf die CD-Karte passiert?

freetz

Ok, das schließt schon mal einen Hardwarefehler weitestgehend aus...
Nimm mal bitte die aktuelle GitHub-Version (also nicht die letzte offizielle Release) und füge die folgenden Zeilen nach den genannten Zeilennummern ein:
6152
Serial.println("Start logging...");
6155
Serial.println("File opened...");
6158
Serial.println("Writing line...");
6166
Serial.println("Writing data...");

und schau' mal im SerMo, bis wohin er kommt...
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

DerFrischling

Serial Monitor:
...
[b]11:03:48.207 -> Start logging...
11:03:48.207 -> File opened...
11:03:48.207 -> Writing line...[/b]
11:03:49.380 -> My⸮X⸮⸮⸮⸮⸮ 9
11:03:49.380 -> Destination address: 0
11:03:49.380 -> READY
11:03:49.427 -> Size of cmdtbl1: 16881
11:03:49.427 -> Size of cmdtbl2: 29512
11:03:49.427 -> free RAM:4709
11:03:49.427 -> Starting SD..ok
11:03:49.989 -> 192.168.3.234
11:03:49.989 -> Waiting 3 seconds to give Ethernet shield time to get ready...
...



Und hier die println zum Abgleich:


#ifdef LOGGER

  if (((millis() - lastLogTime >= (log_interval * 1000)) && log_interval > 0) || log_now > 0) {
//    SetDateTime(); // receive inital date/time from heating system
Serial.println("Start logging...");
    log_now = 0;
    File dataFile = SD.open("datalog.txt", FILE_WRITE);
Serial.println("File opened...");
    if (dataFile) {
      for (int i=0; i < numLogValues; i++) {
        if (log_parameters[i] > 0 && (log_parameters[i] < 20006 || log_parameters[i] > 20009) && log_parameters[i] != 30000) {
          Serial.println("Writing line...");
          dataFile.print(millis());
          dataFile.print(F(";"));
          dataFile.print(GetDateTime(date)); // get current time from heating system
          dataFile.print(F(";"));
          dataFile.print(log_parameters[i]);
          dataFile.print(F(";"));
        }
        if (log_parameters[i] > 0 && log_parameters[i] < 20000) {
          Serial.println("Writing data...");
          dataFile.print(lookup_descr(log_parameters[i]));
          dataFile.print(F(";"));
          dataFile.print(strtok(query(log_parameters[i],log_parameters[i],1)," "));
          dataFile.print(F(";"));
          uint32_t c=0;
          int line=findLine(log_parameters[i],0,&c);
          int k=0;
          uint8_t type=get_cmdtbl_type(line);
          uint8_t div_unit_len=0;
          uint8_t div_type=0;



freetz

Ok, danke, wo kommt denn das /b her?
Versuche jetzt einmal die Zeile
Serial.println("Writing line...");
immer eine Zeile weiter nach unten zu setzen, bis sie nicht mehr erscheint. Dann wissen wir, wo der Arduino aussteigt...
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

DerFrischling

@freetz: Sorry, das /b war nur als BB-Code gedacht ums hier im Text in der Formatierung hervorzuheben... 

Ich konnte den Fehler eingrenzen auf diese Funktion in Zeile 6161 (oder 6162). Wenn ich diese auskommentiere wird einwandfrei auf die microSD geschrieben und Neustarts gibt es auch keine mehr.


          dataFile.print(GetDateTime(date)); // get current time from heating system




Ist dafür eine Patenlösung bekannt?

freetz

Seltsam, das dürfte kein Problem sein, bzw. war das noch nie eins. Was gibt denn die Abfrage von Parameter 0 bei Dir zurück?
Lass Dir ansonsten mal in der Zeile vor dem Befehl die Variablen date, month() bzw. day() ausgeben. Wenn da falsche oder nicht "lesbare" Werte zurück kommen, dann stimmt irgendwas mit der Uhrzeiterkennung nicht bei Dir. Welchen Bus setzt Du ein, BSB oder LPB?
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

DerFrischling

Die Ursache konnte ich wie folgt eingrenzen und für mich beheben. Zeile 2423:


char *GetDateTime(char date[]){
  sprintf(date,"%02d.%02d.%d %02d:%02d:%02d",day(),month(),year(),hour(),minute(),second());
//  date[20] = 0;    //Auskommentiert, da bei mir Fehlerquelle 20190607
  return date;
}


Ich bekomme nun Tag und Uhrzeit zurück, schreibe dies auf die SD-Karte. Alles läuft jetzt seit Stunden absolut stabil und problemlos.  :D
(Ich setze den BSB-Bus ein. Date hatte keinen Wert, month und day konnte ich nicht ausgeben)

freetz

Grr... Stimmt, es muss
date[19] = 0;
heißen, damit der String sicher null-terminiert ist. Kannst Du das damit noch mal testen?
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

DerFrischling

Natürlich!   date[19] = 0;  funktioniert!           (Warum ist der einzige zu sein scheine der damit ein Problem hatte kann ich mir nicht erklären)


P.S.: Ich hatte zu Beginn schon die version 0.43; in der BSB_LAN.ino in Zeile1 ist bei der master und der 0.42 jeweils die vorheriger Versionsnummer eingetragen, d.h.

char version[] = "0.42";  @ https://github.com/fredlcore/bsb_lan/blob/master/BSB_lan.ino
char version[] = "0.41";  @ https://github.com/fredlcore/bsb_lan/blob/v0.42/BSB_lan.ino


Großes DANKE!


Meine nächste Baustelle soll nun MQTT sein. MQTT broker läuft und arbeitet zum Test mit Handys super zusammen. Nur BSB-LAN meldet sich nicht beim Broker mit messages; da muss ich mich erst einlesen was es überhaupt zu tun gilt. Im Changelog steht was es zu tun gilt; klar ist es mir aber noch nicht.

freetz

Buffer Overflows können in Projekten wie diesen unbemerkt bleiben, weil es ja verschiedene Compile Optionen gibt und somit das Speicher-Layout immer etwas anders sein kann. Und nicht immer führt ein überschriebener Speicherbereich zu einem Absturz. Insofern gut, dass es bei Dir jetzt aufgefallen ist, denn gut ist sowas natürlich nicht.

Die Versionsnummern im Master beziehen sich auf die letzte Rekease-Version, nur bei der 0.42 hatte ich vergessen, das zu ändern.
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

Wegen MQTTc musst Du eigentlich nur in der _config.h die IP und ggf. Zugangsdaten angeben und dann die gewünschten Parameter, die an den Broker gehen so sollen unter log_parameters setzen und das Log Intervall z.B. auf 300 setzen, dann wird alle fünf Minuten der Broker kontaktiert.
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

r.fraefel@gmail.com

Guten Abend
Ich suche noch eine Platine für den BSB-LPB-PPS-LAN.
Wenn möglich bereits bestückt.
Wer kann mir da weiterhelfen?
Vielen dank und freundlichen Grüsse
Robert

freetz

Auf der Projektseite (siehe meine Signatur) findest Du meine E-Mail Adresse...
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