====== Cyble RF 433Mhz installé par ma communauté de commune ====== Le module radio fréquence Actaris pour compteur d’eau : un outil fiable, compact et intelligent pour la relève à distance, du réseau de distribution à l’habitat collectif. Module de communication radio compact compatible RADIAN™ totalement étanche, Cyble RF s’installe très facilement, sur site ou en usine, aussi bien sur un compteur d’eau froide que d’eau chaude. Sa pose sur site ne nécessite ni câblage ou fixation murale, ni dépose ou déplombage du compteur. Spécialement conçu pour résister aux environnements difficiles, Cyble RF est adapté à toutes les conditions rencontrées, du regard inondé à la gaine technique. Ses nombreuses fonctions intelligentes permettent, en complément du relevé d’index, d’obtenir : * l’historique mensuel de l’index sur 13 mois, * la détection des retours d’eau, le volume cumulé inverse et l’historique mensuel sur 13 mois * la détection de fuites et l’historique mensuel sur 13 mois * la détection des tentatives de fraude * l’indication de fin de vie de pile * diverses alarmes ===== protocole RADIAN ===== * impossible a trouver sur internet , l'adresse http://www.radianprotocol.com/ n'est plus active ==== issue de web.archive.org ==== The Radian Protocol A two-way 433 Mhz Radio Protocol Radian Protocol is designed for all applications in water, electricity, gas and heat meter reading and data transmitting. Its two way caracteristics allows developed service solutions, including information exchange with final user. reliability physical layer : FSK modulation, narrow band Logical Link Layer : packet numbering two ways, half duplex, data transmission relaying capability receive an repeat datagrams up to 7 nodes forward sophisticated wake up mechanism standby mode wake-up signal => awaken mode my address ? yes => let’s communicate ! no => back to stand by time to get data from a node : 2-3 s both master - slave control and CSMA asynchronous communications ==== issue d'une doc d'un outil de reléve ==== * Procédé FSK, bidirectionnel * Fréquence 433.82 MHz * Modulation FSK, NRZ asynchrone * Protocole Radian * Décalage de modulation 5 KHz * Bande passante du canal 25 KHz * Vitesse de transmission 2’400 baud * Puissance d’émission centrale de radiotransmission + 10 dBm (10 mW) * Sensibilité de réception - 105 dBm * Portée 50 m env {{:maison2:compteur_d_eau:f5943_cyblerfvacatris.pdf|}} n'apporte rien de plus ==== autres piste ==== * norme 13757-4 (DATA\DOCUMENTATIONS_div) -> bof finalement le protocole n'est pas vraiment raccord * {{:maison2:compteur_d_eau:open-meter_wp2_d2.1_part3_v1.0.pdf|}} --> EverBlu (5.4.11) 10Kbps -> fausse piste * [[https://www.google.fr/search?q=dossier+technique+cyble+RF&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fr:official&client=firefox-a&channel=sb&gfe_rd=cr&ei=0wdxVO2GG4TEUNz5gOAK|dossier technique cyble RF]] * la porteuse est 433,82Mhz * ils parlent de cryptographie (a part le CRC , ya rien ...) * le compteur ne peut être reveillé que pendant ses "heures ouvrable " (effectivement mais les heures et les jours sont configurable en usine) ====== hacking ====== En 2011 j'ai lâché cette page web au vent du web. En 2014 julien a accroché on a groupé quelques docs que l'on avait sur le sujet. Il a décidé d’écouter H24 les compteurs de sa résidence avec un SDR et un gros disque dur. En février 2016 il a réussi capturer plusieurs relève de compteur, on a commencé a gratter. Mais il nous manquait comment calculer le CRC et comment faire le lien entre ce qu'il y a marqué sur notre compteur et la trame de relève. SigmaPic a rejoint le projet et il a mit pas mal de chose a plat (enfin surtout les bit :-P ). Restais encore cette problématique d’étiquette . En décembre 2016 nous étions tous en train de sniffer nos compteur et julien a réussi a capturer la relève de son propre compteur. 1 mois plus tard signacPic arrivait a relever son propre compteur 88-8. ====== Protocol ====== ===== Physical Layer ===== ==== RF Transmission ==== * Procédé FSK, bidirectionnel * Fréquence 433.82 MHz * Modulation FSK, NRZ asynchrone * Protocole Radian * Décalage de modulation 5 KHz * Bande passante du canal 25 KHz * Vitesse de transmission 2’400 baud ==== Communication Frame ==== Any communication frame consists in: - A preamble used to notify the receiver that data will be sent - A sync word used to notify the receiver that data transmission is starting - Some data === Preamble === Preamble is a series of 0101….0101 at 2400 bits/sec. There are two preamble durations: * Long preamble for meter wake-up: 4928 bits (2464 x 01) * Short preamble for other frames: 80 bit (40 x01) In order to save energy, meter wakes-up every 2 seconds and check if someone is speaking. If nobody is speaking, meter goes back to sleep. This is the reason why long preamble is used when the master send a request. {{:maison2:compteur_d_eau:wup_master.jpg?direct&700|}} a preamble with a master request {{:maison2:compteur_d_eau:end_wup_synch.jpg?direct&700|}} zoom on end of preamble === Sync pattern === Sync pattern starts with low level during 14.3ms followed by a high level during 14.3ms. {{:maison2:compteur_d_eau:wpu_synch_meter.jpg?direct&700|}} preamble and synch pattern of meter response === Data === Data are sent by UART: * Baudrate: 2400 bits/sec * lsb first * 1 start bit / No parity / 2 or 2.5 stop bits {{:maison2:compteur_d_eau:serial_encoding.png?direct|}} ===== Frame Structure ===== ^ L(1) ^ C(1) ^ S(1) ^ Receiver Address(5) ^ S(1) ^ Sender Address(5) ^ S(1) ^ Data + Checksum (4-240) ^ * L (Length Byte) Total number of bytes including length byte and checksum * C (Control Byte) * 0x10: Request * 0x06: Acknowledge * 0x11: Response * S (Spacer) 0x00 * Receiver Address (5bytes) : Meter address when master is speaking and master address when meter is speaking * S (Spacer) 0x00 * Sender Address (5bytes) : Master address when master is speaking and meter address when meter is speaking * Data Payload (Up to 238 bytes) * Checksum (2bytes) CRC-CCITT ([[https://www.lammertbies.nl/comm/info/crc-calculation.html|Kermit]]) * Polynomial : 0x8408 * Initial Value : 0 * Bytes are reversed (MSB first) * Result is inverted * Final XOR : 0 * Stored in little endian. ==== Meter Data mapping ==== {{:maison2:compteur_d_eau:meter_data0.jpg?direct|}} {{:maison2:compteur_d_eau:meter_data1.jpg?direct|}} ==== Meter Address Encoding ==== * Address is encoded over 5 bytes. * First byte is 0x45 (TBC). * Four other bytes are deduced from numbers below the bar-code * format is YY-AAAAAAA-CCC. * 2nd byte YY: Years encoded on 8bits * 3rd-to 5th Byte AAAAAAA to be converted in from decimal to hex MSB first * CCC: Check digits (Not used in address encoding but used to verify YY-AAAAAAA consistency) {{:maison2:compteur_d_eau:etiquette.png?direct&300|}} ===== example ===== * Serial number 16-0123456-CCC * YY = 16d -> 10h * AAAAAAA = 0123456d ->01E240h * Master request to be predecing by 2s of 2464*01 then follow by Sync pattern **__and encapsulated in 1 start bit / No parity / 2.5 stop bits (works also with 2bit and 3bit)__** * 13 10 00 45 10 01 E2 40 00 45 67 89 AB CD 00 0A 40 DA DC (cks) pour le calcul du CKS prendre la ligne Kermit et swapper les nibbles => http://crccalc.com/?crc=131000451001E24000456789ABCD000A40&method=crc16&datatype=hex ^ ^ Length ^ Control ^ Spacer ^ Receiver Address ^ Spacer ^ Sender Address ^ Spacer ^ Data + Checksum ^ |Master request| 13 | 10 | 00 | 45 10 01 E2 40 | 00 | 45 67 89 AB CD | 00 | 0A 40 DA DC | |Meter Acq| 12 | 06 | 00 | 45 67 89 AB CD | 00 | 45 10 01 E2 40 | 00 | 0A 90 9E | |Meter response| 7C | 11 | 00 | 45 67 89 AB CD | 00 | 45 10 01 E2 40 | 00 | 01 08 00 D2 73 07 00 40 ..... cks (488402 litres) | |Master Acq| 12 | 06 | 00 | 45 10 01 E2 40 | 00 | 45 67 89 AB CD | 00 | 0A 23 93 | ====== solutions de relève ====== ===== CC1101 ===== le CC1101 est un transceiver RF on peux régler un tas de paramètre , mais la fréquence réel n'est pas exactement celle que l'on règle. //par exemple j'ai 2 carte CC101 pour un même réglage de fréquence un montage obtient une réponse l'autre non halRfWriteReg(FREQ0,0xC1); //Frequency Control Word, Low Byte CC1101_N1 814 824 (KO) ; CC1101_N2 810 820 (OK) halRfWriteReg(FREQ0,0xB7); //CC1101_N1 810 819.5 OK mon compteur aussi fait F1 : 433808500 F2 : 433819500 d’où la nécessité de calibrer le registre FREQ0 en utilisant une clef TNT qui fait SDR {{:maison2:compteur_d_eau:sdr.png?|}} ===== rpi + CC1101 ===== ==== schéma de câblage ==== 5V,GND ---> RPi HE26 ---.-----2*GND; 2*3.3V , SCLK ,MISO , MOSI , CSn, GDO2, GDO0 --------> CC1101 HE10 | debug_connector(HE14) === RPi PIN allocation === WiringPi Pin = WPP ^ Fonction ^ WPP ^ Name ^ Header ^^ Name ^ WPP ^ Fonction ^ | | | 3.3v | 1 | 2 | 5v | | | | | 8 | SDA | 3 | 4 | 5v | | | | | 9 | SCL | 5 | 6 | 0v | | | | | 7 | GPIO7 | 7 | 8 | TxD | 15 | | | | | 0v | 9 | 10 | RxD | 16 | | | GDO0 | 0 | GPIO0 | 11 | 12 | GPIO1 | 1 | | | GDO2 | 2 | GPIO2 | 13 | 14 | 0v | | | | LED | 3 | GPIO3 | 15 | 16 | GPIO4 | 4 | | | | | 3.3v | 17 | 18 | GPIO5 | 5 | | | MOSI | 12 | MOSI | 19 | 20 | 0v | | | MISO | 13 | MISO | 21 | 22 | GPIO6 | 6 | | | SCLK | 14 | SCLK | 23 | 24 | CE0 | 10 | Csn | | GND | | 0v | 25 | 26 | CE1 | 11 | | #define GDO2 2 //header 13 #define GDO1_MISO 13 #define GDO0 0 //header 11 #define MOSI 12 #define cc1101_CSn 10 ////header 24 #define LED 3 //header 15 === HE10 CC101 === Top view ^ Fonction ^ Header ^^ Fonction ^ | 3.3v | 1 | 2 | 3.3V | | MOSI | 3 | 4 | SCLK | | MISO | 5 | 6 | GDO2 | | CSn | 7 | 8 | GDO0 | | GND | 9 | 10 | GND | Flipped view from bottom ^ Fonction ^ Header ^^ Fonction ^ | 3.3v | 2 | 1 | 3.3V | | MOSI | 4 | 3 | SCLK | | MISO | 6 | 5 | GDO2 | | CSn | 8 | 7 | GDO0 | | GND | 10 | 9 | GND | === debug_connector(HE14) === SALEAE led(1) ^ Fonction ^ Header ^^ Fonction ^ | D1 | 1 | 2 | D2 | | D3 | 3 | 4 | D4 | | D5 | 5 | 6 | D6 | | D7 | 7 | 8 | D8 | | GND | 9 | 10 | GND | DB9 TDA (face (GND) 5 4 3 2 1 (data) 9 8 7 6(5v) HE14 ^ Fonction ^ Header ^^ Fonction ^ | (D1 saleae)DATA TDA | 1 | 2 | (D2 saleae)LED | | (D3 saleae)SCLK | 3 | 4 | (D4 saleae)SI | | (D5 saleae)GDO2 | 5 | 6 | (D6 saleae)SO | | (D7 saleae)GDO0 | 7 | 8 | (D8 saleae)CSn | | GND | 9 | 10 | GND | | 3.3 | 11 | 12 | GND | | DATA TDA | 13 | 14 | 5V | ==== code ==== le zip a un mo t d3 pa5se il s'agit du nom du fichier zip {{ :maison2:compteur_d_eau:radian_trx.zip |}} === config === le code livré ne compilera pas (gcc radian_trx.c -o radian_trx -lwiringPi -lpthread -Wall) parce qu’il y a 2 paramètres a ajuster + 2 tipo * fréquence a ajuster en fonction de votre CC1101 CC1101.c : ligne 229 : halRfWriteReg(FREQ0 , ....) * je conseil de commencer avec la fréquence de base puis de mesurer avec le dongle TNT pour le centrer sur le 433.820 ou la réponse du compteur * si il n'y a pas eu de réponse du compteur alors il faudra essayer de décaler par pas de 2kHz de chaque coté de 433.820 * il faut modifier FREQ0 en ajoutant/retranchant quelques unité pour décaler la fréquence principale de 2kHz , il faut savoir qu'un "SDR clef TNT a 20€" ne donne pas le fréquence réel en absolue, en relatif c'est déjà mieux * le numéro de série du compteur. voici la ligne de code qui va avec le paragraphe exemple * CC1101.c : ligne 664 : TS_len_u8=Make_Radian_Master_req(txbuffer, 16 , 123456 ); * dans CC1101.c ajouter en haut #define TX_LOOP_OUT 300 * un caractère "c" a supprimer en ligne 5 de radian_trc.c ==== script ==== sudo crontab -e 55 9 * * * sudo /home/pi/radian_trx/web_tx_releve >/dev/null 2>&1 55 9 * * * sudo /home/pi/radian_trx/web_tx_releve >> /var/log/crontab.log ==== performance ==== | minepi + CC1101(2) + lambda/4 derrière cloison | volet ouvert | rssi=185 lqi=128 F_est=255 | | minepi + CC1101(2) + lambda/4 dans cloison | volet ouvert | rssi=185 lqi=128 F_est=255 | | minepi + CC1101(2) + ant spirale derrière cloison | volet ouvert | rssi=183-4 lqi=128 F_est=255 | ===== Mbed+ CC1101 ===== ====== RTL SDR ====== * https://www.youtube.com/watch?v=c3C7GBuxpNo * http://www.nooelec.com/store/qs/ - Plug your NESDR into an available USB port - Open the 'NESDR Driver Installer', Zadig - Select 'List All Devices' from the 'Options' menu in Zadig - From the main dropdown, select the NESDR - Confirm the selected device has a USB ID of '0BDA 2838' - Press the big button to install drivers--button * http://m3ghe.blogspot.fr/p/adding-support-for-rtl-sdr-usb-dongles.html ==>SDR console OK * http://www.rtl-sdr.com/rtl-sdr-quick-start-guide/ * http://rtl-sdr.sceners.org/?p=193 kalibrate Avec une fréquence de sampling de 31.25 ksps c'est 2.5Go de données sur 12h. Ça parait lourd mais sur un HDD de 1To ça te permet quand même d'enregistrer 1024/2.5=410 jours ouvrées. ===== matos ===== * http://fr.farnell.com/mipot/32000508e/emetteur-fsk-50-pll-5-12v-433-92mhz/dp/1702924 , Gamme de fréquence: 433.42MHz à 434.42MHz * http://www.roue-libre.be/article.php3?id_article=180 * http://iw3hzx.altervista.org/Antenne/HENTENNA/Hentenna.htm * SDR * SX1212 * http://f5ad.free.fr/ANT-QSP_Descriptions_430.htm * http://users.belgacom.net/hamradio/schemas/jpole.gif * http://www.roue-libre.be/article.php3?id_article=258 * http://radio.pagesperso-orange.fr/Ant.htm#GP ; https://www.adri38.fr/antenne-ground-plane-446-mhz/ * https://www.elektor.nl/Uploads/Forum/Posts/How-to-make-a-Air-Cooled-433MHz-antenna.pdf * http://www.qsl.net/ve2ztt/IndexD/moxon_fichiers/moxon.htm ; http://f1rzv.free.fr/moxon/index.php ==== antennes ==== http://www.ta-formation.com/cours/e-antennes.pdf === classement selon http://www.modelisme.com/forum/aero-vol-en-immersion/195087-amplifier-un-signal-uhf-433mhz-optimiser-la-reception.html === du moin bon gain au meilleur - Monopole 1/2 Onde - Monopole 1/4 onde - Dipole 1/2 onde - Dipole 1/4 onde (env 70ohm) - Antenne V inversée 1/2 onde - Antenne V inversée 1/4 onde - Antenne Moxon (env 50ohm) - Antenne Yagi , patch ou quad (Antenne directive) ~~DISCUSSION~~