Ceci est une ancienne révision du document !
Table des matières
Interface chauffage - Local Process Bus LPB
Introduction
Mon objectif est de récupérer des données et de piloter ma chaudière de la marque Weishaupt. Cette chaudière communique avec mon thermostat via un bus numérique qui a été développé par SIEMENS. Local Process Bus LPB Je n'ai pas trouvé de document complet sur le protocole mais quelques informations par ci par là. Je vais essayer de regrouper toutes les informations dont je dispose et qui m'ont été utile ci dessous.
ND : Le bus LPB est proche du bus BSB et eBus. L'interface hardware et le format est trame est en partie équivalent. Certains des informations ci dessous peuvent dont être utilisées pour ces bus.
Hardware
Liaison série sur 2 fils (Data et 0V) Nivaux signaux :
- < 7V : '1' logic (Sortie interface : 0V)
- > 9V : '0' logic (Sortie interface : +5V)
Un simple comparateur est utilisé pour convertir le signal en 0/3V compatible avec un convertisseur UART/USB du type FTDI
Schema interface de lecture
NB : Le même schéma peut être utilisé pour un eBus avec R2 = 6.8K les seuils étant différents :
- 9-12V : '0' logic (Sortie interface : 0V)
- 15-24V : '1' logic (Sortie interface : +5V)
Protocole
Le bus est équvalent à une liaison série avec le RX et le TX sur le même fil et des niveaux de tension différents
Liaison UART (RS232) 4800 Bauds - 8 bits Data - parity odd - 1 stop bit
1er lecture
Lors de la première lecture, on obtient des trames du type :
87 EB FF EF 33 FD FF EB 9C C2 D2 FD F2 F9 FE FF FF FF FE 10 8B 87 F1 EF FF 33 FD FF EB 9B D2 C2 FD F2 0A 9E 87 EA 00 FF 03 FD FF EB FD D2 FF FD CE FF FF CE 4F FD FF F2 0F FC 87 E2 00 FF 33 FD FF EB FD D2 FF FD F0 F9 F9 FE FE D5 7B 6F 6F 6F 6F 6F 6F 03 ED FF 14 04 87 EF 00 FF 33 FD FF EB FD EA FF FE 04 CD FE 0B 42 87 EE 00 FF 33 FD FF EB FD FA FF FD E2 FF F3 2C 0C 81
Ces trames débutent toutes par “87” et ne sont pas directement exploitables. Les trames devraient commencer par “78” Pour cela, il faut inverser tous les bits des données reçues :
for (int i = 0; i < buffer.Length; i++) { byte InvertByte = (byte)~(uint)buffer[i]; buffer[i] = InvertByte; }
Ensuite vous devivriez bien obtenir des trames debutant pour “78”
78 11 FF 00 CC 02 00 14 02 05 00 02 1D 00 0F 06 F2 B4 78 13 FF 00 FC 02 00 14 02 15 00 02 0A 00 01 1F 00 00 F0 F0 78 11 FF 00 CC 02 00 14 02 05 00 02 1D 00 0E C0 F3 6D 78 10 FF 00 CC 02 00 14 02 15 00 01 FB 00 00 F4 8A 78 14 00 10 CC 02 00 14 A3 3D 2D 02 0D 06 01 00 00 00 01 EF B4
Le format de la trame
Exemple : 78 11 FF 00 CC 02 00 14 02 05 00 02 1D 00 0F 06 F2 B4 78 : Magic Byte - Indique le debut de la trame (Toujours 78) 11 : Taille - Indique la taille du télégramme sans compter le Magic Byte 0x11 = 0d17 et on a bien 7 octets dans la trame. FF : Destination - Adresse de destination du telegramme (0xFF Broadcast à touts les périphériques sur le bus) 00 : Expéditeur - Adresse de l'expediteur du telegramme CC 02 00 14 02 05 00 02 1D 00 : Nom du telegramme (Reste à preciser) - Toujours de 10 octects 0F 06 : Valeur du telegramme