stats

ESP-01 & TUYA

De meeste Arduino Tuya IoT projecten gebruiken de ESP enkel als wifi /serial interface, waarbij deze de communicatie van de tuya berichten voor zijn rekening neemt. Maar het kan anders....
Om mijn Micro Inverter off cloud te krijgen en lokaal de output trottle te kunnen bedienen, heb ik [*] de nodige reverse engineering gedaan op het Tuya protocol en alles in een simpele ESP-01 gestopt.

Het Tuya protocol is in wezen een variant van het modbus protocol, aangevuld met versleutelde (!) info in json formaat. Voor de communicatie gebruikt Tuya een udp protocol over de poorten 6668 (TX) en 6667 (RX). Een tuya bericht bestaat uit een prefix, een header met daarin de sequence, het commando en de json payload lengte, gevolgd door de payload zelf, een checksom over de prefix, header en payload, en wordt afgesloten met een suffix.

Elk tuya device doet om de 5 seconden een broadcast (heartbeat) met een standaard versleuteling, dus deze info is eenvoudig te decoderen. Voor het echte werk is een device gebonden sleutel nodig. Deze is verkrijgbaar via registratie op de tuya development site, of wel bij de organisatie van de tuya cloud app.
Met deze device sleutel wordt in de communicatie een handshake gedaan om een sessie sleutel te krijgen waarmee vervolgens opdrachten geven kunnen worden zoals een status opvraag of een besturing (bv die output trottle).

Het klinkt uiterst simpel, maar er zijn toch wel wat haken en ogen. Zo moet het json bericht een veelvoud van 16 byte zijn, is de checksum - als lichtelijke overkill - 256 bit en zijn er verschillende versies.
Omdat er een aanzienlijk verschil is tussen tuya v3.4 en v3.5 heb ik in mijn geval enkel de v3.4 versie gebruikt en een aantal onnodige opties weggelaten. Als vervanging voor de cloud-app heb ik de ESP-01 een lokale webpagina gegeven waar de actuele inverter waarden op te zien zijn, inclusief grafieken voor de opbrengst over de dag en over het jaar.

Uiteindelijk is het de bedoeling ook het laden van een accu en het nachtelijk (..) gebruik daarvan in diezelfde ESP onder te brengen. Er worden dan twee relais aangestuurd voor respectievelijk laden en gebruik van de accu. In de nacht wordt dan, met een aangepaste output instelling en afhankelijk van de accu conditie, enkel het sluimerverbruik gecompenseerd.

Het geheel bevind zich nu nog in een ontwikkel fase, maar gezien het tuya deel werkt is de rest slechts een toevoeging van eerder gebruikte functies zoals de webserver met een pagina voor de invertor prestaties en de grafieken.

[*] Met dank aan FrBerger83 en Google

Heb je vragen of opmerkingen? Stuur me een berichtje en je krijgt alle gewenste informatie!

HOME