venerdì 15 novembre 2013

Utilizzo di IP Camera Maygion su Linux

aggiornamento 20 maggio 2016
---------------------------------------
se si collega la camera con il cavo 192.168.1.111
per resettare il firmware si seguono le istruzioni a questa pagina
le istruzioni sul movimento della ptz del codice Python non sono esattamente corrette. Debuggando
la pagina web dell'amministrazione della camera le istruzioni corrette sono



html=urlopen(ur+"moveptz.xml?dir="+direzione+"&user=admin&password=admin")
time.sleep(0.1)
html=urlopen(ur+"moveptz.xml?dir=stop&user=admin&password=admin"

in pratica si fa movimento in una direzione, si attende e poi si stoppa, altrimenti il movimento va a fine corsa
---------------------------------------


Per cercare un sostituto a basso costo della IP Camera Samsung PTZ vista in questo post mi sono per una trentina di euro questa Ip Camera non marcata su un e-commerce cinese

La cosa divertente dell'acquistare prodotti cinesi e' che arrivano totalmente privi di istruzioni e sostanzialmente privi di marca per cui la prima sfida e' stata quella di capire cosa avevo davanti. Il cd incluso con i driver recava un directory denominata asw-380 ed un manuale in inglese ma senza indicazioni di marca e modello.


Guardando in una immagine relativa all'uso del software Android IP Cam Viewer viene riportato che deve essere selezionata l'opzione MayGion IP Camera V3 e questa e' stata l'indicazione fondamentale per individuare il modello.
Per quanto riportato dal manuale la camera e' pilotabile via browser mediante un OCX..quindi non solo sarei stato costretto ad usarlo sotto Windows ma sarei stato costretto ad usare Internet Explorer...la presenza di un programma per Android comunque mi lasciava speranze

La configurazione della rete wireless e' stata semplice perche' sul retro della camera e' disponibile il pulsante WPS per cui il WiFi e' stato autoconfigurato senza l'utilizzo di un computer esterno

Frugando su Internet vi sono frammentarie e scarse informazioni ma sono riuscito a trovare un paio di Pdf in cinese che mostrano la possibilita' di pilotare il dispositivo mediante delle URL (attenzione: esistono due versioni del software della IP Camera MayGion che differiscono sensibilmente, si deve individuare quindi il corretto set di URL)

Per visualizzare lo stream video si puo' utilizzare VLC usando come sorgente del flusso di rete questa URL
http://ipcamera:81/videostream.asf?usr=admin&pwd=admin

Per quanto riguarda il movimento PTZ ho scritto invece un semplice programmino in Python che sfrutta un joystick per muovere la camera

----------------------------------------------
import pygame,time

try:
    from urllib.request import urlopen
except ImportError:
    from urllib2 import urlopen

pygame.init()
j = pygame.joystick.Joystick(0)
j.init()
conta = 0
tick = 100

try:
    while True:
conta=conta+1
        pygame.event.pump()
        if j.get_button(0) == 1:
print "Pulsante 1 : "+str(j.get_button(0))
html=urlopen("http://192.168.0.102:81/cmd.xml?cmd=moveptz&tick="+str(tick)+"&nPtzTimes="+str(conta)+"&dir=up&user=admin&password=admin")
html=urlopen("http://192.168.0.102:81/cmd.xml?cmd=moveptz&nPtzTimes="+str(conta)+"&dir=none&user=admin&password=admin")

        if j.get_button(1) == 1:
print "Pulsante 2 : "+str(j.get_button(1))
html=urlopen("http://192.168.0.102:81/cmd.xml?cmd=moveptz&tick="+str(tick)+"&nPtzTimes="+str(conta)+"&dir=right&user=admin&password=admin")
html=urlopen("http://192.168.0.102:81/cmd.xml?cmd=moveptz&nPtzTimes="+str(conta)+"&dir=none&user=admin&password=admin")

        if j.get_button(2) == 1:
print "Pulsante 3 : "+str(j.get_button(2))
html=urlopen("http://192.168.0.102:81/cmd.xml?cmd=moveptz&tick="+str(tick)+"&nPtzTimes="+str(conta)+"&dir=down&user=admin&password=admin")
html=urlopen("http://192.168.0.102:81/cmd.xml?cmd=moveptz&nPtzTimes="+str(conta)+"&dir=none&user=admin&password=admin")

        if j.get_button(3) == 1:
print "Pulsante 4 : "+str(j.get_button(3))
html=urlopen("http://192.168.0.102:81/cmd.xml?cmd=moveptz&tick="+str(tick)+"&nPtzTimes="+str(conta)+"&dir=left&user=admin&password=admin")
html=urlopen("http://192.168.0.102:81/cmd.xml?cmd=moveptz&nPtzTimes="+str(conta)+"&dir=none&user=admin&password=admin")


        if j.get_button(4) == 1:
print "Pulsante 4 : "+str(j.get_button(4))
tick = tick+25
if tick > 200:
tick = 200

        if j.get_button(5) == 1:
print "Pulsante 5 : "+str(j.get_button(4))
tick = tick-25
if tick < 50:
tick = 25


time.sleep(0.1)

except KeyboardInterrupt:
    j.quit()

----------------------------------------------