Meross MSS310 Precio: 12€

Documentación API:
https://albertogeniola.github.io/MerossIot/

Github:
https://github.com/albertogeniola/MerossIot

Peticiones directamente al enchufe

Configuramos un proxy con SQUID

Ejecutamos tcpdump para capturar los paquetes con el siguiente comando:

tcpdump -i any -s 65535 -w captura.tcpdump

Abrimos el dump con wireshark

Filtramos por petción http y la ip del dispositivo, en mi caso son:

192.168.1.53
192.168.1.79
192.168.1.123

Por ejemplo el filtro:

ip.dst == 192.168.1.79 and http

Miramos las peticiones hasta que encontremos una que en el payload del post sale electricity:

{
    "header": {
        "from": "/app/724391-ce3061cb409fb325273d61db1fdc988b/subscribe",
        "messageId": "0dd9808195b48a358003b7da16de6862",
        "method": "GET",
        "namespace": "Appliance.Control.Electricity",
        "payloadVersion": 1,
        "sign": "178bed152888826e92e597b3b08e62fc",
        "timestamp": 1597047437,
        "triggerSrc": "Android"
    },
    "payload": {
        "electricity": {
            "channel": 0
        }
    }
}

Si hacemos un post con esa petición a <ip>/config tenemos los datos de consumo (añadir al final |python -m json.tool para poner formato legible) :

curl -d @peticion.json 192.168.1.79/config |python -m json.tool
{
    "header": {
        "from": "/appliance/20051881797870251h4148e1e91c65ce/publish",
        "messageId": "0dd9808195b48a358003b7da16de6862",
        "method": "GETACK",
        "namespace": "Appliance.Control.Electricity",
        "payloadVersion": 1,
        "sign": "67cd1c537334b5a6d9d8d3784f542135",
        "timestamp": 1597049595,
        "timestampMs": 431
    },
    "payload": {
        "electricity": {
            "channel": 0,
            "config": {
                "electricityRatio": 100,
                "voltageRatio": 188
            },
            "current": 287,
            "power": 41679,
            "voltage": 2293
        }
    }
}

Faltaría jugar con los timestamp por si caduca la petición

Para sacar solo el valor de power que es el que interesa, con jq (herramienta para parsear json) lanzamos:

curl --silent -d @peticion.json 192.168.1.79/config|jq -r '.payload.electricity.power'
42976