Пример #1
0
 public static function pull()
 {
     $cache = cache::byKey('zwave::lastUpdate');
     $http = new com_http(self::makeBaseUrl() . '/ZWaveAPI/Data/' . $cache->getValue(strtotime(date('Y-m-d H:i:s')) - 86400));
     $results = json_decode(self::handleError($http->exec()), true);
     if (is_array($results)) {
         foreach ($results as $key => $result) {
             switch ($key) {
                 case 'controller.data.controllerState':
                     nodejs::pushUpdate('zwave::' . $key, $result['value']);
                     break;
                 case 'controller.data.lastExcludedDevice':
                     if ($result['value'] != null) {
                         nodejs::pushNotification('Razberry', 'Un périphérique Z-Wave vient d\'être exclu. Logical ID : ' . $result['value']);
                         self::syncEqLogicWithRazberry();
                     }
                     break;
                 case 'controller.data.lastIncludedDevice':
                     if ($result['value'] != null) {
                         nodejs::pushNotification('Razberry', 'Un périphérique Z-Wave vient d\'être inclu. Logical ID : ' . $result['value']);
                         self::syncEqLogicWithRazberry();
                     }
                     break;
                 default:
                     $explodeKey = explode('.', $key);
                     if (count($explodeKey) > 5) {
                         $nodeId = intval($explodeKey[1]);
                         $instanceId = intval($explodeKey[3]);
                         $class = intval($explodeKey[5]);
                         for ($i = 0; $i < 6; $i++) {
                             array_shift($explodeKey);
                         }
                         $attribut = implode('.', $explodeKey);
                         foreach (self::byLogicalId($nodeId, 'zwave') as $eqLogic) {
                             foreach ($eqLogic->getCmd() as $cmd) {
                                 if ($cmd->getConfiguration('instanceId') == $instanceId && $cmd->getConfiguration('class') == '0x' . dechex($class)) {
                                     $configurationValue = $cmd->getConfiguration('value');
                                     if (strpos($configurationValue, '[') !== false && strpos($configurationValue, ']') !== false) {
                                         $configurationValue = str_replace(']', '', str_replace('[', '.', $configurationValue));
                                     }
                                     if (strpos($configurationValue, $attribut) !== false) {
                                         if (isset($result['val'])) {
                                             $value = zwaveCmd::handleResult($result['val']);
                                         } else {
                                             if (isset($result['level'])) {
                                                 $value = zwaveCmd::handleResult($result['level']);
                                             } else {
                                                 $value = zwaveCmd::handleResult($result);
                                             }
                                         }
                                         if ($value === '') {
                                             log::add('zwave', 'info', 'Event sur ' . $cmd->getId() . ' / ' . $cmd->getName() . ' mais aucun valeur trouvée. Event result :' . print_r($result, true));
                                             $value = $cmd->execute();
                                         }
                                         $cmd->event($value);
                                     }
                                 }
                             }
                         }
                     }
                     break;
             }
         }
     }
     if (isset($results['updateTime']) && is_numeric($results['updateTime']) && $results['updateTime'] > $cache->getValue(0)) {
         cache::set('zwave::lastUpdate', $results['updateTime'], 0);
     }
 }
Пример #2
0
 public function save()
 {
     if ($this->getMessage() == '') {
         return;
     }
     if ($this->getLogicalId() == '') {
         $this->setLogicalId($this->getPlugin() . '::' . config::genKey());
     }
     $values = array('message' => $this->getMessage(), 'logicalId' => $this->getLogicalId(), 'plugin' => $this->getPlugin());
     $sql = 'SELECT count(*)
             FROM message
             WHERE plugin=:plugin
                   AND ( logicalId=:logicalId
                     OR message=:message ) ';
     $result = DB::Prepare($sql, $values, DB::FETCH_TYPE_ROW);
     if ($result['count(*)'] == 0) {
         DB::save($this);
         @nodejs::pushNotification(__('Message de ', __FILE__) . $this->getPlugin(), $this->getMessage(), 'message');
         $cmds = explode('&&', config::byKey('emailAdmin'));
         if (count($cmds) > 0) {
             foreach ($cmds as $id) {
                 $cmd = cmd::byId(str_replace('#', '', $id));
                 if (is_object($cmd)) {
                     $cmd->execCmd(array('title' => __('[JEEDOM] Message de ', __FILE__) . $this->getPlugin(), 'message' => $this->getMessage()));
                 } else {
                     log::add('message', 'info', __('Impossible de trouver la commande correspondant à :', __FILE__) . $id);
                 }
             }
         }
     }
     @nodejs::pushUpdate('message::refreshMessageNumber');
 }