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

numsi

Nur mal so zur Info, habe mir mal das WebInterfaceDinges von Brötje angesehen, also die PDF und was soll ich sagen, da gibbet eine Klemme, da kann man BSB anschließen oder LPB durch schleifen.
Also an dem selben Anschluss. DAS hätte ich nicht gedacht, LPB und BSB sind identisch in der Hardware.
Hab da mal die passende Seite extrahiert und angehängt.
Psst!
Brötchen=379Ahex, BigS=3092hex

gero

Hi,

anbei die neue Version.

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

Schotty

Zitat von: numsi am 21 April 2016, 23:36:16
[...] DAS hätte ich nicht gedacht, LPB und BSB sind identisch in der Hardware. [...]
Das war aber auch schon im Mikrocontroller-Post zu lesen, sogar recht weit am Anfang. Wenn ich mich recht erinnere, isses letztlich der BSB geworden, weil Sascha da einfach mal einen UART-Konv. angeschlossen und ein paar Telegramme gepostet/decodiert hat; die Protokolle auf dem LPB sind wohl anders.
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: gero am 22 April 2016, 08:14:45
Hi,

anbei die neue Version.

Gruß,
Gero
Läuft wie erwartet einwandfrei wie gehabt für Brötje SOB. Mangels EWM B/W für Solar kann ich die neuen Features leider noch nicht testen, aber ich hoffe, irgendwann auch nochmal in den Genuß zu kommen.. ;)
Gruß
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

the_muggle

Zitat von: gero am 22 April 2016, 08:14:45
Hi,

anbei die neue Version.

Gruß,
Gero

Freut mich, das alles gepasst hat :)

numsi

Zitat von: Schotty am 22 April 2016, 08:56:02
Das war aber auch schon im Mikrocontroller-Post zu lesen, sogar recht weit am Anfang. Wenn ich mich recht erinnere, isses letztlich der BSB geworden, weil Sascha da einfach mal einen UART-Konv. angeschlossen und ein paar Telegramme gepostet/decodiert hat; die Protokolle auf dem LPB sind wohl anders.

Hm, dann ist das an mir vorbeigegangen, danke.
Psst!
Brötchen=379Ahex, BigS=3092hex

miwi

Zitat von: babajun am 21 April 2016, 09:37:27
Hallo Gero,
stimmt natürlich! Danke für den Hinweis. Invertiert habe ich einfach indem ich einen Transistor vorgeschaltet habe (Emitterschaltung); anscheinend läuft da was schief. Aus 8E wird E2? Hm...   8E inv wäre 71.
Ich werde am Wochende mal ein "richtiges" Interface basteln.
Grüße Gerhard
Vielleicht ist dieses kleine Stück Python Code negate.py nützlich:

#!/usr/bin/env python

# Program to negate an input and calculate a CRC-16 from user input.
# The user is expected to supply a hex representation of bytes.
# The bytes can but do not have to be separated by space(s). All
# white space is removed before the hex data are submitted to the
# CRC calculation.

# Uses code snippets from
# http://code.activestate.com/recipes/510399-byte-to-hex-and-hex-to-byte-string-conversion/

import sys


# table for calculating CRC
# this particular table was generated using pycrc v0.7.6, http://www.tty1.net/pycrc/
# using the configuration:
#  *    Width        = 16
#  *    Poly         = 0x1021
#  *    XorIn        = 0x0000
#  *    ReflectIn    = False
#  *    XorOut       = 0x0000
#  *    ReflectOut   = False
#  *    Algorithm    = table-driven
# by following command:
#   python pycrc.py --model xmodem --algorithm table-driven --generate c
CRC16_XMODEM_TABLE = [
        0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
        0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
        0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
        0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
        0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
        0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
        0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
        0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
        0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
        0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
        0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
        0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
        0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
        0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
        0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
        0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
        0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
        0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
        0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
        0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
        0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
        0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
        0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
        0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
        0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
        0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
        0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
        0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
        0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
        0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
        0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
        0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0,
        ]


def _crc16(data, crc, table):
    """Calculate CRC16 using the given table.
    `data`      - data for calculating CRC, must be a string
    `crc`       - initial value
    `table`     - table for caclulating CRC (list of 256 integers)
    Return calculated value of CRC
    """
    for byte in data:
        crc = ((crc<<8)&0xff00) ^ table[((crc>>8)&0xff)^ord(byte)]
    return crc & 0xffff


def crc16xmodem(data, crc=0):
    """Calculate CRC-CCITT (XModem) variant of CRC16.
    `data`      - data for calculating CRC, must be a string
    `crc`       - initial value
    Return calculated value of CRC
    """
    return _crc16(data, crc, CRC16_XMODEM_TABLE)
 
