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');
}
}
}