Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

[TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Pour échanger sur les plugins classés en catégorie "Sécurité"
Répondre
Jules13
Timide
Messages : 211
Inscription : 05 avr. 2017, 20:42

[TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par Jules13 » 19 mai 2018, 09:13

Bonjour,
Je viens compléter le premier tuto qui utilisait node onvif avec un second qui utilise un autre projet github:
viewtopic.php?f=91&t=35702
https://github.com/agsh/onvif
Donc pour commencer il faut installer le projet:

Code : Tout sélectionner

npm install onvif
ou

Code : Tout sélectionner

git clone https://github.com/agsh/onvif.git
Partie 1, la création de la caméra:
Après il va falloir créer un premier script:
Pour creer les commandes il faut d'abord se rendre dans le bon répertoire avec la commande cd
Puis il faut creer un document (ici test1.js par exemple):

Code : Tout sélectionner

nano test1.js
Les test adressip, username, password, port sont a remplacer laissez les valeurs entre les apostrophes.

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + 'Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');
});
Puis il faut l'executer:

Code : Tout sélectionner

node test1.js
Ici vous pouvez avoir deux réponses possibles:
CONNECTED
CONNECTION FAILED FOR adressip:port

Si vous avez connected c'est tout bon vous pouvez continuer sinon cela veut dire que l'une des options est soit mal saisie soit fausse: verifiez les variable.

Maintenant si vous avez reçu un connected a la première étape vous allez pouvoir commencer à utiliser le projet:
Copiez le code précédant dans un fichier text car il va service de base pour toute les commandes:

1ere Etape, les réglages de votre caméra
Pour utiliser le PTZ (Controler les caméras rotatives)/ ou l'image vous allez créer un deuxième script qui reprend le même contenu que le premier, et vous allez ajouter:

Code : Tout sélectionner

this.getCapabilities(function(err, stream) {
console.log(stream);
});
Votre code ressemble donc à ça:

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';

var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + 'Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getCapabilities(function(err, stream) {
console.log(stream);
});
});
Vous l'enregistrer (test2.js dans cet exemple)
Puis vous l'executez

Code : Tout sélectionner

node test2.js
En sortie, vous allez avoir toute les fonctions dont dispose votre caméra.
Si vous voyez une ligne commençant par PTZ, vous allez pouvoir contrôler soit le zoom soit les rotations soit les deux.
Si vous voyez une ligne avec imaging vous allez pouvoir controler les réglages de l'image.


Partie 2 L'Image

Je contrôle l'image pour passer la caméra en mode jour nuit en changeant les presets (luminosité, contraste ...)
D'abord il faut acquérir le token du profil vidéo de la caméra (il vaut souvent 000)
On créer donc un premier code pour acquérir le token video: (token.js dans cet exemple)

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';

var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + 'Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getProfiles(function(err, stream) {
console.log(stream);
});
});

On l'enregistre et on l'execute

Code : Tout sélectionner

node token.js
Et la vous devez avoir un gros bloc de texte qui est apparu, il faut trouver ce bloc:

Code : Tout sélectionner

 videoSourceConfiguration:
     { '$': [Object],
       name: 'VideoSourceConfig_Channel1',
       useCount: 2,
       sourceToken: '000',
       bounds: [Object] },
Ici le token est 000
Retenez le c'est important pour la suite

Maintenant que nous avons le token nous allons l'utiliser pour acquérir les réglages actuels de la caméra:
Il faut donc créer un script (getimage.js dans cet exemple)
Pour cela on doit reprendre la base du premier script
Et remplacez VideoSourceToken:'000' par VideoSourceToken:'votretoken'

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + 'Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getImagingSettings({VideoSourceToken:'000'},function(err, stream) {
console.log(stream);
});
});
Vous l'executez:

Code : Tout sélectionner

node getimage.js
En sortie vous devez avoir quelque chose du type:

Code : Tout sélectionner

CONNECTED
{ brightness: 50,
  colorSaturation: 50,
  contrast: 50,
  exposure: { mode: 'MANUAL', iris: 1 },
  focus: { autoFocusMode: 'MANUAL', defaultSpeed: 1 },
  sharpness: 50 }
Maintenant pour modifier ces valeurs, il faut
(setimage.js dans cet exemple)

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';
        BRIGHTNESS = '50',
        COLORSATURATION = '50',
        CONTRAST = '50',
        EXPOSURE = 'MANUAL',
        FOCUS= 'MANUAL',
        SHARPNESS = '50',
        BALANCE = '50';
var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + 'Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.setImagingSettings({
brightness: BRIGHTNESS,
colorSaturation: COLORSATURATION,
contrast: CONTRAST,
exposure: EXPOSURE,
focus: FOCUS,
sharpness: SHARPNESS,
whiteBalance: BALANCE
},function(err, stream) {
console.log(stream);
});
this.getImagingSettings({VideoSourceToken:'000'},function(err, image) {
console.log(image);
});
});
Ce code reprend le précedent.
Pour modifier les valeurs il suffit de modifier les valeurs dans

Code : Tout sélectionner

	var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';
        BRIGHTNESS = '50',
        COLORSATURATION = '50',
        CONTRAST = '50',
        EXPOSURE = 'MANUAL',
        FOCUS= 'MANUAL',
        SHARPNESS = '50',
        BALANCE = '50';
Puis à l'execution

Code : Tout sélectionner

node setimage.js
On obtient le retour des valeurs de l'image.
Si elles correspondent aux valeurs entrées alors ça a marché.

Si vous êtes satisfait des actions réalisés par ces commandes, alors créez vos fichiers (mode jour et mode nuit pour moi par exemple)
Et déplacez les dans /var/www/html/plugins/script/core/ressources
Puis faites

Code : Tout sélectionner

cd /var/www/html/plugins/script/core/ressources
Creez un fichier qui va executer le script:

Code : Tout sélectionner

nano modejour.sh
Et entrez

Code : Tout sélectionner

#!/bin/bash -l

cd /var/www/html/plugins/script/core/ressources
node image.js $1
Et vous remplacez image.js par le script que vous souhaitez executez dans jeedom
De retour dans Jeedom
Ouvrez le plugin script:
Creez un équipement comme ceci, remplacez OnvifPtz0.sh par le nom de votre script modejour.sh par exemple
Image
Puis vous avez un bouton sur votre dashboard qui vous permet de changer les presets

Partie 3: Le PTZ
Pour le ptz, il faut d'abord trouver les tokens des différents presets que vous avez enregistrer sur la caméra (par le biais d'un nas synology ou de l'interface web par exemple).
Pour cela il faut creer un premier programme (getPreset.js)

Code : Tout sélectionner

nano getpreset.js
Puis enregistrer ce code dedans en changeant les valeurs d'authentification avec les votre:

Code : Tout sélectionner

var CAMERA_HOST = 'adresseip',
        USERNAME = 'identifiant',
        PASSWORD = 'motdepasse',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + 'Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getPresets(function(err, preset) {
console.log(preset);
});
});
Puis vous l'executez:

Code : Tout sélectionner

node getpreset.js
Et en sortie vous devez obtenir un truc comme ca:

Code : Tout sélectionner

CONNECTED
{ syno0: '000', syno1: '001', syno2: '002', syno3: '003' }
Ici on voit que j'ai 4 presets créer par mon nas synology avec les noms syno0/syno1 etc
Et les tokens sont 000 ; 001 etc
Donc maintenant que nous avons le token, on peut balader la camera:
Pour ceci creer un programme (portail.js par exemple)
Puis trouver le token du preset que l'on cherche a faire marcher (002 dans mon cas)
Et donc on peut creer un programme:

Code : Tout sélectionner

nano portail.js
Avec le contenu suivant

Code : Tout sélectionner

var CAMERA_HOST = 'adresseip',
        USERNAME = 'identifiant',
        PASSWORD = 'mdp',
        PORT = 'port',
        PRESET = 'le token du preset';


var http = require('http'),
 Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.gotoPreset({preset:PRESET},function(err, pos) {console.log(pos)});
});
Vous executez:

Code : Tout sélectionner

node portail.js
Et vous obtenez quelque chose qui ressemble a ça:

Code : Tout sélectionner

CONNECTED
[ { gotoPresetResponse: [ '' ] } ]
Ici on voit que ma caméra n'a pas de réponse enregistrer (toute les réponses différent selon les caméra/marques)
Voila vous pouvez donc commander votre caméra.
Partie 4: Reboot
Pour reboot la caméra il suffit d'excuter ce script

Code : Tout sélectionner

nano reboot.js
Puis Entrez

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username:$
                return;
        }
console.log('CONNECTED');

this.systemReboot(function(err, stream) {
console.log(stream);
});
});
Puis executez

Code : Tout sélectionner

node reboot.js
Vous devez obtenir CONNECTED, et le message de votre caméra (qui peut ne rien envoyer)
Pour ma part voici ce que la dahua sd22204 T-GN renvoit:

Code : Tout sélectionner

CONNECTED
Rebooting in 2 seconds
Partie 5: Les autres commandes

Voici toutes les commandes supportés par le projet:

GetSystemDateAndTime
GetCapabilities
GetVideoSources
GetProfiles
GetServices
GetDeviceInformation
GetStreamUri
GetSnapshotUri
GetPresets
GotoPreset
RelativeMove
AbsoluteMove
ContinuousMove
Stop
GetStatus
SystemReboot
GetImagingSettings
SetImagingSettings
GetHostname
GetScopes
SetScopes
GetRecordings
GetReplayUri

Une fois que vous avez choisi votre commande allez sur
https://www.onvif.org/onvif/ver20/util/ ... Index.html
Cherchez votre commandes et les options qu'elle comporte et le tour est joué.
Voici quelque exemple de commandes brut a remplacer avec vos valeurs:

Partie 6: exemples
Get System Date and Time:

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getSystemDateAndTime(function(err, date) {
console.log(date);
});
});
Snapshot URL

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getSnapshotUri(function(err, snap) {
console.log(snap);
});
});
Stream URL

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';
        PROTOCOL = 'RSTP';

var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getStreamUri({protocol: PROTOCOL},function(err, stream) {
console.log(stream);
});
});
Get Device Info

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getDeviceInformation(function(err, info) {
console.log(info);
});
});
Get Hostname

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getHostname(function(err, host) {
console.log(host);
});
});
Get Scopes

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getScopes(function(err, scope) {
console.log(scope);
});
});
Get Nodes

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getNodes(function(err, node) {
console.log(node);
});
});
Get Configuration

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + 'Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getConfigurations(function(err, config) {
console.log(config);
});
});
=
Position (GetStatus)

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getStatus({ProfileToken:TOKEN},function(err, status) {console.log(status)});
});
Sortie (exemple)

Code : Tout sélectionner

{ position: { x: 0.918778, y: 0.236727, zoom: 0 },
  moveStatus: { panTilt: 'IDLE', zoom: 'IDLE' },
  error: undefined,
  utcTime: Mon May 21 2018 15:31:04 GMT+0000 (UTC) }
Absolute Move

Code : Tout sélectionner

var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port',
        X = '0.3427',
        Y = '0.1332',
        Z = '0.5',
	Xspeed = '0.2',
	Yspeed = '0.2',
	Zspeed = '0.2';

var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.absoluteMove({x:X,y:Y,z:Z,speed:{x:Xspeed,y:Yspeed,zoom:Zspeed}},function(err, absmove) {console.log(absmove)});
});
X, Y , Z sont les coordonnés a atteindre (entre -1/1)
Xspeed, Yspeed, Zspeed sont les vitesses de déplacement.
Relative Move

Code : Tout sélectionner


var CAMERA_HOST = 'IP',
        USERNAME = 'ID',
        PASSWORD = 'mdp',
        PORT = 'port',
        X = '1',
        Y = '1',
        Z = '1',
        Xspeed = '0.5',
        Yspeed = '0.5',
        Zspeed = '0.5';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.relativeMove({x:X,y:Y,zoom:Z,speed:{x:Xspeed, y:Yspeed , zoom:Zspeed}},function(err, relmove) {console.log(relmove)});
});
X,Y les coordonnés, Z le zoom
Xspeed, Yspeed, Zspeed sont les vitesses de déplacement.
Continuous Mode

Code : Tout sélectionner


var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port',
        X = '0.1',
        Y = '0.1',
        Z = '0',
        TIMEOUT = '2000';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.continuousMove({x:X,y:Y,zoom:Z,timeout:TIMEOUT},function(err, contmove) {console.log(contmove)});
});
X,Y vitesse de rotation, Z la vitesse du zoom , Timeout: le temps en MS au bout duquel la caméra s'arretera.
Stop (stopper la rotation si il n'y a pas eu de timeout par exemple)

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port',
        X = '0.1',
        Y = '0.1',
        Z = '0',
        TIMEOUT = '2000';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.stop(function(err, stop) {console.log(stop)});
});
Go To Home Position

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port',
        Xspeed = '0.5',
        Yspeed = '0.5',
        Zspeed = '0.5';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.gotoHomePosition({speed:{x:Xspeed, y:Yspeed , zoom:Zspeed}},function(err, relmove) {console.log(relmove)});
});
Set Home Position

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';

var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.setHomePosition(function(err, sethome) {console.log(sethome)});
});
Set Preset

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port',
        PRESETNAME = 'nomdupreset';

var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.setPreset({presetName:PRESETNAME},function(err, rmpreset) {console.log(rmpreset)});
});

Remove Preset

Code : Tout sélectionner


var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port',
        PRESETTOKEN = 'tokendupreset';

var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.removePreset({presetToken:PRESETTOKEN},function(err, rmpreset) {console.log(rmpreset)});
});
Get Configurations

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port',


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getConfigurations(function(err, config) {
console.log(config);
});
});
Get Configuration Option

Code : Tout sélectionner


var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port',
        CONFIGTOKEN = 'tokenPTZ';

var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Username: ' + USERNAME + ' Password: ' + PASSWORD);
                return;
        }
console.log('CONNECTED');

this.getConfigurationOptions({configurationToken:CONFIGTOKEN},function(err, configopt) {
console.log(configopt);
});
});
Pour ma part cette derniere commande n'étant pas supporté par ma caméra j'obtient:

Code : Tout sélectionner

CONNECTED
undefined
En espérant vous avoir aidé
Jules

SI vous avez des conseils/améliorations n'hésitez pas,
Pièces jointes
2018-05-19 (2).png
2018-05-19 (2).png (41.51 Kio) Consulté 764 fois
Dernière édition par Jules13 le 01 juin 2018, 19:38, édité 28 fois.
"Si le cerveau était si facile à comprendre, nous serions si simple d'esprit que nous ne le comprendrions pas. "
Lyall Watson
"Quand l'argent parle, la vérité se tait."
Proverbe congolais

Avatar de l’utilisateur
alientouch
Timide
Messages : 305
Inscription : 07 août 2014, 23:07

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par alientouch » 20 mai 2018, 21:20

Merci pour le tuto.

Et oui pour un plugin ce serait cool.
Raspberry Pi 3 + SSD : Jeedom 3.2.11
Dongle Z-Wave : Aeotec Z-Stick Gen 5
Passerrelle 433 Mhz : RFXcom RFXtrx433
Mon matériel

Avatar de l’utilisateur
slobberbone
Actif
Messages : 2692
Inscription : 25 juin 2014, 12:34
Localisation : Caen

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par slobberbone » 21 mai 2018, 08:42

Très intéressant j'avais commencé la recherche d'info pour en faire un plugin !
Beau boulot.

Envoyé de mon D6503 en utilisant Tapatalk

Présentation, Rénovation, JeedomBox : https://www.jeedom.fr/forum/viewtopic.php?f=50&t=11339
Mes plugins/widgets : viewtopic.php?f=50&t=11339#p214011

Avatar de l’utilisateur
slobberbone
Actif
Messages : 2692
Inscription : 25 juin 2014, 12:34
Localisation : Caen

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par slobberbone » 21 mai 2018, 10:34

A priori on est parti pour bosser ensemble avec @Jules13 sur le plugin-ONVIF ;) !
Présentation, Rénovation, JeedomBox : https://www.jeedom.fr/forum/viewtopic.php?f=50&t=11339
Mes plugins/widgets : viewtopic.php?f=50&t=11339#p214011

Jules13
Timide
Messages : 211
Inscription : 05 avr. 2017, 20:42

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par Jules13 » 21 mai 2018, 11:05

Tuto terminé, il manque les commandes de mouvement relatif et absolue qui marchent mais comme la commande qui releve les positions et les maximum est buggé, c'est peu pratique a utiliser.
Je le rajouterai quand ca marchera
Jules
"Si le cerveau était si facile à comprendre, nous serions si simple d'esprit que nous ne le comprendrions pas. "
Lyall Watson
"Quand l'argent parle, la vérité se tait."
Proverbe congolais

Avatar de l’utilisateur
slobberbone
Actif
Messages : 2692
Inscription : 25 juin 2014, 12:34
Localisation : Caen

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par slobberbone » 21 mai 2018, 11:12

Si tu peux commencer à créer un fichier json pour qu'on l'intègre au plugin à la manière de : https://github.com/NotAuthorised/plugin-Andro ... andes.json merci !
Présentation, Rénovation, JeedomBox : https://www.jeedom.fr/forum/viewtopic.php?f=50&t=11339
Mes plugins/widgets : viewtopic.php?f=50&t=11339#p214011

Jules13
Timide
Messages : 211
Inscription : 05 avr. 2017, 20:42

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par Jules13 » 21 mai 2018, 18:04

Voila j'ai réussi a faire marcher les commandes de mouvements relatifs et absolues chez moi sur ma caméra dahua.
Donc tout marche, j'ai tout ajouté au tuto
Si vous avez des améliorations n'hésitez pas
Jules
"Si le cerveau était si facile à comprendre, nous serions si simple d'esprit que nous ne le comprendrions pas. "
Lyall Watson
"Quand l'argent parle, la vérité se tait."
Proverbe congolais

Naboleo
Timide
Messages : 303
Inscription : 20 janv. 2017, 09:57

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par Naboleo » 30 mai 2018, 10:09

Je vote pour un plugin ONVIF !
Pi3 +SSD 32Go (Wifi et bluetooth actifs) + Clé USB Z-Wave Everspring + rfxcom (RTS) + Google Home
7 Danfoss LC-13
2 velux module DIO
7 volets RTS
Capteur porte, de présence, et prise intelligente...

Naboleo
Timide
Messages : 303
Inscription : 20 janv. 2017, 09:57

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par Naboleo » 01 juin 2018, 10:48

Jules13 a écrit :
19 mai 2018, 09:13

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Us$
                return;
        }
console.log('CONNECTED');
});
Puis il faut l'executer:

Code : Tout sélectionner

node test1.js
Question bête, mais il n'y a pas une erreur de syntaxe dans le script ?
Genre une ) pour fermer la fonction log

Code : Tout sélectionner

/tmp/test1.js:17
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Us$
                                                                                        ^^^^^

SyntaxError: Unexpected token ILLEGAL
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:373:25)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:140:18)
    at node.js:1043:3
Pi3 +SSD 32Go (Wifi et bluetooth actifs) + Clé USB Z-Wave Everspring + rfxcom (RTS) + Google Home
7 Danfoss LC-13
2 velux module DIO
7 volets RTS
Capteur porte, de présence, et prise intelligente...

Jules13
Timide
Messages : 211
Inscription : 05 avr. 2017, 20:42

Re: [TUTO] PILOTAGE CAMERA ONVIF (protocole universel)

Message par Jules13 » 01 juin 2018, 19:38

Naboleo a écrit :
01 juin 2018, 10:48
Jules13 a écrit :
19 mai 2018, 09:13

Code : Tout sélectionner

var CAMERA_HOST = 'adressip',
        USERNAME = 'username',
        PASSWORD = 'password',
        PORT = 'port';


var http = require('http'),
        Cam = require('./onvif').Cam;

new Cam({
        hostname: CAMERA_HOST,
        username: USERNAME,
        password: PASSWORD,
        port: PORT
}, function(err) {
        if (err) {
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Us$
                return;
        }
console.log('CONNECTED');
});
Puis il faut l'executer:

Code : Tout sélectionner

node test1.js
Question bête, mais il n'y a pas une erreur de syntaxe dans le script ?
Genre une ) pour fermer la fonction log

Code : Tout sélectionner

/tmp/test1.js:17
                console.log('Connection Failed for ' + CAMERA_HOST + ' Port: ' + PORT + ' Us$
                                                                                        ^^^^^

SyntaxError: Unexpected token ILLEGAL
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:373:25)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:140:18)
    at node.js:1043:3
Corrigé, j'avais mal copier coller :)
Merci
Jules
"Si le cerveau était si facile à comprendre, nous serions si simple d'esprit que nous ne le comprendrions pas. "
Lyall Watson
"Quand l'argent parle, la vérité se tait."
Proverbe congolais

Répondre

Revenir vers « [Catégorie] Sécurité »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité