WikiElectronique

Wiki sur l'électronique et l'informatique

Outils pour utilisateurs

Outils du site


interface_chauffage_-_local_process_bus_lpb

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
interface_chauffage_-_local_process_bus_lpb [2017/12/30 19:24]
88.164.131.165 [Hardware]
interface_chauffage_-_local_process_bus_lpb [2019/02/12 22:21]
88.164.131.165 [Le format de la trame]
Ligne 33: Ligne 33:
 Liaison UART (RS232) 4800 Bauds - 8 bits Data - parity odd - 1 stop bit 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 : 
 +<​code>​
 +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 
 +</​code>​
 +
 +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 : 
 +<code csharp>
 +for (int i = 0; i < buffer.Length;​ i++)
 +{
 +   byte InvertByte = (byte)~(uint)buffer[i];​
 +   ​buffer[i] = InvertByte;
 +}
 +</​code>​
 +
 +Ensuite vous devivriez bien obtenir des trames debutant pour "​78"​
 +<​code>​
 +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 
 +</​code>​
 +
 +==== 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 : Flag d'​envoi ou de réception ? 
 +  * 02 : inconnu
 +  * 00 : inconnu
 +  * 14 : inconnu
 +  * 02 : type ? 2 : info / 3 : Set / 4: ACK / 5: NACK / 6 : Request / 7 : reply to request / 8 : Error - Le type est augmenté de 0x20 entre chaque échange
 +  * 05 : (cmd & 0x00ff0000) >> 16;
 +  * 00 : (cmd & 0xff000000) >> 24;
 +  * 02 : (cmd & 0x0000ff00) >> 8;
 +  * 1D : (cmd & 0x000000ff);​
 +  * 00 0F 06 : Valeur
 +  * F2 B4 : CRC
 +
 +Les octets 1 et 2 sont inversés entre la demande et la réponse :
 +
 +Exemple : 
 +  * Demande : 053D0064 type 86
 +  * Réponse : 3D050064 type 87
 +
 +Échange suivant +0x20
 +
 +  * Demande : 053D0064 type A6
 +  * Réponse : 3D050064 type A7
 +
 +
 +
 +==== Calcul du CRC ====
 +
 +Le CRC se calcule avec l'​ensemble des reçus ​
 +
 +<code csharp>
 +        public static string CRC_LPB(byte[] bytes)
 +        {
 +            int crc = 0;
 +            int len = bytes.Length-1;​
 +            crc = (257 - len) * 256 + len - 2;
 +
 +            if (bytes != null && bytes.Length > 0)
 +            {
 +                for(int i=0;​i<​(len-1);​i++)
 +                {
 +                    crc += bytes[i];
 +                }
 +            }
 +            return String.Format("​{0:​X2}",​ crc);
 +        }
 +</​code>​
 +  ​
 +  Si bytes[] = {0x78,​0x11,​0xFF,​0x00,​0xCC,​0x02,​0x00,​0x14,​0x02,​0x05,​0x00,​0x02,​0x1D,​0x00,​0x0F,​0x06,​0xF2,​0xB4}
 +  ​
 +  Alors crc = F2B4 
 +==== Liste des télégramme et décodage ==== 
 +
 +La majorité des informations ci dessous sont issu de tests (reverse engineering) et ne sont pas donc pas fiables à 100%
 +
 +|0005021F|Température extérieure|
 +|0005021D|Température chaudière|
 +|2D3D021C|Température ambiante|
 +|00310210|Température chaudière 2 ?|
 +|0005021E|Température retour chaudière|
 +|00310222|Température ECS|
 +|3D250516|Température ECS fournie par la chaudière lors d'une demande du thermostat|
 +|001501FB|Bruleur OFF|
 +|001501F8|Bruleur ON|
 +|2D3D020D|Le thermostat indique dans quel mode il se trouve(1)|
 +|002D020F|ACK Mode|
 +|050504B3|Mode été|
 +|050504B2|Mode fin été ?|
 +|0005006C|DateTime|
 +
 +(1) : 
 +
 +=== Décodage températures === 
 +Toutes les températures se décodent de la même manière.
 +
 +Exemple : 78 11 FF 00 FC 02 00 14 02 31 00 02 22 00 **0A 7B** F3 85 
 +
 +On récupère la valeur (Ici il s'agit d'une information de température de l'ECS)
 +On convertir cette valeur en entier : 0x0A7B = d2683 
 +On divise par 64 par avoir la valeur en °C : 2683 / 64 = 41°C
 +
 +=== Décodage DateTime === 
 +
 +Exemple 78 17 FF 00 FC 02 00 14 02 05 00 00 6C 00 **75 0C 1F 07 10 0E 1A 00** EE 07 
 +
 +  * 75 : 1900 + 0x75 (117) = 2017 (année)
 +  * 0C : 12 (mois) ​
 +  * 1F : 31 (jour)
 +  * 07 : 7eme jour de la semaine donc dimanche
 +  * 10 : 16 (heure)
 +  * 0E : 14 (min)
 +  * 1A : 26 (secondes ?)
 +  * 00 : ??
interface_chauffage_-_local_process_bus_lpb.txt · Dernière modification: 2019/02/12 22:21 par 88.164.131.165