def HexToByte( hexStr ):
    """
    Convert a string of hex byte values into a byte string. The Hex Byte values may
    or may not be space separated.
    """
    # The list comprehension implementation is fractionally slower in this case   
    #
    #    hexStr = ''.join( hexStr.split(" ") )
    #    return ''.join( ["%c" % chr( int ( hexStr[i:i+2],16 ) ) \
    #                                   for i in range(0, len( hexStr ), 2) ] )

    bytes = []

    hexStr = ''.join( hexStr.split(" ") )

    for i in range(0, len(hexStr), 2):
        bytes.append( chr( int (hexStr[i:i+2], 16 ) ^ 255 ) )

    return ''.join( bytes )

 
def ByteToHex( byteStr ):
    """
    Convert a byte string to it's hex string representation e.g. for output.
    """
   
    # Uses list comprehension which is a fractionally faster implementation than
    # the alternative, more readable, implementation below
    #   
    #    hex = []
    #    for aChar in byteStr:
    #        hex.append( "%02X " % ord( aChar ) )
    #
    #    return ''.join( hex ).strip()       

    return ''.join( [ "%02X " % ord( x ) for x in byteStr ] ).strip()
 
 
 
# Here we do the work
def main(argv):
 
  if len(sys.argv) < 2:
    data = ''
    print "I want a hex string as input! Remember to surround it with"
    print "double quotes if it contains white space."
    exit()
  else:
    # Simply get the second command line parameter as an input.
    data = sys.argv[1]

  print "Input is: '%s'." % data
  crc = crc16xmodem(HexToByte(data))
  print " CRC is 0x%0.4X\n" % crc
 
  neg = HexToByte(data)
  print "Negated:  '%s'" % ByteToHex(neg)
  print " CRC is 0x%0.4X\n" % crc16xmodem(neg)
 
# Call the main program to do the work
if __name__ == "__main__":
  main(sys.argv[1:])


Wer will, kann den Teil, der den CRC berechnet, rauswerfen.

stan23

#442
Hi,
ich habe seit gestern Geros v15 im Einsatz und bin hellauf begeistert. Vielen Dank für diese Leistung!  ;D
Meine Anlage ist eine Broetje WGB15E (Brennwertgaskessel) mit Solarunterstützung (intern ISR/LMS14 und 1x EWM-B) aber ohne Raumgerät.

Das Interface habe ich auf Lochstreifen nachgebaut und an den FB (Fernbedienungsanschluss) geklemmt.
Ein bisschen verwirrt hat mich dass im Schaltplan Vin genannt wird, es aber an +5V und nicht an Vin (+9V) des Arduino angeschlossen wird :)

Ein paar Kleinigkeiten sind mir aufgefallen:
Hier hat sich eine falsche Nummer eingeschlichen, liegt das am Sketch oder an der Antwort des ISR auf die 8750?
Zitat
HEIZ->RGT1 ANS 8743 Diagnose Verbraucher -  Vorlauftemperatur 1: 33.0 &deg;C
HEIZ->RGT1 ANS 8744 Diagnose Verbraucher -  Vorlaufsollwert 1: --- &deg;C
HEIZ->RGT1 ANS 7708 Ein-/Ausgangstest -  Modulationssignal QX3: 0 %
HEIZ->RGT1 ANS 8760 Diagnose Verbraucher -  Heizkreispumpe 2: ---
HEIZ->RGT1 ANS 8761 Diagnose Verbraucher -  Heizkreismischer 2 Auf: ---

BROETJE_SOB ist nicht gesetzt.


Außerdem deckt sich die Liste der Nummern nicht ganz mit meinem Handbuch.
Einige sind nicht im Handbuch erwähnt, der ISR antwortet aber trotzdem :) Andere sind im Handbuch, aber nicht im Sketch und werden deshalb nicht abgefragt.

Was wäre die beste Vorgehensweise um diese hinzuzufügen?
Die Werte vom Display alle abfragen und auf der seriellen Schnittstelle mitschneiden? Die Enums aus dem Handbuch kopieren?

Viele Grüße

EDIT:
Ah, die Kommandobytes lassen sich nicht aus der Prog-Nr. errechnen. Und die Zeilen mit CMD_UNKNOWN lassen sich dadurch natürlich nicht abfragen...

gero

Hallo stan23!

Zitat von: stan23 am 24 Juli 2016, 16:55:46
Hi,
ich habe seit gestern Geros v15 im Einsatz und bin hellauf begeistert. Vielen Dank für diese Leistung!  ;D
Meine Anlage ist eine Broetje WGB15E (Brennwertgaskessel) mit Solarunterstützung (intern ISR/LMS14 und 1x EWM-B) aber ohne Raumgerät.

Das Interface habe ich auf Lochstreifen nachgebaut und an den FB (Fernbedienungsanschluss) geklemmt.
Ein bisschen verwirrt hat mich dass im Schaltplan Vin genannt wird, es aber an +5V und nicht an Vin (+9V) des Arduino angeschlossen wird :)
Schön, dass das Interface bei dir läuft. Ich werde den Hinweis mit den 5V in den Schaltplan übernehmen.

Zitat von: stan23 am 24 Juli 2016, 16:55:46
Ein paar Kleinigkeiten sind mir aufgefallen:
Hier hat sich eine falsche Nummer eingeschlichen, liegt das am Sketch oder an der Antwort des ISR auf die 8750?
BROETJE_SOB ist nicht gesetzt.
Was meinst du mit falscher Nummer genau?

Zitat von: stan23 am 24 Juli 2016, 16:55:46
Außerdem deckt sich die Liste der Nummern nicht ganz mit meinem Handbuch.
Einige sind nicht im Handbuch erwähnt, der ISR antwortet aber trotzdem :) Andere sind im Handbuch, aber nicht im Sketch und werden deshalb nicht abgefragt.

Was wäre die beste Vorgehensweise um diese hinzuzufügen?
Die Werte vom Display alle abfragen und auf der seriellen Schnittstelle mitschneiden? Die Enums aus dem Handbuch kopieren?
Das ist die korrekte Vorgehensweise. Sind die Enums in deinem Handbuch mit Werten aufgeführt? Ansonsten müsste man auch noch alle Enums an der Anlage testen.

Ich habe vor einigen Wochen von einem sehr engagierten Benutzer des Adapters eine erweiterte Version des Sketches bekommen. Er hat einige neue Kommandos teils aus eigenen Tests und teils aus anderen Quellen hinzugefügt. Bei Hinzufügen der neuen Kommandos ist mir aufgefallen, dass es leider einige Duplikate bei den Kommando IDs gibt. Ich bin mir noch nicht sicher, wie ich dieses Problem löse.  Ich arbeite noch dran.

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

gero

Hallo,

ich habe mich jetzt entschlossen, die neue Version als Testversion hier zu veröffentlichen.
Es sind einige neue Kommandos hinzugekommen und es gibt einige kleine Bugfixes.
Im Sourcecode findet ihr einige FIXME und TODO Kommentare:
- es gibt noch ein paar doppelte Kommandos IDs
- für einige ENUMs sind die Werte unbekannt. (Ich habe bei solchen ENUMS ein Fragezeichen vorangestellt)

Zu vielen neuen Kommando IDs fehlen noch die Typen.
Ich hoffe, dass keine Funktionalität verlorengegangen und der Sketch abwärtskompatibel geblieben ist.

Ich denke der neue Sketch ist eine gute Ausgangslage für Erweiterungen, aber er ist nicht ausreichend getestet. Daher bezeichne ich ihn als Testversion.

Vielen Dank nochmal an den Autor der Änderungen! (Ich bin mir nicht sicher, ob er hier im Forum überhaupt angemeldet ist oder namentlich genannt werden will).


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

stan23

Hi Gero,

Zitat von: gero am 25 Juli 2016, 07:52:36
Was meinst du mit falscher Nummer genau?
Ich meine die Zeilennummer bzw Prog-Nr (so nennt sie Broetje anscheinend).
HEIZ->RGT1 ANS 7708 Ein-/Ausgangstest -  Modulationssignal QX3: 0 %
Ich vermute das liegt daran dass das Kommando für 8750 falsch ist und in Wirklichkeit für 7708 gilt.

Zitat von: gero am 25 Juli 2016, 07:52:36
Das ist die korrekte Vorgehensweise. Sind die Enums in deinem Handbuch mit Werten aufgeführt? Ansonsten müsste man auch noch alle Enums an der Anlage testen.
Ja sie sind aufgeführt, aber nicht mit konkreter Zuweisung. Das könnte etwas zeitintensiv werden da alle durchzutesten.
Ich habe das Handbuch auch als PDF, also muss ich zumindest nichts abtippen :)
Es gibt eh alle Broetje PDFs zum Runterladen.

Die 15a werde ich die Tage mal flashen...

justme1968

habt ihr alle auf lochraster aufgebaut oder hat zufällig auch jemand eine platine dafür gemacht (und übrig :) )?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

gero

Zitat von: justme1968 am 25 Juli 2016, 14:33:35
habt ihr alle auf lochraster aufgebaut oder hat zufällig auch jemand eine platine dafür gemacht (und übrig :) )?

gruss
  andre
Soweit ich weiß, haben bisher alle auf Lochraster aufgebaut.
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


EinEinfach

Zitathabt ihr alle auf lochraster aufgebaut oder hat zufällig auch jemand eine platine dafür gemacht (und übrig :) )?

Kann man evtl. was damit anfangen?
http://www.grundwerk.info/static/files/datasheets/bsb-interface.pdf
fhem auf Intel NUC6CAYH mit Proxmox im LXC (Debian 10), KNX mit knxd über MDT SCN-IP000.02, Buderus GB192-15i über KM100, Solaredge WR SE9K über Modbus-TCP