. */ /* * ***************************Includes********************************* */ require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php'; class gsh_TemperatureSetting { /* * *************************Attributs****************************** */ /* * ***********************Methode static*************************** */ public static function discover($_device,$_eqLogic){ $return = array('traits' => array(),'customData' => array(),'attributes' => array()); $modes = ''; if ($_device->getOptions('TemperatureSetting::heat') != '') { $modes .= 'heat,'; } if ($_device->getOptions('TemperatureSetting::cool') != '') { $modes .= 'cool,'; } if ($_device->getOptions('TemperatureSetting::off') != '') { $modes .= 'off,'; } if ($_device->getOptions('TemperatureSetting::eco') != '') { $modes .= 'eco,'; } if ($_device->getOptions('TemperatureSetting::auto') != '') { $modes .= 'auto,'; } if ($_device->getOptions('TemperatureSetting::heatcool') != '') { $modes .= 'heatcool,'; } foreach ($_eqLogic->getCmd() as $cmd) { if (in_array($cmd->getGeneric_type(), array('THERMOSTAT_SET_SETPOINT'))) { if (!in_array('action.devices.traits.TemperatureSetting', $return['traits'])) { $return['traits'][] = 'action.devices.traits.TemperatureSetting'; } if (!isset($return['attributes'])) { $return['attributes'] = array(); } $return['attributes']['availableThermostatModes'] = 'heat'; $return['attributes']['thermostatTemperatureUnit'] = 'C'; $return['customData']['TemperatureSetting_cmdSetThermostat'] = $cmd->getId(); } if (in_array($cmd->getGeneric_type(), array('THERMOSTAT_STATE_NAME'))) { $return['customData']['TemperatureSetting_cmdGetState'] = $cmd->getId(); } if (in_array($cmd->getGeneric_type(), array('THERMOSTAT_MODE'))) { $return['customData']['TemperatureSetting_cmdGetMode'] = $cmd->getId(); } if (in_array($cmd->getGeneric_type(), array('THERMOSTAT_SET_MODE'))) { if ($cmd->getLogicalId() == 'off' && strpos($modes,'off') === false) { $modes .= 'off,'; } } if (in_array($cmd->getGeneric_type(), array('THERMOSTAT_SETPOINT'))) { $return['customData']['TemperatureSetting_cmdGetSetpoint'] = $cmd->getId(); } if (in_array($cmd->getGeneric_type(), array('THERMOSTAT_TEMPERATURE', 'TEMPERATURE'))) { $return['customData']['TemperatureSetting_cmdGetTemperature'] = $cmd->getId(); } if (in_array($cmd->getGeneric_type(), array('HUMIDITY'))) { $return['customData']['TemperatureSetting_cmdGetHumidity'] = $cmd->getId(); } } if (isset($return['customData']['TemperatureSetting_cmdGetTemperature']) && count($return['traits']) == 0) { $return['traits'][] = 'action.devices.traits.TemperatureSetting'; if (!isset($return['attributes'])) { $return['attributes'] = array(); } $return['attributes']['thermostatTemperatureUnit'] = 'C'; $modes = 'heat'; } if (isset($return['attributes']['availableThermostatModes'])) { $return['attributes']['availableThermostatModes'] = trim($modes, ','); } return $return; } public static function needGenericType(){ return array( __('Thermostat',__FILE__) => array('THERMOSTAT_SET_SETPOINT'), __('Etat themostat ',__FILE__) => array('THERMOSTAT_TEMPERATURE','TEMPERATURE'), __('Mode',__FILE__) => array('THERMOSTAT_SET_MODE','THERMOSTAT_MODE'), __('Etat',__FILE__) => array('THERMOSTAT_STATE_NAME'), __('Humidité',__FILE__) => array('HUMIDITY') ); } public static function exec($_device, $_executions, $_infos){ $return = array(); $eqLogic = $_device->getLink(); foreach ($_executions as $execution) { try { switch ($execution['command']) { case 'action.devices.commands.ThermostatTemperatureSetpoint': if (isset($_infos['customData']['TemperatureSetting_cmdSetThermostat'])) { $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdSetThermostat']); } if (!is_object($cmd)) { break; } $cmd->execCmd(array('slider' => $execution['params']['thermostatTemperatureSetpoint'])); $return = array('status' => 'SUCCESS'); break; case 'action.devices.commands.ThermostatTemperatureSetRange': if (isset($_infos['customData']['TemperatureSetting_cmdSetThermostat'])) { $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdSetThermostat']); } if (!is_object($cmd)) { break; } $cmd->execCmd(array('slider' => ($execution['params']['thermostatTemperatureSetpointLow'] + $execution['params']['thermostatTemperatureSetpointHigh'])/2)); $return = array('status' => 'SUCCESS'); break; case 'action.devices.commands.SetTemperature': if (isset($_infos['customData']['TemperatureSetting_cmdSetThermostat'])) { $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdSetThermostat']); } if (!is_object($cmd)) { break; } $cmd->execCmd(array('slider' => $execution['params']['temperature'])); $return = array('status' => 'SUCCESS'); break; case 'action.devices.commands.ThermostatSetMode': $cmds = cmd::byGenericType('THERMOSTAT_SET_MODE', $_device->getLink_id(), true); if ($cmds == null) { break; } if (is_array($cmds)) { $cmds = array($cmds); } if ($execution['params']['thermostatMode'] == 'off') { $cmd = $eqLogic->getCmd('action', 'off'); if(!is_object($cmd)){ $cmd = cmd::byId($_device->getOptions('TemperatureSetting::off')); } } elseif ($execution['params']['thermostatMode'] == 'heat') { $cmd = cmd::byId($_device->getOptions('TemperatureSetting::heat')); } elseif ($execution['params']['thermostatMode'] == 'cool') { $cmd = cmd::byId($_device->getOptions('TemperatureSetting::cool')); } elseif ($execution['params']['thermostatMode'] == 'eco') { $cmd = cmd::byId($_device->getOptions('TemperatureSetting::eco')); } elseif ($execution['params']['thermostatMode'] == 'auto') { $cmd = cmd::byId($_device->getOptions('TemperatureSetting::auto')); } elseif ($execution['params']['thermostatMode'] == 'heatcool') { $cmd = cmd::byId($_device->getOptions('TemperatureSetting::heatcool')); } if (!is_object($cmd)) { break; } $cmd->execCmd(); break; } } catch (Exception $e) { log::add('gsh', 'error', $e->getMessage()); $return = array('status' => 'ERROR'); } } return $return; } public static function query($_device, $_infos){ $return = array(); $return['online'] = true; $eqLogic = $_device->getLink(); if (isset($_infos['customData']['TemperatureSetting_cmdGetMode'])) { $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdGetMode']); if (is_object($cmd)) { $mode = $cmd->execCmd(); $cmd_off = $eqLogic->getCmd('action', 'off'); if ($mode == $cmd_off->getName()) { $return['activeThermostatMode'] = 'none'; $return['thermostatMode'] = 'off'; } foreach ($eqLogic->getCmd(null, 'modeAction', null, true) as $cmd_found) { if ($mode == $cmd_found->getName()) { switch ($cmd_found->getId()) { case $_device->getOptions('TemperatureSetting::heat'): $return['thermostatMode'] = 'heat'; break; case $_device->getOptions('TemperatureSetting::cool'): $return['thermostatMode'] = 'cool'; break; case $_device->getOptions('TemperatureSetting::eco'): $return['thermostatMode'] = 'eco'; break; case $_device->getOptions('TemperatureSetting::auto'): $return['thermostatMode'] = 'auto'; break; case $_device->getOptions('TemperatureSetting::heatcool'): $return['thermostatMode'] = 'heatcool'; break; case $_device->getOptions('TemperatureSetting::off'): $return['activeThermostatMode'] = 'none'; $return['thermostatMode'] = 'off'; break; } } } } } if (isset($_infos['customData']['TemperatureSetting_cmdGetState'])) { $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdGetState']); if (is_object($cmd)) { $state = $cmd->execCmd(); switch ($state) { case __('Chauffage', __FILE__); $return['activeThermostatMode'] = 'heat'; break; case __('Climatisation', __FILE__); $return['activeThermostatMode'] = 'cool'; break; case __('Suspendu', __FILE__): $return['activeThermostatMode'] = 'none'; break; case __('Arrêté', __FILE__): $return['activeThermostatMode'] = 'none'; break; } } } if (isset($_infos['customData']['TemperatureSetting_cmdGetSetpoint'])) { $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdGetSetpoint']); if (is_object($cmd)) { $value = $cmd->execCmd(); if ($return['thermostatMode'] == 'heatcool') { $return['thermostatTemperatureSetpointHigh'] = $value + 2; $return['thermostatTemperatureSetpointLow'] = $value - 2; } else { $return['thermostatTemperatureSetpoint'] = $value; } } } if (isset($_infos['customData']['TemperatureSetting_cmdGetTemperature'])) { $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdGetTemperature']); if (is_object($cmd)) { $return['thermostatTemperatureAmbient'] = $cmd->execCmd(); } } if (isset($_infos['customData']['TemperatureSetting_cmdGetHumidity'])) { $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdGetHumidity']); if (is_object($cmd)) { $return['thermostatHumidityAmbient'] = $cmd->execCmd(); } } if (isset($return['thermostatHumidityAmbient']) && $return['thermostatHumidityAmbient'] == '') { $return['thermostatHumidityAmbient'] = 0; } if (isset($return['thermostatTemperatureAmbient']) && $return['thermostatTemperatureAmbient'] == '') { $return['thermostatTemperatureAmbient'] = 0; } if ((!isset($return['thermostatTemperatureSetpoint'])) && (!isset($return['thermostatTemperatureSetpointHigh']))) { $return['thermostatTemperatureSetpoint'] = $return['thermostatTemperatureAmbient']; $return['thermostatMode'] = 'heat'; } if (isset($return['thermostatTemperatureSetpoint']) && $return['thermostatTemperatureSetpoint'] == '') { $return['thermostatTemperatureSetpoint'] = 0; } if (!isset($return['thermostatMode'])) { if (strpos($_infos['attributes']['availableThermostatModes'],'heat') === false) { $return['thermostatMode'] = 'cool'; } else { $return['thermostatMode'] = 'heat'; } } return $return; } public static function getHtmlConfiguration($_eqLogic){ echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo '
'; echo '
'; echo ''; echo '
'; echo ''; echo '
'; echo '
'; } }