Skip to content

Instantly share code, notes, and snippets.

@bragonznx
Created June 26, 2016 07:45
Show Gist options
  • Save bragonznx/45df3f16c429271dbdfa658e83b2cd1b to your computer and use it in GitHub Desktop.
Save bragonznx/45df3f16c429271dbdfa658e83b2cd1b to your computer and use it in GitHub Desktop.
## azuru HPIS III api reflex V0.1
IP = '127.0.0.2'
status = 'http://127.0.0.2/info'
# Format video
v1080 = 'http://127.0.0.2/ctrl/set?movfmt=1080P30'
v4000 = 'http://127.0.0.2/ctrl/set?movfmt=4KP30'
v0960 = 'http://127.0.0.2/ctrl/set?movfmt=0960P30'
# lance l'enregistrement
shutter = 'http://127.0.0.2/ctrl/rec?action=start'
isrec = 'http://127.0.0.2/ctrl/mode?action=query'
stop = 'http://127.0.0.2/ctrl/rec?action=stop'
## Changement des ISO
iso3200 = 'http://127.0.0.2/ctrl/set?iso=3200'
iso0400 = 'http://127.0.0.2/ctrl/set?iso=400'
iso0800 = 'http://127.0.0.2/ctrl/set?iso=800'
iso0200 = 'http://127.0.0.2/ctrl/set?iso=200'
iso1600 = 'http://127.0.0.2/ctrl/set?iso=1600'
iso6400 = 'http://127.0.0.2/ctrl/set?iso=6400'
isoauto = 'http://127.0.0.2/ctrl/set?iso=Auto'
## switch mode
videoMode = 'http://127.0.0.2/ctrl/mode?action=to_rec'
photoMode = 'http://127.0.0.2/ctrl/mode?action=to_cap'
resov = 'http://127.0.0.2/ctrl/get?k=movfmt'
iso = 'http://127.0.0.2/ctrl/get?k=iso'
## Eteinds l'appareil
off = 'http://127.0.0.2/ctrl/shutdown'
## Temperature
wb = 'http://127.0.0.2/ctrl/get?k=wb'
## Switch focus
af = 'http://127.0.0.2/ctrl/set?focus=AF'
mf = 'http://127.0.0.2/ctrl/set?focus=MF'
focus = 'http://127.0.0.2/ctrl/get?k=focus'
@bragonznx
Copy link
Author

pi@raspberrypi:~/zcam/api $ curl -v http://127.0.0.2/ctrl/get?k=focus

  • Hostname was NOT found in DNS cache
  • Trying 127.0.0.2...
  • Connected to 127.0.0.2 (127.0.0.2) port 80 (#0)

    GET /ctrl/get?k=focus HTTP/1.1
    User-Agent: curl/7.38.0
    Host: 127.0.0.2
    Accept: /

    < HTTP/1.1 200 Ok
    < Content-Length: 88
    < Cache-Control: no-cache
    < Content-Type: application/json; charset=utf-8
    < Connection: keep-alive
    <
  • Connection #0 to host 127.0.0.2 left intact
    {"code":0,"desc":"string","key":"focus","type":1,"ro":1,"value":"MF","opts":["MF","AF"]}

@rlamarche
Copy link

rlamarche commented Jul 17, 2016

implémentation OK :

Changement des ISO

iso3200 = 'http://127.0.0.2/ctrl/set?iso=3200'
iso0400 = 'http://127.0.0.2/ctrl/set?iso=400'
iso0800 = 'http://127.0.0.2/ctrl/set?iso=800'
iso0200 = 'http://127.0.0.2/ctrl/set?iso=200'
iso1600 = 'http://127.0.0.2/ctrl/set?iso=1600'
iso6400 = 'http://127.0.0.2/ctrl/set?iso=6400'
isoauto = 'http://127.0.0.2/ctrl/set?iso=Auto'

PS : sur D800, en mode vidéo, on est restreint par le mode d'exposition :
mode M : ISO manuel (pas auto possible)
mode P, A, S : ISO automatique obligatoirement

PS2 : des ISO intermédiaires sont possibles

PS3 : je trouve plus intéressant d'implémenter un service qui augmente / diminue la sensibilité de 1, 1/2 ou 1/3 diaph (en fonction du DSLR)

TODO : voir le comportement des autres DSLR pour les ISO auto / manuel en mode vidéo
TODO2 : prévoir un service qui liste la liste des ISO possibles

@rlamarche
Copy link

rlamarche commented Jul 23, 2016

Implémentation OK 👍

switch mode

videoMode = 'http://127.0.0.2/ctrl/mode?action=to_rec'
photoMode = 'http://127.0.0.2/ctrl/mode?action=to_cap'

PS : par défaut le liveview est désactivé au lancement, il s'active lorsque l'on choisi to_rec ou to_cap
Pour le désactiver :

Eteinds l'appareil

off = 'http://127.0.0.2/ctrl/shutdown'

@rlamarche
Copy link

rlamarche commented Jul 25, 2016

Ça renvoi le statut de l'appareil photo , valeurs courantes iso, aperture, shutterspeed ... et les valeurs possibles.

curl http://192.168.1.17:8080/ctrl/mode?action=query
{
"aperture": "f/2,8",
"apertures": [
"f/2,8",
"f/3,2",
"f/3,5",
"f/4",
"f/4,5",
"f/5",
"f/5,6",
"f/6,3",
"f/7,1",
"f/8",
"f/9",
"f/10",
"f/11",
"f/13",
"f/14",
"f/16",
"f/18",
"f/20",
"f/22"
],
"captureMode": 1,
"exposureMode": "A",
"exposureModes": [
"M",
"P",
"A",
"S"
],
"isInLiveView": false,
"isRecording": false,
"iso": "100",
"isos": [
"50",
"64",
"80",
"100",
"125",
"160",
"200",
"250",
"320",
"400",
"500",
"640",
"800",
"1000",
"1250",
"1600",
"2000",
"2500",
"3200",
"4000",
"5000",
"6400",
"8000",
"10000",
"12800",
"25600"
],
"shutterSpeed": "15,0000s",
"shutterSpeeds": [
"0,0001s",
"0,0002s",
"0,0003s",
"0,0004s",
"0,0005s",
"0,0006s",
"0,0008s",
"0,0010s",
"0,0012s",
"0,0015s",
"0,0020s",
"0,0025s",
"0,0031s",
"0,0040s",
"0,0050s",
"0,0062s",
"0,0080s",
"0,0100s",
"0,0125s",
"0,0166s",
"0,0200s",
"0,0250s",
"0,0333s",
"0,0400s",
"0,0500s",
"0,0666s",
"0,0769s",
"0,1000s",
"0,1250s",
"0,1666s",
"0,2000s",
"0,2500s",
"0,3333s",
"0,4000s",
"0,5000s",
"0,6250s",
"0,7692s",
"1,0000s",
"1,3000s",
"1,6000s",
"2,0000s",
"2,5000s",
"3,0000s",
"4,0000s",
"5,0000s",
"6,0000s",
"8,0000s",
"10,0000s",
"13,0000s",
"15,0000s",
"20,0000s",
"25,0000s",
"30,0000s"
]
}

@rlamarche
Copy link

romain@romain-ThinkPad-T550:/Projets/perso/azuru/commands$ curl http://192.168.1.17:8080/ctrl/get?k=iso
{
"key": "iso",
"opts": [
"50",
"64",
"80",
"100",
"125",
"160",
"200",
"250",
"320",
"400",
"500",
"640",
"800",
"1000",
"1250",
"1600",
"2000",
"2500",
"3200",
"4000",
"5000",
"6400",
"8000",
"10000",
"12800",
"25600"
],
"value": "100"
}
romain@romain-ThinkPad-T550:
/Projets/perso/azuru/commands$ curl http://192.168.1.17:8080/ctrl/get?k=aperture
{
"key": "aperture",
"opts": [
"f/2,8",
"f/3,2",
"f/3,5",
"f/4",
"f/4,5",
"f/5",
"f/5,6",
"f/6,3",
"f/7,1",
"f/8",
"f/9",
"f/10",
"f/11",
"f/13",
"f/14",
"f/16",
"f/18",
"f/20",
"f/22"
],
"value": "f/2,8"
}
romain@romain-ThinkPad-T550:/Projets/perso/azuru/commands$ curl http://192.168.1.17:8080/ctrl/get?k=shutterSpeed
{
"key": "shutterSpeed",
"opts": [
"0,0001s",
"0,0002s",
"0,0003s",
"0,0004s",
"0,0005s",
"0,0006s",
"0,0008s",
"0,0010s",
"0,0012s",
"0,0015s",
"0,0020s",
"0,0025s",
"0,0031s",
"0,0040s",
"0,0050s",
"0,0062s",
"0,0080s",
"0,0100s",
"0,0125s",
"0,0166s",
"0,0200s",
"0,0250s",
"0,0333s",
"0,0400s",
"0,0500s",
"0,0666s",
"0,0769s",
"0,1000s",
"0,1250s",
"0,1666s",
"0,2000s",
"0,2500s",
"0,3333s",
"0,4000s",
"0,5000s",
"0,6250s",
"0,7692s",
"1,0000s",
"1,3000s",
"1,6000s",
"2,0000s",
"2,5000s",
"3,0000s",
"4,0000s",
"5,0000s",
"6,0000s",
"8,0000s",
"10,0000s",
"13,0000s",
"15,0000s",
"20,0000s",
"25,0000s",
"30,0000s"
],
"value": "15,0000s"
}
romain@romain-ThinkPad-T550:
/Projets/perso/azuru/commands$ curl http://192.168.1.17:8080/ctrl/get?k=exposureMode
{
"key": "exposureMode",
"opts": [
"M",
"P",
"A",
"S"
],
"value": "A"
}
romain@romain-ThinkPad-T550:~/Projets/perso/azuru/commands$ curl http://192.168.1.17:8080/ctrl/get?k=invalid
{
"error": "Key does not (yet ?) exists",
"key": "invalid"
}

@rlamarche
Copy link

rlamarche commented Jul 25, 2016

Contrôles implémentés :

curl http://192.168.1.17:8080/ctrl/set?exposureMode={P,A,S,M}
curl http://192.168.1.17:8080/ctrl/set?iso={100,200,...}
curl http://192.168.1.17:8080/ctrl/set?aperture={f/2,8,f/5,6,...}
curl http://192.168.1.17:8080/ctrl/set?shutterSpeed={25,30,50,60,100,...}

Evidemment les valeurs possibles dépendent de ton appareil photo, ton objectif, ton niveau de zoom et du mode activé.
Le refresh des options se fait toutes les 2 secondes pour l'instant. Voir au dessus pour obtenir les valeurs possibles.

La réponse est vide pour l'instant.
Pas besoin de faire un HTTP POST pour l'instant, mais ce sera le cas dans le futur, pour respecter les normes du REST

@rlamarche
Copy link

Pour lancer le programme, depuis le rasp :

cd /home/pi
QT_QPA_EGLFS_FORCE888=1 QT_QPA_EVDEV_KEYBOARD_PARAMETERS="keymap=/home/pi/fr.qmap" ./hpis

Au final le keymap est ignoré...
L'option QT_QPA_EGLFS_FORCE888=1 est obligatoire chez moi sur ma TV sinon les couleurs ne sont pas top

J'ai mis un overscan en dur dans le programme pour l'instant, donc si tu as des bords noir c'est normal.

Pour chopper le liveview en temps réel :
http://192.168.1.17:8080/liveView.mjpg

Pour chopper juste 1 frame :
http://192.168.1.17:8080/preview.jpg

Attention, pas de frame tant que tu as pas activé le liveview avec :

curl http://192.168.1.17:8080/ctrl/mode?action=to_rec : mode vidéo
curl http://192.168.1.17:8080/ctrl/mode?action=to_cap : mode photo

en mode vidéo, pour commencer à enregistrer :
curl http://192.168.1.17:8080/ctrl/rec?action=start

Pour stopper :
curl http://192.168.1.17:8080/ctrl/rec?action=stop

En mode photo, le start prend une photo .. attention c'est long.

Pour couper le liveview :
curl http://192.168.1.17:8080/ctrl/shutdown

Attention : quand un cable usb est branché, l'appareil photo ne se met jamais en veille, donc la batterie se vide assez vite. Pour pas "user" mes batteries, j'ai commandé cet alimentation externe : https://www.amazon.fr/gp/product/B00MUJ1UM6/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1 (moi il m'a couté 30 €, le prix semble avoir augmenté)

Pour quitter, échap ou killall hpis

J'ai mis des exemples d'autres commandes au dessus.

Pour activer l'autofocus :
curl http://192.168.1.17:8080/ctrl/focus

Dans le futur ce sera un post aussi.

J'ai pas encore implémenté le focus manuel, mais il fonctionne en envoyant le nombre d'impulsions qu'on veut dans un sens ou un autre de -32768 à 32768

Bons tests !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment