Innehållsförteckning:

Pequeno Projeto De Uma Casa Inteligente: 5 steg
Pequeno Projeto De Uma Casa Inteligente: 5 steg

Video: Pequeno Projeto De Uma Casa Inteligente: 5 steg

Video: Pequeno Projeto De Uma Casa Inteligente: 5 steg
Video: Строим удивительную деревянную хижину своими руками шаг за шагом 2024, December
Anonim
Pequeno Projeto De Uma Casa Inteligente
Pequeno Projeto De Uma Casa Inteligente

O projeto que faremos é de uma casa inteligente. Possui basicamente dois grupos de funcionalidades: · De monitoramento de iluminação e temperatura dos cômodos.

· De monitoramente de lista de alimentos and new deágua filtrada and geladeira.

Não escreveremos os firmwares dos dispositivos IoT da geladeira nem dos cômodos; porém assumiremos que os dispositivos fazem o seguinte:

- En geladeira possui um dispositivo com pekskärm em que é possível entrar com dados de alimentos: o nome de um alimento e sua quantidade;

- En geladeira possui um sensor de nível em um pequeno tanque de água embutido na geladeira;

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

- Os cômodos têm ar condicionado que se comunicam pela rede wifi;

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

Krav:

- Conhecimento básico em python, javascript, uso do sistema operacional, comandos básicos no shell

- Ter instalado: nodejs, python

- Installera (tillval): dockare, mobil emulador för mobil, SDK för Android (tillgängligt utan Android Studio)

O desenvolvimento desse projeto foi feito no Linux. Det är nödvändigt att adaptações para que seja feito no Windows.

Steg 1: Configurando O Ambiente

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

Vamos konfigurar o ambiente de desenvolvimento em 2 parts: servidor e mobile. O servidor será escrito em python e o mobile em javascript ou typescript, sendo utilizado React Native para or 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 adequateado e com o nome de sua preferência), vamos criar uma pasta "servidor":

$ mkdir $ PROJECT_DIR && cd $ PROJECT_DIR

$ mkdir servidor

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO PARA O SERVEROR

Podemos utilizar um ambiente conteinerizado com Docker ou ambiente virtual python (venv). Caso deseje utilizar ambiente conteinerizado, criaremos and imagem segundo o dockerfile:

$ cd $ PROJECT_DIR

$ touch dockerfil

Veja kan göra dockerfil.

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

Vamos então criar o arquivo que persistirá a lista de dependências do servidor e colocar as dependências needsárias:

$ touch -krav. text

Veja imagem gör krav.txt.

Caso tenha optado por 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

För mer information om dockerfile och cli do docker: https://docs.docker.com/engine/reference/builder/…

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO MOBILE

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

Om du vill ha en ambiente -konfiguration, kan du göra följande för att göra en möjlig körning för en mobilapplikation:

$ npx create-react-native-app-klient

Steg 2: WebSocket

En intressant plats för en meny för att du ska kunna respektera en webbsajt. Caso o leitor nunca tenha lido, trabalhado ou ouvido falar nada a respeito, separe alguns minutos para entender como funciona o websocket através da documentação:

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

Usaremos uma biblioteca no cliente e no servidor que abstrai o protocolo de maneira que não precisemos pensar em detalhes de chamada e de armazenamento de identifieradores e rotas. Se också om tempot för att studera som bibliotecas utilizados no cliente e no servidor:

Kund:

Servidor:

Steg 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

Vamos criar uma estrutura inicial do projeto e escrever a interface que será utilizada como comunicação com o servidor:

$ mkdir src

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

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

Veja kan göra app.py

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

Veja kan göra socketconnection.py

CONTROLLER E ANVÄNDNINGAR

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 room de dispositivos conectados para atualização das informações.

Veja kan göra controller.py.

Finalmente temos os casos de uso que devem gerenciar como deve ser tratado os dados do evento recebido e criar os novos dados a partir do dados recebidos para que o controlador atualize o estado do system. No 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 tão 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

Notera: 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. Ingen projeto desenvolvido como exemplo foi persistido em um arquivo json ingen diretório databas. Ingen lagringsplats för projeto och möjlig verificar för en pastaserver/databas som fungerar som en del av en server/databasmodell.

Steg 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*.

Du kan se serverclient.py

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

$ python app.py

För behållare, ingen diretório $ PROJECT_DIR/server kör:

$ python3 serverclient.py

Ingen prompt ">" digite os eventos encontrados no controlador seguido de ";" e então valores de identifieração e/ou novos valores. Exempel:

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 evento enviado verifique se foi persistido no banco de dados escolhido.

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

Steg 5: En Aplicação -mobil

En mobilapplikation
En mobilapplikation
En mobilapplikation
En mobilapplikation

Não será demonstrado com muitos detalhes cada parte do desenvolvimento do cliente mobile. Não será explicitado aqui cada importação no módulo principal criado pelo React Native nem possíveis detalhes de configuração. För att komma in, kan vi använda $ PROJECT_DIR/client och kan bero på exakt vad som ska göras för:

$ npm i socket.io

Em seguida vamos escrever os componentes gráficos e as funções que irão se comunicar com o servidor.

ESCREVENDO A TELA

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

⚠ Obs que a função chamada pelo useEffect ainda não foi escrita! Também não foram escritos os reducers setDataReducer, setFoodReducer, setTemperatureReducer, setLightReducer e nem escritos os objetos com estados iniciais INITIAL_STATE, INITIAL_FOOD_MODAL, INITIAL_TEMPERATURE_MODAL_ INODIAL M

Também ainda não foram escritas as funções utilizadas pelos elementos de inteface gráfica para fazer chamadas para escrita no servidor: saveNewFoodValue, saveNewTemperature, saveNewLuminosity, toggleTemperatureForRoom, toggleLightForRoom

Portanto, se desejar testar os elementos com dados falsos, escreva cada objeto e função dito acima.

Vi kan använda App.js för att kunna använda GUI

Por fim vamos escrever as funções necessárias para fazer a comunicação com o servidor e para utlização do mesmo pelos componentes de GUI.

Vi kan föreställa oss att App.js kommer att fungera som ett parte lógica/operacional

Rekommenderad: