Solution Wiser Energy de chez Schneider Electric

manifestement le port 502 n’est pas ouvert donc le modbus ne peut fonctionner

je t’ai donné de faux espoirs, je n’ai pas la meme passerelle que toi, la mienne est plus ancienne , c’est une A9XMWA20 qui elle fait seulement modbus IP
désolé

Bonjour Papoo,
pas de problème. Merci quand même c’était une très bonne piste d’autant plus que le modbus est un classique qui m’aurait beaucoup intéressé.
Je me penche du coup sur l’intégration du EER31800 via des sensors Rest. J’en suis encore aux balbutiement mais j’ai déjà quelques résultats.
Je posterai ici quand j’aurai un peu plus avancé.
Bonne soirée.

Salut Ugo, file moi l’adresse mac de ton module :slight_smile:

Bonjour à tous,
Je relance le sujet car je suis très intéressé par récupérer les infos de mon compteur d’energies Wiser EM5 sous HA.
Je dispose d’un EER31800 et du service sur le net de Schneider.

Pour l’instant j’arrive à consulter les trames json sous un navigateur web après avoir entré mon authentification.
Pour le calcul du mot de passe j’ai utilisé le code Python trouvé ici (Merci Ugo) :

J’arrive aussi a récupérer les infos avec Curl:

curl -k --user m2madmin:xxxxxx" https://wiserIp/rsa1/MeterInstantData
{ "MeterInstantData": [ { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 2677, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 5 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 0 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 1 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 274, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 2 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 3 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 2402, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 4 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 25, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 201, "channel": 2 } ] }

Par contre maintenant je ne sais pas quoi en faire :slight_smile:

J’essaie de passer par REST:

la commande :

curl -X GET -k -u m2madmin:xxxx  "https://192.168.0.40/rsa1/MeasurementData;sId=205;ch=5"

renvoi :

{ "sId": 205, "ch": 5, "EP": 0, "EPR": 0, "EQ": 0, "ES": 0, "EPz": 12280648, "EPRz": 0, "EQz": 0, "ESz": 0, "IA": 0, "IB": 0, "IC": 0, "UAB": 0, "UBC": 0, "UCA": 0, "VA": 0, "VB": 0, "VC": 0, "PA": 0, "PB": 0, "PC": 0, "P": 1370, "Q": 0, "S": 0, "PF": 0, "F": 0, "lL": 0, "cS": false }

Je veux donc récupérer la valeur de « P »:1370. J’ai donc mis dans configuration.yaml :

 rest: 
  - authentication: basic
    username: !secret wiser_user
    password: !secret wiser_psswd
    verify_ssl: false
    scan_interval: 60
    resource: "https://192.168.0.40/rsa1/MeasurementData;sId=205;ch=5"
    sensor:
      - name: "Consommation Wiser 205 5"
        value_template: "{{ value_json.P }}"

Par contre j’ai l’erreur

2022-02-11 17:45:58 ERROR (MainThread) [homeassistant.helpers.template] Template variable error: 'value_json' is undefined when rendering '{{ value_json.P }}'

Hey!
Je suis le fil intéressé sur EER31800.
Je ne suis pas un expert mais plutôt un débutant. Ce que je m’en tiens au départ, c’est comment obtenir les informations de connexion du module.
Si je comprends bien, vous devriez pouvoir, à l’aide de l’adresse MAC et d’une clé API, pouvoir réaliser l’authentification. Quelles étapes dois-je suivre pour obtenir des informations sur ma passerelle ?

Excusez la langue car le français n’est pas ma langue.

Salut Svenfabian,

Je vais te résumer les étapes pour calculer la clé et faire les premières requêtes.

Pré-requis :

  • python installé
  • adresse MAC du module wiser IP
  • adresse IP du module wiser IP

Il faut commencer par ouvrir un editeur de texte et copier le script python suivant en remplaçant l’adresse MAC avec celle de ton module (tu peux la trouver soit sur le module, soit dans l’appli Schneider) sur la première ligne :

mac_addr = '00:11:22:33:44:55'


replaceAll = mac_addr.replace(':', '')
my_char = "PzLaM2ZqOx5Ks3NwIcJ1Sd6NeUvH7WfBrY9AbGgVtTnGhVyTmG8EjVu0TkFi4QClRoDpX"


def generatePasswd(str1=replaceAll, i=len(replaceAll), str2=my_char):

    str3 = str1
    i2 = i
    str4 = str2
    cArr = ['']*12  # 12 elements

    if str3 != '':

        i3 = 6
        if i2 >= 6:
            substring = str3[-6:]
            i4 = 0
            while (i4 < i2) & (i4 < i3):

                hexToInt = int(f"0x{substring[i4]}",0)
                i5 = 15 - (hexToInt % 15)
                d2 = float(hexToInt)
                i6 = i4
                d3 = float(i5)

                round_ = int(
                    round(d3 ** 3.0) * 8 +
                    round(d3 ** 2.0) * 3 +
                    (i5 * 5)) % (len(str2) + 1)


                i7 = i6 * 2
                idx = int(round(d2 ** 3.0) * 6 +
                          round(d2 ** 2.0) * 9 +
                          (hexToInt * 7) )% (len(str2) + 1)


                cArr[i7] = str4[idx]
                cArr[i7 + 1] = str4[round_]
                i4 = i6 + 1
                i3 = 6
    return ''.join(cArr)

if __name__ == '__main__':

    key = generatePasswd()

    print("Key:" + key)

Ensuite il faut lancer le script:

francois@hp:~/python/wiserKey$ python3 wiserKey.py 
Key:ububDZDZfSfS

On va tester de récupérer des infos avec un navigateur. Mettre dans la barre d’adresse :

https://WISER_IP/rsa1/MeterInstantData

Le navigateur va afficher une alerte de sécurité, c’est normal, il faut passer et continuer en acceptant les risques, puis il demande un user et mot de passe:
user m2madmin
passwd: la clé calculée par le script python
→ Le navigateur affiche une trame json:

{ "MeterInstantData": [ { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 662, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 5 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 0 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 1 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 224, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 2 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 3 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 437, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 4 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 25, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 201, "channel": 2 } ] }

On peut faire la même requête en ligne de commande :

curl -X GET -k -u m2madmin:xxxx  "https://WISER_IP/rsa1/MeterInstantData"

Et là tu en es a peu prés au même point que moi :slight_smile:

Merci francois82 !!
J’ai également trouvé une suite possible pour obtenir ces valeurs à Home Assistant.
Il s’agit d’un convertisseur Wiser vers MQTT qui peut ensuite transférer des données vers à Home Assistant.
https github com/NicolaiPetri/wiser2mqtt

Salut,

C’est une solution de backup possible mais je préfèrerais arriver a décoder la trame JSON sans passer par MQTT.

J’ai lancé un post pour en parler… ça progresse même si je ne suis pas arrivé au bout !

Bonjour,

Pour « décoder » les retours JSON et remonter les infos dans homeassistant:

  • WISER EM5, pour les puissances actives (les mesures par tor et issu du Télé-Info du compteur électrique):
sensor:

rest:
  - authentication: basic
    username: m2madmin
    password: XXXXXXXX
    verify_ssl: False
    scan_interval: 10
    timeout: 200
    resource:  https://192.168.1.104/rsa1/MeterInstantData
    sensor:
      - name: Wiser1_Total
        value_template: "{{ value_json.MeterInstantData[5].powerTActive }}"
        unit_of_measurement: "W"
      - name: Wiser1_Tor_1
        value_template: "{{ value_json.MeterInstantData[6].powerTActive }}"
        unit_of_measurement: "W"
      - name: Wiser1_Tor_2
        value_template: "{{ value_json.MeterInstantData[7].powerTActive }}"
        unit_of_measurement: "W"
      - name: Wiser1_Tor_3
        value_template: "{{ value_json.MeterInstantData[8].powerTActive }}"
        unit_of_measurement: "W"
      - name: Wiser1_Tor_4
        value_template: "{{ value_json.MeterInstantData[9].powerTActive }}"
        unit_of_measurement: "W"
      - name: Wiser1_Tor_5
        value_template: "{{ value_json.MeterInstantData[10].powerTActive }}"
        unit_of_measurement: "W"
      - name: Wiser1_Autre
        value_template: "{{ value_json.MeterInstantData[4].powerTActive }}"
        unit_of_measurement: "W"

Ici Wiser1_Eau est remonté via un EER31500 dont une entrée est configurée en compteur d’eau à impulsion et Wiser1_Tor_1-Total par un EM5

- authentication: basic
    username: m2madmin
    password: XXXXXXX
    verify_ssl: False
    scan_interval: 10
    timeout: 200
    resource:  https://192.168.1.104/rsa1/MeterCumulatedData
    sensor:
      - name: Wiser1_Eau
        value_template: "{{ value_json.MeterCumulatedData[11].energyPActive / 1000 }}"
        unit_of_measurement: "m3"
        
      - name: Wiser1_Tor_1-Total
        value_template: "{{ value_json.MeterCumulatedData[6].energyPActive / 1000 }}"
        device_class: energy
        unit_of_measurement: "KWh"

Dans customize.yaml (afin de remonter correctement pour le suivi d’énergie):

sensor.wiser1_tor_1_total:
  unit_of_measurement: kWh
  friendly_name: Wiser1_Tor_1-Total
  device_class: energy
  state_class: measurement
  last_reset: "2021-03-25T20:19:52+00:00"  

Ensuite si vous avez des EER31500 le contrôle des sorties est possible via des swiths.

https://jsonpathfinder.com/ m’a bien aidé pendant mes recherches.

Trés intéressant ta solution.
J’ai essayé de récupérer les infos de conso électrique mais avec la commande MeasurementData;sId=%d;ch=%d mais ça implique une requête par canal et j’ai l’impression que s’il y a trop de requêtes en peu de temps que le module ne réponds plus.

Est-ce que tu pourrais mettre le json récupéré par MeterInstantData parce que je suis étonné de la valeur entre crochets.

Bonjour/Bonsoir François02,

Désolé de la réponse tardive, ci-dessous le Json complet pour MeterInstantData (non tronqué comme plus haut dans le fil de discussion, mais vide car pas en prod pour le moment):

{
	"MeterInstantData": [
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 205,
			"channel": 5
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 205,
			"channel": 0
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 205,
			"channel": 1
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 205,
			"channel": 2
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 205,
			"channel": 3
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 205,
			"channel": 4
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 201,
			"channel": 0
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 201,
			"channel": 1
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 201,
			"channel": 2
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 201,
			"channel": 3
		},
		{
			"currentA": 0,
			"currentB": 0,
			"currentC": 0,
			"voltageAB": 0,
			"voltageBC": 0,
			"voltageCA": 0,
			"voltageAN": 0,
			"voltageBN": 0,
			"voltageCN": 0,
			"powerA": 0,
			"powerB": 0,
			"powerC": 0,
			"powerTActive": 0,
			"powerTReactive": 0,
			"powerTApparent": 0,
			"powerFactorT": 0,
			"frequency": 0,
			"slaveId": 201,
			"channel": 4
		}
	]
}

C’est pas très lisible à première vu mais avec https://jsonpathfinder.com/ par exemple, on peut facilement créer ses « value_template: »

Bonne journée/nuit.
++

PS: UsageMeters aide à identifier les « consommateurs »

{
	"UsageMeters": [
		{
			"slaveId": 205,
			"channel": 5,
			"usage": "Main_Incomer",
			"unitEnergy": "ElectricWh"
		},
		{
			"slaveId": 205,
			"channel": 0,
			"usage": "Heating",
			"unitEnergy": "ElectricWh"
		},
		{
			"slaveId": 205,
			"channel": 1,
			"usage": "Cooling",
			"unitEnergy": "ElectricWh"
		},
		{
			"slaveId": 205,
			"channel": 2,
			"usage": "SanitaryHotWater",
			"unitEnergy": "ElectricWh"
		},
		{
			"slaveId": 205,
			"channel": 3,
			"usage": "Sockets",
			"unitEnergy": "ElectricWh"
		},
		{
			"slaveId": 205,
			"channel": 4,
			"usage": "Others",
			"unitEnergy": "ElectricWh"
		}
	]
}

Pas de soucis, on réponds quand on peut. Je suis moi même très pris en ce moment.

Ça fait deux semaines que l’authentification ne fonctionne plus chez moi, c’est pareil pour vous ?

J’avoue que là je n’ai aucune idée de la cause, ça marchait bien et après une perte de connexion du module (une mise à jour ?) plus d’accès.

Bonsoir,
Oui, j’ai plusieurs EER31800, la version 1.7.7 a changé la donne! (Merci Schneider!)
La version 1.7.5 fonctionne encore avec l’ancienne méthode d’authentification.
Je regarde si je trouve un truc à ce sujet.
J’ai été en contact téléphonique avec le support wiser aujourd’hui…
Wait and see.

Bonjour/Bonsoir
Je confirme que Schneider pousse des MAJ de Firmware « dans le dos » de la 1.7.5 vers la 1.7.7. Du coup plus possible de se connecter aux EER31800. Personnellement je trouve ça très limite de mettre à jour des firmware sans information préalable, de ce fait ils ont « endommagé » un de mes EER31800, il a perdu son nom lol.
Fuyons les logiciels fermés et vive l’opensource.
J’aimais beaucoup la solution WISER mais la politique de Schneider me laisse un goût amer.
J’ai également eu des infos que je ne partagerai pas en public car je commence a être paranoïaque (la fièvre peut être?)
T_T

Bonjour WhiteHawk_29,
Puis je savoir pourquoi?
Au plaisir d’échanger.

J’ai presque envie de démonter le module IP pour voir ce qu’il a dans le ventre…

Vu la légèreté de considération de Schneider vis à vis de ses clients qui achètent des solutions onéreuses, ça me démange aussi.
Cependant, il faudrait en en acheter une autre non déjà mis à jour (je sais où pour pas très cher), ne pas la mettre à jour (règle firewall ou hors ligne), et faire un dump de firmware ou rester hors ligne forever.
La nouvelle méthode d’identification a déjà été « déconstruite » mais est pour le moment difficilement contournable pour une intégration correcte dans HA, valide seulement 1H, mais fait en 3sec.
Personnellement, je ne risque pas de faire une bonne pub à Schneider qui pousse des firmwares dans le dos des clients car c’est une très mauvaise pratique.

La partie de la carte qui nous intéresse:

Type de mémoire du bios/firmware j’imagine.

Même puce que pour des bios de vieux macbook pro.

50 € pour faire mumuse et un dump de firmware… HAHAHA
Je suis trop radin, utilisons plutôt ce qui est déjà dispo, un CH341B à quelques euros devrait marcher aussi:

Reste plus qu’a…
ah non, il me manque quelque chose:
1.8v adaptor