-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conexão da camêra com o WebThings - Diário #2
Comments
Dia 02/11/2021 Me encontrei com o Daniel para pegar a câmera, permitindo que eu trabalhe para realizar a conexão dela com o WebThings. |
Dia 03/11/2021 Após obter a câmera, segui para a instalação do gateway WebThingsIO para realizar a conexão entre os componentes. O gateway WebThings necessita ser instalado em um computador que opera sobre um sistema operacional que é suportado por ele (a lista de sistemas disponíveis pode ser encontrada na página da Mozilla WebThings Gateway), o meu computador pessoal utiliza do sistema operacional Windows 10, que não faz parte dos sistemas suportados. Para resolver este problema, decidi criar uma máquina virtual para simular um computador em outro sistema operacional. O sistema operacional escolhido para a máquina virtual foi o Ubuntu, pois ele é suportado pelo gateway. Para montar a máquina virtual, utilizei de um software que permite a criação de máquinas virtuais em ambientes Windows, o VMware Workstation 16 Pro. Após a instalação do software, criei uma nova máquina utilizando a imagem do Ubuntu, que possui as seguintes especificações: Depois de iniciar a máquina tentei realizar a instalação do gateway de imediato, porém, não obtive sucesso, pois o meu notebook não estava aguentando rodar a máquina virtual Ubuntu. |
04/11/2021 Após uma tentativa frustrada no dia anterior, decidi mudar a minha máquina virtual para um computador com mais poder de processamento, realizando todo o processo de instalação da VMware Workstation e montagem da imagem Ubuntu novamente. Desta vez, a máquina virtual estava funcionando sem travamentos, o que me possibilitou começar a instalação do gateway. Após várias tentativas de instalar o gateway através do download do projeto do GitHub e instalação de sua imagem, cheguei a conclusão que a maneira mais fácil de instala-lo é através dos comandos via terminal do Ubuntu, estes comandos podem ser encontrados no arquivo README.md na página do projeto WenThingsIO no GitHub, seção gateway. Através deles, será possível instalar as dependências para o gateway para que ele seja instalado sem problemas (começar pela seção "Prerequisites for Building"). O início da instalação ("Download and Build Gateway"): O gateway é uma aplicação Node.js. Durante a instalação do gateway, o Node.js acusou a falta de algumas bibliotecas em meu sistema, porém, consegui realizar a instalação delas facilmente através das sugestões de comandos para o terminal que o próprio Node disponibiliza. Após fazer o download e instalação do gateway e Node.js, dei início a aplicação através do comando O primeiro passo que foi necessário ser realizado após iniciar o gateway pela primeira vez foi configurar algumas coisas através do link http://localhost:8080, que incluem nome de usuário, email, domínio e etc. O domínio escolhido para a aplicação foi: https://eachcompfisica.webthings.io Depois de configurar, verifiquei que o gateway estava ativo e operante, através do link https://localhost:4443 Agora que a parte do gateway estava pronta, parti para as configurações da câmera. Primeiro tirei a câmera da caixa e verifiquei se ela dava sinais de vida, ao coloca-la na tomada, não havia encontrado nenhum sinal de que ela estava ligada. Após procurar e ler um pouco sobre, descobri que é possível reiniciar a câmera utilizando uma agulha (no caso, utilizei uma chave para abrir caixas de cartões SIM de celulares), pressionando-a no botão RESET da câmera por 15 segundos. Quando a câmera é inserida na tomada, ela leva um tempo para inicializar (fica sem dar sinais de vida). Após reiniciar a câmera, ela começou a fazer uns sons e a se mover sozinha, acreditei que já estava pronta para ser configurada. Seguindo o manual da câmera, comecei a instalação a partir do aplicativo Yoosee, disponível no Google Play para aparelhos Android. O aplicativo disponibiliza 3 tipos de instalação para câmeras, o primeiro é a instalação "Adicionar ponto de acesso", este tipo de instalação, infelizmente, não parece funcionar para o modelo de câmera escolhido para o projeto, pois ela precisaria ter um tipo de rede Wi-Fi própria, o que parece não ocorrer. Existem dois outros tipos de instalação, a "Conexão com fio" e "Adição inteligente". A conexão com fio necessita inserir um cabo de rede na câmera, contudo, a câmera escolhida não suporta este tipo de conexão. Então, como estava buscando conecta-la na minha rede Wi-Fi, segui para a adição inteligente (como também sugere o manual): A adição inteligente consiste em apontar a câmera para o seu dispositivo celular, que estará com um QR Code na tela, para que ela possa ler e se conectar. Esta etapa demorou cerca de 1 hora e meia para mim. Após inúmeras tentativas alinhando o QR Code da tela do celular com a câmera e procurando métodos alternativos no YouTube, quando estava prestes a desistir, a conexão foi feita. Já é possível controla-la pela rede Wi-Fi local após concluir a instalação através do aplicativo: Depois de instalar a câmera na rede e obter acesso via aplicativo. Parti para realizar a sua conexão via gateway, a princípio, tentei da maneira mais simples, que seria buscar componentes WebThings dentro da rede através do botão adicionar (+) do gateway: Como sugerido pelo gateway, pesquisei sobre extensões para dispositivos ONVIF. |
05/11/2021 Encerrei o dia 04 pesquisando sobre extensões ONVIF para o gateway WebThingsIO e sobre o prórpio ONVIF. Encontrei a extensão onvif-adapter que pode ser instalada no gateway: Logo após adicionar a extensão no gateway, foi necessário instalar a biblioteca de vídeo FFMPEG no sistema, a pedido da própria extensão, para que as suas funcionalidades de vídeo funcionem sem problemas. Após pesquisar sobre como realizar a instalação, encontrei o melhor tutorial no blog do Edivaldo Brito. Seguindo cada comando para terminal deixado por ele, consegui concluir a instalação do FFMPEG sem problemas. Depois de instalar a extensão e o FFMPEG, tentei conectar a câmera ao WebThings utilizando a extensão, mas não obtive sucesso: Tentei realizar a conexão através do endereço de IP dado pela câmera no aplicativo: Muitas combinações de possíveis logins foram testadas, mas o erro foi sempre o mesmo:
|
10/11/2021 Continuando as tentativas de login no gateway, procurei pelo padrão de login dos dispositivos ONVIF, encontrei que o padrão seria: login = admin e password = admin, contudo, não obtive sucesso novamente. |
11/11/2021 Mais tentativas de login, mas o mesmo erro permanece, abri uma Issue na página do onvif-adapter com uma descrição bem simples do caso para ver se consigo entrar em contato com algum desenvolvedor ou usuário que já passou pelo mesmo problema. |
15/11/2021 Criação do diário para a tarefa de conexão da câmera com o gateway. |
06/12/2021 Seguindo as orientações do professor, tentei a solução proposta por um usuário deste fórum, que seria se conectar ao gateway (ou outra aplicação) através da porta 8999. Infelizmente, esta solução não resolveu o problema anterior, por isso, a descartei. Para saber se a câmera realmente é um dispositivo ONVIF, pensei em tentar conecta-la a um software comum para a visualização de câmeras (utilizados em lojas, condomínios e etc.), que sirva para conexões ONVIF. Seguindo uma dica do professor, testei o software ONVIF Device Manager, este software é utilizado para testar conexões ONVIF (este software também pode ser utilizado como um visualizador comum), neste link é possível encontrar um breve tutorial. Conexões ONVIF necessitam de um login de usuário com senha (ao menos que a sua câmera possua uma configuração de acesso anônimo). Para fazer o login, utilizei o nome de usuário padrão das câmeras ONVIF: admin, e como senha, utilizei uma definida no aplicativo da câmera, no menu onde se habilita conexões via protocolo RTSP (Real Time Streaming Protocol): Após logar no software, tive uma má surpresa ao descobrir que não é possível assistir o vídeo ao vivo da câmera (afirmação baseada nas minhas tentativas), tudo o que recebo é uma mensagem de NO SIGNAL: Novamente tive a desconfiança de que a câmera não funcionava do jeito esperado. Contudo, estudando um pouco a falha de conexão com software ONVIF Device Manager, consegui descobrir como é feita a transmissão de dados da câmera, tudo acontece através do protocolo RTSP. Após isso, percebi que já tenho tudo o que é preciso para realizar a conexão definitiva com o gateway. Iniciei um novo dispositivo no add-on ONVIF utilizando as credenciais encontradas no ONVIF Device Manager: Contudo, obtive mais um erro de conexão, desta vez, diferente do anterior: Ainda não tenho ideia de como resolver isso, tentei adicionar o tipo Object no arquivo definitions.json mas não foi o suficiente. Abri um novo Issue na página do add-on no GitHub. Também percebi que alguém já passou por um problema um pouco similar, mas que não encontrou solução. |
14/12/2021 Buscando entender melhor o problema "strict mode: missing type "object" for keyword "properties" at", encontrei que este é um problema comum não apenas no addon ONVIF, mas em outras aplicações que também foram desenvolvidas utilizando Node.js. Este erro é derivado da biblioteca Ajv JSON schema validator, é disparado quando alguma inconsistência é encontrada ao se tentar validar um arquivo JSON baseando-se no seu schema utilizando strict mode. O strict mode é utilizado quando se é esperado que o objeto JSON a ser lido tenha exatamente as propriedades do schema (uma comparação equivalente seria a leitura de um XML. Na estrutura XML, temos o arquivo XSD, que define o schema que um arquivo XML deve seguir, ao se receber um XML que não está nos padrões do XSD, um erro será disparado pois a estrutura padrão exigida pelo XSD foi quebrada). A primeira solução que tentei foi alterar o schema JSON diretamente para incluir o type object nas keywords properties, seguindo este tutorial. O arquivo causador do erro é o definitions.json, ele pode ser encontrado no caminho ~gateway/node_modules/gateway-addon/schema/messages/definitions.json. O arquivo contém várias keyword properties, atribui o type object em algumas partes do arquivo. Ao ligar o gateway, percebi nos logs que os schemas haviam quebrado, não obtive sucesso nesta solução, acredito ter feito coisa errada ou que a solução do problema não é tão simples quanto parece. Para consertar o gateway, voltei o arquivo defitinios.json a versão original. Uma outra solução que encontrei para o problema foi desativar o strict mode na inicialização do Ajv, encontrei esta solução pelo stackoverflow em diversos exemplos, mas deixarei apenas esta registrada. Buscando no código fonte do gateway, encontrei que a validação de schemas através do Ajv acontence no arquivo ipc.ts, que pode ser encontrado no caminho ~gateway/node_modules/gateway-addon/src/ipc.ts. Fiz como sugerido no stackoverlflow, adicionando o comando strictTuples:false na inicialização do Ajv: |
19/12/2021 Voltando ao problema do strict mode, descobri que o problema não é exclusivo do add-on ONVIF, na verdade, é um problema que envolve todo o gateway. Encontrei um issue no GitHub do WebThings em que um usuário relata o problema e da exemplos de outros add-ons com o mesmo erro. Os desenvolvedores do gateway adicionaram o problema para a lista de bugs do gateway, entendo que ele será resolvido em atualizações futuras. O nosso problema: WebThingsIO/onvif-adapter#29 |
23/12/2021 Recebi uma sugestão do professor para testar o add-on ONVIF a partir de um aplicativo Android que transforma o celular em um dispositivo ONVIF, o IP Webcam. Realizei a instalação e inicializei o aplicativo, o seu funcionamento baseia-se na criação de um servidor HTTP para a transmissão da imagem da câmera do celular: Contudo, ao tentar conectar ao gateway, sofri um erro de conexão: O professor não recebeu este erro em seu teste. |
27/12/2021 Através da troca de alguns e-mails com o professor nos últimos dias, verificando informações de log entre as nossas máquinas e algumas informações disponíveis na internet, comecei a desconfiar seriamente que há um problema na minha máquina virtual Ubuntu. Fiz a reinstalação do sistema algumas vezes e percebi que continuo tendo os mesmos erros. |
28/12/2021 Desta vez decidi partir para a criação de uma nova máquina virtual, utilizando o sistema operacional Debian, que é suportado pelo gateway juntamente com o Ubuntu (a lista de sistemas suportados está nos relatos dos dias anteriores), o sistema pode ser baixado pelo site oficial do Debian. Depois de várias tentativas demoradas, percebi que há algum problema de instalação do Debian na VMWare, não obtive sucesso na instalação. |
29/12/2021 Consegui realizar a instalação do Debian seguindo a risca este tutorial disponível no YouTube. Trocando o sistema operacional da máquina virtual para o Debian e instalando o gateway (também instalei o gateway com o Docker, mas não consegui realizar o login após finalizar a instalação, abri uma Issue no GitHub para ver se é um problema ou sou eu que estou fazendo errado mesmo). Desta vez, o meu gateway está se comportando melhor do que na máquina Ubuntu (com menos erros). Com este gateway melhor, a câmera que nós compramos e a câmera Android são encontradas automaticamente pelo add-on. Primeiramente, tentei a conexão com a câmera Android que é criada pelo aplicativo (IP Webcam Pro) que o professor recomendou, consegui adicionar ela como Thing e ver os comandos de stream, snapshot e etc. Mas, não consegui visualizar o vídeo através do stream nem do snapshot. Agora, sobre a câmera do projeto, o gateway foi capaz de detectar várias informações sobre ela, como nome, local de fabricação, IP e etc. Contudo, a conexão não funciona, como mencionei em um dos encontros da disciplina, há um Issue listado no GitHub de um usuário falando que a câmera dele não funciona, por conta de ser uma câmera chinesa genérica (que acredito ser o nosso caso também rs). No encontro, mencionei que o erro dele era diferente, mas, com o gateway funcionando melhor, descobri que o problema dele é o mesmo que o nosso, que esta registrado nesse Issue. Aqui está o log com informações sobre a câmera que o gateway capturou: 2021-12-29 23:15:16.566 ERROR : onvif-adapter: { Error: socket hang up Curiosamente, tentando conectar a câmera a um código Node.js (mesma linguagem do gateway), obtive o mesmo erro de socket hang up (a porta 554 que está na imagem é a porta que eu consigo me conectar via VLC e é a porta que aquele programa para testar ONVIF que o senhor me passou se conecta, curioso é que no gateway eu deixei a porta como 554, mas nos logs parece que ele está tentando se conectar na 5000, estou investigando): |
06/01/2022 Após discussões com o professor via e-mail sobre os problemas e limitações do add-on ONVIF. Buscamos entender mais o funcionamento do player de vídeo do gateway e conexão ONVIF, chegando a informações que o add-on utiliza do DASH para realizar a transmissão do vídeo para a interface do gateway, conectando-se a transmissão de vídeo através do FFmpeg. Como o add-on já possui uma linha de conexão com o FFmpeg, chegamos a uma ideia de tentar criar um add-on para a transmissão de vídeo via protocolo RTSP. A câmera ONVIF também possui uma URL RTSP que possibilita assistir o vídeo ao vivo, o FFmpeg é capaz de se conectar a streams RTSP, a ideia então é trocar o código do add-on ONVIF para fazer uma conexão diretamente RTSP, pulando a parte do protocolo ONVIF. Através disso, conseguiríamos assistir o vídeo pelo gateway, contudo, não seria possível enviar comando ONVIF (mexer a posição da câmera). Estou entendendo como funciona o processo de inicializar o ffmpeg via Node, ele usa esta biblioteca child_process que cria um novo processo no SO, é possível passar o nome do processo e os argumentos, basicamente, é como se estivessemos escrevendo o comando do terminal via código. |
10/01/2022 Enquanto trabalho no add-on do RTSP, atualmente tentando adicionar ele no gateway (os tutoriais para a criação de add-ons não são tão bons, na minha opnião). Encontrei este Issue que abriram na página de addon-list, nesta página é possível requisitar addons para a equipe do WebThings. Parece que já haviam requisitado um Add-on RTSP antes. Uma grande coincidência é que o autor da thread queria um add-on RTSP para um projeto de campainha com câmera, assim como nós. O pessoal do gateway pediu para ele utilizar o add-on ONVIF no lugar. Nesta thread é possível ver que o usuário flatsiedatsie conseguiu fazer um add-on para isso (ou parecido), perguntei se ele consegue disponibilizá-lo. |
13/01/2022 Após conseguir criar um add-on e faze-lo rodar no gateway, gravei um pequeno vídeo para mostrar o avanço ao professor. |
Informações úteis:
|
18/01/2022. 19/01/2022, 20/01/2022 Durante esses dias tentei fazer o FFmpeg transformar o vídeo da câmera em vários formatos diferentes para que fossem lidos por uma página web. Os formatos que utilizei foram mp4, mpd e m3u8. Tentei descobrir se o código HTML5 padrão (ou com auxilio de JavaScript) consegue de alguma maneira ler esses arquivos. Tive muitos problemas com erros do Firefox sobre requisições CORS (um erro que é lançado quando uma página HTML página não tem permissão para ler arquivos do SO, podendo apenas ler arquivos vindo de um servidor HTTP). Tentei vários tutoriais, alguns que são: Além de tentativas próprias seguindo a documentação dos softwares utilizados. |
Aqui serão publicas as atualizações sobre a câmera.
The text was updated successfully, but these errors were encountered: