Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Automatización del hogar con Raspberry Pi 2 (Windows 10 IoT Core)

Componentes y suministros

Raspberry Pi 2 Modelo B
× 1
HSRel5 - I²C-Bus-Relaisplatine
Placa de relés con 5 relés, 3 GPIO y conexión I2C, admite montaje en distribuidores de energía, según PCF8574 .
× 1
HSRel8 (+8) - 8fach-Relaisplatine
Placa de relés con 8 relés, 8 GPIO y conexión I2C, admite montaje en distribuidores de energía, basado en MAX7311 .
× 1
I2C-Port 16 HS 16Bit-Porterweiterung
Placa de expansión de puerto con 16 GPIO y conexión I2C, admite montaje en distribuidores de energía, basado en MAX7311.
× 1
DR-60-12 Hutschienen Netzteil 12V / 54W
Fuente de alimentación de 12V para todos los dispositivos
× 1
Hutschienen Netzteil 15W 5V 3A; MeanWell, DR-30-5
Fuente de alimentación de 5 V para todos los dispositivos
× 1
Prototyping Shield para Raspberry Pi
Se usa para agregar un LED para indicación de estado y una entrada de interrupción protegida para las tarjetas de entrada. También proporciona terminal de tornillo de 3 polos para conexiones confiables.
× 1
I2C-Buffer HS
Cambiador de nivel I2C que incluye las resistencias pull-up requeridas, etc., admite el montaje en distribuidores de energía, basado en P82B96 .
× 1
Arduino Nano R3
Se utiliza como puente entre los sensores DHT22 y el bus I2C.
× 1
Remitente y receptor de 433Mhz
Para compatibilidad con relés inalámbricos.
× 1

Aplicaciones y servicios en línea

Microsoft Visual Studio 2015
Software Arduino (IDE)

Acerca de este proyecto

Actualización 2: El proyecto sigue creciendo y ya se han implementado muchas funciones nuevas (como un Cliente de Twitter y la integración de Telegram-Bots). Consulte el repositorio de GitHub y las notas de la versión para obtener más información sobre las nuevas funciones (o síganme en Twitter). Espero poder actualizar la página de este proyecto lo antes posible.

Actualización 1: Primero, quiero decir "gracias" a todos los que han leído esta página del proyecto y me han dado su opinión (ya sea en privado o en los comentarios). Fue muy divertido presentar este proyecto en Maker Faire Rome 2015 y Microsoft Technical Summit 2015 y los eventos futuros aún están esperando. Agregué algunas imágenes de los eventos.

Estoy desarrollando una solución de domótica durante los últimos 3 años. Esto incluye la instalación física del hardware y el desarrollo del software.

Características

En este momento, se admiten las siguientes funciones.

Entradas

  • Pulsador (BUSCH-JAEGER 2020US)
  • Detector de movimiento (Abus 360 ° BW8085)
  • Temperatura ambiente (mi propio dispositivo basado en DHT22)
  • Humedad de la habitación (mi propio dispositivo basado en DHT22)
  • Estado de la ventana (abierta o cerrada mediante el contacto de lengüeta Honeywell Slimline)
  • Amanecer, atardecer, temperatura y humedad (tomado de OpenWeatherMap)

Salidas

  • Lámpara (techo) (accionada por relé, sin atenuación)
  • Toma (impulsada por relé, sin atenuación)
  • Persiana enrollable (ventana) (accionada por dos relés para subir y bajar)
  • Ventilador (techo) (impulsado por 3 relés para cada marcha)
  • Ventilador de baño (impulsado por 2 relés para cada equipo)

Otras funciones

  • La solución contiene una aplicación web para iOS, Android, Windows, Mac OSX que se puede utilizar para controlar los actuadores virtuales. La configuración de la aplicación web se carga desde el controlador (instancia de Windows IoT).
  • Todos los eventos generados por entradas y salidas pueden publicarse en un Centro de eventos de Microsoft Azure y / o registrarse en un archivo CSV.
  • El controlador (instancia de Windows IoT) proporciona un seguimiento basado en UDP que se puede mostrar mediante una aplicación de consola. El seguimiento es muy detallado y se puede utilizar para encontrar errores o actuadores conectados incorrectamente, etc.
  • Se pueden agregar actuadores personalizados para admitir más hardware.
  • Las salidas físicas se pueden combinar con salidas lógicas.
  • Animaciones (las salidas físicas dentro de una salida lógica se pueden animar).
  • Todo el sistema está diseñado para ser lo más resistente posible a errores / fallas de hardware. Incluso si se desconectan / rompen varios componentes centrales, el sistema restante sigue funcionando según lo previsto (por ejemplo, algunas de las placas de la sala de estar no son accesibles debido a una falla de hardware, pero el baño sigue funcionando según lo previsto)
  • Soporte para relés remotos de 433Mhz.


El concepto

Cuando renovamos nuestra casa hace 3 años, decidí implementar mi propia solución de domótica. La idea principal detrás de la implementación es controlar todo desde el distribuidor de energía mediante relés. Debido a esta decisión, cada botón, lámpara, enchufe, persiana enrollable, etc. debe conectarse mediante su propio cable a través del actuador al distribuidor de energía. No se requiere un bus como KNX o EIB.

Nota :Debido al hecho de que vivo en Alemania, todos los componentes están diseñados para funcionar con la fuente de alimentación de 230V. Otros tipos de fuentes de alimentación pueden necesitar modificaciones adicionales. La instalación de cables de 230V (NYM), nuevos distribuidores de energía, etc. la realiza mi preferido electricista y no solo.


Hardware

El nuevo distribuidor de energía

Instalamos un nuevo distribuidor de energía que se encarga de las dos plantas de nuestra casa.

El bus I2C

En general, el bus I2C no está diseñado para funcionar con cables más largos, pero es posible aumentar la longitud máxima posible usando algunos trucos (no sé el motivo de cada optimización, pero estas son las cosas que encontré en la WWW).

  • Conduce el autobús a 5V. El RaspberryPi impulsa el bus a 3,3 V, por lo que se requiere un cambiador de nivel I2C (P82B96). Este es el primer (y único) dispositivo que se agrega a RaspberryPi 2 (llamado Controlador en mi solución). El cable para esta conexión debe ser lo más corto posible. La especificación permite ejecutar el bus a hasta 15 V, pero los esclavos como PCF8574 solo admiten un máximo de 5 V.
  • Utilice un cable de par trenzado como CAT7. Es importante utilizar un par para SDA y GND y otro con SCL y GND. No utilice un solo cable de par trenzado para SDA y SCL. Asegúrese también de que el blindaje del cable esté conectado a PE (en Alemania).
  • Prefiera un cable trenzado. Esto hace que sea más complejo conectar todo, pero aumentará la longitud del cable.
  • Agregue resistencias pull-up con 10k al final del bus para SDA y SCL.
  • Limite la velocidad del bus a 100 kbits (modo estándar) incluso si los esclavos admiten velocidades más rápidas.
  • Incluya un búfer I2C (P82B96). El IC se puede usar como un cambiador de nivel o se puede usar para separar el bus en segmentos físicos. Usé uno de estos búferes dentro del distribuidor de energía. El búfer debe colocarse en el medio del autobús.

Este bus I2C optimizado se utiliza para conectar todas las placas dentro del distribuidor de energía.


Las placas de relés (salidas)

CCTools de Alemania vende placas con relés que se pueden conectar al bus I2C. También es posible comprar las placas como piezas individuales o solo como placa de circuito. Esto permite reemplazar el expansor de puertos con alternativas compatibles con pines. Lo primero es necesario porque las direcciones disponibles de los dispositivos son limitadas. Agregué soportes para el relé y los circuitos integrados para poder reemplazarlos más fácilmente si uno de ellos está roto. Otro punto es que puedo usar un PCA9555D en lugar de un MAX7311 porque el PCA9555D es más barato y se puede pedir más fácilmente (en Alemania).

El HSRel5 La placa de relés tiene 5 relés y 3 GPIO . Todos los puertos necesarios se toman del PCF8574 interno Expansor de puerto de 8 bits que tiene 8 GPIO . Los primeros 5 se utilizan para los relés y los últimos 3 se pueden utilizar para otras salidas. Los relés requieren 12 V para funcionar, lo que no puede proporcionar el expansor de puerto (que solo puede controlar un LED). Entonces, se necesita un controlador de relé. Los relés están conectados con el controlador de relé y, a cambio, el controlador de relé está conectado a un inversor. Este inversor es necesario porque el estado de todos los puertos en el expansor de puertos es ALTO después de que el IC se enciende. Esto cerrará todos los relés, lo cual es un comportamiento involuntario.

Conclusión: Si el primer relé debe cerrarse, es necesario enviar 00011110 (MSB) al expansor de puertos utilizando el bus I2C. Esto establecerá el primer puerto en BAJO (los otros puertos también se actualizan). El primer puerto del expansor de puertos está conectado a la primera entrada del inversor. Y la primera salida del inversor está conectada a la primera entrada del controlador de relé (ULN2803). Como última parte de la cadena, el relé está conectado a la primera salida del controlador de relé.

Otra placa de relés de CCTools es el HSRel8 (+8) que usa un MAX7311 como el expansor de puertos y contiene 8 relés y 8 GPIO . Esta placa no necesita un inversor de hardware. Esto significa que un ALTO estado para un relevo en el HSRel5 significa APAGADO y un ALTO estado en el HSRel8 (+8) significa ENCENDIDO. Este comportamiento diferente lo maneja el controlador de esos dispositivos y es parte del software.

Cada lámpara, enchufe, etc. está conectado a uno de estos relés. En mi casa actualmente uso 8 HSRel5 y 4 HSRel8 . También utilizo placas con relés de estado sólido y otros tipos de relés, pero para ser breve no entraré en detalles aquí. El HSRel5 es la placa de relés más simple. Pero el PCF8574 solo permite 8 direcciones distintas. El PCF8574 A es el mismo expansor de puerto pero tiene 8 direcciones diferentes. Esto significa que 16 HSRel5 se puede conectar al I2C autobús.


Los expansores de puertos (entradas)

Los botones, detectores de movimiento e interruptores de lengüeta (para las ventanas) están conectados a una placa llamada I2C-Port16 HS de CCTools . Esta placa contiene un expansor de puerto ( MAX7311 ), resistencias pull-up (5V, 10K) para cada puerto y condensadores cerámicos ( 100NF ). La placa se puede utilizar con una fuente de alimentación de 12V o 5V. Los condensadores cerámicos se utilizan para filtrar el ruido (filtro de fallas).

Cada dispositivo de entrada (botón, detector de movimiento, interruptor de lengüeta) tiene su propio cable que conduce al distribuidor de energía. Un CAT7 El cable se utiliza para todos los dispositivos de entrada, ya que debe tener un blindaje, que está conectado con PE (tierra de protección). Los puntos que tienen más de un botón, como los botones de las persianas enrollables, se pueden conectar con un solo CAT7 cable.

En el distribuidor de energía, cada dispositivo de entrada está conectado a un puerto del expansor de puertos y GND . Debido a las resistencias pull-up, el estado en los puertos es HIGH por defecto. Al presionar el botón se conectará el puerto a GND lo que da como resultado un BAJO estado del puerto. Los detectores de movimiento y los contactos de lengüeta también funcionan de esa manera.

Una interrupción compartida El cable está conectado a todas las tarjetas de entrada. Este cable está tirado hacia arriba de forma predeterminada. En el caso de un cambio de estado en cualquiera de los expansores de puerto, el expansor de puerto correspondiente establecerá el estado de la interrupción a BAJO. Este comportamiento evita el sondeo continuo de todos los expansores de puertos que utilizan el bus I2C. El software del Pi2 solo está sondeando el GPIO correspondiente. Si se ha cambiado el estado en el GPIO de interrupción, el estado actual de cada placa de entrada se consulta en consecuencia y los eventos se activan si es necesario.


Frambuesa Pi 2

La Raspberry Pi 2 ejecuta Windows 10 IoT y está montada con una carcasa personalizada para el distribuidor de energía. También tiene un escudo de creación de prototipos con un LED de estado, la interrupción puerto con una resistencia pull-up ( 10K ), una resistencia de protección ( 1K ) Y un condensador cerámico ( 100NF ) para el filtrado de fallos. Todos los cables se pueden conectar mediante un terminal de tornillo.

Sensor de temperatura y humedad

La temperatura y la humedad actuales en cada habitación / lugar (actualmente 10) se miden usando un DHT22 (AOSONG). Este sensor proporciona la temperatura y la humedad actuales mediante un protocolo patentado que no admite direccionamiento. Esto requiere que cada sensor esté conectado a un microcontrolador. Para mi solución, decidí agregar un Arduino Nano V3.0 como esclavo del I2C autobús. El Arduino Nano lee los valores de todos los sensores conectados cada 2,5 segundos y los almacena en caché localmente. Estos valores se pueden leer desde el Arduino Nano después de enviar la identificación del puerto (0-10). Es el mismo comportamiento cuando se leen datos de registros usando el bus I2C.

La temperatura y la humedad se muestran en la aplicación web usando dos vistas diferentes.

El icono en el lado derecho de la humedad ( "Luftfeuchtigkeit" ) indica si existe o no un mayor riesgo de crecimiento de moho en las paredes. Un valor inferior al 60% es verde , menos del 70% es amarillo y por encima del 70% es rojo .

La aplicación web también proporciona una descripción general de todos los sensores.


Configuración de hardware

La siguiente imagen ilustra una configuración de hardware en el distribuidor de energía utilizando tarjetas de entrada y salida. La fuente de alimentación de 12V / 5V y las conexiones N / PE no se muestran.

Relé remoto 433Mhz

Mientras migraba y documentaba el proyecto en el transcurso de este desafío, también desarrollé la unidad emisora ​​de 433 Mhz que está convenientemente escondida dentro de una caja simple junto con los sensores de temperatura y humedad.

Esta característica hace que las tarjetas de relés sean opcionales. El Arduino Nano que es responsable del DHT22 Los sensores (de temperatura y humedad) también envían señales de 433 Mhz. El remitente ( FS1000A ) se monta junto con el sensor de temperatura y humedad dentro de una caja en una habitación central de la casa. Para aumentar aún más el alcance del transmisor, se alimenta adicionalmente con 12V (también funciona con 3.3 pero de corto alcance).


Uno de los principales problemas con los relés remotos es que no envían información de estado. Por lo tanto, es absolutamente posible que el usuario introduzca cambios de estado en el sistema utilizando el control remoto original. Para forzar la sincronización, la solución de software actualiza automáticamente el estado cada 5 segundos. Esto mantiene el estado que se muestra en la aplicación web lo más confiable posible (pero hace inútil el uso de los controles remotos originales).

Los relés remotos se pueden usar dentro de cada automatización y proporcionan las mismas características que los relés de una placa de relés.

Los códigos del control remoto de 433Mhz actualmente solo se pueden configurar manualmente a través de un circuito construido en una placa de prototipos. Luego, esos códigos se copian en la configuración. El fritzing el boceto de la placa de circuito requerida se hace referencia a continuación y el Arduino sketch se encuentra en el repositorio en la carpeta CK.HomeAutomation.SensorsBridge \ RemoteCodeFinder .


La caja de arena digital para gatos

La caja de arena para gatos para nuestro gato se coloca en la sala de almacenamiento, que lamentablemente carece de ventana para dejar entrar un poco de aire fresco después de su uso. Debido a este problema, la caja está conectada a un antiguo sin usar tubo. Delante del tubo que está conectado a la chimenea, hay un ventilador conectado a un relé en el distribuidor de energía. Un detector de movimiento en el almacén detecta incluso al gato y enciende el ventilador durante algunos minutos.

La caja de arena para gatos tiene su propio icono en la aplicación web que permite controlar el ventilador de forma remota.

Mediante el análisis de los registros generados y el filtrado por los cambios de actuador correspondientes (archivo Azure SQL DB o CSV), es posible realizar un seguimiento del uso de la caja de arena del gato a lo largo del tiempo y, por lo tanto, mejorar los intervalos de limpieza requeridos.


Software

Antes del lanzamiento de Windows 10 IoT, el software se ejecutaba en un G120 de GHI electronics utilizando .NET Micro Framework en la versión 4.3. Pero principalmente debido a la falta de rendimiento (120 Mhz, 16 MB de RAM e intérprete), no todas las funciones planificadas funcionaron como estaba previsto.

Hace un par de semanas comencé a migrar el código base para ejecutarlo como una tarea en segundo plano de Windows 10 IoT, al tiempo que agregué características como la integración de Microsoft Azure.

El repositorio al que se hace referencia a continuación contiene la solución Visual Studio 2015 y todos los proyectos dependientes. Es todo lo que se requiere para usar la Raspberry Pi 2 como un controlador de automatización del hogar, mientras está abierto a la extensión escribiendo controladores personalizados para otras placas de relés o sensores.


Proyectos

Los proyectos de la solución de software se agrupan en:

  • Aplicación (contiene la aplicación web)
  • Controladores (contiene el proyecto de inicio para el Pi y la configuración del hogar)
  • SDK (contiene todos los proyectos compartidos)

CK.HomeAutomation.TraceViewer

Este proyecto contiene una aplicación de consola que muestra los mensajes de seguimiento enviados por el controlador (instancia Pi2). Actualmente, todas las notificaciones se envían continuamente a una dirección de transmisión mediante un conector UDP. Por lo tanto, es necesario abrir un puerto (por ejemplo, 19227) en el firewall. Utilizo TraceViewer principalmente para encontrar errores y / o configuraciones incorrectas.

Todas las clases necesarias para enviar notificaciones se encuentran en el proyecto CK.HomeAutomation.Notifications .


CK.HomeAutomation.Networking

Este proyecto contiene la implementación de un servidor HTTP básico. El servidor HTTP es necesario para la aplicación web y proporciona información de estado en formato JSON y acepta solicitudes con cambios de estado.

El servidor HTTP también puede alojar la aplicación web. Debido a los diferentes nombres de paquetes, el contenido de la aplicación web debe cargarse manualmente en la carpeta de destino mediante el recurso compartido SMB administrativo.

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


CK.HomeAutomation.Controller. *

Cada proyecto en los Controladores la carpeta es un proyecto de inicio implementar una Tarea en segundo plano de IoT . Hasta que se proporcione una documentación detallada, uno puede usar estos proyectos (actualmente en uso en mi hogar) como ejemplo.

Además proporciono el proyecto CK.HomeAutomation.Controller.Empty como punto de partida para jugar con la solución. NOTA :El controlador llamado Cellar que es responsable de las luces del jardín y del estacionamiento no está cubierto en esta documentación.

