Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Automação residencial usando Raspberry Pi 2 (Windows 10 IoT Core)

Componentes e suprimentos

Raspberry Pi 2 Modelo B
× 1
HSRel5 - I²C-Bus-Relaisplatine
Placa de relé com 5 relés, 3 GPIOs e conexão I2C, suporta montagem em distribuidores de energia, com base em PCF8574 .
× 1
HSRel8 (+8) - 8fach-Relaisplatine
Placa de relé com 8 relés, 8 GPIOs e conexão I2C, suporta montagem em distribuidores de energia, com base em MAX7311 .
× 1
I2C-Port 16 HS 16Bit-Porterweiterung
Placa expansora de porta com 16 GPIOs e conexão I2C, suporta montagem em distribuidores de energia, com base em MAX7311.
× 1
DR-60-12 Hutschienen Netzteil 12V / 54W
Fonte de alimentação de 12 V para todos os dispositivos
× 1
Hutschienen Netzteil 15W 5V 3A; MeanWell, DR-30-5
Fonte de alimentação de 5 V para todos os dispositivos
× 1
Prototipagem de proteção para Raspberry Pi
Usado para adicionar um LED para indicação de status e uma entrada de interrupção protegida para as placas de entrada. Também oferece terminal de parafuso de 3 polos para conexões confiáveis.
× 1
I2C-Buffer HS
O deslocador de nível I2C incluindo os resistores pull-up necessários etc, suporta montagem em distribuidores de energia, com base em P82B96 .
× 1
Arduino Nano R3
Usado como uma ponte entre os sensores DHT22 e o barramento I2C.
× 1
Remetente e receptor de 433 MHz
Para suporte de relés sem fio.
× 1

Aplicativos e serviços online

Microsoft Visual Studio 2015
Software Arduino (IDE)

Sobre este projeto


Atualização 2: O projeto ainda está crescendo e muitas novidades já estão implementadas (como um Twitter-Cliente e a integração de Telegram-Bots). Verifique o repositório GitHub e as notas de versão para saber mais sobre os novos recursos (ou siga-me no Twitter). Espero poder atualizar a página deste projeto o mais rápido possível.

Atualização 1: Em primeiro lugar, quero dizer "obrigado" a todos que leram a página deste projeto e me deram feedback (privado ou nos comentários). Foi muito divertido apresentar este projeto na Maker Faire Roma 2015 e no Microsoft Technical Summit 2015 e eventos futuros ainda estão esperando. Adicionei algumas fotos dos eventos.

Estou desenvolvendo uma solução de automação residencial há 3 anos. Isso inclui a instalação física do hardware e o desenvolvimento do software.





Recursos


No momento, os seguintes recursos são suportados.





Entradas

  • Botão de pressão (BUSCH-JAEGER 2020US)
  • Detector de movimento (Abus 360 ° BW8085)
  • Temperatura ambiente (meu próprio dispositivo baseado em DHT22)
  • Umidade da sala (meu próprio dispositivo baseado em DHT22)
  • Estado da janela (aberta ou fechada usando o contato reed Honeywell Slimline)
  • Nascer do sol, pôr do sol, temperatura e umidade (retirados do OpenWeatherMap)





Saídas

  • Lâmpada (teto) (acionada por relé, sem escurecimento)
  • Soquete (acionado por relé, sem escurecimento)
  • Persiana (janela) (acionada por dois relés para cima e para baixo)
  • Ventilador (teto) (acionado por 3 relés para cada marcha)
  • Ventilador de banheiro (acionado por 2 relés para cada marcha)





Outros recursos

  • A solução contém um aplicativo web para iOS, Android, Windows, Mac OSX que pode ser usado para controlar os atuadores virtuais. A configuração do aplicativo da web é carregada do controlador (instância do Windows IoT).
  • Todos os eventos gerados por entradas e saídas podem ser publicados em um Hub de eventos do Microsoft Azure e / ou registrados em um arquivo CSV.
  • O controlador (instância do Windows IoT) fornece rastreamento baseado em UDP, que pode ser mostrado usando um aplicativo de console. O rastreamento é muito detalhado e pode ser usado para encontrar bugs ou atuadores conectados incorretamente, etc.
  • Atuadores personalizados podem ser adicionados para oferecer suporte a mais hardware.
  • As saídas físicas podem ser combinadas com as saídas lógicas.
  • Animações (as saídas físicas dentro de uma saída lógica podem ser animadas).
  • Todo o sistema é projetado para ser o mais resistente possível a erros / falhas de hardware. Mesmo se vários componentes principais forem desconectados / quebrados, o sistema restante ainda funciona como pretendido (por exemplo, algumas das placas na sala de estar não podem ser acessadas devido a uma falha de hardware, mas o banheiro ainda funciona como pretendido)
  • Suporte para relés remotos de 433 MHz.







O conceito


Como renovamos nossa casa há 3 anos, decidi implementar minha própria solução de automação residencial. A ideia principal por trás da implementação é controlar tudo, desde o distribuidor de energia usando relés. Devido a esta decisão, todos os botões, lâmpadas, soquetes, persianas, etc., precisam ser conectados por seu próprio cabo através do atuador ao distribuidor de energia. Um barramento como KNX ou EIB não é necessário.

Nota :Devido ao fato de eu morar na Alemanha, todos os componentes são projetados para funcionar com a fonte de alimentação de 230V. Outros tipos de fontes de alimentação podem precisar de modificações adicionais. A instalação de cabos de 230 V (NYM), novos distribuidores de energia etc. são feitos por meus preferidos eletricista e não sozinho.







Hardware





O novo distribuidor de energia


Instalamos um novo distribuidor de energia que é responsável pelos dois andares de nossa casa.





O barramento I2C


Em geral, o barramento I2C não é projetado para trabalhar com cabos mais longos, mas é possível aumentar o comprimento máximo possível usando alguns truques (não sei o motivo de cada otimização, mas essas são as coisas que encontrei na WWW).
  • Dirija o ônibus em 5V. O RaspberryPi conduz o barramento a 3,3 V, portanto, um deslocador de nível I2C (P82B96) é necessário. Este é o primeiro (e único) dispositivo adicionado ao RaspberryPi 2 (denominado Controlador na minha solução). O cabo para esta conexão deve ser o mais curto possível. A especificação permite operar o barramento em até 15 V, mas os escravos como PCF8574 suportam apenas 5 V no máximo.
  • Use um cabo de par trançado como CAT7. É importante usar um par para SDA e GND e outro para SCL e GND. Não use um único cabo de par trançado para SDA e SCL. Certifique-se também de que a blindagem do cabo está conectada ao PE (na Alemanha).
  • Prefira um cabo flexível. Isso torna mais complexo conectar tudo, mas aumentará o comprimento do cabo.
  • Adicione resistores pull-up com 10k ao final do barramento para SDA e SCL.
  • Limite a velocidade do barramento a 100 kbits (modo padrão), mesmo se os escravos suportarem velocidades mais rápidas.
  • Inclui um buffer I2C (P82B96). O IC pode ser usado como um deslocador de nível ou pode ser usado para separar o barramento em segmentos físicos. Usei um desses buffers no distribuidor de energia. O buffer deve ser colocado no meio do ônibus.

Este barramento I2C otimizado é usado para conectar todas as placas dentro do distribuidor de energia.







As placas de relé (saídas)


CCTools da Alemanha vende placas com relés que podem ser conectadas ao barramento I2C. Também é possível comprar as placas como peças individuais ou apenas a placa de circuito. Isso permite a substituição do expansor de porta por alternativas compatíveis com pinos. O primeiro é necessário porque os endereços disponíveis dos dispositivos são limitados. Eu adicionei suportes para o relé e ICs para que eu possa substituí-los mais facilmente se um deles estiver quebrado. Outro ponto é que posso usar um PCA9555D em vez de um MAX7311 porque o PCA9555D é mais barato e pode ser encomendado com mais facilidade (na Alemanha).

O HSRel5 placa de relé tem 5 relés e 3 GPIOs . Todas as portas necessárias são obtidas do PCF8574 interno Expansor de porta de 8 bits com 8 GPIOs . Os 5 primeiros são usados ​​para os relés e os 3 últimos podem ser usados ​​para outras saídas. Os relés requerem 12 V para operar, o que não pode ser fornecido pelo expansor de porta (que pode acionar apenas um LED). Portanto, um driver de relé é necessário. Os relés são conectados ao driver do relé e o driver do relé, por sua vez, é conectado a um inversor. Este inversor é necessário porque o estado de todas as portas no expansor de porta é ALTO depois que o IC recebe energia. Isso fechará todos os relés, o que é um comportamento não intencional.

Conclusão: Se o primeiro relé deve ser fechado, é necessário enviar 00011110 (MSB) para o expansor de porta usando o barramento I2C. Isso definirá a primeira porta como BAIXA (as outras portas também são atualizadas). A primeira porta do expansor de porta é conectada à primeira entrada do inversor. E a primeira saída do inversor é conectada à primeira entrada do driver do relé (ULN2803). Como a última parte da cadeia, o relé é conectado à primeira saída do acionador do relé.

Outra placa de retransmissão de CCTools é o HSRel8 (+8) que usa um MAX7311 como o expansor de porta e contém 8 relés e 8 GPIOs . Esta placa não precisa de um inversor de hardware. Isso significa que um ALTO estado para um relé no HSRel5 significa DESLIGADO e um ALTO estado no HSRel8 (+8) significa LIGADO. Este comportamento diferente é controlado pelo driver para esses dispositivos e faz parte do software.

Cada lâmpada, soquete, etc. está conectado a um desses relés. Na minha casa, atualmente uso 8 HSRel5 e 4 HSRel8 . Eu também uso placas com relés de estado sólido e outros tipos de relés, mas para mantê-lo curto, não entrarei em detalhes aqui. O HSRel5 é a placa de relé mais simples. Mas o PCF8574 permite apenas 8 endereços distintos. O PCF8574 A é o mesmo expansor de porta, mas tem 8 endereços diferentes. Isso significa que 16 HSRel5 pode ser conectado ao I2C ônibus.







Os expansores de porta (entradas)


Botões, detectores de movimento e interruptores reed (para as janelas) são ligados a uma placa chamada I2C-Port16 HS de CCTools . Esta placa contém um expansor de porta ( MAX7311 ), resistores pull-up (5V, 10K) para cada porta e capacitores de cerâmica ( 100NF ) A placa pode ser usada com fonte de alimentação de 12V ou 5V. Os capacitores de cerâmica são usados ​​para filtrar o ruído (filtro de falha).

Cada dispositivo de entrada (botão, detector de movimento, interruptor reed) tem seu próprio cabo que leva ao distribuidor de energia. Um CAT7 cabo é usado para cada dispositivo de entrada, uma vez que precisa ter blindagem, que é conectada com PE (aterramento de proteção). Pontos que têm mais de um botão, como os botões das persianas, podem ser conectados usando apenas um único CAT7 cabo.

No distribuidor de energia, cada dispositivo de entrada é conectado a uma porta do expansor de porta e GND . Devido aos resistores pull-up, o estado nas portas é ALTO por padrão. Pressionar o botão conectará a porta ao GND o que resulta em um BAIXO estado do porto. Os detectores de movimento e contatos reed também funcionam dessa forma.

Uma interrupção compartilhada o cabo está conectado a todas as placas de entrada. Este cabo é puxado por padrão. No caso de um estado alterado em qualquer um dos expansores de porta, o expansor de porta correspondente irá definir o estado da interrupção para BAIXO. Esse comportamento impede a pesquisa contínua de todos os expansores de porta usando o barramento I2C. O software no Pi2 está apenas pesquisando o GPIO correspondente. Se o estado no GPIO de interrupção foi alterado, o estado atual de cada placa de entrada é pesquisado de acordo e os eventos são disparados, se necessário.







Raspberry Pi 2


O Raspberry Pi 2 está executando o Windows 10 IoT e é montado com uma caixa personalizada para o distribuidor de energia. Ele também tem um escudo de prototipagem com um LED de status, o interrupção porta com um resistor pull-up ( 10K ), um resistor de proteção ( 1K ), E um capacitor de cerâmica ( 100NF ) para filtragem de falhas. Todos os cabos podem ser ligados por meio de um terminal de parafuso.





Sensor de temperatura e umidade


