สารบัญ:

Pequeno Projeto De Uma Casa Inteligente: 5 ขั้นตอน
Pequeno Projeto De Uma Casa Inteligente: 5 ขั้นตอน

วีดีโอ: Pequeno Projeto De Uma Casa Inteligente: 5 ขั้นตอน

วีดีโอ: Pequeno Projeto De Uma Casa Inteligente: 5 ขั้นตอน
วีดีโอ: 10 สุดยอดนวัตกรรม DIY TINY HOMES 2024, กรกฎาคม
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:· ตรวจสอบการตรวจสอบอุณหภูมิและอุณหภูมิ

· การตรวจสอบรายการอาหารของอาหาร e nível de água filtrada na geladeira

Não escreveremos ระบบปฏิบัติการ เฟิร์มแวร์ dos dispositivos IoT da geladeira nem dos cômodos; porém assumiremos que os dispositivos fazem o seguinte:

- เจลลาเดรา possui um dispositivo com หน้าจอสัมผัส em que é possível entrar com dados de alimentos: o nome de um alimento e sua quantidade;

- เจลลาเดรา possui um เซ็นเซอร์ของ nível em um pequeno tanque de água embutido na geladeira;

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

- ระบบปฏิบัติการ têm ar condicionado que se comunicam pela rede wifi;

- ในฐานะที่เป็น lâmpadas dos cômodos podem ter o brilho ajustado por dispositivo que se comunica pela rede wifi;

ข้อกำหนด:

- Conhecimento básico em python, javascript, uso do sistema operacional, comandos básicos ไม่มีเชลล์

- การติดตั้ง: nodejs, python

- ติดตั้ง (opcional): นักเทียบท่า, emulador de dispositivo mobile, gerenciador de sdk do Android (ไม่มี Android Studio)

จาก desenvolvimento desse projeto foi feito no Linux ความจำเป็นที่จำเป็น adaptações para que seja feito no Windows.

ขั้นตอนที่ 1: กำหนดค่า O Ambiente

กำหนดค่า O Ambiente
กำหนดค่า O Ambiente
กำหนดค่า O Ambiente
กำหนดค่า O Ambiente

Vamos ตั้งค่าคอนฟิกจากสภาพแวดล้อมของ desenvolvimento em 2 partes: servidor e mobile. O servidor será escrito em python e o mobile em javascript ou 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 "เซิร์ฟเวอร์":

$ mkdir $PROJECT_DIR && cd $PROJECT_DIR

$ mkdir เซิร์ฟเวอร์

การกำหนดค่า O AMBIENTE DE DESENVOLVIMENTO PARA O SERVIDOR

Podemos utilizar um Ambiente conteinerizado com Docker ou Ambiente งูหลามเสมือน (venv) Caso deseje utilizar ambiente conteinerizado, criaremos a imagem segundo o dockerfile:

$ cd $PROJECT_DIR

$ touch dockerfile

Veja imagem ทำ 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 necessárias:

$ ความต้องการสัมผัส.txt

Veja imagem ทำข้อกำหนด.txt

Caso tenha optado por utilizar um Ambiente conteinerizado, construa a imagem e entre ไม่มีคอนเทนเนอร์:

$ สร้างนักเทียบท่า -t smarthouse $ docker run -it -p 3000:3000 -v $(pwd):/app smarthouse bash

ข้อมูลเบื้องต้นเกี่ยวกับ dockerfile และ cli do docker: https://docs.docker.com/engine/reference/builder/…

กำหนดค่า O AMBIENTE DE DESENVOLVIMENTO MOBILE

Um passo a passo de como กำหนดค่า oambiente de desenvolvimento mobile com React Native pode ser visto ไม่มีลิงก์:

ด้านบน o Ambiente การกำหนดค่า, na pasta do projeto deve ser possível executar o comando para criar aplicação mobile:

$ npx create-react-native-app client

ขั้นตอนที่ 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, แยก alguns minutos para entender como funciona o websocket através da documentação:

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

การใช้งาน uma biblioteca ไม่มีลูกค้าและไม่มีเซิร์ฟเวอร์ que abstrai o protocolo de maneira que não precisionmos pensar em detalhes de chamada e de armazenameto de identificadores e rotas Separe também um tempo para estudar as bibliotecas utilizados no cliente e no servidor: แยกตามจังหวะ

ลูกค้า:

เซิร์ฟเวอร์:

ขั้นตอนที่ 3: ผู้ให้บริการ Escrevendo O

เอสเครเวนโด โอ เซอร์วิดอร์
เอสเครเวนโด โอ เซอร์วิดอร์
เอสเครเวนโด โอ เซอร์วิดอร์
เอสเครเวนโด โอ เซอร์วิดอร์
เอสเครเวนโด โอ เซอร์วิดอร์
เอสเครเวนโด โอ เซอร์วิดอร์
เอสเครเวนโด โอ เซอร์วิดอร์
เอสเครเวนโด โอ เซอร์วิดอร์

Vamos criar uma esttrutura inicial do projeto e escrever a interface que será utilizada como comunicação com o เซิร์ฟเวอร์:

$ mkdir src

$ touch app.py src/{คอนโทรลเลอร์, 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 เป็น conexões ผ่าน websocket e เป็น redirecionam para um controlador

Veja imagem ทำ socketconnection.py

ตัวควบคุมและการใช้งาน

O controlador receberá um pacote do módulo responsável por estabelecer e gerenciar เป็น conexões; รับผิดชอบในการควบคุม 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.

Veja imagem ทำ controller.py

ข้อความสุดท้ายสำหรับสถานการณ์ที่เราใช้ que devem gerenciar como deve ser tratado os dados do evento e criar os novos dados a partir do dados recebidos para que o controlador atualize o estado do sistema ไม่มี 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ยังคงมีอยู่ de dados como se fosse essa a "regra de negócio"

Veja imagem ทำ usecases.py

หมายเหตุ: precisamos persistir os dados de alguma form. Fica a escolha do leitor como prefere armazenar os dados e portanto, การใช้งานเป็น funções do src/repository.py ไม่มีโปรเจ็กต์ desenvolvido como ตัวอย่าง foiยังคงมีอยู่ em um arquivo json no diretório database. No repositório do projeto é possível verificar uma pasta server/database com um arquivo com os dados peristidos bem como um arquivo de modelo em server/database-model.json de como deve ser o json para a nossa aplicação funcionar.

ขั้นตอนที่ 4: ผู้ให้บริการ Testando O

Testando O เซิร์ฟเวอร์
Testando O เซิร์ฟเวอร์

Podemos criar um script para conectar ao servidor e enviar eventos conforme a esttrutura esperada pelos controladores para fins de testes manuais. Vamos criar esse script e rodá-lo com o servidor*. คำบรรยาย

Veja imagem ทำ serverclient.py

Com o arquivo criado, verifique se o container está rodando, e dentro dele ดำเนินการ:

$ python app.py

Fora ทำคอนเทนเนอร์ ไม่มีไดเรโตริโอ $PROJECT_DIR/เซิร์ฟเวอร์ดำเนินการ:

$ python3 serverclient.py

ไม่มีข้อความแจ้ง "> " digite os eventos encontrados no controlador seguido de ";" e então valores de identificação e/ou โนโวส วาโลเรส. ป.ตัวอย่าง:

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ยังคงมีอยู่ no banco de dados escolhido.

หมายเหตุ: ตรวจสอบ que a porta que está sendo servido aplicação, a porta exposta no docker run e a porta do script de teste devem ser a mesma.

ขั้นตอนที่ 5: Aplicação Mobile

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

ก่อนหน้า Demonstrado com muitos detalhes cada parte do desenvolvimento do cliente mobile. ไม่มีเนื้อหาที่ชัดเจน aqui cada importação no módulo principal criado pelo React Native nem possíveis detalhes de configuração. Para começar, navegue até $PROJECT_DIR/client e adicione a dependência que precisaremos para o projeto:

$ npm ฉัน socket.io

เพิ่ม vamos escrever os componentes gráficos e as funções que irão se comunicar com o servidor.

เอสเครเวนโด อะ เตลา

Em App.js, vamos escrever os คอมโพเนนต์ของ GUI

⚠ หมายเหตุ que a função chamada pelo useEffect ainda não foi escrita! ข้อมูลด้านล่าง escritos os reducers setDataReducer, setFoodReducer, setTemperatureReducer, setLightReducer e nem escritos os objetos com estados iniciais INITIAL_STATE, INITIAL_FOOD_MODAL, INITIAL_TEMPERADIAL_MODAL

เนื้อหาเพิ่มเติม ใช้สำหรับ escritas เป็น funções utilizadas pelos elementos de inteface สำหรับ fazer chamadas para escrita ไม่มีเซิร์ฟเวอร์: saveNewFoodValue, saveNewTemperature, saveNewLuminosity, toggleTemperatureForRoom, toggleLightForRoom

Portanto, se desejar testar os elementos com dados falsos, escreva cada objeto และ função dito acima

รูปภาพทำ App.js com código da parte 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

รูปภาพทำ App.js com código da parte lógica/operacional

แนะนำ: