{ "name": "Chaudière - Puissance virtuelle - html", "isActive": "1", "group": "Chauffage", "mode": "all", "schedule": "*\/5 * * * *", "trigger": [ "#[Appartement][Mode chauffage][Mode]#" ], "timeout": "0", "isVisible": "0", "display": { "name": "", "icon": "<\/i>" }, "order": "9999", "description": "", "configuration": { "timeDependency": 1, "has_return": 0, "logmode": "default", "allowMultiInstance": "0", "syncmode": "0", "timeline::enable": "0", "timeline::folder": "" }, "elements": [ { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [ { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "tempEauMin", "value": "0" }, "order": "0" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "consigneConfort", "value": "variable(Consigne_Confort)" }, "order": "1" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "consigneEco", "value": "variable(Consigne_Eco)" }, "order": "2" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "consigneAbsence", "value": "variable(Consigne_Absence)" }, "order": "3" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "tempExterieur", "value": "[Appartement][Température][Température]" }, "order": "4" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "formuleLoiEau", "value": "1" }, "order": "5" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "formuleLoiEauPente", "value": "1.8" }, "order": "6" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "formuleLoiEauConstante", "value": "23" }, "order": "7" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "tempEauDepart", "value": "[Chaudière][Température eau chauffage][Température départ]" }, "order": "8" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "tempEauRetour", "value": "[Chaudière][Température eau chauffage][Température retour]" }, "order": "9" }, { "type": "action", "subtype": null, "expression": "tag", "options": { "enable": "1", "background": "0", "name": "modeSaison", "value": "[Appartement][Chauffage - Saison][Mode]" }, "order": "10" } ] } ] }, { "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": "\/**\n* Class and Function List:\n* Function list:\n* - remove_accent()\n* - calcTempChaudière()\n* - positionVanne()\n* Classes list:\n*\/\nrequire_once dirname(__FILE__) . '\/..\/..\/plugins\/JeedomConnect\/core\/class\/JeedomConnectWidget.class.php';\n\n$tags=$scenario->getTags(); \/\/ récupératon des tag du scénario\n$tempMin=$tags['#tempEauMin#'];\n$consigneConfort=$tags['#consigneConfort#'];\n$consigneEco=$tags['#consigneEco#'];\n$consigneAbsence=$tags['#consigneAbsence#'];\n$tempExt=cmd::byString(\"#\".$tags['#tempExterieur#'].\"#\")->execCmd() ;\n$loiEau=$tags['#formuleLoiEau#'];\n$loiEauPente=$tags['#formuleLoiEauPente#'];\n$loiEauConstante=$tags['#formuleLoiEauConstante#'];\n$tempEauDepart=cmd::byString(\"#\".$tags['#tempEauDepart#'].\"#\")->execCmd() ;\n$tempEauRetour=cmd::byString(\"#\".$tags['#tempEauRetour#'].\"#\")->execCmd() ;\n$modeSaison=cmd::byString(\"#\".$tags['#modeSaison#'].\"#\")->execCmd() ;\n\n$plugin = \"zigbee2mqtt\";\n$eqThermostatDevice = array('TS0601_thermostat', 'SPZB0001');\n$longueurMaxNomObject = 15;\n$etatTextuel = '' ;\n\n\/\/$borderStyle1 = ' style=\"border-radius: 2px;border: 1px solid steelblue; text-align:center;background-color: cornflowerblue\"';\n\/\/$borderStyle2 = ' style=\"border-radius: 2px;border: 1px solid steelblue; text-align:center\"';\n$borderStyle1 = ' style=\"border-radius: 0px;border: 0px solid white; text-align:center;background-color: steelblue\"';\n$borderStyle2 = ' style=\"border-radius: 0px;border: 0px solid white; text-align:center;background-color: skyblue\"';\n\n\nfunction remove_accent($str) {\n $a = array('é', 'è');\n $b = array('e', 'e');\n \n return str_replace($a, $b, trim($str,\"[]\"));\n}\n\nfunction calcTempChaudière( $_tempMin,$_puissance,$_loiEau,$_tempInt,$_tempExt,$_tempEauDepart,$_tempEauRetour,$_modeSaison,$_loiEauPente,$_loiEauConstante) {\n if ($_modeSaison == 'Eté' || $_puissance == 0) $_tempEau = $_tempMin ;\n else {\n if ( $_loiEau ) $_tempEau = round( $_loiEauPente * ($_tempInt - $_tempExt) + $_loiEauConstante );\n else $_tempEau = round(20 + 0.7 * $_puissance); \n }\n return $_tempEau;\n}\n\nfunction positionVanne($deviceModel, $eqLogicId, $eqLogicHumanName) {\n \/\/ position de la vanne en fonciton du modele \n switch ($deviceModel) {\n case 'TS0601_thermostat':\n $position = cmd::byString(\"#\" . $eqLogicHumanName . \"[position]#\")->execCmd();\n break;\n case 'SPZB0001':\n $position = cmd::byString(\"#\" . $eqLogicHumanName . \"[Position de la vanne]#\")->execCmd();\n \/\/ correction position vanne = 100 au lieu de 0 lorsque vanne fermée\n $temperatureVanne = cmd::byEqLogicIdAndGenericType($eqLogicId, 'THERMOSTAT_TEMPERATURE', false)->execCmd();\n $temperatureConsigne = cmd::byEqLogicIdAndGenericType($eqLogicId, 'THERMOSTAT_SETPOINT', false)->execCmd();\n if ($position == 100 and $temperatureVanne >= $temperatureConsigne) $position = 0;\n break;\n default:\n break;\n }\n return $position;\n}\n \n$scenario->setLog(\" Puissance | Piece | Vanne | Consigne\") ;\n\n$htmlTitre = '' ;\n$etatTextuel=$etatTextuel . $htmlTitre ;\n \nforeach (eqLogic::byType($plugin, true) as $eqLogic) \/\/ pour chaque equipement du plugin\n{\n $ouvertureValue = 0;\n $ouvertureValueTxt = '';\n $temperaturePiece = 0;\n $temperatureVanne = 0;\n $temperatureConsigne = 0;\n $temperaturePiece = 0;\n \n $eqLogicId = $eqLogic->getId();\n \/\/$scenario->setLog($eqLogic->getHumanName());\n $eqLogicHumanName = $eqLogic->getHumanName();\n \/\/$scenario->setLog($eqLogic->getObject()->getHumanName());\n $objectHumanName = $eqLogic->getObject()->getHumanName();\n $objectId = $eqLogic->getObject()->getId();\n $deviceModel = $eqLogic->getConfiguration('device_model');\n\n if (in_array($deviceModel, $eqThermostatDevice, true)) {\n \/\/position de la vanne\n $position = positionVanne($deviceModel, $eqLogicId, $eqLogicHumanName);\n\n \/\/ Detection des ouvertures de fenetre\n $ouvertures = cmd::byGenericTypeObjectId('OPENING_WINDOW', $objectId);\n foreach ($ouvertures as $ouverture) {\n if ($ouvertureValue != 1) $ouvertureValue = $ouverture->execCmd();; \/\/ si plusieurs fenetres dans la pièce ...\n if ($ouvertureValue == 1) $ouvertureValueTxt = '(fenetre ouverte)';\n }\n\n \/\/ on ne compte l'ouverture de la vanne que si la fenetre est fermée\n if ($ouvertureValue == 0) {\n $positionSomme = $positionSomme + $position;\n $nbThermostat++;\n }\n\n \/\/ Température de la pièce\n $temperaturesId = cmd::byGenericTypeObjectId('TEMPERATURE', $objectId); \/\/ recherche par GenType & pièce\n foreach ($temperaturesId as $temperatureId) { \/\/ boucle sur les GenType\n $temperatureModel = eqLogic::byId($temperatureId->getEqLogic()->getId())->getConfiguration('device_model');\n \n \/\/ $scenario->setLog('--'.$temperatureModel);\n switch ($temperatureModel) {\n case 'WSDCGQ11LM':\n $temperaturePiece = $temperatureId->execCmd();\n break;\n case 'SNZB-02':\n $temperaturePiece = $temperatureId->execCmd();\n break;\n }\n \n\/\/ $temperaturePiece = $temperatureId->execCmd(); \/\/ récup de la valeur\n }\n\n \/\/ temperature de la vanne\n $temperatureVanne = cmd::byEqLogicIdAndGenericType($eqLogicId, 'THERMOSTAT_TEMPERATURE', false)->execCmd();\n $temperatureConsigne = cmd::byEqLogicIdAndGenericType($eqLogicId, 'THERMOSTAT_SETPOINT', false)->execCmd();\n\n\n \n if ($temperaturePiece != 0){\n $log = str_pad(remove_accent($objectHumanName), $longueurMaxNomObject, ' ', STR_PAD_RIGHT) . \" \" . str_pad($position, 4, ' ', STR_PAD_LEFT) . \"% | \" . number_format($temperaturePiece, 1) . \"°C | \" . number_format($temperatureVanne, 1) . \"°C | \". number_format($temperatureConsigne,1).\"°C \" . $ouvertureValueTxt ;\n $html= ''.remove_accent($objectHumanName).'<\/th>'.$position.'%<\/td>'.$temperaturePiece.'°C<\/td>'.$temperatureVanne.'°C<\/td>'.$temperatureConsigne.'°C<\/td><\/tr>';\n }\n else {\n $log = str_pad(remove_accent($objectHumanName), $longueurMaxNomObject, ' ', STR_PAD_RIGHT). \" \" . str_pad($position, 4, ' ', STR_PAD_LEFT) . \"% | - | \" . number_format($temperatureVanne, 1) . \"°C | \". number_format($temperatureConsigne,1).\"°C \" . $ouvertureValueTxt ;\n $html= ''.remove_accent($objectHumanName).'<\/th>'.$position.'%<\/td><\/td>'.$temperatureVanne.'°C<\/td>'.$temperatureConsigne.'°C<\/td><\/tr>'; }\n $scenario->setLog($log);\n $etatTextuel= $etatTextuel . $html ;\n }\n}\n$etatTextuel= $etatTextuel . \"<\/table><\/body><\/html>\" ;\n$positionAvg = round(round($positionSomme \/ $nbThermostat) \/ 5) * 5;\n\n\/\/modes chaudière = { \"Eco\":\"0\", \"Confort\":\"3\", \"Hors gel\":\"4\"}\n$modeChauffage = cmd::byString(\"#[Appartement][Mode chauffage][Mode]#\")->execCmd();\n\nswitch ($modeChauffage) {\n case \"Matin\":\n $mode = 3;\n $tempInt=$consigneConfort;\n break;\n case \"Midi\":\n $mode = 3;\n $tempInt=$consigneConfort;\n break;\n case \"Confort\":\n $mode = 3;\n $tempInt=$consigneConfort;\n break;\n case \"Eco\":\n $mode = 0;\n $tempInt=$consigneAbsence; \n break;\n case \"Hors gel\":\n $mode = 4;\n $tempEau = $tempMin ;\n $tempInt=$consigneAbsence;\n break;\n}\n\n\/\/ calcul de la temperature de l'eau\n$tempEau = calcTempChaudière($tempMin,$positionAvg,$loiEau,$tempInt,$tempExt,$tempEauDepart,$tempEauRetour,$modeSaison,$loiEauPente,$loiEauConstante);\n\/\/$scenario->setLog($tempEau);\n \ncmd::byString(\"#[Chaudière][Puissance][Puissance demandée]#\")->event($positionAvg);\ncmd::byString(\"#[Chaudière][Puissance][Température eau]#\")->event($tempEau);\ncmd::byString(\"#[Chaudière][Puissance][Mode]#\")->event($mode);\ncmd::byString(\"#[Chaudière][Puissance][Etat textuel]#\")->event($etatTextuel);\n\n\/\/ lancement script chaudière\ncmd::byString(\"#[Chaudière][Asservissement][Rafraichir]#\")->execCmd();\ncmd::byString(\"#[Chaudière][Puissance][Dernière MAJ - timestamp]#\")->event(time());\nsleep(5);\n$scenario->setLog(\"Position moyenne -> \" . $positionAvg . \"% ,Mode -> \" . $mode . \", Temperature eau -> \" . $tempEau . \"°C)\");\n\n", "options": [], "order": "0" } ] } ] }, { "name": null, "type": "action", "options": [], "order": "0", "subElements": [ { "name": null, "type": "action", "subtype": "action", "options": { "collapse": "0", "enable": "1" }, "order": "0", "expressions": [] } ] }, { "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": " #timestamp# - #[Chaudière][Puissance][Dernière MAJ - timestamp]# >= 3600", "options": [], "order": "0" } ] }, { "name": null, "type": "then", "subtype": "action", "options": [], "order": "1", "expressions": [ { "type": "element", "subtype": null, "expression": "572", "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": "\/\/ Pb de script, pas de maj depuis 1h \n\/\/ arret de la chaudière\ncmd::byString(\"#[Chaudière][Puissance][Température eau]#\")->event(0);\ncmd::byString(\"#[Chaudière][Puissance][Mode]#\")->event(0);\n\n\/\/ lancement script chaudière\ncmd::byString(\"#[Chaudière][Asservissement][Rafraichir]#\")->execCmd();", "options": [], "order": "0" } ] } ] } }, { "type": "action", "subtype": null, "expression": "#[Norbert][JC_Norbert][Notif_Erreur]#", "options": { "enable": "1", "background": "0", "title": "Arrêt Chaudière", "message": "Pas de mise à jour des infos depuis plus de 60min\n--> ARRET DE LA CHAUDIERE" }, "order": "1" }, { "type": "action", "subtype": null, "expression": "message", "options": { "enable": "1", "background": "0", "message": "Arrêt de la Chaudière, pas de MAJ des informations d'asservissement depuis plus de 60min" }, "order": "2" } ] }, { "name": null, "type": "else", "subtype": "action", "options": [], "order": "2", "expressions": [] } ] } ] }
<\/th>Puissance<\/th>Piece<\/th>Vanne<\/th>Consigne<\/th>