Skip to content
  • Blog
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

Community Forum

M

mikebzh44

@mikebzh44
About
Posts
26
Topics
3
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent

  • Piloter un relai avec cette board
    M mikebzh44

    @Charles Parfait !! Elle est top cette petite carte 😉

    Denky D4

  • Piloter un relai avec cette board
    M mikebzh44

    Salut.

    Mon Denky D4 marche très bien sous ESPHome et Home Assistant pour faire la remontée TIC.

    Mais je voudrais aussi le coupler à un relais 230V pour piloter un contacteur Jour / Nuit.

    Il faut que j'utilise le GPIO prévu pour le RGB ? Ou c'est une sortie PWM et ça va pas le faire ?

    Y a d'autres GPIO utilisables avec des connecteurs ou des points de soudure sur la carte ?

    Merci et bonne journée

    Denky D4

  • Compilation ESP Home pour avoir la TIC sur cet ESP
    M mikebzh44

    @Charles Top, merci !

    Denky D4

  • Compilation ESP Home pour avoir la TIC sur cet ESP
    M mikebzh44

    @ch_2i Si tu peux le faire, je veux bien, merci.

    Denky D4

  • Compilation ESP Home pour avoir la TIC sur cet ESP
    M mikebzh44

    @Charles Du coup, je garde la carte et je trouverai bien une utilité pour le PiTInfo que j'ai commandé 😉

    Denky D4

  • Compilation ESP Home pour avoir la TIC sur cet ESP
    M mikebzh44

    Je confirme, ça marche nickel !!

    Mon YAML au complet :

    substitutions:
      devicename: esp-tic-feyree
      friendly_name: esp-tic-feyree
      device_description: Infos TIC chargeur VE
    
    esphome:
      name: $devicename
      friendly_name: $friendly_name
      comment: ${device_description}
      min_version: 2024.6.0
      name_add_mac_suffix: false
      project:
        name: esphome.web
        version: '1.0'
    
    esp32:
      board: denky_d4
      framework:
        type: arduino
      
    # Enable logging
    logger:
      baud_rate: 0
      level: INFO 
      #esp8266_store_log_strings_in_flash: False
    
    # Enable Home Assistant API
    api:
    
    ota:
      platform: esphome
      password: "472f4e3996e22b5cc959fefe4f46d54e"
    
    wifi:
      #ssid: !secret wifi_ssid
      #password: !secret wifi_password
      # Enable fallback hotspot (captive portal) in case wifi connection fails
      ap: {}
    
    # Web Server: https://esphome.io/components/web_server.html
    web_server:
      local: true
      port: 80
    #  auth:
    #    username: !secret esphome_web_server_username
    #    password: !secret esphome_web_server_password
    
    # Time: https://esphome.io/components/time.html
    time:
      - platform: homeassistant
        timezone: "Europe/Paris"
        id: homeassistant_time
    
    captive_portal:
    
    # Status Binary Sensor: https://esphome.io/components/binary_sensor/status.html
    binary_sensor:
      - platform: status
        name: "Sagem EV Status"
    
    # Restart Button: https://esphome.io/components/button/restart.html
    button:
      - platform: restart
        name: "Sagem EV Restart"
    
    # https://esphome.io/custom/uart.html
    uart:
      rx_pin:
        number: GPIO8 # Pin Rx2
        ignore_pin_validation_error: true
      baud_rate: 1200
      parity: EVEN
      data_bits: 7
      #rx_buffer_size: 512
      
    # https://esphome.io/components/sensor/teleinfo.html
    teleinfo:
        update_interval: 60s
        historical_mode: true
    
    # https://esphome.io/components/sensor/index.html
    sensor:
      # WiFi
      - platform: wifi_signal
        name: "WiFi Signal Sensor"
        update_interval: 60s
        unit_of_measurement: dB
        accuracy_decimals: 0
        force_update: false
        icon: mdi:wifi
      # Uptime
      - platform: uptime
        id: uptime_seconds
        name: "Uptime Sensor"
        update_interval: 60s
        unit_of_measurement: s
        accuracy_decimals: 0
        force_update: false
        icon: mdi:clock-start
      # Production
      - platform: teleinfo
        tag_name: "BASE"
        name: "Recharge VE"
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        icon: mdi:flash
        accuracy_decimals: 2
        filters:
          - multiply: 0.001
          - filter_out: 0
    
    text_sensor:
      - platform: template
        name: Uptime
        update_interval: 60s
        icon: mdi:clock-start
        lambda: |-
          int seconds = (id(uptime_seconds).state);
          int days = seconds / (24 * 3600);
          seconds = seconds % (24 * 3600);
          int hours = seconds / 3600;
          seconds = seconds % 3600;
          int minutes = seconds /  60;
          seconds = seconds % 60;
          if ( days ) {
            return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
          } else if ( hours ) {
            return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
          } else if ( minutes ) {
            return { (String(minutes) +"m "+ String(seconds) +"s").c_str() };
          } else {
            return { (String(seconds) +"s").c_str() };
          }
    
    Denky D4

  • Compilation ESP Home pour avoir la TIC sur cet ESP
    M mikebzh44

    @Charles Merci, je vais tester ça ce WE

    Denky D4

  • Compilation ESP Home pour avoir la TIC sur cet ESP
    M mikebzh44

    Bonjour.

    Je viens de recevoir ma carte Denky D4 et je n'arrive pas à compiler un fichier YAML pour Home Assistant

    J'ai cette erreur :

    INFO ESPHome 2024.6.6
    INFO Reading configuration /config/esphome/esphome-web-f5bfa8.yaml...
    Failed config
    
    uart: [source /config/esphome/esphome-web-f5bfa8.yaml:77]
      - id: uart_bus
        
        This pin cannot be used on ESP32s and is already used by the flash interface (function: Flash Data 1).
        rx_pin: GPIO8
        baud_rate: 1200
        parity: EVEN
        data_bits: 7
    

    Et voici mon code YAML :

    substitutions:
      name: esp-tic-feyree
      friendly_name: esp-tic-feyree
      device_description: Infos TIC Recharge VE
    
    esphome:
      name: ${name}
      friendly_name: ${friendly_name}
      comment: ${device_description}
      min_version: 2024.6.0
      name_add_mac_suffix: false
      project:
        name: esphome.web
        version: '1.0'
    
    esp32:
    #  board: adafruit_qtpy_esp32
      board: denky_d4
      framework:
        type: esp-idf
    
    # Enable logging
    logger:
    
    # Enable Home Assistant API
    api:
    
    # Allow Over-The-Air updates
    ota:
    - platform: esphome
    
    # Allow provisioning Wi-Fi via serial
    improv_serial:
    
    wifi:
      # Set up a wifi access point
      ap: {}
    
    # In combination with the `ap` this allows the user
    # to provision wifi credentials to the device via WiFi AP.
    captive_portal:
    
    dashboard_import:
      package_import_url: github://esphome/example-configs/esphome-web/esp32.yaml@main
      import_full_config: true
    
    # Sets up Bluetooth LE (Only on ESP32) to allow the user
    # to provision wifi credentials to the device.
    esp32_improv:
      authorizer: none
    
    # To have a "next url" for improv serial
    web_server:
      local: true
      port: 80
    #  auth:
    #    username: !secret esphome_web_server_username
    #    password: !secret esphome_web_server_password
    
    # Time: https://esphome.io/components/time.html
    time:
      - platform: homeassistant
        timezone: "Europe/Paris"
        id: homeassistant_time
    
    # Status Binary Sensor: https://esphome.io/components/binary_sensor/status.html
    binary_sensor:
      - platform: status
        name: "Sagem Status"
    
    # Restart Button: https://esphome.io/components/button/restart.html
    button:
      - platform: restart
        name: "Sagem Restart"
    
    # https://esphome.io/custom/uart.html
    uart:
      id: uart_bus
      rx_pin: GPIO8 # Pin Rx2
      baud_rate: 1200
      parity: EVEN
      data_bits: 7
      #rx_buffer_size: 512
      
    # https://esphome.io/components/sensor/teleinfo.html
    teleinfo:
        update_interval: 60s
        historical_mode: true
    
    # https://esphome.io/components/sensor/index.html
    sensor:
      # WiFi
      - platform: wifi_signal
        name: "WiFi Signal Sensor"
        update_interval: 60s
        unit_of_measurement: dB
        accuracy_decimals: 0
        force_update: false
        icon: mdi:wifi
      # Uptime
      - platform: uptime
        id: uptime_seconds
        name: "Uptime Sensor"
        update_interval: 60s
        unit_of_measurement: s
        accuracy_decimals: 0
        force_update: false
        icon: mdi:clock-start
      # Production
      - platform: teleinfo
        tag_name: "BASE"
        name: "Recharge VE"
        unit_of_measurement: kWh
        device_class: energy
        state_class: total_increasing
        icon: mdi:flash
        accuracy_decimals: 2
        filters:
          - multiply: 0.001
          - filter_out: 0
    
    text_sensor:
      - platform: template
        name: Uptime
        update_interval: 60s
        icon: mdi:clock-start
        lambda: |-
          int seconds = (id(uptime_seconds).state);
          int days = seconds / (24 * 3600);
          seconds = seconds % (24 * 3600);
          int hours = seconds / 3600;
          seconds = seconds % 3600;
          int minutes = seconds /  60;
          seconds = seconds % 60;
          if ( days ) {
            return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
          } else if ( hours ) {
            return { (String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
          } else if ( minutes ) {
            return { (String(minutes) +"m "+ String(seconds) +"s").c_str() };
          } else {
            return { (String(seconds) +"s").c_str() };
          }
    

    Quand j'ai initialisé la carte avec ESPHome, elle était vu comme :

    esp32:
      board: esp32dev
      framework:
        type: arduino
    

    Mais même avec cette définition, la compilation donne la même erreur.

    Denky D4

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    Oui, je vais revoir ma copie et réintégrer le calcul des checksum.

    Je les avais viré car j'avais des erreurs liées à la fonction length.

    Mais les trames Standard sont aussi différentes des Historique car les Historiques fournissent toujours un tuple (clé, valeur, check) alors que les Standards peuvent fournir un tuple (clé, timestamp, valeur, check) :

    SINSTS 00488 Z
    SMAXSN E210424063606 01899 G

    Voir carrément plus :

    PJOURF+1 0000C001 07248002 2324C001 NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE NONUTILE

    Autre question, pour utiliser /dev/ttyAMA0, on doit l'initialiser au boot du Pi, contrairement à ton dongle.

    Pour l'instant, j'ai mis la commande :

    stty -F /dev/ttyAMA0 1200 sane evenp parenb cs7 -crtscts

    dans la crontab de root avec @reboot

    Je suppose que c'est un peu crade comme manip, non ?

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    En bidouillant un peu la lecture des trames (je vire le calcul des checksums entre autre), j'arrive à décoder les trames et extraire les couples label/values qui m'intéressent :

    // Enlever les codes début et fin de trame
    var lines = msg.payload.toString().replace("\u0002\n","").replace("\r\u0003","");
    
    // Récupérer chaque ligne une à une
    lines = lines.split("\r\n");
    
    for (var line in lines) 
    {
      	// Recupérer le label, la valeur et la checksum
      	// si la checksum est un espace on le remplace par un caractère non 
      	// autorisé en checksum (ici 's') pour eviter pb de split
      	// donc espace espace devient espace s
    	var myline = lines[line].toString().replace("  "," s").split(" ");
    	if (myline.length == 1)
    	{
            var entries = myline[0].split("\t");
            var label = entries[0];
            var value = entries[1];
    
            if ( label == "EASF01")
            {
                flow.set("HC",parseInt(value,10));
            }
            if ( label == "EASF02")
            {
                flow.set("HP",parseInt(value,10));
            }
            if ( label == "LTARF")
            {
                if (value == 'HEURE  PLEINE')
                {
                    flow.set("TARIF",'HP..');
                }
                else
                {
                    flow.set("TARIF",'HC..');
                }
            }
            if ( label == "IRMS1")
            {
                flow.set(label,parseInt(value,10));
            }
            if ( label == "SINSTS")
            {
                flow.set(label,parseInt(value,10));
            }
            if ( label == "EAIT")
            {
                flow.set(label,parseInt(value,10));
            }
        }
    }
    
    
    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    La lecture de /dev/ttyAMA0 marche bien debug :

    
    ADSC	061961603260	5
    VTIC	02	J
    DATE	E210424091645		D
    NGTF	H PLEINE/CREUSE 	\
    LTARF	 HEURE  PLEINE  	A
    EAST	010893318	0
    EASF01	005110053	1
    EASF02	005783265	G
    EASF03	000000000	$
    EASF04	000000000	%
    EASF05	000000000	&
    EASF06	000000000	'
    EASF07	000000000	(
    EASF08	000000000	)
    EASF09	000000000	*
    EASF10	000000000	"
    EASD01	005110053	/
    EASD02	005783265	E
    EASD03	000000000	"
    EASD04	000000000	#
    EAIT	000038838	#
    ERQ1	000007904	O
    ERQ2	000007294	R
    ERQ3	000040821	L
    ERQ4	004086122	U
    IRMS1	002	0
    URMS1	234	C
    PREF	09	H
    PCOUP	09	"
    SINSTS	00465	U
    SMAXSN	E210424063606	01899	G
    SMAXSN-1	E210423060619	02700	S
    SINSTI	00000	<
    SMAXIN	E210424000000	00000	M
    SMAXIN-1	E210423134052	00634	F
    CCASN	E210424090000	00460	8
    CCASN-1	E210424083000	00836	_
    CCAIN	E210424090000	00000	$
    CCAIN-1	E210424083000	00000	D
    UMOY1	E210424091000	234	+
    STGE	001A4501	A
    MSG1	PAS DE          MESSAGE         	<
    PRM	14275687320408	:
    RELAIS	000	B
    NTARF	02	O
    NJOURF	00	&
    NJOURF+1	00	B
    PJOURF+1	0000C001 ...
    

    Mais quand je branche ma fonction de décodage :

    // Enlever les codes début et fin de trame
    var lines = msg.payload.toString().replace("\u0002\n","").replace("\r\u0003","");
    
    // Récupérer chaque ligne une à une
    lines = lines.split("\r\n");
    for (var line in lines) 
    {
    	var i;
      	var checksum = 32;
      	
      	// Recupérer le label, la valeur et la checksum
      	// si la checksum est un espace on le remplace par un caractère non 
      	// autorisé en checksum (ici 's') pour eviter pb de split
      	// donc espace espace devient espace s
    	var myline = lines[line].toString().replace("  "," s").split(" ");
    	
    	// on dépile nos 3 valeurs
    	var check = myline.pop();
    	var value = myline.pop();
    	var label = myline.pop();
    	
    	// On peu repositionner la checksum à espace si c'était le cas
    	if (check == "s") check = " ";
    
    	// Calcul de la checksum sur ce qu'on a reçu, on balaye tous les caractères		
      	for (i = 0; i < label.length; i++) checksum += label.charCodeAt(i);
      	for (i = 0; i < value.length; i++) checksum += value.charCodeAt(i);
     	checksum = ((checksum%256) & 63) + 32;
     	checksum = String.fromCharCode(checksum);
    	
    	// Checksum correcte ?
     	if (checksum == check )
     	{
    	    if ( label == "EASF01")
    	    {
    	        flow.set("HC",parseInt(value,10));
    	    }
    	    if ( label == "EASF02")
    	    {
    	        flow.set("HP",parseInt(value,10));
    	    }
    	    if ( label == "LTARF")
    	    {
    	        if (value == 'HEURE  PLEINE')
    	        {
    	            flow.set("TARIF",'HP..');
    	        }
    	        else
    	        {
    	            flow.set("TARIF",'HC..');
    	        }
    	    }
    	    if ( label == "IRMS1")
    	    {
    	        flow.set(label,parseInt(value,10));
    	    }
    	    if ( label == "SINSTS")
    	    {
    	        flow.set(label,parseInt(value,10));
    	    }
    	    if ( label == "EAIT")
    	    {
    	        flow.set(label,parseInt(value,10));
    	    }
    	}
    	else
    	{
    		console.log("'%s' '%s' '%s' => Bad Checksum '%s'", label, value, check, checksum );
    	}
    }
    
    

    J'ai un message d'erreur dans le debug :

    TypeError: Cannot read property 'length' of undefined

    Le parsing est différent entre les trames Historiques et Standard ?

    Car j'ai pris le code dans ton exemple sur une trame Historique :

    http://hallard.me/pitinfo/

    Si ça peut aider, voici les trames reçues avec picocom :

    Trames_Linky.txt

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    Ca commence à rentrer, merci pour les tuyaux 😉

    alt text

    Ce WE, je rajoute la lecture du Linky via ttyAMA0 et je fusionne mes 2 tabes (car j'avais une table pour les index du Linky et une table pour l'index du Sagem + ECS).

    Restera ensuite à intégrer les sondes de T° DHT11 et DS18B20 mais y a des nodes pour ça donc ça devrait le faire sans problème 😄

    Par contre, pour sauvegarder l'index du compteur Sagem dans le contexte, je fais flow.set('WH',value) mais pour lire la variable, je ne peux pas faire comme dans ton exemple (context.flow.WH) mais je dois passer par flow.get('WH')

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    @charles Pratique, c'est certain ! Rapide, pas au début quand tu maîtrise que dalle 😄

    J'ai encore du mal à comprendre ces histoires de flow.

    On met tous sur le même "graphe" ? On peut avoir plusieurs "graphes" qui peuvent être déployés ou non ?

    Pour l'instant, tant que mon dongle n'est pas en production, je reste avec mes 2 RPi qui remplissent mes tables. Hier soir, j'ai donc dû arrêter le service Node Red pour ne pas qu'il continue à faire des INSERT alors que le dongle était débranché.

    Mais si j'avais un autre flow (qui fait autre chose) et qui devait continuer à tourner, j'aurais dû faire comment pour désactiver uniquement la lecture TIC ?

    Faut que je lise les tutos, ça doit bien être abordé 😉

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    Cool, merci pour le tuyau, je teste ça ce soir.

    Et avec ce fameux contexte, je peux avoir un flow qui va lire la sortie TIC de mon Sagem via /dev/ttyUSB0, un 2éme qui va lire celle du Linky via /dev/ttyAMA0 et un 3ème qui va récupérer les données de mon sous-compteur d'injection du surplus dans mon chauffe via une requête HTTP (c'est un Wemos sous EspEasy qui est branché à la sortie RS485 du sous-compteur) puis agréger toutes ces informations pour ne faire qu'un seul ordre INSERT dans ma BDD ?

    Je suppose qu'il faut que mon flow Linky stocke les données qui m'intéressent dans context.global.Linky (par exemple), de même pour context.global.Sagem et context.global.ECS et toutes les 1m, j'ai une fonction qui récupères les valeurs de ces 3 variables "globales" et je génère mon ordre INSERT, j'ai bon ?

    Merci pour ton aide en tout cas, car cette programmation "graphique" est toute nouvelle pour moi 😄

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    Par contre, j'essaie de lire ma sortie TIC via le dongle et Node Red et d'insérer l'index dans ma base MySQL :

    alt text

    Ca marche mais j'ai un décalage d'une seconde à chaque ajout :

    alt text

    Donc avec cette dérive, je vais avoir un moment ou je vais louper une minute. Je sais, c'est pas la mort mais j'aimerais bien garder mon intervalle d'une minute.

    Si tu as une idée 😉

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    @charles Merci, je sais pas si ca vaut le coup, je viens de tester le dongle sur mon Linky sans la double liaison et picocom lit sans problème les trames.

    C'était soit un soucis de branchement, soit le fait d'avoir dérivé la sortie TIC vers 2 serials

    J'ai installé Node-Red, je m'attaque à la lecture de mes compteurs maintenant 😉

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    Je vais installer Node Red ce soir et je vais tester le dongle sur le Linky en étant seul sur la sortie TIC.

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    Je remonte mes index de compteur dans une base MySQL à une cadence d'une minute.

    Avec le Node Red, je peux faire une boucle pour lire les 2 serial et envoyer les infos dans ma base MySQL toutes les minutes ?

    Sinon, je vais dupliquer mon shell + script python pour que chacun lise un serial.

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    Par contre, pour l'instant, je lis la sortie TIC du Linky via un programme Python qui utilise la bibliothèque PITinfo mais je dois bidouiller dans un script pour lancer le programme python en arrière plan puis au bout de 10s, je fais un grep et je kill le process car le programme python ne rend jamais la main.

    Pour le dongle, je pense utiliser ton programme :

    http://hallard.me/teleinfo-emoncms/

    Mais si je veux un programme qui sache lire le Linky et un autre qui sache lire le Sagem, il faut que je le compile 2 fois avec des options différentes (pour qu'ils se nomment différemment, pour qu'ils aient des fichiers de conf différents, ...) ? Va falloir que je me plonge de le makefile et le fichier .c, ça va me rappeler ma jeunesse 😄

    MicroTéléinfo

  • Lecture Linky via dongle et compteur via GPIO
    M mikebzh44

    Test concluant avec le dongle branché sur la sortie TIC de mon Sagem :

    pi@raspberrypi:~ $ picocom -b 1200 -d 7 -p e -f n /dev/ttyUSB0
    picocom v3.1

    port is : /dev/ttyUSB0
    flowcontrol : none
    baudrate is : 1200
    parity is : even
    databits are : 7
    stopbits are : 1
    escape is : C-a
    local echo is : no
    noinit is : no
    noreset is : no
    hangup is : no
    nolock is : no
    send_cmd is : sz -vv
    receive_cmd is : rz -vv -E
    imap is :
    omap is :
    emap is : crcrlf,delbs,
    logfile is : none
    initstring : none
    exit_after is : not set
    exit is : no

    Type [C-a] [C-h] to see available commands
    Terminal ready
    <tL1766843 .
    PTEC TH.. $
    IINST 000 W
    IMAX 012 B
    PAPP 00000 !
    MOTDETAT 000000 B
    ADCO 021628001921 7
    OPTARIF BASE 0
    ISOUSC 30 9
    BASE 001766843 .
    PTEC TH.. $
    IINST 000 W
    IMAX 012 B
    PAPP 00060 '
    MOTDETAT 000000 B
    ADCO 021628001921 7
    OPTARIF BASE 0
    ISOUSC 30 9
    BASE 001766843 .
    PTEC TH.. $
    IINST 000 W
    IMAX 012 B
    PAPP 00060 '
    MOTDETAT 000000 B
    ADCO 021628001921 7
    OPTARIF BASE 0
    ISOUSC 30 9
    BASE 001766843 .
    PTEC TH.. $
    IINST 000 W
    IMAX 012 B

    Donc c'est ce RPi qi va relever le Linky via le shield et le Sagem via le dongle.

    MicroTéléinfo
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • Blog
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups