Cuprins:

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

Video: Pequeno Projeto De Uma Casa Inteligente: 5 Steps

Video: Pequeno Projeto De Uma Casa Inteligente: 5 Steps
Video: 6 DICAS - Como COMEÇAR CORRETAMENTE sua Casa Inteligente desde o Início 2024, Decembrie
Anonim
Pequeno Projeto De Uma Casa Inteligente
Pequeno Projeto De Uma Casa Inteligente

O proiectare care faremos este de uma casa inteligentă. Posibil de bază sunt grupuri de funcționalități: · De monitorizare a iluminării și a temperaturii de două moduri.

· De monitoramente de listă de alimente și nível de água filtrată na geladeira.

Não escreveremos os firmwares dos devices IoT da geladeira nem dos cômodos; presupunem că dispozitivele fac fazem următorul:

- A geladeira possui um device com touchscreen em that é possível enter com dados de alimente: o nume de umăr și sua quantitate;

- A 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 moduri sunt condiționate de comunicarea pela rede wifi;

- As lâmpadas dos cômodos putem ter o brilho ajustado por device care se comunica pela rede wifi;

Requisitos:

- Conhecimento básico em python, javascript, uso do sistema operational, comandos basic no shell

- Ter instalat: nodejs, python

- Ter instalat (opțional): docker, emulator de dispozitiv mobil, gerenciador de sdk pentru Android (disponibil fără Android Studio)

O dezvoltare a fost proiectată pentru Linux. Podem ser needárias adaptações for that seja done no Windows.

Pasul 1: Configurarea O Ambiente

Configurând O Ambiente
Configurând O Ambiente
Configurând O Ambiente
Configurând O Ambiente

Vamos configurați un mediu de dezvoltare în 2 părți: server și mobil. O server va fi scris în python și pe mobil în javascript sau typescript, fiind utilizat React Native pentru proiect.

reactnative.dev/

Vamos initial criar uma estrutura de pastas. Em um diretório escolhido (care a partir de acum va fi scris întotdeauna ca $ PROJECT_DIR as placeholder - crie com no local that achar mais adequado e com o name de sua preferência), vamos criar uma paste "server":

$ mkdir $ PROJECT_DIR && cd $ PROJECT_DIR

$ mkdir server

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO PARA O SERVIDOR

Putem utiliza un mediu conținut cu Docker sau un mediu virtual python (venv). Caso deseje use ambient conteinerizado, criaremos a imagem second or dockerfile:

$ cd $ PROJECT_DIR

$ touch dockerfile

Veja imagem do dockerfile.

Caso preferă să utilizeze un mediu virtual de python, ca instrumente în

Vamos então criar o arquivo that persistirá to a list of dependências do server and colocar as dependências necessárias:

$ touch requirements.txt

Veja imagem do requirements.txt.

Caso tenha optado por utiliza um ambiente conteinerizado, construit a image and entre no container:

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

Pentru mai multe informații despre dockerfile și a cli do docker:

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO MOBILE

Um passo a passo de como configurar o ambiente de desarrollo mobile com React Native se poate vedea fără link:

Após ter o ambiente configurado, na pasta do project trebuie să fie posibil să se execute sau să comande pentru creștere a aplicației mobile:

$ npx create-react-native-app client

Pasul 2: WebSocket

É interesante que o leitor conheça pelo menos um poco a respeito de websocket antes de prosseguir. Caso o leitor nunca tenha lido, trabalhado ou ouvido falar nada a respeito, separe some minutes for understand as works o websocket através da documentação:

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

Usaremos uma biblioteca no client e no server that abstrai o protocolo de manière that não precisemos think em detalhes de chamada e de armazenamento de identificadores e rotas. Separați și un timp pentru studierea bibliotecilor folosite fără client și fără server:

Cliente:

Servidor:

Pasul 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 initial do project and escrever a interface that will be used as comunicação com o server:

$ mkdir src

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

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

Veja imagem do app.py

Depois vamos escrever o módulo that stabelece as conexões via websocket e as redirecionam for um controlador.

Veja imagem do socketconnection.py

CONTROLUL E UTILIZEAZĂ

O controlator receberá um pacote do módulo responsável por estabelecer e gerenciar as conexões; será responsabilidade do controlador saber qual funcție de caz de utilizare chamar pentru fiecare invenție recebită, bem ca și după ce da răspuns de caz de utilizare trimite um pacote de răspuns pentru sala room de dispozitive conectate pentru actualizare da informații.

Veja imagem do controller.py.

Finalmente avem os casos de uso que devem gerenciar como deve ser tratado os dados do event recebido e criar os novos dados a partir do dados recebidos para que o controlador atualize o estado do sistema. No caso desse sistema há somente atualização de valores (sejam numéricos, texto ou booleanos - no caso de ligar / desligar dispozitive de ambientação). Então não é de surpreender que os cases de uso tão somente chame funções do módulo responsável pela persistência de dados as 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 as prefere armazenar os dados e portanto, implementar as funções do src / repository.py. Nici un proiect dezvoltat ca exemplu a fost persistent cu un arquivo json fără o bază de date directoare. No repositório do project is possível verificar uma pasta server / database com um arquivo com os dados persistidos bem as um arquivo de model em server / database-model.json de como deve ser o json para a nossa aplicação functionar.

Pasul 4: Testând O Servidor

Testand O Servidor
Testand O Servidor

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

Veja imagem face serverclient.py

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

$ python app.py

Pentru container, fără direcție $ PROJECT_DIR / server execute:

$ python3 serverclient.py

No prompt ">" digite os eventos foundados no controlador seguido de ";" e então valores de identificação e / ou novos valores. De exemplu:

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 pentru fiecare eveniment enviat verificat se a persistat nu banco de dados escolhido.

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

Pasul 5: O aplicație mobilă

A Aplicação Mobile
A Aplicação Mobile
A Aplicação Mobile
A Aplicação Mobile

Não será demonstrado com muitos detalhes each parte do developimento do client mobile. Não será explicitado aqui cada importação no módulo principal criado pelo React Native nem possíveis detalhes de configuração. Pentru a veni, navigați la $ PROJECT_DIR / client și adăugați o dependență pe care o precisăm pentru proiect:

$ npm i socket.io

Em seguida vamos escrever os componentes graphics and as funções that irão se comunicar com o server.

ESCREVENDO A TELA

În App.js, scăpăm componentele GUI.

⚠ Notă că o funcție chamada pelo useEffect ainda não foi escrita! Nu am scris nici un reductor setDataReducer, setFoodReducer, setTemperatureReducer, setLightReducer și nem escritos os objectos cu inițiate inițiale INITIAL_STATE, INITIAL_FOOD_MODAL, INITIAL_TEMPERATURE_MODAL, INITIAL_LIGHT_MODAL

De asemenea, nu sunt scrise ca funcții folosite pentru elemente de interfață grafică pentru fază șampanie pentru escritor fără server: saveNewFoodValue, saveNewTemperature, saveNewLuminosity, toggleTemperatureForRoom, toggleLightForRoom

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

Veja imagem do App.js com code from parte GUI

Por fim vamos escrever as funções necessárias for fazer a comunicação com o server și para utlização do mesmo pelos components de GUI.

Veja imagem do App.js com code da parte lógica / operational

Recomandat: