Inhoudsopgave:

Pequeno Projeto De Uma Casa Inteligente - Ajarnpa
Pequeno Projeto De Uma Casa Inteligente - Ajarnpa

Video: Pequeno Projeto De Uma Casa Inteligente - Ajarnpa

Video: Pequeno Projeto De Uma Casa Inteligente - Ajarnpa
Video: Como Abandonar o Medo | Ajahn Brahm | 22-05-2009 2024, November
Anonim
Pequeno Projeto De Uma Casa Inteligente
Pequeno Projeto De Uma Casa Inteligente

O projeto que faremos é de uma casa inteligente. Mogelijke fundamentele functies van de functies:· De monitoramento de iluminação en temperatura dos cômodos.

· De controle van de lijst van alimentos en nivel de água filtrada na geladeira.

Geen escreveremos os firmwares dos dispositivos IoT door geladeira nem dos cômodos; wat betreft de volgende mogelijkheden:

- Een mogelijkheid om met touchscreen te werken, is mogelijk en kan worden geleverd met alimentaire producten: of andere soorten voedsel;

- Een geladeira mogelijk een sensor van een nieuwe temperatuur van een geladeira;

- Os cômodos têm termômetros e sensores de iluminância;

- Als u gebruik wilt maken van onze comunicam pela rede wifi;

- As lâmpadas dos cômodos podem ter o brilho ajustado por dispositivo que se comunica pela rede wifi;

Vereisten:

- Conhecimento basico em python, javascript, uso do sistema operacional, comandos basicos geen shell

- Ter installatie: nodejs, python

- Ter installatie (optioneel): docker, emulador de dispositivo mobile, gerenciador de sdk do Android (disponível no Android Studio)

O desenvolvimento desse projeto foi feito geen Linux. Podem ser necessárias adaptações para que seja feito no Windows.

Stap 1: Configurando O Ambiente

Configurando O Ambiente
Configurando O Ambiente
Configurando O Ambiente
Configurando O Ambiente

Vamos configurar of ambiente desenvolvimento em 2 partes: servidor en mobile. O servidor será escrito em python en o mobile em javascript of typescript, sendo utilizado React Native para o projeto.

reactnative.dev/

Vamos inicialmente criar uma estrutura de pastas. Em um diretório escolhido (que a partir de agora será escrito semper como $PROJECT_DIR como placeholder - crie com no local que achar mais adequado e com o nome de sua preferência), vamos criar uma pasta "servidor":

$ mkdir $PROJECT_DIR && cd $PROJECT_DIR

$ mkdir-server

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO PARA O SERVIDOR

Podemos gebruik van ambiente conteinerizado com Docker of ambiente virtuele python (venv). U kunt gebruik maken van ambiente conteinerizado, criaremos a imagem segundo of dockerfile:

$ cd $PROJECT_DIR

$ raak dockerbestand aan

Veja imagem do dockerfile.

Caso prefira utilizar ambiente virtual do python, siga as instruções em

Meer informatie over de aanhoudende vraag naar een lijst van afhankelijkheden die nodig zijn voor de dienst en colocar als vereiste:

$ raak requirements.txt aan

Veja imagem do requirements.txt.

Caso tenha optado door utilizar um ambiente conteinerizado, construa a imagem e entre no container:

$ docker-build. -t smarthouse $ docker run -it -p 3000:3000 -v $(pwd):/app smarthouse bash

Voor meer informatie over dockerfile en klik op docker:

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO MOBILE

Um passo a passo de como configurar of ambiente desenvolvimento mobile com React Native pode ser visto geen link:

Após ter o ambiente configurado, na pasta do projeto deve ser possível executar of comando para criar a aplicação mobile:

$ npx create-react-native-app-client

Stap 2: WebSocket

Een interessante vraag is of er een pelo menos um pouco een respeito de websocket antes de prosseguir. Caso o leitor nunca tenha lido, trabalhado of ouvido falar nada a respeito, aparte alguns minutos para entender como funciona o websocket através da documentação:

developer.mozilla.org/pt-BR/docs/WebSocket…

Gebruik geen biblioteca zonder cliënt en geen bediende die abstrai o protocolo de maneira que não preciezem detalhes de chamada en de armazenamento de identificadores en rotas. Separe também um tempo para estudar as bibliotecas utilizados no cliente e no servidor:

Klant:

Servidor:

Stap 3: Escrevendo O Servidor

Escrevendo O Servidor
Escrevendo O Servidor
Escrevendo O Servidor
Escrevendo O Servidor
Escrevendo O Servidor
Escrevendo O Servidor
Escrevendo O Servidor
Escrevendo O Servidor

U kunt eerst een estrutura-test uitvoeren om een interface te beveiligen die u kunt gebruiken om de volgende communicatie mogelijk te maken:

$ mkdir src

$ touch app.py src/{controller, socketconnection}.py

Primeiramente vamos escrever um módulo de inicalização do servidor:

Veja imagem do app.py

Depois vamos escrever o módulo que estabelece as conexões via websocket e as redirecionam para um controlador.

Veja imagem do socketconnection.py

CONTROLLER E GEBRUIKSGEVALLEN

O controlador receberá um pacote do módulo responsável por estabelecer e gerenciar as conexões; será responsabilidade do controlador saber qual função de caso de uso chamar para cada envento recebido, bem como a partir da resposta do caso de uso enviar um pacote de resposta para a sala de dispositivos conectados para atualização das informações.

Veja imagem do controller.py.

Finalmente temos os casos de uso que devem gerenciar como deve ser tratado os dados do eventto recebido e criar os novos dados a partir do dados recebidos para que o controlador atualize o estado do sistema. Geen caso desse sistema há somente atualização de valores (sejam numéricos, texto ou booleanos - no caso de ligar/desligar dispositivos de ambientação). Então não é de surpreender que os casos de uso to somente chame funções do módulo responsável pela persistência de dados como se fosse essa a "regra de negócio".

Veja imagem do usecases.py

Nota: precisamos persistir os dados de alguma forma. Fica a escolha do leitor como prefere armazenar os dados e portanto, implementar as funções do src/repository.py. Geen projeto desenvolvido como voorbeeld foi persistentido em um arquivo json geen diretório database. Geen repositório do projeto é possível verificar uma pasta server/database com um arquivo com os dados persistidos bem como um arquivo de modelo em server/database-model.json de como deve ser o json para a nossa aplicação funcionar.

Stap 4: Testando O Servidor

Testando O Servidor
Testando O Servidor

Podemos criar um script para conectar ao servidor e enviar eventos conforme a estrutura esperada pelos controladores para fins de testes manuais. Vamos criar esse script e rodá-lo com o servidor*.

Veja imagem do serverclient.py

Com o arquivo criado, verifique se o container está rodando, en dentro dele execute:

$ python-app.py

Fora do container, no diretório $PROJECT_DIR/server uitvoeren:

$ python3 serverclient.py

Geen prompt "> " digite os eventos encontrados no controlador seguido de ";" e então valores de identificação e/ou novos valores. Voorbeeld:

UPDATE_FRIDGE_WATER_LEVEL;80

UPDATE_ROOM_TEMPERATURE;1, 22.0

UPDATE_ROOM_TEMPERATURE_SETPOINT;1, 17.5

UPDATE_ROOM_LUMINOSITY;100

UPDATE_ROOM_LUMINOSITY_SETPOINT;0

TOGGLE_ROOM_TEMPERATURE;1

TOGGLE_ROOM_LIGHT;1

E para cada eventto enviado verifique se foi persistido no banco de dados escolhido.

Nota: verifique que a porta que está sendo servido a aplicação, a porta exposta no docker run e een porta do script de teste devem ser a mesma.

Stap 5: Een Aplicação Mobile

Een mobiele app
Een mobiele app
Een mobiele app
Een mobiele app

Geen enkele demonstrado com muitos detalhes cada parte desenvolvimento do cliente mobile. Er is geen expliciete verklaring voor het bepalen van de belangrijkste vraag React Native heeft een mogelijkheid om de configuratie te wijzigen. Voor $PROJECT_DIR/client is het mogelijk om een exacte afhankelijkheid van het project te hebben:

$ npm i socket.io

Em seguida vamos escrever os compote graficos e as funções que irão se comunicar com o servidor.

ESCREVENDO A TELA

Em App.js, vamos escrever os componentes de GUI.

⚠ Let op que a função chamada pelo useEffect ainda não foi escrita! Geen informatie over de reductiemiddelen setDataReducer, setFoodReducer, setTemperatureReducer, setLightReducer en escritos voor het installeren van INITIAL_STATE, INITIAL_FOOD_MODAL, INITIAL_FOOD_MODAL, INITIAL_MODAL_INITIAL_D

Het is niet mogelijk om gebruik te maken van de interne interface voor het maken van een beschrijving van het volgende: saveNewFoodValue, saveNewTemperature, saveNewLuminosity, toggleTemperatureForRoom, toggleLightForRoom

Portanto, bekijk de testar os elementos com dados falsos, escreva cada objeto en função dito acima.

Veja imagem do App.js com código da parte GUI

Door het verwijderen van de functies die nodig zijn voor het communiceren en communiceren van gebruikers en het uitvoeren van gebruikersinterfaces van de GUI.

Veja imagem do App.js com código da parte logic/operacional

Aanbevolen: