Les commandes de positionnements ne remontent pas

Bonjour

Dernière version bêta du plug-in caméra installée ce matin.

J’utilisais jusqu’à maintenant le plug-in Pilotage Caméras ONVIF qui est obsolète.

Je voudrai donc faire remonter mes commandes de positionnement personnalisées de mes caméras via le plugin caméra.

Cette fonctionnalité a été intégrée au plug-in Amélioration Onvif - #54 par Flobul mais je n’arrive pas à avoir mes commandes spécifique de positionnement.
exemple Plugin Pilotage ONVIF

image

Message d’erreur à la création de la caméra :

0000|[2026-08-04 08:27:46] ERROR  [ONVIF] GetCapabilities: Communication error

Merci de votre aide

Bonjour.

Si tu ajoutes un équipement modèle ONVIF, tu as les paramètres suivants qui s’joutent à l’interface.


Puis tu as ces commandes, sur lesquels tu indique la commande la de stop :

Le port ONVIF est bien renseigné ? et correspond au port de la caméra ?

Bonjour

Oui, je récupère bien ces commandes, le flux de la caméra marche mais je n’ai pas les commandes de positionnement prédéfinis comme dans le plug-in Position Caméra ONVIF.

Une manipulation particulière à faire ?

Non, ce n’est pas interprété dans le plugin.
Libre à ceux qui peuvent de l’implémenter.

Merci de ton retour, je pensais que l’entièreté du plug Position Caméra ONVIF avait été transféré dans Caméra !

Donc pas d’autre solution de garder le plug-in ONVIF en bêta

J’ai bien compris ?

Bonsoir,

J’ai bien une modif du plugin camera qui permet de faire du preset.

@Franck_jeedom , tu serais prêt a tester ?

1 « J'aime »

Bonjour

Oui sans problème

Merci

C’est pour le moment une ébauche, j’aimerai au final que les commandes soient créées automatiquement.

juste après la ligne 1130 ajoute ceci :

////////////////////// preset test ////////////////////
			try {
				switch ($request) {
					case 'preset':
						$presetToken = $this->getConfiguration('stopCmdUrl','');
						if ($presetToken != '' ) {
							log::add('camera', 'debug', 'ptz_GotoPreset() -> ' . $presetToken);
							$onvif->ptz_GotoPreset($profileToken, $presetToken, $speedX, $speedY, $speedZ);
							return true;
						}
				}
			} catch (Exception $e) {
				log::add('camera', 'debug', 'onvif error reason for ' . $request . ' : ' . json_encode($onvif->getLastResponse()));
			}
//////////////////////////////////////////////////

ensuite dans ton équipement ajoute une commande action/défaut puis dans url de la commande met preset et dans la commande URL stop le numero de preset voulu :

image

Si tu connais pas les numéros de preset, tu peux tester ceci dans un bloc code :

require_once __DIR__ . '/../../plugins/camera/3rdparty/ponvif.php';
$eqLogics = eqLogic::byType('camera', true);
foreach ($eqLogics as $eqLogic) {
  if ($eqLogic->getConfiguration('device') != 'onvif') continue;
  
  $profileToken = $eqLogic->getConfiguration('cameraStreamProfileToken');
  try {
    $scenario->setLog(' ------------- ' . $eqLogic->getHumanName() . ' ------------- ');
    $onvif = new Ponvif();
    $onvif->setUsername($eqLogic->getConfiguration('username'));
    $onvif->setPassword($eqLogic->getConfiguration('password'));
    $onvif->setIPAddress($eqLogic->getConfiguration('ip') . ':' . $eqLogic->getConfiguration('onvif_port', 80));
    $onvif->initialize();
    $presets = $onvif->ptz_GetPresets($profileToken);
    foreach ($presets as $preset) {
      $scenario->setLog(json_encode($preset));
    }
    //$scenario->setLog(json_encode($onvif->ptz_GetPresets($profileToken)));
  } catch (Exception $e) {
    $scenario->setLog($eqLogic->getHumanName() . ' - [ONVIF] : ' . $e->getMessage());
  }
}

Le résultat de ce bloc code m’intéresse pour comparer les différentes valeurs que peuvent envoyer différente cam, si tu peux partager le résultat stp.

exemple pour ma cam Reolink Trackmix :

------------------------------------
[2026-08-07 17:59:14][SCENARIO] -- Début : . Tags : {"#trigger#":"user","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Scénario lancé manuellement","#trigger_value#":"admin"}
[2026-08-07 17:59:14][SCENARIO] - Exécution du sous-élément de type [action] : code
[2026-08-07 17:59:14][SCENARIO] Exécution d'un bloc code
[2026-08-07 17:59:14][SCENARIO]  ------------- [Luna][trackmix] -------------
[2026-08-07 17:59:15][SCENARIO] {"Token":"000","Name":"PointGarde","PTZPosition":null}
[2026-08-07 17:59:15][SCENARIO] {"Token":"001","Name":"camion arr","PTZPosition":null}
[2026-08-07 17:59:15][SCENARIO] {"Token":"002","Name":"Maison int","PTZPosition":null}
[2026-08-07 17:59:15][SCENARIO] {"Token":"004","Name":"provisoire","PTZPosition":null}
[2026-08-07 17:59:15][SCENARIO] Fin correcte du scénario

Les numéros de preset correspondent au Token.

2 « J'aime »

Bonjour

J’utilise la version bêta :

Quand je colle ton code j’ai une erreur

2026-08-09 04:45:10	plugin	syntax error, unexpected token "if", expecting "function" or "const"	Log plugin	26

Quand j’essaie d’accéder à la config du plug-in j’ai l’erreur suivante

Class "camera" not found #0 /var/www/html/core/php/utils.inc.php(81): require_once() #1 /var/www/html/index.php(89): include_file() #2 {main}

J’ai fait un essai avec la version stable, même résultat.

L’exécution du scénario donne :

scenario142.log (85,6 Ko)

La caméra qui m’intéresse est [Vidéo Terasse - ok] , elle semble générer une erreur.

Avec le plugin Position Caméra ONVFI, j’ai le commandes suivantes de preset qui fonctionnent (Terrasse, Jardin, Porte …).

Je reste à ton écoute

Oupss, j’ai pas bien copié/collé

Voici le bon code a ajouter :

Je n’ai plus le message d’erreur, j’ai créé la commande preset.

Quand je l’utilise j’ai le message suivant

Désolé, je suis parti en vacance actuellement, je sortirai le PC dans la semaine, mais la dernière fois que j’ai eu ce message, c’est parce que j’avais mal configuré le plugin, j’avais aussi redémarré la cam.

Pas d’urgence, profites de tes vacances.

Je vais faire des essais de redémarrage

Bonne soirée

Bonjour

Pour info, j’ai redémarré ma caméra et recréé une caméra, même message.

Bonnes vacances

@Phpvarious bonjour

Si tu as le temps d’avancer sur les commandes pour caméras ONVIF, je peux réaliser des tests.

Bonne journée à toi

Hello,
désolé je t’avais oublié :grin:

Je comprend pas pourquoi ta camera renvoie ce GetCapabilities.

Tu peux faire le test sur [Extérieur][Nichoir - ok] :

image

Hello

Pas de souci, je ne suis pas seul sur terre :slight_smile:

Nichoir est une caméra fixe. J’ai 3 autres caméras (2 marques différentes) et ça fait la même chose.

Edit … 2 caméras ne font pas d’erreur mais la commande Preset ne marche pas

Marche parfaitement avec le plugin PTZ, si je reproduits preset 2 ou preset002 dans le plugin caméra ça ne marche pas.

image

Bon en analysant les 2 plugins je pense avoir ciblé quelque chose.

Dans un premier temps j’aurais besoin que tu exécute ce code dans un scénario stp, oublie pas de remplacer l’id par celui de ton équipement (pas la commande !) sur la première ligne.

$id = 74; // id de l'équipement

$eqLogic = eqLogic::byId($id);
if (is_object($eqLogic)) {
  if ($eqLogic->getConfiguration('device') == 'onvif') {
    require_once __DIR__ . '/../../plugins/camera/3rdparty/ponvif.php';
    $profileToken = $eqLogic->getConfiguration('cameraStreamProfileToken'); //000
    $speedX = $eqLogic->getConfiguration('speed_x', 1);
    $speedY = $eqLogic->getConfiguration('speed_y', 1);
    $speedZ = $eqLogic->getConfiguration('speed_z', 1);
    $sleep = $eqLogic->getConfiguration('delay_stop', 0) * 1000;

    $onvif = new Ponvif();
    $onvif->setUsername($eqLogic->getConfiguration('username'));
    $onvif->setPassword($eqLogic->getConfiguration('password'));
    $onvif->setIPAddress($eqLogic->getConfiguration('ip') . ':' . $eqLogic->getConfiguration('onvif_port', 80));
	try {
      $onvif->initialize();
    } catch (Exception $e) {
      $scenario->setLog("initialize : " . $e->getMessage() . "\n" . $e->getTraceAsString());
    }
    try {
      $onvifVersion = $onvif->core_GetCapabilities();
    } catch (Exception $e) {
      $scenario->setLog("core_GetCapabilities : " . $e->getMessage() . "\n" . $e->getTraceAsString());
    }
  }
  
}

En fonction du résultat, je te proposerais (demain soir si possible) un autre scénario pour tester ta commande PTZ en utilisant une autre méthode.

Si tu peux aussi me faire une capture de la config de ton équipement du plugin camera stp.

Bonjour

Voici le log de ma caméra

------------------------------------
[2026-09-01 05:55:03][SCENARIO] -- Début : . Tags : {"#trigger#":"user","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Scénario lancé manuellement","#trigger_value#":"Franck"}
[2026-09-01 05:55:03][SCENARIO] - Exécution du sous-élément de type [action] : code
[2026-09-01 05:55:03][SCENARIO] Exécution d'un bloc code
[2026-09-01 05:55:04][SCENARIO] initialize : GetCapabilities: Communication error
#0 /var/www/html/plugins/camera/3rdparty/ponvif.php(160): Ponvif->core_GetCapabilities()
#1 /var/www/html/core/class/scenarioExpression.class.php(1956) : eval()'d code(19): Ponvif->initialize()
#2 /var/www/html/core/class/scenarioExpression.class.php(1956): eval()
#3 /var/www/html/core/class/scenarioSubElement.class.php(74): scenarioExpression->execute()
#4 /var/www/html/core/class/scenarioElement.class.php(196): scenarioSubElement->execute()
#5 /var/www/html/core/class/scenario.class.php(957): scenarioElement->execute()
#6 /var/www/html/core/php/jeeScenario.php(51): scenario->execute()
#7 {main}
[2026-09-01 05:55:04][SCENARIO] core_GetCapabilities : GetCapabilities: Communication error
#0 /var/www/html/core/class/scenarioExpression.class.php(1956) : eval()'d code(24): Ponvif->core_GetCapabilities()
#1 /var/www/html/core/class/scenarioExpression.class.php(1956): eval()
#2 /var/www/html/core/class/scenarioSubElement.class.php(74): scenarioExpression->execute()
#3 /var/www/html/core/class/scenarioElement.class.php(196): scenarioSubElement->execute()
#4 /var/www/html/core/class/scenario.class.php(957): scenarioElement->execute()
#5 /var/www/html/core/php/jeeScenario.php(51): scenario->execute()
#6 {main}
[2026-09-01 05:55:04][SCENARIO] Fin correcte du scénario

Plugin Caméra :

Plugin PTZ (config qui marche parfaitement)

Merci à toi