From d3f20166b55f96ffea945b3cfa6937f9d182c6a6 Mon Sep 17 00:00:00 2001 From: David <79108364+Phpvarious@users.noreply.github.com> Date: Tue, 19 May 2026 19:43:05 +0200 Subject: [PATCH 1/3] call cmdForSpecificChannel just if not array --- core/api/mobile.api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/api/mobile.api.php b/core/api/mobile.api.php index 6fba4fef..0e46be51 100755 --- a/core/api/mobile.api.php +++ b/core/api/mobile.api.php @@ -523,6 +523,7 @@ function saveMenuFromAppV2($menu, $mobile) } } else log::add('mobile', 'debug', '| [WARNING] Action unknown ─▶︎ ' . $geofence['action']); } else log::add('mobile', 'debug', '| [ERROR] geofencing command unknown ─▶︎ ' . 'geoloc_' . $geofence['identifier']); + $mobile->cmdForSpecificChannel($params, 'transmition'); } else { $transmitions = $params['transmition']; $errorCount = 0; @@ -550,7 +551,6 @@ function saveMenuFromAppV2($menu, $mobile) log::add('mobile', 'debug', '| [ERROR] No geofencing settings'); } } - $mobile->cmdForSpecificChannel($params, 'transmition'); } } else { if (isset($params['Iq'])) llog::add('mobile', 'debug', '| [ERROR] EqLogic unknown ─▶︎ ' . $params['Iq']); From 0b4b47439656ded8ca86e0587d1fdb125f7949db Mon Sep 17 00:00:00 2001 From: David <79108364+Phpvarious@users.noreply.github.com> Date: Tue, 19 May 2026 22:29:56 +0200 Subject: [PATCH 2/3] add cmdForSpecificChannel in geoloc array --- core/api/mobile.api.php | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/core/api/mobile.api.php b/core/api/mobile.api.php index 0e46be51..a185608b 100755 --- a/core/api/mobile.api.php +++ b/core/api/mobile.api.php @@ -524,36 +524,38 @@ function saveMenuFromAppV2($menu, $mobile) } else log::add('mobile', 'debug', '| [WARNING] Action unknown ─▶︎ ' . $geofence['action']); } else log::add('mobile', 'debug', '| [ERROR] geofencing command unknown ─▶︎ ' . 'geoloc_' . $geofence['identifier']); $mobile->cmdForSpecificChannel($params, 'transmition'); - } else { - $transmitions = $params['transmition']; - $errorCount = 0; - foreach ($transmitions as $transmition) { + } else if (is_array($transmitions = $params['transmition'])) { + log::add('mobile', 'debug', '| [INFO] transmition is array'); + $nbTransmition = count($transmitions); + foreach ($transmitions as $key => $transmition) { + log::add('mobile', 'debug', '|┌────────── [' . $key . '] ──────────'); if (isset($transmition['event']) && $transmition['event'] == 'geofence') { - log::add('mobile', 'debug', '| Transmition : ' . json_encode($params['transmition'])); + log::add('mobile', 'debug', '|| Event ─▶︎ ' . $transmition['event']); $geofence = $transmition['geofence']; - log::add('mobile', 'debug', '| Geofence ─▶︎ ' . json_encode($geofence)); + log::add('mobile', 'debug', '|| Geofence ─▶︎ ' . json_encode($geofence)); $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($mobile->getId(), 'geoloc_' . $geofence['identifier']); if (is_object($cmdgeoloc)) { if ($geofence['action'] == 'ENTER' || $geofence['action'] == 'EXIT') { $eventAge = time() - intval(strtotime($geofence['timestamp'])); if ($eventAge > 1800) { - log::add('mobile', 'debug', '| [WARNING] SKIP stale event (' . round($eventAge / 60) . 'min)'); + log::add('mobile', 'debug', '|| [WARNING] SKIP stale event (' . round($eventAge / 60) . 'min)'); } else { $value = ($geofence['action'] == 'ENTER') ? 1 : 0; - log::add('mobile', 'debug', '| OK Command "' . $cmdgeoloc->getName() . '" ( geoloc_' . $geofence['identifier'] . ' ) ─▶︎ ' . $value . ' ( eventAge = ' . $eventAge . 'sec )'); + log::add('mobile', 'debug', '|| OK Command "' . $cmdgeoloc->getName() . '" ( geoloc_' . $geofence['identifier'] . ' ) ─▶︎ ' . $value . ' ( eventAge = ' . $eventAge . 'sec )'); $mobile->checkAndUpdateCmd('geoloc_' . $geofence['identifier'], $value); } - } else log::add('mobile', 'debug', '| [WARNING] Action unknown ─▶︎ ' . $geofence['action']); - } else log::add('mobile', 'debug', '| [ERROR] geofencing command unknown ─▶︎ ' . 'geoloc_' . $geofence['identifier']); - } else $errorCount++; - } - if ($errorCount > 0) { - log::add('mobile', 'debug', '| [ERROR] No geofencing settings'); + } else log::add('mobile', 'debug', '|| [WARNING] Action unknown ─▶︎ ' . $geofence['action']); + } else log::add('mobile', 'debug', '|| [ERROR] geofencing command unknown ─▶︎ ' . 'geoloc_' . $geofence['identifier']); + } else log::add('mobile', 'debug', '|| [ERROR] No geofencing settings'); + log::add('mobile', 'debug', '|└────────────────────────'); + if ($key == $nbTransmition - 1) { + $mobile->cmdForSpecificChannel($transmitions, $key); + } } } } } else { - if (isset($params['Iq'])) llog::add('mobile', 'debug', '| [ERROR] EqLogic unknown ─▶︎ ' . $params['Iq']); + if (isset($params['Iq'])) log::add('mobile', 'debug', '| [ERROR] EqLogic unknown ─▶︎ ' . $params['Iq']); else log::add('mobile', 'debug', '[WARNING] Parameter Iq does not exist !'); } log::add('mobile', 'debug', '└───────────────────────────────────────────'); From a4a3b66bf9300cc584e8b09ddb339ee4dc0da6db Mon Sep 17 00:00:00 2001 From: David <79108364+Phpvarious@users.noreply.github.com> Date: Tue, 19 May 2026 22:37:00 +0200 Subject: [PATCH 3/3] no need to check IQ because is no static function --- core/class/mobile.class.php | 246 ++++++++++++++++++------------------ 1 file changed, 122 insertions(+), 124 deletions(-) diff --git a/core/class/mobile.class.php b/core/class/mobile.class.php index 0d8de8ad..5484a39e 100755 --- a/core/class/mobile.class.php +++ b/core/class/mobile.class.php @@ -967,7 +967,7 @@ public static function createCmdGeoLocV2($Iq, $geolocs) foreach ($decodedGeolocs as $index => $geoloc) { if (!isset($geoloc['name'])) continue; $logicalId = 'geoloc_' . $index; - log::add('mobile', 'debug', '|| ' . $logicalId . ' ─▶︎ ' . $geoloc['name']); + log::add('mobile', 'debug', '|| ' . $logicalId . ' ─▶︎ ' . $geoloc['name'] . ' ─▶︎ ' . $geoloc['value']); $cmd = cmd::byEqLogicIdAndLogicalId($mobile->getId(), 'geoloc_' . $index); if (!is_object($cmd)) { //Migrate geoloc logicalId by name @@ -1399,138 +1399,136 @@ public static function getQrCodeV2($userId) public function cmdForSpecificChannel($params = array(), $_trigger = 'location') { log::add('mobile', 'debug', '|┌──:fg-success: cmdForSpecificChannel :/fg:──'); - if (isset($params['Iq'])) { - if (isset($params[$_trigger])) { - $order = count($this->getCmd()); - $getDeviceInformations = (isset($params[$_trigger]['extras']) && isset($params[$_trigger]['extras']['method']) && $params[$_trigger]['extras']['method'] == 'getDeviceInformations'); - $eventAge = time() - intval(strtotime($params[$_trigger]['timestamp'])); - if ($eventAge > 1800) { - log::add('mobile', 'debug', '|| SKIP stale specific event (' . round($eventAge / 60) . 'min) '); - } else { - log::add('mobile', 'debug', '|| eventAge = ' . $eventAge . ' s'); - // Battery - if (isset($params[$_trigger]['battery'])) { - // level - if (isset($params[$_trigger]['battery']['level'])) { - if ($getDeviceInformations) { - $cmd = $this->getCmd(null, 'battery::level'); - if (!is_object($cmd)) { - $cmd = new mobileCmd(); - $cmd->setLogicalId('battery::level'); - $cmd->setName(__('Batterie du téléphone', __FILE__)); - $cmd->setDisplay('icon', ''); - $cmd->setDisplay('showIconAndNamedashboard', 1); - $cmd->setDisplay('showIconAndNamemobile', 1); - $cmd->setDisplay('forceReturnLineAfter', 1); - $cmd->setConfiguration('historizeRound', 2); - $cmd->setConfiguration('minValue', 0); - $cmd->setConfiguration('maxValue', 100); - $cmd->setUnite('%'); - $cmd->setIsVisible(0); - $cmd->setOrder($order); - $order++; - log::add('mobile', 'debug', '|| Creating the "phone battery" command'); - } - $cmd->setEqLogic_id($this->getId()); - $cmd->setType('info'); - $cmd->setConfiguration('calculValueOffset', '#value# * 100'); - $cmd->setSubType('numeric'); - if ($cmd->getChanged() === true) $cmd->save(); - } - if ($params[$_trigger]['battery']['level'] != -1) { - if ($this->checkAndUpdateCmd('battery::level', $params[$_trigger]['battery']['level'])) { - log::add('mobile', 'debug', '|| Updating "phone battery" value ─▶︎ ' . $params[$_trigger]['battery']['level'] * 100 . '%'); - } - } else { - log::add('mobile', 'debug', '|| [WARNING] No data available for battery level ─▶︎ ' . $params[$_trigger]['battery']['level']); + if (isset($params[$_trigger])) { + $order = count($this->getCmd()); + $getDeviceInformations = (isset($params[$_trigger]['extras']) && isset($params[$_trigger]['extras']['method']) && $params[$_trigger]['extras']['method'] == 'getDeviceInformations'); + $eventAge = time() - intval(strtotime($params[$_trigger]['timestamp'])); + if ($eventAge > 1800) { + log::add('mobile', 'debug', '|| SKIP stale specific event (' . round($eventAge / 60) . 'min) '); + } else { + log::add('mobile', 'debug', '|| eventAge = ' . $eventAge . ' s'); + // Battery + if (isset($params[$_trigger]['battery'])) { + // level + if (isset($params[$_trigger]['battery']['level'])) { + if ($getDeviceInformations) { + $cmd = $this->getCmd(null, 'battery::level'); + if (!is_object($cmd)) { + $cmd = new mobileCmd(); + $cmd->setLogicalId('battery::level'); + $cmd->setName(__('Batterie du téléphone', __FILE__)); + $cmd->setDisplay('icon', ''); + $cmd->setDisplay('showIconAndNamedashboard', 1); + $cmd->setDisplay('showIconAndNamemobile', 1); + $cmd->setDisplay('forceReturnLineAfter', 1); + $cmd->setConfiguration('historizeRound', 2); + $cmd->setConfiguration('minValue', 0); + $cmd->setConfiguration('maxValue', 100); + $cmd->setUnite('%'); + $cmd->setIsVisible(0); + $cmd->setOrder($order); + $order++; + log::add('mobile', 'debug', '|| Creating the "phone battery" command'); } + $cmd->setEqLogic_id($this->getId()); + $cmd->setType('info'); + $cmd->setConfiguration('calculValueOffset', '#value# * 100'); + $cmd->setSubType('numeric'); + if ($cmd->getChanged() === true) $cmd->save(); } - // charging - if (isset($params[$_trigger]['battery']['is_charging'])) { - if ($getDeviceInformations) { - $cmd = $this->getCmd(null, 'battery::isCharging'); - if (!is_object($cmd)) { - $cmd = new mobileCmd(); - $cmd->setLogicalId('battery::isCharging'); - $cmd->setName(__('En charge', __FILE__)); - $cmd->setDisplay('icon', ''); - $cmd->setDisplay('showIconAndNamedashboard', 1); - $cmd->setDisplay('showIconAndNamemobile', 1); - $cmd->setDisplay('forceReturnLineAfter', 1); - $cmd->setTemplate('dashboard', 'core::line'); - $cmd->setTemplate('mobile', 'core::line'); - $cmd->setIsVisible(0); - $cmd->setOrder($order); - $order++; - log::add('mobile', 'debug', '|| Creating the "in charge" command'); - } - $cmd->setEqLogic_id($this->getId()); - $cmd->setType('info'); - $cmd->setSubType('binary'); - if ($cmd->getChanged() === true) $cmd->save(); - } - if ($this->checkAndUpdateCmd('battery::isCharging', intval($params[$_trigger]['battery']['is_charging']))) { - log::add('mobile', 'debug', '|| Updating "in charge" value ─▶︎ ' . intval($params[$_trigger]['battery']['is_charging'])); + if ($params[$_trigger]['battery']['level'] != -1) { + if ($this->checkAndUpdateCmd('battery::level', $params[$_trigger]['battery']['level'])) { + log::add('mobile', 'debug', '|| Updating "phone battery" value ─▶︎ ' . $params[$_trigger]['battery']['level'] * 100 . '%'); } + } else { + log::add('mobile', 'debug', '|| [WARNING] No data available for battery level ─▶︎ ' . $params[$_trigger]['battery']['level']); } } - // coords - if (isset($params[$_trigger]['coords'])) { - if (isset($params[$_trigger]['coords']['latitude']) && isset($params[$_trigger]['coords']['longitude'])) { - if ($getDeviceInformations) { - $cmd = $this->getCmd(null, 'coords'); - if (!is_object($cmd)) { - $cmd = new mobileCmd(); - $cmd->setLogicalId('coords'); - $cmd->setName(__('Coordonnées', __FILE__)); - $cmd->setDisplay('icon', ''); - $cmd->setDisplay('showIconAndNamedashboard', 1); - $cmd->setDisplay('showIconAndNamemobile', 1); - $cmd->setDisplay('forceReturnLineAfter', 1); - $cmd->setTemplate('dashboard', 'core::line'); - $cmd->setTemplate('mobile', 'core::line'); - $cmd->setIsVisible(0); - $cmd->setOrder($order); - $order++; - log::add('mobile', 'debug', '|| Creating the "coordinates" command'); - } - $cmd->setEqLogic_id($this->getId()); - $cmd->setType('info'); - $cmd->setSubType('string'); - if ($cmd->getChanged() === true) $cmd->save(); - } - $coord = $params[$_trigger]['coords']['latitude'] . ',' . $params[$_trigger]['coords']['longitude']; - if ($this->checkAndUpdateCmd('coords', $coord)) { - log::add('mobile', 'debug', '|| Updating "coordinates" value ─▶︎ ' . $coord); + // charging + if (isset($params[$_trigger]['battery']['is_charging'])) { + if ($getDeviceInformations) { + $cmd = $this->getCmd(null, 'battery::isCharging'); + if (!is_object($cmd)) { + $cmd = new mobileCmd(); + $cmd->setLogicalId('battery::isCharging'); + $cmd->setName(__('En charge', __FILE__)); + $cmd->setDisplay('icon', ''); + $cmd->setDisplay('showIconAndNamedashboard', 1); + $cmd->setDisplay('showIconAndNamemobile', 1); + $cmd->setDisplay('forceReturnLineAfter', 1); + $cmd->setTemplate('dashboard', 'core::line'); + $cmd->setTemplate('mobile', 'core::line'); + $cmd->setIsVisible(0); + $cmd->setOrder($order); + $order++; + log::add('mobile', 'debug', '|| Creating the "in charge" command'); } + $cmd->setEqLogic_id($this->getId()); + $cmd->setType('info'); + $cmd->setSubType('binary'); + if ($cmd->getChanged() === true) $cmd->save(); } - if (isset($params[$_trigger]['coords']['altitude'])) { - if ($getDeviceInformations) { - $cmd = $this->getCmd(null, 'altitude'); - if (!is_object($cmd)) { - $cmd = new mobileCmd(); - $cmd->setLogicalId('altitude'); - $cmd->setName(__('Altitude', __FILE__)); - $cmd->setDisplay('icon', ''); - $cmd->setDisplay('showIconAndNamedashboard', 1); - $cmd->setDisplay('showIconAndNamemobile', 1); - $cmd->setDisplay('forceReturnLineAfter', 1); - $cmd->setTemplate('dashboard', 'core::line'); - $cmd->setTemplate('mobile', 'core::line'); - $cmd->setIsVisible(0); - $cmd->setUnite('m'); - $cmd->setOrder($order); - $order++; - log::add('mobile', 'debug', '|| Creating the "altitude" command'); - } - $cmd->setEqLogic_id($this->getId()); - $cmd->setType('info'); - $cmd->setSubType('string'); - if ($cmd->getChanged() === true) $cmd->save(); + if ($this->checkAndUpdateCmd('battery::isCharging', intval($params[$_trigger]['battery']['is_charging']))) { + log::add('mobile', 'debug', '|| Updating "in charge" value ─▶︎ ' . intval($params[$_trigger]['battery']['is_charging'])); + } + } + } + // coords + if (isset($params[$_trigger]['coords'])) { + if (isset($params[$_trigger]['coords']['latitude']) && isset($params[$_trigger]['coords']['longitude'])) { + if ($getDeviceInformations) { + $cmd = $this->getCmd(null, 'coords'); + if (!is_object($cmd)) { + $cmd = new mobileCmd(); + $cmd->setLogicalId('coords'); + $cmd->setName(__('Coordonnées', __FILE__)); + $cmd->setDisplay('icon', ''); + $cmd->setDisplay('showIconAndNamedashboard', 1); + $cmd->setDisplay('showIconAndNamemobile', 1); + $cmd->setDisplay('forceReturnLineAfter', 1); + $cmd->setTemplate('dashboard', 'core::line'); + $cmd->setTemplate('mobile', 'core::line'); + $cmd->setIsVisible(0); + $cmd->setOrder($order); + $order++; + log::add('mobile', 'debug', '|| Creating the "coordinates" command'); } - if ($this->checkAndUpdateCmd('altitude', $params[$_trigger]['coords']['altitude'])) { - log::add('mobile', 'debug', '|| Updating "Altitude" value ─▶︎ ' . $params[$_trigger]['coords']['altitude'] . 'm'); + $cmd->setEqLogic_id($this->getId()); + $cmd->setType('info'); + $cmd->setSubType('string'); + if ($cmd->getChanged() === true) $cmd->save(); + } + $coord = $params[$_trigger]['coords']['latitude'] . ',' . $params[$_trigger]['coords']['longitude']; + if ($this->checkAndUpdateCmd('coords', $coord)) { + log::add('mobile', 'debug', '|| Updating "coordinates" value ─▶︎ ' . $coord); + } + } + if (isset($params[$_trigger]['coords']['altitude'])) { + if ($getDeviceInformations) { + $cmd = $this->getCmd(null, 'altitude'); + if (!is_object($cmd)) { + $cmd = new mobileCmd(); + $cmd->setLogicalId('altitude'); + $cmd->setName(__('Altitude', __FILE__)); + $cmd->setDisplay('icon', ''); + $cmd->setDisplay('showIconAndNamedashboard', 1); + $cmd->setDisplay('showIconAndNamemobile', 1); + $cmd->setDisplay('forceReturnLineAfter', 1); + $cmd->setTemplate('dashboard', 'core::line'); + $cmd->setTemplate('mobile', 'core::line'); + $cmd->setIsVisible(0); + $cmd->setUnite('m'); + $cmd->setOrder($order); + $order++; + log::add('mobile', 'debug', '|| Creating the "altitude" command'); } + $cmd->setEqLogic_id($this->getId()); + $cmd->setType('info'); + $cmd->setSubType('string'); + if ($cmd->getChanged() === true) $cmd->save(); + } + if ($this->checkAndUpdateCmd('altitude', $params[$_trigger]['coords']['altitude'])) { + log::add('mobile', 'debug', '|| Updating "Altitude" value ─▶︎ ' . $params[$_trigger]['coords']['altitude'] . 'm'); } } }