{ "name": "Correction valeurs négatives NAS-WR01ZE", "isActive": "1", "group": "", "mode": "provoke", "schedule": "", "trigger": [ "#[MAISON][EQUIPEMENT][Consommation]#", ], "timeout": "0", "object_id": null, "isVisible": "0", "display": { "name": "", "icon": "" }, "order": "9999", "description": "", "configuration": { "timeDependency": 0, "has_return": 0, "logmode": "default", "allowMultiInstance": "0", "syncmode": "0", "timeline::enable": "0", "timeline::folder": "" }, "elements": [ { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "trigger() == \"user\"", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "action", "subtype": null, "expression": "log", "options": { "enable": "1", "background": "0", "message": "USER" }, "order": "0" }, { "type": "element", "subtype": null, "expression": "227", "options": [], "order": "1", "element": { "name": null, "type": "code", "options": [], "order": "0", "subElements": [ { "name": null, "type": "code", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "code", "subtype": null, "expression": "\/\/ Ce bloc est executé manuellement via le scénario pour corriger toutes les valeurs erronées du module NAS-WR01ZE\n\/\/ Recherche dans toutes les commandes déclencheur\n\/\/ récupère toutes les valeurs d'historique\n\/\/ supprime les mauvaises valeurs une à une\n\/\/ recalcul de chaque nouvelle valeur\n\/\/ ajout de cette valeur\n\n$scenario->setLog(\"[X] Declencheurs \" . json_encode($scenario->getTrigger()));\n\n$triggers = $scenario->getTrigger();\nforeach ($triggers as $trigger) { \/\/ parmi tous les déclencheurs listés\n $cmdId = str_replace('#', '', $trigger);\n $cmdTrig = cmd::byId($cmdId);\n $histories = array_reverse(history::all($cmdTrig->getId())); \/\/ récupère toutes les valeurs historique\n foreach ($histories as $history) { \/\/ pour chaque valeur\n $currentValue = $history->getValue();\n $currentDatetime = $history->getDatetime();\n if ($currentValue < 0) { \/\/ si la valeur est négative\n $value = round((($currentValue*100)+2147483647)\/100,2); \/\/ valeur corrigée\n\n if ($value > 100000) continue; \/\/ valeurs lissées non prises en compte\n $scenario->setLog(\"[ID] Commande ID : \" . $history->getCmd_id());\n $scenario->setLog(\"[-] Ancienne valeur : \" . $currentValue);\n $scenario->setLog(\"[?] Nouvelle valeur : \" . $value);\n $scenario->setLog(\"[+] Confirmation valeur : \" . $history->getValue()); \n \/\/history::removes($history->getCmd_id(), $currentDatetime, $currentDatetime); \/\/ supprime la valeur historisée mauvaise\n $history->setValue($value)->save(null, true); \/\/ on remplace directement la valeur, pas besoin de réaffecter le cache ou autre\n }\n }\n}\n", "options": [], "order": "0" } ] } ] } } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [ { "type": "action", "subtype": null, "expression": "log", "options": { "enable": "1", "background": "0", "message": "AUTO" }, "order": "0" }, { "type": "element", "subtype": null, "expression": "221", "options": [], "order": "1", "element": { "name": null, "type": "if", "options": [], "order": "0", "subElements": [ { "name": null, "type": "if", "subtype": "condition", "options": { "collapse": "0", "enable": "1", "allowRepeatCondition": "0" }, "order": "0", "expressions": [ { "type": "condition", "subtype": null, "expression": "triggerValue() != \"\" AND triggerValue() < 0", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "element", "subtype": null, "expression": "224", "options": [], "order": "0", "element": { "name": null, "type": "code", "options": [], "order": "0", "subElements": [ { "name": null, "type": "code", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "code", "subtype": null, "expression": "\/\/ Ce bloc est executé selon la commande déclencheur définie (commande Consommation en kWh) du module NAS-WR01ZE\n\/\/ Recherche de la commande trigger\n\/\/ supression de l'historique de cette mauvaise valeur\n\/\/ recalcul de la nouvelle valeur\n\/\/ ajout de la valeur calculée en déclenchant un nouvel évenement\n\n$trigger = $scenario->getRealTrigger(); \/\/ et pas trigger() qui liste tous les déclencheurs\n$cmdId = str_replace('#', '', $trigger);\n$cmdTrig = cmd::byId($cmdId); \/\/ commande du déclenchement\n\n$value = round((($cmdTrig->execCmd()*100)+2147483647)\/100,2); \/\/ valeur corrigée\n\n$cmdHistory = history::byCmdIdAtDatetime($cmdTrig->getId(), $cmdTrig->getCollectDate()); \/\/ objet history de cette valeur\n\n$scenario->setLog(\"[T] Déclencheur : \" . $trigger);\n$scenario->setLog(\"[C] Date collecte : \" . $cmdTrig->getCollectDate());\n$scenario->setLog(\"[H] Valeurs history : \" . json_encode(utils::o2a($cmdHistory))); \/\/ contenu de l'objet\n\nif (is_object($cmdHistory)) {\n $currentValue = $cmdHistory->getValue();\n $currentDatetime = $cmdHistory->getDatetime();\n $cmdHistory->remove(); \/\/suppression de la valeur d'historique \n $cmdTrig->event($value, $currentDatetime); \/\/création de la valeur corrigée (pour déclencher toutes les actions en fonction de cette valeur (cache, return, event...) plutôt que juste remplacer la valeur de l'objet history)\n $scenario->setLog(\"[ID] Commande ID : \" . $cmdHistory->getCmd_id());\n $scenario->setLog(\"[-] Ancienne valeur : \" . $currentValue);\n $scenario->setLog(\"[?] Nouvelle valeur : \" . $value);\n}\n", "options": [], "order": "0" } ] } ] } } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [] } ] } } ] } ] } ] }