Problemas no teste do serivor

Added by Luís Fernando da Costa de Oliveira about 6 years ago

Teste de uso do servidor: 24-Setembro-2015

Estou testando o servidor para coletar e enviar dados para a estação cadastrada para testes utilizando o servidor. Alguns problemas encontrados:

  • No item número 1 (Obtenha o código), há um problema ao fazer o download do código:
    • No endereço para download no hiperlink e no comando indicado para o mesmo estão, no comando, "arduino-meteorolog". Para conseguir fazer o download foi necessário utilizar este comando no terminal e alterar esta parte para o atual endereço ("logger"). Aparentemente o endereço da página foi alterado sem mudar o comando nem o hiperlink.
  • Na programação da estação meteorológica as bibliotecas não estavam sendo chamadas corretamente, devido ao fato de aparecer, antes do nome da biblioteca, "libs/". Foi necessário excluir essa parte para poder funcionar corretamente.
    • Os arquivos .h e .cpp tiveram que ser copiados para a pasta onde há a programação .ino.
  • No link BoardCommands há uma tabela que indica quais são os sensores utilizados, seus apelidos e suas unidades de medida. Na linha em que se encontra a luminosidade, há a informação de que sua unidade de medida é porcentagem. Na verdade o sensor de luminosidade LDR não tem uma unidade de medida definida.
  • O item número 3 (Instale o Firmware) está incorreto pois na descrição do mesmo há a informação de que se deve dar o comando make firmware no terminal estando na pasta meteorolog. Na verdade deve-se estar na pasta logger e executar este comando.
  • Utilizando o comando make firmware no terminal aparece a seguinte mensagem de erro:
 1 
 2 Make failed with code 2
 3 
 4 Something went wrong with the build & upload process when using 'ino' command line tool. Probably there is some icompatibility with it and the Arduino toolchain .
 5 
 6 Here is what else you can try:
 7 
 8      Specify a new Arduino toolchain (for instance, downloaded at https://www.arduino.cc/en/Main/Software) with:
 9 
10        $ make bu ARDUINO=~/Downloads/arduino-1.6.5
11 
12      Use the Arturo tool (http://32bits.io/Arturo/):
13 
14        $ make bu USE=ano
15        $ make bu USE=ano ARDUINO=~/Downloads/arduino-1.6.5
16 
17      Simply use de Arduino IDE to compile meteorolog/meteorolog.ino and upload the firmware yourself.
18 

Utilizando a IDE do arduino não acontece nenhum erro, porém no terminal o comando não funciona

  • No item 5 (Instale o logger) há a informação de que se der tudo certo com o comando make deploy deverá aparecer a seguinte mensagem:
    1 meteorologger                    RUNNING    pid 6242, uptime 0:00:02
    

    Acontece que dando esse comando aparece o seguinte erro:
    1 meteorologger                    FATAL      Exited too quickly (process log may have details)
    

Replies (6)

RE: Problemas no teste do serivor - Added by Nelso G. Jost about 6 years ago

Luís, obrigado por testar o sistema. É a melhor forma de aperfeiçoá-lo. Vou responder pelos tópicos.

  • Realmente o hyperlink estava errado. Foi recentemente que mudei o nome do repositório e acabei esquecendo de atualizar a wiki.
  • Sobre as bibliotecas em "libs/", não faz sentido esse erro encontrado. Experimentei compilar aqui diversas vezes, tanto pela IDE (versão 1.0.5) quanto pelo "make firmware" e funciona ok. O seu problema de compilação deve ter tido outra causa, pois o C/C++ permite inclusão de headers em outros diretórios, conforme discutido aqui
    http://stackoverflow.com/questions/5134357/how-to-include-header-files-in-other-src-folder
    Para diagnosticar melhor eu precisaria saber exatamente o procedimento que você usou para compilar e a menssagem de erro obtida.
  • Sobre "%" ser ou não unidade de medida. Realmente, não é. Asssim como não é unidade de medida para umidade relativa do ar, assim como p.p.m. (partes por milhão) não é uma unidade de medida. No cadastramento de sensores no site há um campo chamado "Unidade" cujo objetivo não é ter-se rigor científico, mas sim dar algum sentido aos números do gráfico, que no caso do sensor LDR são valores entre 0 e 100. A rigor a leitura do LDR é uma leitura de voltagem, entre 0 V e 5 V, mas acredito que não há necessidade de ter isso na leitura de dados meteorológicos. Os limites 0 e 100 foram escolhidos ao invés de 0 e 1024 (padrão do Arduino) por deixarem mais claro (ou assim acredito) quais são os limites (ou o range) dos valores possíveis de leitura.
  • Sobre como executar "make firmware". No item 1, logo depois de acessar a pasta raíz, eu coloquei a frase
    ATENÇÃO: Daqui em diante será assumido que você está dentro desta pasta ao executar os comandos make.
    

    Isso vale também para "make firmware". Mas editei a wiki e por via das dúvidas, coloquei um alerta entre parênteses lá no item 3.
  • Sobre menssagem de erro do "make firmware". Primeiramente, peço desculpas que essa menssagem está desatualizada ("make bu" não existe mais, agora é "make firmware"). Muitas coisas podem dar errado nesse comando. Para começar, a ferramenta Ino Tool precisa estar presente no sistema. Eu fiz um script que instala ela automaticamente, então espero que não seja isso (experimente executar "$ ino list-models" para conferir). Assumindo que não é isso, então é provavelmente um erro com a sua Toolchain do Arduino (IDE+compiladores). Recomendo experimentar baixar a versão 1.0.5 no site da Arduino e passar o PATH como segue:
    make firmware ARDUINOPATH=~/Downloads/arduino-1.0.5
    

    Outra idéia é tentar usar o Arturo com a IDE 1.6.5:
    make firmware BUILDWITH=ano ARDUINOPATH=~/Downloads/arduino-1.6.5
    

    Estou trabalhando numa maneira de facilitar o processo para o usuário, talvez incluindo o compilador da Arduino em uma versão "bundle" do meteorolog. Mas não há nada errado em usar a IDE mesmo.
  • O erro:
    meteorologger                    FATAL      Exited too quickly (process log may have details)
    

    indica que o logger não está em execução no plano de fundo. Antes eu preciso saber se você testou primeiro com "make run" e funcionou ok? Lembre que há o passo 4 onde você deve revisar o arquivo de configuração "settings.ini". Caso exista algum erro de configuração, o logger vai terminar a execução e isso pode ser verificado facilmente com "make run" pois a execução é em primeiro plano. Caso não seja isso, eu preciso ver o resultado do arquivo "logger/logs/stdout.log" criado pelo "make deploy", pois nesse arquivo estará o traceback do Python com detalhes do erro ocorrido.

Segundo teste com o servidor - Added by Luís Fernando da Costa de Oliveira about 6 years ago

Teste de uso do servidor: 29-Setembro-2015

  • Primeiramente é necessário dar todos os comandos com sudo, devido ao fato de a programação ter que ser aberta como super usuário, pois as portas USB não são reconhecidas estando como usuário;
  • O comando "make setup" não funciona. É necessário estar em super usuário para executá-lo;
  • Com o comando "make setup": todas as permissões são negadas;
  • Com o "sudo make setup":
    1 The directory '/home/labfis/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled.
    2 Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    3 The directory '/home/labfis/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled.
    4 check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
    

    Tentamos alterar as permissões do diretório e do arquivo:
    1 labfis@labfis ~ $ sudo chmod 777 .cache/pip/
    2 labfis@labfis ~ $ sudo chmod 777 .cache/pip/http/
    
  • Mesmo alterando as permissões o problema continuou a aparecer.
  • O comando "make firmware" continua com o mesmo erro descrito no tópico anterior:
     1 Make failed with code 2
     2 
     3 Something went wrong with the build & upload process when using 'ino' command line tool. Probably there is some icompatibility with it and the Arduino toolchain .
     4 
     5 Here is what else you can try:
     6 
     7      Specify a new Arduino toolchain (for instance, downloaded at https://www.arduino.cc/en/Main/Software) with:
     8 
     9        $ make bu ARDUINO=~/Downloads/arduino-1.6.5
    10 
    11      Use the Arturo tool (http://32bits.io/Arturo/):
    12 
    13        $ make bu USE=ano
    14        $ make bu USE=ano ARDUINO=~/Downloads/arduino-1.6.5
    15 
    16      Simply use de Arduino IDE to compile meteorolog/meteorolog.ino and upload the firmware yourself.
    17 
    
  • Dando o comando "make deploy" ou "sudo make deploy" no terminal aparece a seguinte mensagem de erro:
     1 Registering supervisor config at 
     2     /etc/supervisor/conf.d/meteorologger.conf
     3 ============================================================
     4 [program:meteorologger]
     5 command=/home/labfis/logger/.venv/bin/python /home/labfis/logger/logger/run.py --background
     6 directory=/home/labfis/logger
     7 user=root
     8 autostart=true
     9 autorestart=true
    10 redirect_stderr=true
    11 stdout_logfile=/home/labfis/logger/logger/logs/stdout.log
    12 logfile=/home/labfis/logger/logger/logs/supervisor-meteorologger.log
    13 ============================================================
    14 
    15 Restarting supervisor..
    16 
    17 meteorologger                    FATAL      can't find command '/home/labfis/logger/.venv/bin/python'
    
  • Com o comando "make run" e "sudo make run" aparece o seguinte problema:
    1 : ERROR : Server response: {'error': "This board does not have a sensor named'LDR'."}
    
    • Também é importante ressaltar que os dados não são enviados ao servidor.

Testando com o tropOS e um arduino Duemilanove

Fazendo os mesmos testes em um computador diferente com um arduino Duemilanove:

  • Com o comando "make firmware" o erro é o mesmo;
  • Com o comando "make deploy" um novo erro apareceu:
     1 sudo /home/tropos/logger/.venv/bin/python logger/deploy.py
     2 meteorologger                    RUNNING    pid 817, uptime 0:26:42
     3 
     4 Registering supervisor config at 
     5     /etc/supervisor/conf.d/meteorologger.conf
     6 ============================================================
     7 [program:meteorologger]
     8 command=/home/tropos/logger/.venv/bin/python /home/tropos/logger/logger/run.py --background
     9 directory=/home/tropos/logger
    10 user=root
    11 autostart=true
    12 autorestart=true
    13 redirect_stderr=true
    14 stdout_logfile=/home/tropos/logger/logger/logs/stdout.log
    15 logfile=/home/tropos/logger/logger/logs/supervisor-meteorologger.log
    16 ============================================================
    17 
    18 Restarting supervisor..
    19 meteorologger: stopped
    20 meteorologger: updated process group
    21 
    22 meteorologger                    BACKOFF    Exited too quickly (process log may have details)
    

Com o comando "make run" o erro relacionado ao LDR ainda aparece

1 : ERROR : Server response: {'error': "This board does not have a sensor named'LDR'."}

porém surgiu um novo problema:

1 ERROR : [Errno 2] could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'

Para resolver este problema pesquisamos o erro na internet e a solução era alterar o arquivo settings.ini no caminho até a porta serial. A solução foi dar o comando "ls /dev/serial/by-id/" no terminal e o que resultasse do mesmo deveria ser colado em "SERIAL_PORT=". O resultado foi "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A600euKd-if00-port0)".
Esse erro foi resolvido.

  • Mesmo assim os dados não foram enviados ao servidor.

RE: Problemas no teste do serivor - Added by Nelso G. Jost about 6 years ago

Vou responder em tópicos numerados, peço que leia com atenção cada um deles, e caso responda, identifique a numeração.

1. Ao reportar um bug, lembre sempre de fornecer informações sobre o teu sistema.

  • Versão do sistema operacional? Exemplo: "Debian 8.1 64 bits". Experimente fazer:
      $ cat /etc/*-release
      DISTRIB_ID=LinuxMint
      DISTRIB_RELEASE=17.2
      DISTRIB_CODENAME=rafaela
      DISTRIB_DESCRIPTION="Linux Mint 17.2 Rafaela" 
      
  • Versões exatas de Python+Pip no sistema?
      $ ls /usr/bin/pip*       # para saber os comandos pip disponíveis
      /usr/bin/pip  /usr/bin/pip2  /usr/bin/pip3
      $ pip2 --version
      pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)
      $ pip3 --version
      pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)
      

    Lembrando que o nome dos comandos pip podem variar, por exemplo, *pip
  • Versão exata da IDE do Arduino (aparece no título da IDE). Exemplo:
      1.0.5+dfsg2-2
      
  • Qual a versão do software meteorolog do repositório utilizado?
    • IMPORTANTE!!! Lembre sempre de começar do zero o processo, apagando a pasta anterior, mesmo que seja de ontem:
        $ cd ~
        $ rm -rf logger
        $ git clone https://git.cta.if.ufrgs.br/meteorolog/logger.git
        $ git rev-parse HEAD
        50451cd410218e80f4d6ae8e652576b1522e1ad3
        
  • O sistema está rodando num pendrive?
  • Qual a porta serial onde a placa Arduino apareceu? /dev/ttyUSB ou /dev/ttyACM ou outra?

2. Forneça logs detalhados dos processos envolvidos

  • Menssagens completas de erro de compilação e/ou upload (IDE do Arduino ou make firmware);
    • No caso de make firmware, dizer o modelo da placa informado e fornecer log completo (não apenas as últimas linhas).
  • Log de execução do logger (é criado tanto por make run quanto por make deploy). Anexe aqui no post o arquivo de log mais recente que se encontra na pasta:
      logger/logs
      
  • Log do supervisor (gerenciador de processos background, utilizado por make deploy). Anexe aqui no post os arquivos de log:
      logger/logs/stdout.log
      logger/logs/supervisor-meteorologger.log
      

3. A questão do super usuário

Conforme pode ser observado no arquivos Makefile e scripts/ino-install.sh, todos os comandos que requerem super usuário já estão prefixados com "sudo". A priori, apenas make deploy e make undeploy necessitam do sudo - novamente, já embutido no script.

No caso de make firmware, ele se apóia no funcionamento da InoTool . A priori, não haveria necessidade de super usuário, exceto talvez na parte do upload do firmware para a placa, caso em que precisa ter permissão para escrever na porta USB. A questão é que a InoTool utiliza a IDE do Arduino no fim das contas, logo, se ela tem permissão para escrever, não faz sentido sudo make firmware.

Leia http://playground.arduino.cc/Linux/Debian, especificamente o final sobre ter seu usuário adicionado ao grupo dialout, dessa forma você não precisa ser root para usar a IDE do Arduino de maneira completa.

4. Sobre a execução do logger

A idéia geral é: tendo preparado o ambiente com make setup e configurado o arquivo settings.ini (basta colocar o ID da placa e o USER HASH), é FORTEMENTE RECOMENDADO que você teste o logger e apenas dê make deploy se estiver tudo 100% ok. Esse teste é feito com:

$ make run

Agora, é importante não confundir erro de EXECUÇÃO com erro de LOG. No caso do primeiro, a execução do programa pára completamente, retornando ao terminal. Por exemplo, caso você não configure uma BOARD_ID no arquivo settings.ini, o make run vai retornar algo como:

/home/nelso/lief/meteorolog/logger/.venv/bin/python logger/run.py

ConfigurationError: At file
    /home/nelso/lief/meteorolog/logger/settings.ini

[server]
; board identification number (auto generated when a new board is created)
BOARD_ID = 
           ^
TypeError: Integer number expected!

Assim, para corrigir esse erro do arquivo de configuração, basta colocar um número inteiro no campo BOARD_ID.

Agora, no segundo caso, erros de LOG não param a execução do programa, ficando meramente registrados no arquivo de log (e na tela, no caso de make run). Por exemplo, considerando que o campo SERIAL_PORT do arquivo de configuração está em branco e que nenhuma placa Arduino esteja nas portas USB, o log seria algo como:

/home/nelso/lief/meteorolog/logger/.venv/bin/python logger/run.py
2015-09-29 22:56:30 : INFO : EXECUTION START
2015-09-29 22:56:30 : INFO : ========================================
2015-09-29 22:56:30 : ERROR : [Errno 2] could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'
2015-09-29 22:56:31 : ERROR : [Errno 2] could not open port /dev/ttyUSB0: [Errno 2] No such file or directory: '/dev/ttyUSB0'
2015-09-29 22:56:31 : ERROR : [Errno 2] could not open port /dev/ttyACM1: [Errno 2] No such file or directory: '/dev/ttyACM1'
2015-09-29 22:56:32 : ERROR : [Errno 2] could not open port /dev/ttyUSB1: [Errno 2] No such file or directory: '/dev/ttyUSB1'
2015-09-29 22:56:33 : ERROR : [Errno 2] could not open port /dev/ttyACM2: [Errno 2] No such file or directory: '/dev/ttyACM2'

Ele vai ficar infinitamente tentando concetar em alguma porta do tipo /dev/ttyACM ou /dev/ttyUSB, mas a execução nunca pára a menos que você cancele com CTRL+C.

O erro apontado por você:

: ERROR : Server response: {'error': "This board does not have a sensor named'LDR'."}

É um erro de LOG. No caso, o erro indica que o servidor não conseguiu salvar os dados (estou trabalhando nisso lá no lado do site).

Imagino que a execução do logger não tenha travado, certo? Logo, não há porque imaginar que isso tenha travado a execução também em plano de fundo, caso do make deploy.

Achei curioso que no topo da execução do seu make deploy havia:

meteorologger                    RUNNING    pid 817, uptime 0:26:42

ou seja, o logger estava sendo executado normalmente já há 26 minutos? Você olhou o log dessa execução?

Para entender a razão do

meteorologger                    BACKOFF    Exited too quickly (process log may have details)

eu precisaria ver os seguintes arquivos de log:
logger/logs/stdout.log
logger/logs/supervisor-meteorologger.log

RE: Problemas no teste do serivor - Added by Luís Fernando da Costa de Oliveira about 6 years ago

Terceiro teste: 05-Outubro-2015

Após testar o servidor e encontrar diversos problemas durante o processo, os dados finalmente estão sendo enviados.
Para tanto todos os passos foram iniciados do zero novamente utilizando a atualização da wiki que contém as instruções de uso.
Os passos executados serão descritos de acordo com os tópicos do servidor:

  • O software foi obtido com sucesso;
  • As dependências foram instaladas corretamente;
    • As dependências locais estavam certas;
  • O comando make firmware foi executado corretamente e sem problemas (as duas vezes anteriores problemas aconteceram), provavelmente devido ao fato de ter sido utilizado desta vez um arduino Duemilanove;
    • Firmware testado corretamente;
      Testado no terminal e na IDE do arduino (na IDE apenas funciona como super usuário);
  • Arquivo settings.ini foi configurado;
  • Comando make run executado corretamente e com os dados sendo enviados ao servidor;
  • Logger instalado com sucesso.

Aparentemente todos os comandos estão funcionando corretamente. A única coisa que não interfere mas é diferente é o horário que está sendo gerado nos gráficos, pois a princípio o horário configurado no servidor é o UTC (Coordenated Universal Time), que tem exatamente 3 horas de adiantamento comparado ao horário de Brasília.
Não sei se é configuração do servidor ou se o horário realmente está incorreto.

RE: Problemas no teste do serivor - Added by Luís Fernando da Costa de Oliveira over 5 years ago

1. Teste de envio de dados ao servidor em 05-Maio-2016

Tentando enviar os dados ao servidor das estações, encontrei um pequeno problema :

  • Ao dar o comando make setup aparece a seguinte mensagem de erro:
curl https://bootstrap.pypa.io/get-pip.py | sudo python
/bin/sh: 1: curl: not found
curl https://bootstrap.pypa.io/get-pip.py | sudo python3
/bin/sh: 1: curl: not found
sudo pip3 install virtualenv
sudo: pip3: command not found
make: ** [install-virtualenv] Erro 1
  • Foi necessário instalar curl (que não sei o que é) através do comando sudo apt-get install curl e deu certo. O que aconteceu? O problema foi resolvido ao instalar tal dependência citada anteriormente, mas é necessário entender o que houve. Não é necessário adicionar ele nas dependẽncia instaladas pelo comando make install-deb-deps?

Já aproveito e pergunto: há alguma documentação da estação com Raspberry Pi e Wifi disponível? Estou querendo montar a estação externamente no Colégio de Aplicação e não consigo achar nenhum desenvolvimento documentado na página.

RE: Problemas no teste do servidor - Added by Nelso G. Jost over 5 years ago

Valeu pelo feedback.

Atualizei o Makefile e algumas outras coisas relacionadas ao "make firmware" no último commit. Compilar pela linha de comando está beeem awesome graças à platformio. Aproveitei para colocar um menu bonitinho para selecionar o modelo da placa. Simplesmente não há mais desculpas para usar a IDE do Arduino.

Sobre o Rasp e a configuração Wi-Fi, temos um protótipo de documentação em:
https://cta.if.ufrgs.br/projects/estacao-meteorologica-modular/wiki/Documenta%C3%A7%C3%A3o_do_Raspberry_Pi

Alerto que a configuração mostrada ali só funciona para Wi-Fi com autenticação direta via roteador, isto é, não via servidor da UFRGS como acontece aqui na rede aberta.

(1-6/6)