Connecting to the Tuya Cloud, to monitor a set of home IoT devices. Recently I bought a set of Silvercrest/Lidl Homesmart devices.

Tuya provides a REST API, however there are definitely some quirks when authenticating and signing the request. So I created some bash functions at nathan-gs/tuya-cloud-bash.

Usage is very much simplified.

1
2
3
4
5
6
7
8
TUYA_CLIENT_ID=""
TUYA_SECRET=""
TUYA_BASE_URL="https://openapi.tuyaeu.com"

source tuya.sh

TUYA_ACCESS_TOKEN=$(tuya_get_token $TUYA_CLIENT_ID $TUYA_SECRET "$TUYA_BASE_URL")
tuya $TUYA_CLIENT_ID $TUYA_SECRET "$TUYA_BASE_URL" $TUYA_ACCESS_TOKEN get '/v1.0/iot-01/associated-users/devices?last_row_key='

Looking at the signing part, we see we need to create a new string:

1
2
3
4
5
6
7
$TUYA_CLIENT_ID # client ID
$TUYA_ACCESS_TOKEN # Access Token
Timestamp # Timestamp in Milliseconds
GET # Method in uppercase
hash(body) # Hash of the body
hash(headers) # Hash of special headers
path # Url path part

which can be signed using:

1
echo -ne "$signatureToSign" | openssl dgst -sha256 -hmac "$secret" | awk '{print $2}'

I also added a small Tuya Cloud Prometheus text exporter: nathan-gs/tuya-cloud-bash/tuya_prometheus_exporter.sh, which can be used to automatically collect all numeric metrics.