Inhaltsverzeichnis:

Starten eines Smart Home - Projecto Final - Gunook
Starten eines Smart Home - Projecto Final - Gunook

Video: Starten eines Smart Home - Projecto Final - Gunook

Video: Starten eines Smart Home - Projecto Final - Gunook
Video: Умное окно - автоматизация проветривания комнаты, интеграция в Home Assistant 2024, November
Anonim
Starten eines Smart Home - Projecto Final
Starten eines Smart Home - Projecto Final

Projeto apresentado é parte do projeto final do curso de IoT aplicado a Smart Home

O projeto mostrado a seguir é parte do projeto final a ser apresentado no curso de IoT aplicada a Smart Home, que consiste de sensores and atuadores conectados na DrangonBoard + Linker Mezzanine, um aplicativo desenvolvido com o ionic (a ser incluidoe as.breve) informações/dados das "coisas" serão salvados in Cloud von AWS. Para uma primeira iteração com a DragonBoard e IoT como um todo, decidiu-se fazer um sistema de acendimento de luzes, com um sensor de luminosidade, uma chave liga/desliga para ativar um aparelho de ar-condicionado um acordo pre coma de acordo -setada e um sensor de proximidade que será instalado no portão de uma garagem, com a intenção de informar ao proprietário da casa se or portão encontra-se aberto ou fechado.

Schritt 1: Materias Necessários

Materias Necessários
Materias Necessários
Materias Necessários
Materias Necessários
  1. Platzieren Sie DragonBoard.
  2. 96Boards Linker Mezzanine
  3. Lichtsensor (LDR) que acompanha a Linker Mezzanine.
  4. Temperatursensor mit einem Linker Mezzanine.
  5. Botão touch que acompanha a Linker Mezzanine.
  6. Relé acompanha a Linker Mezzanine, utlizado para ligar oder systema de A/C.
  7. LED acompanha a Linker Mezzanine, que darstellend eine Beleuchtung und eine Serivade.
  8. Instalação das bibliotecas citadas no passo 5.

Schritt 2: Sensoren, Atuadores E Conexões

Sensoren, Atuadores und Conexões
Sensoren, Atuadores und Conexões
Sensoren, Atuadores und Conexões
Sensoren, Atuadores und Conexões

1. Linker-Mezzanine:

Será necessário conectar a placa Mezzanine na Dragonboard. Para-Detalhes, Consultar-Link

2. Sensorluminosidade (LDR)

O sensor é parte do Kit da Linker Mezzanine und deverá ser conectado na entrada ADC1. Technische Details:

3. Temperatursensor

O sensor é parte do Kit da Linker Mezzanine und deverá ser conectado na entrada ADC2. Technische Details:

4. Botão-Touch

O sensor é parte do Kit da Linker Mezzanine und deverá ser conectado na entrada D1. Este botão irá ligar/desligar oder sistema como um todo. O acesso a este botão é somente local. Technische Details:

5. Relé

O relé é parte do Kit da Linker Mezzanine und deverá ser conectado na entrada D2. Ele será utiizado para ligar/desligar o sistema de A/C. Para detalhes técnicos:

6. LED

O LED ist ein Teil des Kits von Linker Mezzanine und einer Verbindung mit dem Eingang D4. O LED-Vertretung oder LED-Beleuchtung von uma casa, seja algum cômodo interno da casa ou externo, como a iluminação de um jardim. Ein zusätzlicher Widerstand von 10 kOhm in einem Sério-Com oder Já-Existe-Para-Diminuir-Corrente-Utilizada-Pelo-Sistema, Já-Que-em-Experiências-Anteriores verificou-se conflitos com as portas analógicas. Technische Details:

7. Magnetischer Sensor

Este sensor foi comprado a parte e não faz parte do Kit da Linker Mezzanine. Ele será usado em uma janela oder no portão de uma garagem para informar se a janela/garagem está aberta ou fechada. O sensor é um conjunto formado von 2 pequenas peças (ver foto do Step acima), o sensor proprimamente dito e um pequeno "imã", que ao aproximar-se do sensor irá alterar o estado do sensor. O sensor utlizado neste projeto foi um N/A (normalmente aberto). Quando o imã não está próximo do sensor, o sensor reportará estado aberto. Quando o imã estiver próximo do sensor, o estado reportado será fechado.

Schritt 3: Aplicativo Para Controle Remoto

Aplicativo Para Controle Remoto
Aplicativo Para Controle Remoto

O aplicativo foi desenvolvido com o Ionic Framework, https://ionicframework.com/. Será notário fazer o herunterladen und installieren Sie die letzte Version.

O aplicativo irá se comunicar (ler e atualizar os dados) com a cloud da AWS (AWS IoT- https://aws.amazon.com/iot/), que posteriormente será acessada pela placa dragonboard para atualização dos dos dos sensores e atuadores.

- Sistema de Iluminação Mostra oder estado do Sitesma de Iluminação, Ligado oder Desligado. Quando o nível de luminosidade baixar do valor configurado, as luzes se acenderão automaticamente. Quando a intensidade de luz aumentar além do valor definido, as luzes se apagarão.

- O botão A/C acionará oder relé, que por sua vez acionará oder sistema de A/C da casa. Também é possível definir o valor desejado da temperatura. Assim que a temperature da casa estiver maior do que a temperature de acionamento, o A/C será ligado e permanecerá ligado até a temperature abaixar em 2 graus da tempreatura definida. Por exemplo, iremos que a temperature é de 23 graus. Quando a temperatura interior chegar a 24 graus, o A/C será ligado e ligado permanecerá ligado até a temperature a chegar a 20 graus, desligando então. Depois o ciclo se repetirá.

- Garagem informará a atual posição da garagem, se aberta ou fechada.

- Temperatur é apenas informativa e mostra a temperature do interior da casa.

- Luminosidade é apesas informativa e mostra o valor da luminosidade atual.

Segue em anexo arquivos home.html und home.ts contendos os códigos para comunicação com a Cloud AWS e atualização do app.

Schritt 4: Criando Uma "coisa" Na AWS IoT

Criando Uma
Criando Uma

Para fazer o setup do IoT na AWS, os seguintes passos deverão ser seguidos:

1) Criar um projeto no AWS IoT atravé do link:

2) Clique "Erstelle eine Sache" und "Erstelle eine einzelne Sache". Dê o nome do projeto and clique em Next.

3) Na tela seguinte, Clique em "Erstelle eine Sache ohne Zertifikat". Nesse-Tutorial ist nicht erforderlich, um Zertifikate von Práticas-Quests zu verwenden, und nicht zu empfehlen, fazer oder uso de IoT-Sem-Zertifikate zu verwenden.

4) Nesse momento, sua "coisa" já estará criada. Clique no botão da "coisa" que foi criado para abrir a tela com als opções. Nessa tela podemos ver os topicsMQTT que podem ser usados para fazer a atualização dos dados a Serem enviados para a Could, assim como é uma ótima ferramenta para Troubleshooting. Kein código em Python que será apresentado em breve, foram utlizados alguns destes topicos. Es bietet sich als "Schatten" an, wenn es um eine Information geht, die auf einem Dragonboard-Refletida in AWS Cloud steht.

Schritt 5: Programa Em Python

Als seguintes bibliotecas serão necessárias para a execução do programa:

import spidevimport time import logging import json import argparse

aus libsoc importieren gpio

from time import sleep from datetime import date, datetime from gpio_96boards import GPIO from AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient from AWSIoTPythonSDK. MQTTLib

Segue abaixo código completo do programa:

import spidevimport time import logging import json import argparse

aus libsoc importieren gpio

from time import sleep from datetime import date, datetime from gpio_96boards import GPIO from AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTClient from AWSIoTPythonSDK. MQTTLib import AWSIoTMQTTShadowClient

GPIO_CS = GPIO.gpio_id('GPIO_CS') #Analoger Port

BUTTON = GPIO.gpio_id('GPIO_A') RELE = GPIO.gpio_id('GPIO_C') LED = GPIO.gpio_id('GPIO_G')

Pins = ((GPIO_CS, 'out'), (TASTE, 'ein'), (RELE, 'aus'), (LED, 'aus'),)

def setdevices(deltaMessagePython):

System_Status = deltaMessagePython['SystemStatus'] Rele_Status = deltaMessagePython['AC'] Led_Status = deltaMessagePython['SisIlumi']

##### AC

if Rele_Status == 1: gpio.digital_write(RELE, GPIO. HIGH)

if Rele_Status == 0:

gpio.digital_write(RELE, GPIO. LOW)

##### Sistema de Iluminacao

if Led_Status == 1: gpio.digital_write(LED, GPIO. HIGH) if Led_Status == 0: gpio.digital_write(LED, GPIO. LOW)

def readadc(gpio):

gpio.digital_write(GPIO_CS, GPIO. HIGH)

time.sleep(0.0002) gpio.digital_write(GPIO_CS, GPIO. LOW) r = spi.xfer2([0x01, 0xA0, 0x00])#ADC2 - Temperatur gpio.digital_write(GPIO_CS, GPIO. HIGH) adcout = (r[1] << 8) & 0b1100000000 adcout = adcout | (r[2] & 0xff) adc_temp = (adcout *5.0/1023-0.5)*100

gpio.digital_write(GPIO_CS, GPIO. HIGH)

time.sleep(0.0002) gpio.digital_write(GPIO_CS, GPIO. LOW) r = spi.xfer2([0x01, 0x80, 0x00])#ADC1 - Helligkeit gpio.digital_write(GPIO_CS, GPIO. HIGH) adcoutldr = (r[1] << 8) & 0b1100000000 adcoutldr = adcoutldr | (r[2] & 0xff) adcoutldr = str(adcoutldr) now = datetime.utcnow() now_str = now.strftime('%Y-%m-%dT%H:%M:%SZ') Temperatura = "{:.2f}".format(adc_temp) payload_temp = '{"state":{"desired": {"Luminosidade": ' + adcoutldr + ', "Temperatura": ' + temperatura + '}}}' myMQTTClient.publish ("$aws/things/DBpyAWS1116/shadow/update", payload_temp, 0) return r

def desliga():

gpio.digital_write(RELE, GPIO. LOW) gpio.digital_write(LED, GPIO. LOW)

def run(gpio):

system_status = 1

während Wahr:

time.sleep(2) button_value = gpio.digital_read(BUTTON) print ("----") time.sleep(0.25) if button_value == 1: if system_status == 0: system_status = 1 else: system_status = 0 desliga () if system_status == 1: value = readadc(gpio) print "SYSTEM_STATUS %d" %system_status time.sleep(3)

Klasse shadowCallbackContainer:

def _init_(self, deviceShadowInstance): self.deviceShadowInstance = deviceShadowInstance

# Benutzerdefinierter Schatten-Rückruf

def customShadowCallback_Delta(self, payload, responseStatus, token): print("Eine Delta-Nachricht erhalten:") ### Payload-Update-Skript payloadDict = json.loads(payload) deltaMessage = json.dumps(payloadDict["state"]) print "DELTA MESSAGE %s" %deltaMessage ### Anfrage zum Aktualisieren des gemeldeten Zustands newPayload = '{"state":{"reported":' + deltaMessage + '}}' deltaMessagePython = json.loads(deltaMessage) setdevices(deltaMessagePython)

spi = spidev. SpiDev()

spi.open(0, 0) spi.max_speed_hz = 10000 spi.mode = 0b00 spi.bits_per_word = 8

####### Dingdefinition

# AWS IoT-Zertifikat basierende Verbindung

myMQTTClient = AWSIoTMQTTClient("DBpyAWS1116") myMQTTClient.configureEndpoint("a28rqf8gnpw7g.iot.us-west-2.amazonaws.com", 8883) myMQTTClient.configureCredentials("/home/linaro/shared/AWcrt/root-CA., "/home/linaro/shared/AWS/"SUA CHAVE"-private.pem.key", "/home/linaro/shared/AWS/"SEU CERTIFICADO"-certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing(- 1) # Unendlich offline Publish Queuing myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec #connect and publish myMQTTClient.connect() myMQTTClient.publish(" coisajsb", "verbunden", 0)

########################

####### Schattendefinition

# AWSIoTMQTTShadowClient initiieren

myAWSIoTMQTTShadowClient = Keine myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient("DBpyAWS1116") myAWSIoTMQTTShadowClient.configureEndpoint("SEU END-POINT.us-west-2.amazonaws.com", 8883) myAWSIoTMQTTShadowClient/Configure/Shadowshare CA.crt", "/home/linaro/shared/AWS/"SUA CHAVE"-private.pem.key", "/home/linaro/shared/AWS/"SEU CERTIFICADO-certificate.pem.crt")

# AWSIoTMQTTShadowClient configurationmyAWSIoTMQTTShadowClient.configureAutoReconnectBackoffTime(1, 32, 20) myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout(10) # 10 sec myAWSIoTMQTTShadowClient.configureMQTTOperationTimeout(5) # 5 sec

# Verbinden mit AWS IoT

myAWSIoTMQTTShadowClient.connect()

# Erstellen Sie ein deviceShadow mit dauerhaftem Abonnement

deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName("DBpyAWS1116", True) shadowCallbackContainer_Bot = shadowCallbackContainer(deviceShadowHandler)

# Auf Deltas hören

deviceShadowHandler.shadowRegisterDeltaCallback(shadowCallbackContainer_Bot.customShadowCallback_Delta)

#########################

myMQTTClient.publish("$aws/things/DBpyAWS1116/shadow/update", '{"state":{"desired": {"SystemStatus":1, "SisIlumi":0, "AC":0, "Garagem": "Fechada", "Temperatura": 25, "Luminosidade": 123}}}', 0)

if _name_ == "_main_":

mit GPIO(Pins) als gpio: run(gpio)

Schritt 6: Finalisierung

Finalisierung
Finalisierung

Apos ter Concluido os Anteriores, Deve-Se Inicializar o Sistema Executando o Código Fornecido no Passo 5 e Inicializar o App através do Ionic, Usando oder Comando Ionic dienen.

Für eine mögliche Fehlerbehebung, empfehlen Sie die Verwendung eines MQTT-Client-Tests für AWS, sowie eine mögliche Überprüfung als Benutzer, die das Dragonboard und die Aktualisierung der AWS-Cloud-Formate verwenden:

Empfohlen: