freddye a écrit : ↑12 avr. 2018, 11:19
Bonjour
Suite à l'achat d'une caméra chinoise PTZ sur Aliexpress, je me suis rapidement rendu compte que celle-ci allait être difficile à intègrer sous Jeedom.
En effet, étant inconnue, aucune URL pour le snapshot et encore moins pour le PTZ.
La seule donnée connue étant qu"elle est compatible (comme toutes les nouvelles caméra) ONVIF.
Etant tombé sur sur projet :
https://github.com/futomi/node-onvif#On ... set-method , je me suis dis qu'il y avait une forte piste a suivre.
J'ai donc installé le module Node ONVIF avec la commande
Puis réalisé le code suivant (getStatus.js) :
Code : Tout sélectionner
const onvif = require('node-onvif');
// Create an OnvifDevice object
let device = new onvif.OnvifDevice({
xaddr: 'http://192.168.1.10:8899/onvif/device_service',
user : 'xxx',
pass : 'xxx'
});
// Initialize the OnvifDevice object
device.init().then(() => {
let profile = device.getCurrentProfile();
console.log(JSON.stringify(profile, null, ' '));
}).then(() => {
console.log('Done!');
}).catch((error) => {
console.error(error);
});
Et là, miracle :
Code : Tout sélectionner
root@jeedom:~# node getStatus.js
{
"token": "000",
"name": "Profile_000",
"snapshot": "http://192.168.1.10/webcapture.jpg?command=snap&channel=1",
"stream": {
"udp": "rtsp://192.168.1.10:554/user=xx_password=xx_channel=1_stream=0.sdp?real_stream",
"http": "rtsp://192.168.1.10:554/user=xx_password=xx_channel=1_stream=0.sdp?real_stream",
"rtsp": "rtsp://192.168.1.10:554/user=xx_password=xx_channel=1_stream=0.sdp?real_stream"
},
"video": {
"source": {
"token": "000",
"name": "VideoS_000",
"bounds": {
"width": 1280,
"height": 960,
"x": 0,
"y": 0
}
},
"encoder": {
"token": "000",
"name": "VideoE_000",
"resolution": {
"width": 1280,
"height": 960
},
"quality": 4,
"framerate": 25,
"bitrate": 3072,
"encoding": "H264"
}
},
"audio": {
"source": {
"token": "000",
"name": "Audio_000"
},
"encoder": {
"token": "000",
"name": "AudioE_000",
"bitrate": 64,
"samplerate": 8,
"encoding": "G711"
}
},
"ptz": {
"range": {
"x": {
"min": -1,
"max": 1
},
"y": {
"min": -1,
"max": 1
},
"z": {
"min": -1,
"max": 1
}
}
}
}
Done!
Plein d'info, dont la précieuse URL
http://192.168.1.10/webcapture.jpg?comm ... &channel=1 qui me permet donc de créer ma caméra dans le plugin caméra (plus besoin de passer par le plugin RTSP)
Bon, c'est bien beau, mais maintenant, il serait bien de pouvoir la piloter :
Création du script ptz.js :
Code : Tout sélectionner
const onvif = require('node-onvif');
var myArgs = process.argv.slice(2);
console.log('myArgs: ', myArgs);
// Create an OnvifDevice object
let device = new onvif.OnvifDevice({
xaddr: 'http://192.168.1.10:8899/onvif/device_service',
user : 'xx',
pass : 'xx'
});
// Initialize the OnvifDevice object
device.init().then(() => {
let params = {
'ProfileToken': '000',
'PresetToken' : myArgs[0],
'Speed' : {'x': 1, 'y': 1, 'z': 1}
};
device.services.ptz.gotoPreset(params).then((result) => {
console.log(JSON.stringify(result['data'], null, ' '));
}).catch((error) => {
console.error(error);
});
});
Puis via le plugin script :
Créer un fichier OnvifPtz.sh :
et ajouter autant d'action que de preset voulu avec appel à OnvifPtz et le num du preset en paramètre :
Capture.PNG
Le plugin camera ne permettant pas de créer des commandes avec appel de script, j'ai donc créé un virtuel permettant d'appeler les scripts.
Je me retrouve donc avec une caméra parfaitement intégrée dans Jeedom.
Certe, le temps de réponse est assez long (3 secondes entre l'appuis sur le virtuel et la réponse de la caméra), mais c'est déjà pas mal.
La doc sur le module node-onvif est assez détaillée, libre à vous de rajouter d'autres commandes telles que déplacement, zoom ...
Capture2.PNG