Talaan ng mga Nilalaman:

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

Video: Pequeno Projeto De Uma Casa Inteligente: 5 Hakbang

Video: Pequeno Projeto De Uma Casa Inteligente: 5 Hakbang
Video: ПЛОСКИЙ ДОМ С ИНТЕЛЛЕКТУАЛЬНОЙ ПЛАНИРОВКОЙ С 3 ВАННЫМИ КОМНАТАМИ И ПЛОЩАДЬЮ ДЛЯ ГУРМАНОВ 161 М² 2024, Hulyo
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 e nível de água filtrada na geladeira.

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

- Isang geladeira na maaaring gawin sa pamamagitan ng touchscreen upang mai-entrada ang mga ito sa loob ng mga ito: o maaari kang mag-isip ng maraming dami;

- Isang 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;

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

Mga Requisitos:

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

- Ter installado: nodejs, python

- Ter installado (opcional): docker, emulador de dispositivo mobile, gerenciador de sdk do Android (walang Android Studio)

O desenvolvimento desse projeto foi feito no Linux. Mag-click dito para sa iyo upang mai-install ang Windows.

Hakbang 1: Configurando O Ambiente

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

Vamos configurar o ambiente de desenvolvimento em 2 partes: servidor e mobile. O servidor será escrito em python e o mobile em javascript ou typcriptcript, sendo utilizado React Native para sa projeto.

reactnative.dev/

Vamos inicialmente criar uma estrutura de pastas. Para sa iyo (tulad ng isang partir de agora será escrito semper como $ PROJECT_DIR como placeholder - walang lokal na lokal na ahensya na naisagawa sa iyo), kung paano mo masubukan ang lahat ng pasta) "servidor":

$ mkdir $ PROJECT_DIR && cd $ PROJECT_DIR

$ mkdir servidor

CONFIGURANDO O AMBIENTE DE DESENVOLVIMENTO PARA O SERVIDOR

Mga Podemos na gumagamit ng ambiente conteinerizado com Docker para sa iyong virtual virtual python (venv). Caso deseje utilizar ambiente conteinerizado, criaremos a imagem segundo o dockerfile:

$ cd $ PROJECT_DIR

$ touch dockerfile

Veja imagem gawin dockerfile.

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 kinakailangan:

$ touch kinakailangan.txt

Ang mga imahe ng Veja ay gumagawa ng mga kinakailangan.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

Para mais informações sobre o dockerfile at isang kliyente docker: https://docs.docker.com/engine/referensi/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:

Maaari kang mag-configure, gagamitin ang pasta upang maisagawa ang pagpapatupad ng comando para sa isang mobile app:

$ npx create-react-katutubong-app client

Hakbang 2: WebSocket

É interessante que o leitor conheça pelo menos um pouco a respeito de websocket antes de prosseguir. Caso o leitor nunca tenha lido, trabalhado ou ouvido falar nada a respeito, mag-iwan ng mga alarm para sa 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 identificadores e rotas. Paghiwalayin ang tempo para sa estudar bilang bibliotecas utilizados no cliente e no servidor:

Cliente:

Servidor:

Hakbang 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 imagem gawin app.py

Depois vamos escrever o módulo que establelece as conexões via websocket at bilang redirecionam para um controlador.

Veja imagem gawin socketconnection.py

CONTROLLER E GINAGAMIT

O controlador receberá um pacote do módulo responsável por establelecer 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 imagem gawin controller.py.

Finalmente temos os casos de uso que devem gerenciar como deve ser tratado os dados do evento recebido e criar os novos maging a partir do maging recebidos para que o controlador atualize o estado do sistema. Walang caso desse sistema kung paano mag-iingat ang mga de-valores (sejam numéricos, texto ou booleanos - walang caso de ligar / desligar dispositivos de ambientação). Ang pag-uusapan ay ang surpreender na ito upang makapag-ayos ng mga bisita habang hinuhusay ang mga ito upang maging isang tao sa isang "regra de negócio".

Veja imagem gawin usecases.py

Nota: precisamos persistir os dados de alguma forma. Gawin ang isang escolha do leitor como prefere armazenar os magiging e portanto, ipatupad bilang funções do src / repository.py. Walang projeto desenvolvido como exemplo foi persistido em um arquivo json no diretório database. Walang repositório na gagawa ng proyekto upang maiyak ang lahat ng server ng server / database upang maibalik ang iyong server sa database ng modelo ng server / database-model.json mula sa loob ng seremonya para sa isang mahusay na application.

Hakbang 4: Testando O Servidor

Testando O Servidor
Testando O Servidor

Podemos criar um script para sa 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 gawin serverclient.py

Sa pamamagitan ng criado, verifique se container na ito ay isinasagawa:

$ python app.py

Fora do container, walang direktang $ PROJECT_DIR / server na isinasagawa:

$ python3 serverclient.py

Walang prompt ">" digite os eventos encontrados no controlador seguido de ";" at ang mga valores de identificação e / ou novos valores. Bilang halimbawa:

UPDATE_FRIDGE_WATER_LEVEL; 80

I-UPDATE_ROOM_TEMPERATURE; 1, 22.0

UPDATE_ROOM_TEMPERATURE_SETPOINT; 1, 17.5

I-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 magiging escolhido.

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

Hakbang 5: Isang Mobile na Aplicação

Isang Aplicação Mobile
Isang Aplicação Mobile
Isang Aplicação Mobile
Isang Aplicação Mobile

Nao será demonstrado com muitos detalhes cada parte do desenvolvimento do cliente mobile. Hindi malinaw na explicitado aqui cada importação no módulo punong criado pelo React Native nem posíveis detalhes de configuração. Para sa iyo, mag-iwan ng $ PROJECT_DIR / client at mag-click dito upang maibigay ang iyong proyekto:

$ npm i socket.io

Em seguida vamos escrever os sangkap ng mga ito ay bilang funções que irão se comunicar com o servidor.

ESCREVENDO A TELA

Em App.js, vamos escrever os sangkap ng GUI.

⚠ Tandaan ang isang 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_, INMITAL_

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.

Mag-isip ng larawan sa App.js com código da parte GUI

Para sa mga eskrim ng escrever bilang funções kinakailangan para sa fazer ng isang comunicação com o servidor at para sa mga utlização na gawin ang mga pelos sangkap ng GUI.

Mag-isip ng larawan sa App.js com código da parte lógica / operacional

Inirerekumendang: