From 3e4529635f584eea3f3df207f7a0c5a3edc3537b Mon Sep 17 00:00:00 2001 From: Tcharp38 Date: Mon, 18 Mar 2024 18:59:09 +0100 Subject: [PATCH] check & update JSON: updates: 'tuyaEF00/fromDevice' => 'private/EF00' --- .tools/check_json.php | 39 +++++++++++++++++++++++++++++++++++++++ .tools/update_json.php | 14 ++++++++++++++ docs/fr_FR/Changelog.rst | 1 + 3 files changed, 54 insertions(+) diff --git a/.tools/check_json.php b/.tools/check_json.php index 31d2932da0..0771d31026 100644 --- a/.tools/check_json.php +++ b/.tools/check_json.php @@ -336,6 +336,7 @@ function checkDeviceModel($devModName, $dev) { $pKeyLen = strlen($pKey); $pType = $pVal['type']; + if ($pType == "xiaomi") { if ($pKeyLen != 9) { // Expecting CLUSTID-ATTRID newDevError($devModName, "ERROR", "Xiaomi private support: Invalid key '${pKey}'"); @@ -370,6 +371,44 @@ function checkDeviceModel($devModName, $dev) { } } } + + /* Tuya DP case + "EF00": { + "type": "tuya", + "05": { // DP + "function": "rcvValue", + "info": "01-measuredValue" + }, + }, + */ + else if ($pType == "tuya") { + if ($pKeyLen != 4) { // Expecting CLUSTID + newDevError($devModName, "ERROR", "Tuya DP private support: Invalid key '${pKey}'"); + continue; + } + + foreach ($private[$pKey] as $dpId => $dpVal) { + if ($dpId == "type") + continue; + + if (!isset($dpVal['function'])) { + $error = newDevError($devModName, "ERROR", "Missing 'function' for private/${pKey}"); + continue; + } + $func = $dpVal['function']; + $supportedFunc = ['rcvValue', 'rcvValueDiv', 'rcvValueMult', 'rcvValue0Is1']; + if (!in_array($func, $supportedFunc)) { + $error = newDevError($devModName, "ERROR", "Invalid function '${func}' for private/${pKey} DP ${dpId}"); + continue; + } + if ($func == 'rcvValueDiv') { + if (!isset($dpVal['div'])) { + $error = newDevError($devModName, "ERROR", "Missing 'div' for DP '${dpId}' in private/${pKey}"); + continue; + } + } + } + } } } diff --git a/.tools/update_json.php b/.tools/update_json.php index 2ca73e8b31..c0d3193dcd 100644 --- a/.tools/update_json.php +++ b/.tools/update_json.php @@ -718,6 +718,20 @@ function updateDevice($devName, $fullPath, $dev) { $devUpdated = true; echo " 'xiaomi' updated to 'private'.\n"; } + // tuyaEF00/fromDevice => private + type=tuya + if (isset($dev[$devName]['tuyaEF00'])) { + if (isset($dev[$devName]['tuyaEF00']['fromDevice'])) { + $dev[$devName]['private'] = []; + $dev[$devName]['private']['EF00'] = []; + $dev[$devName]['private']['EF00']['type'] = 'tuya'; + foreach ($dev[$devName]['tuyaEF00']['fromDevice'] as $dpId => $dpVal) { + $dev[$devName]['private']['EF00'][$dpId] = $dpVal; + } + } + unset($dev[$devName]['tuyaEF00']); + $devUpdated = true; + echo " 'tuyaEF00/fromDevice' updated to 'private/EF00'.\n"; + } if ($devUpdated) { $text = json_encode($dev, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); diff --git a/docs/fr_FR/Changelog.rst b/docs/fr_FR/Changelog.rst index 67854ab83d..2b2852b598 100644 --- a/docs/fr_FR/Changelog.rst +++ b/docs/fr_FR/Changelog.rst @@ -13,6 +13,7 @@ ChangeLog - Interne: Configuration sur 'device announce' déplacée de Parser vers Cmd. - Réseau: Affichage table des liens Zigate 1 à l'ouverture. - SonOff ZbminiL2: Correction 'mac capa' incorrect => 'RxOnWhenIdle'. +- Interne: Mises-à-jour 'check_json' + 'update_json' pour changement 'tuyaEF00/fromDevice' => 'private/EF00'. 240308-BETA-1 -------------