Antes de probar la solución, debe estar familiarizado con las siguientes tareas:

  • Configuración de una Raspberry Pi2 con Windows 10 IoT desde cero (https://ms-iot.github.io/content/en-US/win10/SetupRPI.htm)
  • Conéctese con Raspberry Pi2 mediante una sesión remota de Microsoft PowerShell (https://ms-iot.github.io/content/en-US/win10/samples/PowerShell.htm)
  • Implementar una aplicación universal de Windows en Raspberry Pi2.

El directorio de la solución también incluye un pequeño PowerShell secuencia de comandos llamada SetupRaspberryPi.ps1 para ejecutar una cadena común de comandos para configurar la Raspberry Pi2. Se recomienda, pero no es obligatorio, que ejecute el script ( asegúrese de ajustar toda la configuración de IP de acuerdo con su propia infraestructura ).

CK.HomeAutomation.Actuators

Este proyecto proporciona el más alto nivel de abstracción. El hogar, las habitaciones y cada actuador como pulsadores, lámparas, enchufes, etc. se implementan en este proyecto y proporcionan eventos y métodos especiales de acuerdo con las características de cada actuador.

Las salas se pueden crear utilizando una API fluida que hace que la configuración sea fácil de leer y comprender.

MotionDetector - Actuador

Este actuador se utiliza para detectar personas y movimiento en las habitaciones. Utilizo el detector de movimiento BW8085 360 ° de Abus que se monta en el techo de cada habitación.

La implementación de un actuador detector de movimiento proporciona dos eventos. El primero de los dos es el MotionDetected evento que se dispara si se detecta movimiento. El detector de movimiento físico mantiene la salida en ALTA nivel hasta que no se detecte más movimiento, momento en el que el segundo evento DetectionCompleted es despedido.

La siguiente imagen muestra una entrada para un detector de movimiento en la aplicación web. Todos los detectores de movimiento se pueden desactivar (solo en software) mediante la aplicación web. El punto rojo indica que se ha detectado movimiento en ese momento.

Botón - Actuador

Este actuador representa un pulsador físico. El botón tiene dos eventos que indican que se presionó. El evento PressedShort se dispara si el botón se presionó durante un período breve (<1,5 segundos), mientras que el evento PressedLong se dispara solo si el botón se presionó durante más tiempo (> 1,5 segundos). El segundo evento también se dispara automáticamente si se ha excedido la duración (1,5 segundos) y no se suelta el botón pulsador. Estos dos eventos permiten botones con múltiples funciones.

Ejemplo:

La solución también contiene un VirtualButton . Este botón implementa la misma interfaz ( IButton ) y se puede "presionar" usando solo la aplicación web.


Zócalo, lámpara, salida de estado binario:actuador

La clase base BinaryStateOutput se utiliza para cada actuador que admita un estado binario ( ON y APAGADO ) solo. Ejemplos de esos actuadores son Socket y Lámpara . La implementación base proporciona métodos para actualizar ( ON y APAGADO ) o alternar el estado. Botones puede interactuar con objetos que implementan el IBinaryStateOutputActuator , esto permite la adición de múltiples actuadores personalizados.

La siguiente imagen muestra la plantilla para cada salida de estado binario. El icono del lado izquierdo es diferente para enchufes y lámparas. Iconos personalizados como la botella de veneno en " Mückenstecker "La entrada se puede definir utilizando el archivo de configuración ( Configuration.js ) para la aplicación web.

CombinedBinaryStateActuators

Cada actuador físico de tipo BinaryStateOutput se puede utilizar para crear un actuador de estado binario lógico. Un actuador debe configurarse como "maestro", que es necesario para determinar el nuevo estado si el estado debe cambiarse. El actuador tiene su propia ID y se puede utilizar como cualquier otro actuador de salida de estado binario (la interfaz requerida está implementada).

Una ventaja importante de esta implementación es la forma en que se manejan las actualizaciones de estado. Por lo general, el nuevo estado de una salida de estado binario se compromete directamente con cada dispositivo, uno por uno, a través del bus I2C. Este comportamiento crea retrasos breves pero visibles entre cada actualización del estado del actuador. El CombinedBinaryStateActuator evita este retraso mediante el seguimiento de cambios interno.

Ejemplo:

StateMachine - Actuador

Estados más complejos que ON y APAGADO 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 Expresar. 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 Expresar. 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).

Example:

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.

Example:

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 Por la noche. It is possible to specify one time range for the ON state and multiple time ranges for the OFF Expresar. It is also possible to use sunrise and sunset for the ON state (requires a weather station object).

Example:

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 base de datos. 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 cuenta.

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.

Proceso de manufactura

  1. Registrador de temperatura Raspberry Pi
  2. Monitoreo remoto del clima usando Raspberry Pi
  3. SensorTag a Blynk usando Node-RED
  4. Sensor de movimiento con Raspberry Pi
  5. Controle la temperatura de su hogar usando su Raspberry Pi
  6. Windows 10 IoT Core:lectura de pulsos de frecuencia cardíaca
  7. RASPBERRY PI HOME AUTOMATION
  8. Windows 10 IoT Core en Raspberry Pi 2 - Datos del sensor Adafruit
  9. Windows 10 IoT Core y SHT15
  10. Windows 10 IoT Core para Raspberry Pi 3 Modelo B +
  11. Robot que usa Raspberry Pi y Bridge Shield