final's People
final's Issues
Edição de sensor na aplicação deve levar ao update na TTN
No seguimento da #1 , o mesmo deve ser feito para o update (ver EndDeviceRegistry.Update)
Registo de end device na TTN ao criar novo sensor na aplicação
Ao criar um novo sensor na aplicação web, este também deve ser registado automaticamente na TTN. Atualmente:
- User preenche formulário com dados do novo sensor
- Dados são validados (?)
- Sensor.create() para inserir a entrada na base de dados (nova linha na tabela sensors)
Após o passo 3 (ou antes, ou até em paralelo), deve haver o registo desse mesmo sensor na TTN dentro da aplicação TTN que tiver sido criada para o efeito. Para isso, é necessário ler a documentação da API da TTN e fazer a chamada à API adequada usando a biblioteca axios (ou semelhante).
Links úteis:
- TTN - Using the API
- Ler bem a documentação, pelos vistos o registo implica 4 chamadas (multi-step) à API pela ordem aí anunciada, autenticada via NSXX API Key (já devem ter usado uma para ligar por MQTT, é registar outra com privilégios de registo de endpoints na app)
- Tendo isto em conta, eu começava por tentar usar o curl (linha de comandos) ou o Postman para registar um sensor, com isso feito é simplesmente copiar e ajustar na API
- TTN - End Device APIs
- How to Make an HTTP Post Request using Node.js
Carregar leituras da TTN para a aplicação web via MQTT
Os sensores comunicam dados para a TTN, que os disponibiliza via MQTT. Assim, terá que existir um serviço extra (pode ser um script simples) que ligará por MQTT à TTN e ao receber uma nova mensagem, caso seja a leitura de um sensor, chamará um endpoint da API para reportar a nova leitura.
Passos possíveis:
- Criar script para subscrever a app TTN via MQTT (bónus se usar .env vars ou outro tipo de configuração não explícita no código)
- Criar um endpoint na BD da web app para comunicar uma nova leitura de temperatura e humidade do sensor X
- Adaptar o script para que ao receber uma mensagem esta seja passada para a web app (via API acima)
- Testar isto simulando um packet na TTN web console
Integrar a lógica de recepção e reconstrução de imagens (de sensores) vindas da TTN
Após concluir o #5 e perceber a lógica de recepção de temperaturas/humidades, implementar a reconstrução de imagens não deve ser muito diferente. O processo foi implementado por outros alunos, que já têm um projeto à parte que, segundo sei, vai recebendo a imagem pedaço a pedaço e reconstrói a mesma no fim.
Assim, a lógica seria:
- Ter o tal serviço a funcionar, à semelhança do script de dados em #5
- Criar alguns endpoints na web app / API para suportar a recepção de imagem, nomeadamente
- 1) Endpoint para sinalizar o início de recepção de imagem (ou seja, resulta num CREATE de uma entrada na web app para uma nova imagem (modelo?) - que tem entre outras coisas um estado, id, o ficheiro quando estiver pronto, os pacotes totais e os pacotes recebidos. O POST para este endpoint leva a uma nova imagem do sensor X, com estado "em recepção" e define o total de pacotes.
- 2) Endpoint para atualizar o estado de recepção da imagem. POST para aqui levará apenas a atualizar o nº de pacotes já recebidos imagino eu
- 3) Endpoint para sinalizar o fim de recepção + imagem reconstruida. POST para aqui adiciona o ficheiro ao Modelo Image, define o estado como "recebida" e os pacotes como X e Y. Pode até registar mais info (tempo de recepção, perdas, etc,
- 4) Endpoint para sinalizar a falha na recepção de uma imagem ("estado = falhou")
- Adaptar o script dos alunos anteriores (Marcela e Gabriel) para que a cada nova mensagem recebida a informação seja passada para a API (Axios)
Integração com a TTN via API
A aplicação web apresenta dados (temp. humidade, imagem) que são fornecidos por sensores ambientais espalhados por locais. Estes dados são recolhidos por sensores com LoRaWAN que utilizam a TTN para enviar os mesmos. Ou seja, a TTN serve de intermediário entre sensor e web app (sensor -> TTN <-> web app).
Logo há aqui alguns pontos importantes a ter em conta:
- É necessário ter uma "aplicação" criada na TTN
- É necessário adicionar à TTN cada dispositivo novo (sensor) que se pretenda utilizar, indicando o DEV EUID do mesmo (os TTN end devices)
- Cada sensor terá que ter no seu código a lógica de recolha de dados e envio dos mesmos para a TTN, incluindo os valores de APP ID e APP KEY configurados (e reportará o seu DEV EUID)
- A TTN terá que o payload formatting configurado, ou seja a transformação feita nos dados que chegam dos sensores, para que os mesmos sejam disponibilizados em JSON via MQTT (ou outra integração)
- A web app interage com o network server da TTN para obter dos dados que chegam à "TTN app", a cada notificação vinda da TTN os dados são passados para a DB.
A versão atual da aplicação web consiste ainda num sistema de informação simples com alguns modelos (local, sensor, user, sensor_reading, outros?) e CRUD dos mesmos, vistas ligadas e questões de autorização/autenticação de users. Para que se torne um projeto útil falta a integração automática com a TTN, que consistirá em 4 tarefas possíveis (cada uma com seu issue separado):
- Ao criar um novo sensor, este deve ser registado na TTN como end device via API - #1
- Ao editar um sensor, caso seja necessário, a informação registada na TTN deve ser também alterada (alterações do dev euid permitidas? - #3
- Ao apagar um sensor, este deve ser automaticamente removido da app na TTN - #4
- Os dados ambientais vindos dos sensores que chegam à TTN devem ser passados para a web app (sensor readings, esquecer para já eventuais mensagens de erro/warning) - #5
- Os dados sobre imagens que chegam da TTN devem também ser comunicados para a web app #6
Apagar um sensor na aplicação deve apagar o mesmo da TTN
No seguimento da #1 , o mesmo deve ser feito para o delete de um sensor (ver EndDeviceRegistry.Delete)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.