A temperatura e umidade atuais em cada sala / lugar (atualmente 10) são medidas usando um DHT22 (AOSONG). Este sensor fornece a temperatura e a umidade atuais usando um protocolo proprietário que não oferece suporte a endereçamento. Isso requer que cada sensor seja conectado a um microcontrolador. Para minha solução, decidi adicionar um Arduino Nano V3.0 como um escravo do I2C ônibus. O Arduino Nano lê os valores de todos os sensores conectados a cada 2,5 segundos e os armazena em cache localmente. Esses valores podem ser lidos no Arduino Nano depois de enviar o id da porta (0-10). É o mesmo comportamento ao ler dados de registradores usando o barramento I2C.

A temperatura e a umidade são mostradas no aplicativo da web por meio de duas visualizações diferentes.

O ícone do lado direito da umidade ( "Luftfeuchtigkeit" ) a entrada indica se há ou não um risco aumentado de desenvolvimento de mofo nas paredes. Um valor inferior a 60% é verde , menos de 70% é amarelo e acima de 70% é vermelho.

O aplicativo da web também fornece uma visão geral de todos os sensores.







Configuração de hardware


A imagem a seguir ilustra uma configuração de hardware no distribuidor de energia usando placas de entrada e saída. A fonte de alimentação 12V / 5V e as conexões N / PE não são mostradas.





Relé remoto de 433 MHz


Ao migrar e documentar o projeto no decorrer deste desafio, também desenvolvi a unidade remetente de 433Mhz que está convenientemente escondida dentro de uma caixa simples junto com os sensores de temperatura e umidade.

Este recurso torna as placas de relé opcionais. O Arduino Nano que é responsável pelo DHT22 Os sensores (Temperatura e Umidade) também estão enviando os sinais de 433Mhz. O remetente ( FS1000A ) é montado junto com o sensor de temperatura e umidade dentro de uma caixa em uma sala central da casa. Para aumentar o alcance do emissor ainda mais, ele é adicionalmente alimentado com 12V (funcionando também com 3,3, mas de curto alcance).




Um dos principais problemas com os relés remotos é que eles não estão enviando nenhuma informação de estado. Portanto, é absolutamente possível para o usuário introduzir mudanças de estado no sistema usando o controle remoto original. Para forçar a sincronização, a solução de software atualiza automaticamente o estado a cada 5 segundos. Isso mantém o estado mostrado no aplicativo da web o mais confiável possível (mas tornando inútil o uso dos controles remotos originais).

Os relés remotos podem ser usados ​​em cada automação e fornecem os mesmos recursos dos relés de uma placa de relés.

Os códigos do controle remoto de 433 MHz atualmente só podem ser configurados manualmente por meio de um circuito construído em uma placa de prototipagem. Esses códigos são então copiados para a configuração. O fritzing esboço para a placa de circuito necessária é referenciado abaixo e o Arduino esboço está localizado no repositório na pasta CK.HomeAutomation.SensorsBridge \ RemoteCodeFinder .







A caixa de areia digital para gatos


A caixa de areia para o nosso gato é colocada no depósito, que infelizmente não tem nenhuma janela para permitir a entrada de ar fresco após o uso. Devido a este problema, a caixa está conectada a um antigo não utilizado chaminé. Em frente ao tubo conectado à chaminé, há um ventilador conectado a um relé na distribuidora de energia. Um detector de movimento no almoxarifado detecta até o gato e liga o ventilador por alguns minutos.

A caixa de areia para gatos possui um ícone próprio no aplicativo web que permite controlar o ventilador remotamente.

Ao analisar os logs gerados e filtrar pelas alterações de atuador correspondentes (Azure SQL DB ou arquivo CSV), é possível rastrearmos o uso da caixa de areia do gato ao longo do tempo e, portanto, melhorar os intervalos de limpeza necessários.







Software


Antes do lançamento do Windows 10 IoT, o software era executado em um G120 da GHI Electronics usando o .NET Micro Framework na versão 4.3. Mas principalmente devido à falta de desempenho (120 MHz, 16 MB de RAM e intérprete), nem todos os recursos planejados estavam funcionando conforme planejado.

Algumas semanas atrás, comecei a migrar a base de código para ser executada como uma tarefa em segundo plano do Windows 10 IoT, enquanto adicionava recursos como a integração com o Microsoft Azure.

O repositório referenciado abaixo contém a Solução Visual Studio 2015 e todos os projetos dependentes. É tudo o que é necessário para usar o Raspberry Pi 2 como um controlador de automação residencial, ao mesmo tempo em que é aberto para extensão ao escrever drivers personalizados para outras placas de relé ou sensores.







Projetos


Os projetos da solução de software são agrupados em:
  • Aplicativo (contém o aplicativo da web)
  • Controladores (contém o projeto de inicialização do Pi e a configuração inicial)
  • SDK (contém todos os projetos compartilhados)





CK.HomeAutomation.TraceViewer


Este projeto contém um aplicativo de console que exibe mensagens de rastreamento enviadas pelo controlador (instância Pi2). Atualmente, todas as notificações são enviadas continuamente para um endereço de broadcast usando um soquete UDP. Therefore opening a port (e.g. 19227) at the firewall is required. I use the TraceViewer mainly to find bugs and/or misconfigurations.

All classes which are required to send notifications are located at the project CK.HomeAutomation.Notifications .







CK.HomeAutomation.Networking


This project contains the implementation of a basic HTTP server. The HTTP server is required for the web app and provides status information in JSON format and accepts requests with status changes.

The HTTP server is also able to host the web app. Due to different package names, the content of the web app must be manually uploaded to the destination folder using the administrative SMB share. 

Target folder: \\[IP]\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\app







CK.HomeAutomation.Controller.*


Each project in the Controllers  folder is a startup project implementing an IoT Background Task . Until a detailed documentation is provided one can use these projects (currently at use in my home) as an example.

Additionally I provide the project CK.HomeAutomation.Controller.Empty as starting point for playing around with the solution. NOTA :The controller named Cellar  which is responsible for the garden and parking lot lights is not covered in this documentation.

Before testing the solution you should be familiar with the following tasks:
  • Setting up a Raspberry Pi2 with Windows 10 IoT from scratch (https://ms-iot.github.io/content/en-US/win10/SetupRPI.htm)
  • Connect with the Raspberry Pi2 using a Microsoft PowerShell remote session (https://ms-iot.github.io/content/en-US/win10/samples/PowerShell.htm)
  • Deploying an universal windows app to the Raspberry Pi2.

The solution directory also includes a small PowerShell script called SetupRaspberryPi.ps1 to execute a common chain of commands to setup the Raspberry Pi2. It is recommended but not required that you execute the script (make sure to adjust all IP settings according to your own infrastructure )





CK.HomeAutomation.Actuators


This project provides the highest level of abstraction. The home, rooms end every actuator like push buttons, lamps, socket etc. are implemented in this project and provide special events and methods according to the features of every actuator.

Rooms can be created using a fluent API which makes the configuration easy to read and understand. 





MotionDetector - Actuator


This actuator is used to detect people and motion at the rooms. I use the motion detector BW8085 360° from Abus which is mounted at the ceiling of every room.

The implementation of a motion detector actuator provides two events. The first of the two is the MotionDetected event which is fired if motion is detected. The physical motion detector keeps the output at a HIGH level until no further motion is detected, at which point the second event DetectionCompleted  is fired.

The following image shows an entry for a motion detector in the web app. Every motion detector can be deactivated (in software only) using the web app. The red dot indicates that motion is currently detected.





Button - Actuator


This actuator represents a physical push button. The button has two events which are indicating that it was pressed. The event PressedShort  is fired if the button was pressed for a short duration (<1.5 seconds), while the event PressedLong is fired only if the button was pressed for a longer duration (> 1.5 seconds). The second event is also automatically fired if the duration (1.5 seconds) has exceeded and the push button is not released. This two events allowing buttons with multiple features.

Exemplo:

The solution also contains a VirtualButton . This button implements the same interface (IButton ) and can be "pressed" using the web app only.







Socket, Lamp, BinaryStateOutput - Actuator


The base class BinaryStateOutput is used for every actuator which supports a binary state (ON and OFF ) só. Examples for those actuators are Socket and Lamp . The base implementation provides methods for updating (ON and OFF ) or toggling the state. Buttons  can interact with objects implementing the IBinaryStateOutputActuator , this allows the addition of multiple custom actuators.

The following image shows the template for every binary state outputs. The icon on the left side is different for sockets and lamps. Custom icons like the poison bottle at the "Mückenstecker " entry can be defined using the configuration file (Configuration.js ) for the web app.





CombinedBinaryStateActuators


Every physical actuator of type BinaryStateOutput can be used to create a logical binary state actuator. One actuator must be set to "master" which is required to determine the new state if the state should be toggled. The actuator has its own ID and can be used like any other binary state output actuator (the required interface is implemented).

One important advantage of this implementation is the way state updates are handled. Usually the new state of a binary state output is directly committed to each device one by one via the I2C bus. This behavior creates short but visible delays between each actuator state update. The CombinedBinaryStateActuator  prevents this delay using internal change tracking.

Exemplo:





StateMachine - Actuator


More complex states than ON and OFF are possible to configure using the StateMachine . This actuator allows multiple states for ports (relays) or other binary output actuators.

Example with a fan:

The state machine provides methods to turn it off or moving to the next state. The state is reset to OFF if the last state of the state machine has been reached and the initial state should be applied next.

Another use case for the state machine is creating templates or "moods" for a couple of other actuators.

Example mood:

The method WithTurnOffIfStateIsAppliedTwice ensures that the state of the state machine will change to OFF if a particular trigger has been activated a second time as the configured state is still active (Example :Pressing the push button for "DeskOnly " will activate the "DeskOnly " mood. If the push button is pressed again while the "DeskOnly " mood is still active, the actuator applies the OFF state. A dedicated push button for the OFF state is not needed.).

The following image shows the template for state machines. The caption and image of each state can be changed using the configuration file of the web app.





TemperatureSensor / HumiditySensor


The values for temperature and humidity are read using the I2C sensors bridge. Both values are read from a single physical device but separated into an actuator for temperature and an actuator for humidity. The values are automatically polled every 10 seconds.







Home Automation !=Home Control


As mentioned before the importing thing is automation. Without automations, the whole solution is only one big remote for the home. This solution provides several automations:







AutomaticTurnOnAndOffAutomation


This automation sets the connected binary state outputs to ON. A push button or motion detector can be used as the trigger. It is required to specify the desired duration of the ON state. The state is set to OFF if that range exceeds. The state is automatically set to OFF if the specified range is exceeded. An optional time range can be provided in which the automation rule is enabled. Predefined ranges for "day only " or "night only " are available (requires a weather station object).

Exemplo:





AutomaticRollerShutterAutomation


This automation is used to move several roller shutters automatically according to several conditions. One of these conditions is sunrise and sunset which means that the roller shutters are automatically moving up at sunrise and moving down at sunset (requires a weather station object). It is also possible to add a diff to sunrise and sunset. According to the sunrise and sunset feature, it is possible to specify a time for "do not open before" which will ensure that the roller shutter is never opened before that point in time has been reached. Another condition is the outside temperature (also requires a weather station object), which enables the roller shutters to be closed automatically if the outside temperature exceeds a certain value like for example 28°C. This feature is intended for roof windows.

The position of the roller shutter is also tracked via time measuring. The required duration between up and fully closed must be configured.

Exemplo:

The following screenshot shows an entry for roller shutters at the web app. The progress bar over the buttons is showing the current position.





AutomaticConditionalOnAutomation


This automation is used to set the state of several binary state outputs to ON while conditions are matching. This automation is used for lamps in the garden which are only ON à noite. It is possible to specify one time range for the ON state and multiple time ranges for the OFF state. It is also possible to use sunrise and sunset for the ON state (requires a weather station object).

Exemplo:





General automation and complex conditions


The latest feature of the new implementation is a generic automation and condition framework. The generic automations are designed to execute custom actions if the configured conditions are met. This is checked every time a trigger is invoked via a push button, motion detector, interval or any other code. 





Weather station


Many of the automations and conditions are depend on environment conditions like the current weather, sunrise and sunset times, outside temperature or humidity. All of these information is currently provided every 60 seconds by a virtual weather station backed by WebApi of OpenWeatherMap. The virtual weather station is implemented using the interface IWeatherStation , this makes it easy to seamlessly integrate physical stations located in garden.







CK.HomeAutomation.Hardware


This project contains the drivers for all currently supported input and output devices. Specifically the relay boards, input boards from CCTools and 433Mhz remote switches. The driver and source code of the Arduino Nano (sensor bridge and 433Mhz sender) is included too. All higher level objects like actuators and automations are implemented against interfaces to add an abstraction layer to the concrete bare to the metal hardware classes. This makes it easy to later add further drivers for other boards and sensors.







CK.HomeAutomation.Telemetry


This project contains two components. The first one is a CSV writer which writes every changed state to the "LocalState" directory of the package. This file can be downloaded from the Pi2 using the administrative SMB share: \\192.168.1.15\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\BinaryStateOutputActuatorChanges.csv .

Example content of the the CSV file:

The second component is the AzureEventHubPublisher . This component sends events for any state has change and the values of any sensor change to an Microsoft Azure EventHub . Events are also generated if push buttons are pressed or motion is detected. The solution contains the SQL scripts for creating the required SQL database tables and the required query for a StreamAnalytics job (in folder #Azure).

Every changed actuator state generates to entries at the Azure SQL database. The first entry contains the START event and the new state. The second entry contains the END  event with the total duration of that state in seconds. 

I already created some reports using a free Microsoft PowerBI conta.





WebApp


The software solution contains the project CK.HomeAutomation.App . This project is a web app building on top of AngularJS , jQuery and Bootstrap . The room configuration is read from the controller (Pi2) and the UI is generated according to the existing rooms.

The web app can be opened directly from the file system using the index.html  file or uploaded to a web server. The file Configuration.js  is used to configure and translate the web app. The IP address of the Controller (Pi2 instance) must be set in the configuration file.

The web app can be added to the home screen of iOS only if it is hosted at a web server (I am personally using a BananaPi with nginx). Adding a web app to the home screen is described here: http://www.tech-recipes.com/rx/44908/ios-add-website-shortcut-to-home-screen/

Hosting the web app at the Raspberry Pi2 is already in progress but currently not supported completely.





Terminal




The web app also runs at the living room. An old iPad 3 is used as the terminal.





Futuro


The solution described above is still under development and will get more features in the future. Some of the planned are: 
  • Support for actuators based on infra red signals (like an RGB-LED-Strip).
  • Support for XML based configuration files in addition to code based configuration.
  • Implementation of a dedicated tablet web app with a different layout.
  • Support for reed switches for windows which are showing the state at the web app.
  • Libraries with drivers for devices from other manufacturers (like 433Mhz remote switches).
  • Controlling of the valves of the heating system (outputs and temperature reading already implemented).
  • Alarm system which sends notifications if motion is detected or windows are opened (requires implementation of point 4).
  • A hardware weather station.
  • Automatically closing roller shutters if the window is open and rain is detected (the currently used weather API already provides the required information).
  • More Unit Tests.
  • Detailed documentation at the GitHub wiki.
  • Animations (this feature was already implemented using NETMF but I was not able to migrate it completely within the time range of the IoT contest)

If you are interested to contribute to this project (hardware, software, documentation or anything else), feel free to contact me.

Código

CK.HomeAutomation
This repository contains the complete solution including the SDK, WebApp and my personal configuration.https://github.com/chkr1011/CK.HomeAutomation.git

Esquemas

This is the circuit which us required to read the 433Mhz codes from the remote control. The sketch contains the circuit board of the DHT22 sensor which is mounted at every room. The shield contains a status LED and screw terminals for the I2C bus and the interrupt. This is a regular temperature and humidity sensor which conains a 433Mhz sender. Only one is required for the entire home.

Processo de manufatura

  1. Registrador de temperatura Raspberry Pi
  2. Monitoramento remoto do clima usando Raspberry Pi
  3. SensorTag para Blynk usando Node-RED
  4. Sensor de movimento usando Raspberry Pi
  5. Monitore a temperatura de sua casa usando o Raspberry Pi
  6. Windows 10 IoT Core - Leitura dos pulsos de frequência cardíaca
  7. RASPBERRY PI HOME AUTOMATION
  8. Windows 10 IoT Core no Raspberry Pi 2 - Dados do sensor Adafruit
  9. Windows 10 IoT Core e SHT15
  10. Windows 10 IoT Core para Raspberry Pi 3 Modelo B +