Ostsin Zigbee seadme, millel pole tuge! Kas võin selle prügikasti visata?

minutit

Kindlasti mitte! Just sel nädalal juhtus minuga see esimest korda ning sain järgi proovida, kuidas käib uutele seadmetele toe lisamine.

Tänu sellele, et Zigbee on avatud protokoll, siis me saame lugeda kõiki väärtusi logidest. Ainus probleem on, et peame need väärtused ise kaardistama reaalsete funktsioonide või näitajate külge. Õnneks on zigbee2mqtt ise ka avatud lähtekoodiga projekt, mistõttu saame omajagu spikerdada eelnevate seadete pealt.

Minu ostetud seade oli põrandakütte termostaat, millel oli vähe tellimusi ja näpuotsaga tagasisidet jäetud, kuid ta nägi minu silmis palju parem välja, kui kõik teised saadavaolevad. Lisaks sellele oli ta tunduvalt odavam kampaania ajal.

Seadme sain ühendada nagu tavaliselt Zigbee seadmed ikka, kuid kohe tervitas mind teavitus, et tugi sellele seadmele veel puudub. Seal oli ilusti juures ka link, kust leidsin juhendi. Samm-sammu haaval hakkasin pusima ja tunni-kahega sain aru, kuidas saab õigele logile ligi ja mida peab hakkama kaardistama. Allpool kiire näide, kuidas näevad välja zigbee2mqtt logis read hetkel, mil lülitasin lapseluku sisse ja seejärel välja.

debug 2023-11-01 18:53:20: Received Zigbee message from 'TS0601', type 'commandDataReport', cluster 'manuSpecificTuya', data '{"dpValues":[{"data":{"data":[1],"type":"Buffer"},"datatype":1,"dp":9}],"seq":37449}' from endpoint 1 with groupID 0
debug 2023-11-01 18:53:20: Datapoint 9 not defined for '_TZE200_lndsb16m' with value true
debug 2023-11-01 18:53:28: Received Zigbee message from 'TS0601', type 'commandDataReport', cluster 'manuSpecificTuya', data '{"dpValues":[{"data":{"data":[0],"type":"Buffer"},"datatype":1,"dp":9}],"seq":37961}' from endpoint 1 with groupID 0
debug 2023-11-01 18:53:28: Datapoint 9 not defined for '_TZE200_lndsb16m' with value false

Siit saab järeldada, et Datapoint 9 on lapseluku kohta info ja väärtused on ka vastavalt true ja false. Niimoodi katsetasin läbi kõik minu jaoks olulised funktsioonid ja teiste seadmete pealt koodi spikerdades sain kokku sellise faili ja tulemuse:

{
    fingerprint: [
        {
            modelID: 'TS0601',
            manufacturerName: '_TZE200_lndsb16m',
        },
    ],
    model: 'TS0601_thermostat_4',
    vendor: 'TuYa',
    description: 'Floor heating thermostat',
    fromZigbee: [tuya.fz.datapoints],
    toZigbee: [tuya.tz.datapoints],
    onEvent: tuya.onEventSetTime, 
    configure: tuya.configureMagicPacket,
    exposes: [
        e.climate()
        .withLocalTemperature(ea.STATE)
        .withSetpoint('current_heating_setpoint', 10, 30, 0.5, ea.STATE_SET)
        .withRunningState(['idle', 'heat'], ea.STATE),
        e.child_lock(),
    ],
    meta: {
        tuyaDatapoints: [
            [2, 'current_heating_setpoint', tuya.valueConverter.divideBy10],
            [3, 'local_temperature', tuya.valueConverter.divideBy10],
            [9, 'child_lock', tuya.valueConverter.lockUnlock],
            [102, 'running_state', tuya.valueConverterBasic.lookup({'heat': tuya.enum(0), 'idle': tuya.enum(1)})],
        ],
    },
};

Olgugi, et kogu see asi näeb välja väga tehniline, siis tegelikkuses on juhendid ja dokumentatsioon arusaadav ja kenasti kirjeldatud. Nagu mainitud, siis kogu see asi võttis aega tunni-kaks ja sain selle omale nüüd tööle. Laen selle koodi ka GitHubi üles ja palun sellel lisada zigbee2mqtt põhikoodi sisse, et teistel kasutajatel töötaks see toode kohe karbist välja võttes.

Lisa kommentaar

Sinu e-postiaadressi ei avaldata. Nõutavad väljad on tähistatud *-ga