Acesso a câmera IP via Python no Linux

Uma câmera de protocolo de Internet (câmera IP) é um tipo de câmera de vídeo digital que recebe dados de controle e envia dados de imagem por meio de uma rede IP. Elas são comumente usados ​​para vigilância, mas ao contrário das câmeras analógicas de circuito fechado de televisão (CCTV), elas não requerem nenhum dispositivo de gravação local, apenas uma rede local.

Câmera IP Yoosee. Fonte: divulgação
Câmera IP Yoosee. Fonte: divulgação

Para ter acesso à câmera, deve-se conectá-la no mesmo roteador que o computador (wireless ou cabo). No computador, acessar o site do roteador (geralmente 192.168.0.1 ou 192.168.1.1), entrar com login e senha e buscar o IP pelo nome do dispositivo ou MAC address (identificador único atribuído a uma interface de rede do endereço de controle de acesso ao dispositivo). A visualização das imagens (ou até áudio) pode ser através de software proprietário ou genérico, como o VLC. A comunicação ocorre via protocolo RTSP (Real Time Streaming Protocol).

Existem comandos em linha no Linux que podem executar essa funções, com bibliotecas e métodos implementados em Python. O script desse post pesquisa o endereço IP da câmera e lança o programa VLC para transmissão desse endereço. Para isso, você deve entrar com as seguintes variáveis personalizadas para o seu caso:

  • router_user – usuário do painel de controle do roteador
  • router_password – senha do roteador
  • login_url – URL do roteador, usada no navegador (por exemplo, ‘http://192.168.1.1/login.cgi’)
  • data_url – página do painel de controle com os clientes conectados ao roteador (por exemplo, ‘http://192.168.1.1/status_lanclients.cgi?submitValue=Refresh&refreshStatus=0’)
  • cam_macAddress – endereço MAC do dispositivo (veja pelo painel ou pelo equipamento)
  • WiFi_password – senha para o dispositivo se conectar ao roteador

Com essas informações, haverá a tentativa de abrir uma sessão com o roteador, onde poderão ser exibidas mensagens de erro conforme o caso. Com a sessão aberta, a página de status será aberta e o IP do dispositivo será coletado através do MAC address.

De posse do IP, será executado o comando em bash ou shell para abrir o VLC usando a senha do WiFi e o endereço IP, através do protocolo RTSP: “vlc rtsp://admin:”+WiFi_password+”@”+ipAddress+”/onvif1”. O ONVIF é um protocolo aberto da indústria, utilizado com o objetivo de facilitar o desenvolvimento e o uso de um padrão aberto global para a interface de produtos de segurança físicos baseados em IP. Confira se a sua câmera trabalha com ele.

#!/usr/bin/env python3

# Pesquisa o endereço IP da câmera e lança o programa VLC
import os
import requests
from requests.exceptions import Timeout, ConnectionError, ConnectTimeout
import sys
import shutil
import subprocess
import shlex
   
def run_command(command, **kwargs):
    bash = kwargs.get('bash',  False)
    shell = kwargs.get('shell',  False)

    # execução de comandos direto no shell
    if bash or shell:
       cprocess = subprocess.run(command, shell=True, encoding='utf-8', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    else: 
       cprocess = subprocess.run(shlex.split(command), encoding= 'utf-8',  stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return cprocess

def main():

    router_user = 'ENTER_YOUR_DATA_HERE'
    router_password = 'ENTER_YOUR_DATA_HERE'
    login_url = 'ENTER_YOUR_DATA_HERE'
    data_url = 'ENTER_YOUR_DATA_HERE'
    cam_macAddress = 'ENTER_YOUR_DATA_HERE'
    WiFi_password = 'ENTER_YOUR_DATA_HERE'
    
    # Abre sessão com o roteador
    payload = {'isSubmit':'1','username': router_user,'password': router_password}
    s = requests.Session()
    try:
        resp = s.post(login_url, data=payload,  timeout=10)
    except Timeout:
        print("*** Roteador não responde. Timeout ***")
        exit()
    except ConnectionError:
        print("*** Erro na conexão. Provavel queda na internet ***")
        exit()
    except ConnectTimeout:
        print( "**** Timeout da conexão ***" )
        exit()
    if not resp.ok:
        print("*** Problemas não identficados na conexão ***")
        exit()

    resp = s.get(data_url)
    lines = resp.text.split()

    for i, line in enumerate(lines):

        if line == "vIpAddress[vIpAddress.length]":
           ipAddress = lines[i+2].replace(";", "")
           ipAddress = ipAddress.replace("'", "")

        if line == "vMacAddress[vMacAddress.length]":
            macAddress = lines[i+2].replace(";","")
            macAddress = macAddress.replace("'", "")
            if macAddress == cam_macAddress:
                break

    print(ipAddress)
    cmd = "vlc rtsp://admin:"+WiFi_password+"@"+ipAddress+"/onvif1"
    #print(cmd)
    run_command(cmd)
    exit()

main()

Chame o script em seu terminal como “python cameraIP.py”, por exemplo.

Espalhe a mensagem

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.