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

Ach wie ärgerlich, aber das kenne ich auch nur zu gut...
Bezüglich der Adress-IDs der Dallas-Sensoren habe ich mich hier schon mal versucht, damit Du einen Eindruck bekommst, was ich meine:
#ifdef ONEWIRE_SENSORS
  // output of one wire sensors
  sensors.requestTemperatures();

  DeviceAddress device_address;
  char device_ascii[17];

  for(i=0;i<numSensors;i++){
    float t=sensors.getTempCByIndex(i);

    sensors.getAddress(device_address, i);
    sprintf(device_ascii, "%u", device_address);

    client.print(F("<tr><td>T<br></td><td>"));
//    client.print(sensor_anz+i+1);
    client.print(device_ascii);
    client.print(F("<br></td><td>"));
    client.print(device_ascii);
//    client.print(F("<br></td><td>T"));
//    client.print(sensor_anz+i+1);
    client.print(F("<br></td><td>"));
    client.print(t);
    client.print(F("<br></td><td>0<br></td><td>0<br></td><td>0<br></td></tr>"));
  }
#endif 


Das funktioniert auch soweit, nur bestehen die Adressen normalerweise aus 16 hexadezimalen Ziffern. Wenn ich die Seite aufrufe, bekomme ich aber nur einen vierstelligen Dezimalwert. Was mich an C (als altem Perl-Hasen) immer abgeschreckt hat, ist die Pingeligkeit, mit der Datentypen verwendet werden müssen. Wie nun ein unsigned char in einen korrekten ASCII-Hex-Wert umgewandelt wird, entzieht sich mir dabei leider. Aber vielleicht hast Du ja eine Idee?
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

gero

Probier mal ein:
sprintf(device_ascii, "%016x", device_address);

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

Ich hatte zumindest ein "08x" probiert, bekam da aber auch nur eine vierstellige Hex-Zahl (also einen 16-Bit Wert). Probiere aber Mittwoch dann noch mal die 016x aus...
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

gero

Hallo Frederik,

Für die Funktion lookup_descr(uint16_t line) hätte ich folgenden ungetesteten Vorschlag:


char *lookup_descr(uint16_t line){
  int i=findLine(line,0,NULL);
  strcpy_P(buffer, (char*)pgm_read_word(&(cmdtbl[i].desc)));
  return buffer;
}


Die Funktion findLine exiastiert schon und liefert den Index in der cmdtbl zu der gesuchten Zeile zurück.
Der buffer ist eine globale Vaiable, die zum Umkopieren der im Flash gespeicherten Daten benötigt wird. D.h. man sollte beachten, dass er evtl. durch andere Aufrufe wieder überschrieben wird.

Bei meinen OneWire-Sensoren beobachte ich 2-3 Mal am Tag einen falschen Wert von 85°C. Also den Resetwert der Sensoren. Entweder da stimmt im Timing noch etwas nicht ganz, oder die Spannungsversorgung ist unzureichend. Da werde ich wohl nochmal etwas dran rumbasteln müssen.

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

Prima, danke, werde ich testen! findLine hatte ich auch schon entdeckt, aber mir war nicht ganz klar, wie ich die Werte dann aus cmdtbl extrahiere. Wie gesagt, mit Pointern und Referenzen bin ich etwas auf Kriegsfuß ;)...

Das mit den Temperaturwerten hatte ich in meinem alten Script auch an und an, meiner Erinnerung nach aber nur, wenn ich zu schnell hintereinander abgefragt habe, also evtl. wirklich ein Timingproblem? Auf der anderen Seite hatte ich vier Sensoren aktiv, so dass evtl. auch eine Buskollision möglich gewesen sein 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

freetz

#185
So, habe nun die Beschreibungs-Suchfunktion getestet, funktioniert einwandfrei :) - habe in dem Zuge auch noch mal die IPWE-Funktion etwas entschlackt, man kann die Parameter, die man anzeigen möchte, nun einfach nacheinander in ein Array schreiben, Sketch hängt an.

Kannst Du sonst noch mal schauen, was der IPWE-Aufruf bei Dir für Adressen der Dallas-Sensoren anzeigt? Bei mir kommt da als Adresse meines (einzigen) Sensors die "0000000000002053" - wenn ich mich recht erinnere, war die Adresse aber deutlich "abwechslungsreicher" und bestand nicht nur größtenteils aus Nullen. Wie schaut das bei Dir aus?
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

...sorry, gerade noch mal einen Bug gefixt, aber eine Person hat es schon heruntergeladen, also bitte noch mal aktualisieren...
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

gero

Das war nur ich ;)

Heute kann ich es nicht mehr ausprobieren.
Das Problem mit der Sensoradresse wird am Typ der Variablen liegen:

DallasTemperature.h:typedef uint8_t DeviceAddress[8];

Du stellst zur Zeit den Pointer auf das Array dar.
Hier auf die schnelle eine (unschöne) Lösung:

sprintf(device_ascii, "%02x%02x%02x%02x%02x%02x%02x%02x",device_address[0],device_address[1],device_address[2],device_address[3],device_address[4],device_address[5],device_address[6],device_address[7]);

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

Prima, die "unschöne" Lösung funktoniert zumindest :) - und das mit den Pointern werde ich irgendwann hoffentlich auch noch mal richtig verstehern ;)...
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

miguelito

Hallo,

super Projekt! Bin über die microcontroller.net Seite hierher gekommen - fhem kenne ich ja schon länger.
Hab gerade ein Haus gekauft wo ne Siemens RVP320 Heizungsregelung (LPB) verbaut ist.

Hab jetzt nur kurz drüber gelesen. Aber dafür, dass das Projekt erst seit Jahresbeginn gestartet ist ein toller Fortschritt hier! Bin selber in der Steuerungstech. tätig, zZ wg Nachwuchs / neues Haus leider wenig Zeit privat zu basteln. Deswegen froh hier eigentlich schon ne fertige Lösung von gero vorzufinden. Werde ich so rasch als möglich ans Gerät bringen.

@Gero: Aus Interesse. Hast Du in der Arduino Implementierung ne Kollisionserkennung für die Sendeseite schon berücksichtigt?

LG
Michael

gero

Zitat von: miguelito am 28 April 2015, 08:13:03
Hallo,

super Projekt! Bin über die microcontroller.net Seite hierher gekommen - fhem kenne ich ja schon länger.
Hab gerade ein Haus gekauft wo ne Siemens RVP320 Heizungsregelung (LPB) verbaut ist.

Hab jetzt nur kurz drüber gelesen. Aber dafür, dass das Projekt erst seit Jahresbeginn gestartet ist ein toller Fortschritt hier! Bin selber in der Steuerungstech. tätig, zZ wg Nachwuchs / neues Haus leider wenig Zeit privat zu basteln. Deswegen froh hier eigentlich schon ne fertige Lösung von gero vorzufinden. Werde ich so rasch als möglich ans Gerät bringen.

@Gero: Aus Interesse. Hast Du in der Arduino Implementierung ne Kollisionserkennung für die Sendeseite schon berücksichtigt?

LG
Michael
Hallo miguelito,

die Kollisionserkennung beim Senden ist implementiert. Die Basis der Implementierung stammt aus dem microcontroller.net Thread. Dort haben einige kluge Köpfe schon eine gute Vorarbeit geleistet. Ich will mich nicht mit fremden Federn schmücken.
Noch ein wichtiger Hinweis:
Die Implementierung unterstützt nur die BSB-Anbindung. Das LPB-Protokoll scheint ziemlich stark abzuweichen. Bevor du dir also zuviel Arbeit machst, kontrollier bitte, ob deine Heizung auch über einen BSB-Anschluß verfügt.

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

miguelito

Hallo Gero,

super, danke nochmal für Deine tolle Arbeit in diesem Kontext.

Ups, habe ich mißverstanden. Dachte das LPB Protokoll wäre schon teilweise drinnen.

Muss mal schauen. Laut Installanleitung sind (explizit) nur Klemmen für LPB (DB/MB) vorhanden. Die Frage ist, ob der Bus, wo die Raumgeräte (A6) dran hängen BSB ist?

LG
Michael

miguelito

Also, wenn ich es aus kurzer Googlei richtig interpretiere sollte der Bus, wo die Raumgeräte dran hängen, der BSB sein. D.h. ich werde mich da mal dazu hängen dann sehen wir ja.

Michael

miguelito

Ok, die III.

Ihr hattet das Thema ja schon mal ganz am Anfang..
Die Raumgeräteschnitte bei Siemens heißt "PPS" (Punkt zu Punkt Schnittstelle).

Laut Aussagen hier am Anfang des Threads hat die nix mit dem BSB zu tun..

Also doch keine Lösung aus der Dose :( Na vielleicht werd' ich mich noch zum LPB Experten mauern wenn Zeit ist..

Werd' trotzdem mal Lauschen an der PPS.

Peppi

@miguelito

Das würde mich auch freuen... Ich habe hier auch LPB und werde aus den Datentelegrammen nicht wirklich schlau... :(

LG
Peppi