Sadržaj:

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

Video: Pequeno Projeto De Uma Casa Inteligente: 5 koraka

Video: Pequeno Projeto De Uma Casa Inteligente: 5 koraka
Video: КОНЕЦ МУЧЕНИЯМ. Трава больше не проблема! 2024, Juli
Anonim
Pequeno Projeto De Uma Casa Inteligente
Pequeno Projeto De Uma Casa Inteligente

O projeto que faremos é de uma casa inteligente. Osnovni principi funkcionisanja ovog sistema su: · Nadgledanje osvjetljenja i temperature prema komodu.

· Popis nadgledanja alimenta i nível de água filtrada na geladeiri.

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

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

- Geladeira possui um senzor 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;

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

Requisitos:

- Conhecimento básico em python, javascript, uso do operacijski sistem, comandos básicos bez ljuske

- Instalacija: nodejs, python

- Instalacija (opcionalno): docker, emulador sa dispozitiva za mobilne uređaje, uređivanje SDK -a za Android (nema Android Studio -a)

O desenvolvimento desse projeto foi feito no Linux. Podesite potrebne adaptacije za instaliranje sistema Windows.

Korak 1: Konfigurirajte O Ambiente

Konfiguracija O Ambiente
Konfiguracija O Ambiente
Konfiguracija O Ambiente
Konfiguracija O Ambiente

Vamos konfiguracija ambijenta za desenvolvimento na 2 dijela: poslužitelj i na mobilnom uređaju. Oslužitelj na escrito -u na pythonu ili na mobilnom em javascript -u ili pisanom stroju, slanje korištenjem React Native -a za projektovanje.

reactnative.dev/

Vamos inicialmente criar uma estrutura de pastas. Em um diretório escolhido (que a partr 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 servidor

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO PARA O SERVIDOR

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

$ cd $ PROJECT_DIR

$ touch dockerfile

Vema imagem dockerfile.

Caso prefira koristi ambiente virtualni do python, kao instrukcije na

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

$ touch requirements.txt

Veja imagem do requirements.txt.

Caso tenha optado por utilizar um ambiente conteinerizado, konstruirajte sliku i unesite bez kontejnera:

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

Za dodatne informacije o docker datoteci i do dockeru:

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO MOBILE

Um passo a passo de como configurar o ambiente de desenvolvimento mobile com React Native podešava serto bez veze:

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

$ npx klijent za kreiranje-reagovanje-nativna-aplikacija

Korak 2: WebSocket

É interessante que o leitor conheça pelo menos um pouco a respecto de websocket antes de prosseguir. Caso o leitor nunca tenha lido, trabalhado ili ouvido falar nada a respeito, separe alguns minutos para entender como funciona ili websocket através to documentação:

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

Usaremos uma biblioteca no cliente e servidor que abstrai o protokolu de maneira que não preciznost pensar em detalhes de chamada e de armazenamento de identificadores e rotas. Zasebni tambem um tempo za estudar kao bibliotecas ne koristi klijente i nema servidora:

Klijent:

Servidor:

Korak 3: Escrevendo O Servidore

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 or servidor:

$ mkdir src

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

Primeiramos 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.

Vej imagem do socketconnection.py

UPRAVLJAČ E KORIŠTENJA

O controlador receberá um pacote do módulo responsável por estabelecer e gerenciar as conexões; será responsabilidade do controlador sabre 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 imagem do 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 sistema. Nema caso desse sistema za neke atualização de valores (sejam numéricos, texto ili booleanos - nema 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 slika do usecases.py

Napomena: precisamos persistir os dados de alguma forma. Da biste to učinili, dajte prednost armazenarima sa portalom, implementirajte kao funkcije do src/repository.py. Nema projeto desenvolvido como exemplo foi persistido em um arquivo json bez direktne baze podataka. Nema spremišta za projektovanje i provjeru pouzdanosti servera/baze podataka za tjesteninu sa arquivo-a u skladu s postojanošću koja će biti dostupna kao arkivo za modelovanje poslužitelja/baze podataka-modela.

Korak 4: Testando O Servidor

Testando O Servidor
Testando O Servidor

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

Snimite sliku na serverclient.py

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

$ python app.py

Za kontejner, bez usmjeravanja $ PROJECT_DIR/izvršavanje servera:

$ python3 serverclient.py

Nema upita ">" digite os eventos encontrados no controllador seguido de ";" e então valores de identificação e/ou novos valores. Na primjer:

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.

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

Korak 5: Aplicação Mobile

Aplikação Mobile
Aplikação Mobile
Aplikação Mobile
Aplikação Mobile

Não será demonstrado com com muitos detalhes cada parte do desenvolvimento do cliente mobile. Ne morate eksplicitno aqui cada importação ni uvesti glavni direktor krila React Native i nema detaljnih detalja o konfiguraciji. Za svaki slučaj, navegue at $ PROJECT_DIR/client i adicione zavisno od que precisaremos para ili projekta:

$ npm i socket.io

Em seguida vamos escrever sa komponentama grafika i funkcijom koja se irão koristi kao comunicar com ili servidor.

ESCREVENDO A TELA

Em App.js, nadograđujete komponente s grafičkim sučeljem.

⚠ Imajte na umu da je funkcionalna chamada pelo upotrebaEffect ainda não foi escrita! Também não Foram Escritos os reduktora setDataReducer, setFoodReducer, setTemperatureReducer, setLightReducer e nem Escritos os objetos com estados iniciais INITIAL_STATE, INITIAL_FOOD_MODAL, INITIAL_TEMPERATURE_MODAL, INITIAL_LIGHT_MODAL ⚠

Também ainda não forram escritas as funcsões useasas pelos elementos de inteface gráfica for fazer chamadas para escrita no servidor: saveNewFoodValue, saveNewTemperature, saveNewLuminosity, toggleTemperatureForRoomRoomRoomFight

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

Veb imagem do App.js com kodigo i parte GUI

Por fim vamos escrever kao funkcija neophodna za fazer a comunicação com ili servidor i za usaglašavanje do mesmo pelos komponenti GUI -ja.

Veja imagem do App.js com codigo da parte lógica/operacional

Preporučuje se: