Plugin wiser link pour EER31600 incompatible avec le nouveau module IP (EER31800)

Tags: #<Tag:0x00007fcbb32144c8>

Bonjour,

Je viens de faire l’acquisition d’un module IP EER31800 pour remontées via IP des données de compteurs d’énergie wiser EM5.

Je débute sous jeedom, j’ai installé l’image officiel sur Raspberry Pi, commencé la configuration et acheter le plugin wiser pour communiquer avec mon installation.

Comme évoqué sur l’ancien forum et sur ce post Remontées d'informations sur Jeedom depuis un WiserLink 31800
le plugin est compatible avec le module EER31600, mais plus avec la nouvelle version du module IP EER31800.

Par ailleurs, l’installation et la communication avec l’application officielle Schneider wiser energy marche sans aucun problème.

J’ai mené mon enquête (documentée dans le post ci dessus) et découvert que le nouveau module (désormais pourvu du bluetooth pour l’appairage) avait changé d’API. Après avoir dé-compilé l’apk de l’application, j’ai réussi a identifié le nouveau mode d’authentification et les nouvelles routes de l’API.

Précédemment, l’authentification se faisait au moyen d’un login mot de passe admin: admin.
Maintenant, l’application utilise l’adresse Mac du module et une clef (écrite en dur dans les sources de l’application) pour générer un mot de passe. Je ne suis pas développeur java (encore moins php), mais la génération du mot de passe était assez facile et ne devrait pas poser de problème en PHP.

J’ai développé un script python qui démontre la génération de clef et la connexion au module.

Etant nouveau dans la communauté, je ne sais pas trop vers qui m’adresser avec ces informations. Je ne suis pas en mesure de développer en PHP, mais avec le script python, l’exercice devrait être assez simple.

Merci d’avance pour votre aide,

Pascal

my_char = "PzLaM2ZqOx5Ks3NwIcJ1Sd6NeUvH7WfBrY9AbGgVtTnGhVyTmG8EjVu0TkFi4QClRoDpX"
mac_addr = '00:80:F4:C9:B2:A1'
replaceAll = mac_addr.replace(':', '')


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__':

    import requests


    key = generatePasswd()

    r = requests.get('https://192.168.1.13/rsa1/MeterInstantData', verify=False, auth=('m2madmin', key))
    r.json()


paths =   {
     "DELETE_INSTANCE_MIO_INPUT" : "/rsa1/MioInput;channel=",
     "DELETE_INSTANCE_MIO_OUTPUT" : "/rsa1/MioOutput;channel=",
     "DELETE_INSTANCE_MPR" : "/rsa1/MprEndpoint;channel=",
     "DELETE_WIRELESS_INPUT" : "/rsa1/MioWirelessInput;slaveId=%d;channel=%d",
     "DELETE_WIRELESS_METER" : "/rsa1/WirelessMeter;deviceAddress=",
     "DELETE_WIRELESS_OUTPUT" : "/rsa1/MioWirelessOutput;slaveId=%d;channel=%d",
     "DELETE_WIRELESS_PRO" : "/rsa1/WirelessProChannel;deviceAddress=",
     "DELETE_WIRELESS_SENSOR" : "/rsa1/WirelessSensor;deviceAddress=",
     "GET_BRANCH_METERS" : "/rsa1/BranchMeters",
     "GET_CONNECTION_STATISTICS" : "/rsa1/WiserConnectionStatistics",
     "GET_CONTROLLER" : "/rsa1/Controller",
     "GET_EP_CONFIG_UPDATE_STATUS" : "/rsa1/EpConfigUpdateStatus ",
     "GET_GATEWAY_KEY" : "/rsa1/GateWayKey",
     "GET_INSTANCES_MPR" : "/rsa1/MprEndpoint/instances",
     "GET_INSTANCE_MIO_INPUT" : "/rsa1/MioInput/instances",
     "GET_INSTANCE_MIO_OUTPUT" : "/rsa1/MioOutput/instances",
     "GET_MEASUREMENT_DATA" : "/rsa1/MeasurementData;sId=%d;ch=%d",
     "GET_METER_CUMULATED_DATA" : "/rsa1/MeterCumulatedData",
     "GET_METER_INSTANT_DATA" : "/rsa1/MeterInstantData",
     "GET_PRODUCT_DETAILS" : "/rsa1/ProductDetails",
     "GET_PRODUCT_INTERFACE" : "/fct/ProductInterface",
     "GET_SYSTEM_UPGRADE_STATUS" : "/rsa1/SystemUpgradeStatus",
     "GET_USAGE_METERS" : "/rsa1/UsageMeters",
     "GET_USER_PREPAIRING" : "/rsa1/UserPreparing",
     "GET_WIRELESS_DIAGNOSTIC" : "/rsa1/WirelessDiagnostic",
     "GET_WIRELESS_INPUT" : "/rsa1/MioWirelessInput;slaveId=%d;channel=%d",
     "GET_WIRELESS_INPUTS" : "/rsa1/MioWirelessInput/instances",
     "GET_WIRELESS_METER" : "/rsa1/WirelessMeter;deviceAddress=",
     "GET_WIRELESS_METERS" : "/rsa1/WirelessMeter/instances",
     "GET_WIRELESS_METERS_LITE" : "/rsa1/WirelessMeterList/instances",
     "GET_WIRELESS_METER_LITE" : "/rsa1/WirelessMeterInfo;dA=",
     "GET_WIRELESS_OUTPUT" : "/rsa1/MioWirelessOutput;slaveId=%d;channel=%d",
     "GET_WIRELESS_OUTPUTS" : "/rsa1/MioWirelessOutput/instances",
     "GET_WIRELESS_PRO_LIST" : "/rsa1/WirelessProChannel/instances",
     "GET_WIRELESS_PRO_LITE" : "/rsa1/WirelessProInfo;dA=",
     "GET_WIRELESS_SENSOR" : "/rsa1/WirelessSensor;deviceAddress=",
     "GET_WIRELESS_SENSORS" : "/rsa1/WirelessSensor/instances",
     "GET_WIRELESS_SENSOR_LITE" : "/rsa1/WirelessSensorInfo;dA=",
     "GET_WIRELESS_SENSOR_TEMPERATURE" : "/rsa1/TemperatureInfo;sId=",
     "POST_BLINK_DEVICE" : "/rsa1/WirelessManager/methods/blinkDevice",
     "POST_BUSINESS_INFO" : "/api/v1/fesb/provision",
     "POST_EVE_METER" : "/rsa1/LoadStatus/methods/SetStandbyThreshold",
     "POST_FIRMWARE_UPLOAD" : "/FirmwareUpload",
     "POST_INIT_SYSTEM_UPGRADE" : "/rsa1/Controller/methods/initSystemUpgrade",
     "POST_INSTANCE_MIO_CONTROL" : "/rsa1/Controller/methods/operateMio",
     "POST_INSTANCE_MIO_INPUT" : "/rsa1/MioInput/instances",
     "POST_INSTANCE_MIO_OUTPUT" : "/rsa1/MioOutput/instances",
     "POST_INSTANCE_MPR" : "/rsa1/MprEndpoint/instances",
     "POST_STATUS" : "/rsa1/LoadStatus/methods/GetStatus",
     "PUT_BRANCH_METERS" : "/rsa1/BranchMeters",
     "PUT_INSTANCE_MIO_INPUT" : "/rsa1/MioInput;channel=",
     "PUT_INSTANCE_MIO_OUTPUT" : "/rsa1/MioOutput;channel=",
     "PUT_INSTANCE_MPR" : "/rsa1/MprEndpoint;channel=",
     "PUT_USER_PREPAIRING" : "/rsa1/UserPreparing",
     "PUT_WIRELESS_CHANNEL" : "/rsa1/WirelessManager",
     "PUT_WIRELESS_INPUT" : "/rsa1/MioWirelessInput;slaveId=%d;channel=%d",
     "PUT_WIRELESS_METER" : "/rsa1/WirelessMeter;deviceAddress=",
     "PUT_WIRELESS_OUTPUT" : "/rsa1/MioWirelessOutput;slaveId=%d;channel=%d",
     "PUT_WIRELESS_SENSOR" : "/rsa1/WirelessSensor;deviceAddress=",
     "SEM_IDENTIFICATION" : "/rsa1/SemIdentificationOpt",
     "START_COMISSIONING" : "/rsa1/WirelessManager/methods/startCommissioning",
     "STOP_COMISSIONING" : "/rsa1/WirelessManager/methods/stopCommissioning",
     }

On me suggère de signaler le problème vers toi @Loic.
Quelle est la marche à suivre dans ce genre de cas pour la maintenance des plugins ?

Bonjour,
Malheureusement je ne m’occupe pas ce plugin je ne peux pas t’aider (par contre bravo pour l’analyse). Le plus simple est d’écrire à l’adresse de contact Jeedom (contact[at]jeedom.com)