산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Raspberry Pi 2(Windows 10 IoT Core)를 사용한 홈 자동화

구성품 및 소모품

라즈베리 파이 2 모델 B
× 1
HSRel5 - I²C-버스-릴레플라틴
릴레이 5개, GPIO 3개 및 I2C 연결이 있는 릴레이 보드, PCF8574 기반 전원 분배기 장착 지원 .
× 1
HSRel8(+8) - 8fach-Relaisplatine
릴레이 8개, GPIO 8개 및 I2C 연결이 있는 릴레이 보드, MAX7311 기반 전원 분배기 장착 지원 .
× 1
I2C-Port 16 HS 16Bit-Porterweiterung
16개의 GPIO 및 I2C 연결이 있는 포트 확장기 보드는 MAX7311을 기반으로 전원 분배기에서 장착을 지원합니다.
× 1
DR-60-12 Hutschienen Netzteil 12V/54W
모든 장치용 12V 전원 공급 장치
× 1
Hutschienen Netzteil 15W 5V 3A; MeanWell, DR-30-5
모든 장치를 위한 5V 전원 공급 장치
× 1
Raspberry Pi용 프로토타이핑 실드
상태 표시용 LED와 입력 보드용 보호 인터럽트 입력을 추가하는 데 사용됩니다. 또한 안정적인 연결을 위해 3극 나사 단자를 제공합니다.
× 1
I2C 버퍼 HS
필수 풀업 저항 등을 포함하는 I2C 레벨 시프터, P82B96 기반 전원 분배기 장착 지원 .
× 1
Arduino Nano R3
DHT22 센서와 I2C 버스 사이의 브리지로 사용됩니다.
× 1
433Mhz 발신자 및 수신자
무선 릴레이 지원용
× 1

앱 및 온라인 서비스

Microsoft Visual Studio 2015
Arduino 소프트웨어(IDE)

이 프로젝트 정보

업데이트 2: 이 프로젝트는 여전히 성장하고 있으며 많은 새로운 기능이 이미 구현되어 있습니다(예:Twitter-Client 및 Telegram-Bots 통합). 새 기능에 대해 자세히 알아보려면 GitHub 저장소 및 출시 노트를 확인하세요(또는 Twitter에서 저를 팔로우하세요). 가능한 한 빨리 이 프로젝트 페이지를 업데이트할 수 있기를 바랍니다.

업데이트 1: 먼저 이 프로젝트 페이지를 읽고 피드백을 준 모든 사람에게 "감사합니다"라고 말하고 싶습니다(비공개 또는 댓글). Maker Faire Rome 2015 및 Microsoft Technical Summit 2015에서 이 프로젝트를 발표하는 것은 매우 즐거웠으며 향후 이벤트가 아직 기다리고 있습니다. 이벤트 사진을 추가했습니다.

저는 지난 3년 동안 홈 자동화 솔루션을 개발 중입니다. 여기에는 하드웨어의 물리적 설치 및 소프트웨어 개발이 포함됩니다.

기능

현재 지원되는 기능은 다음과 같습니다.

입력

<울>
  • 푸시 버튼(BUSCH-JAEGER 2020US)
  • 동작 감지기(Abus 360° BW8085)
  • 실온(DHT22 기반 내 장치)
  • 실내 습도(DHT22 기반 내 장치)
  • 창 상태(Honeywell Slimline 리드 접점을 사용하여 열리거나 닫힘)
  • 일출, 일몰, 온도 및 습도(OpenWeatherMap에서 가져옴)
  • 출력

    <울>
  • 램프(천장)(릴레이로 구동, 디밍 없음)
  • 소켓(릴레이로 구동, 디밍 없음)
  • 롤러 셔터(창)(2개의 릴레이로 상하 구동)
  • 팬(천장)(모든 기어에 대해 3개의 릴레이로 구동)
  • 욕실 팬(모든 장비에 대해 2개의 릴레이로 구동)
  • 기타 기능

    <울>
  • 이 솔루션에는 가상 액추에이터를 제어하는 ​​데 사용할 수 있는 iOS, Android, Windows, Mac OSX용 웹 앱이 포함되어 있습니다. 웹 앱의 구성은 컨트롤러(Windows IoT 인스턴스)에서 로드됩니다.
  • 입력 및 출력에 의해 생성된 모든 이벤트는 Microsoft Azure Event Hub에 게시하거나 CSV 파일에 기록할 수 있습니다.
  • 컨트롤러(Windows IoT 인스턴스)는 콘솔 애플리케이션을 사용하여 표시할 수 있는 UDP 기반 추적을 제공합니다. 추적은 매우 상세하며 버그 또는 잘못 연결된 액추에이터 등을 찾는 데 사용할 수 있습니다.
  • 더 많은 하드웨어를 지원하기 위해 맞춤형 액추에이터를 추가할 수 있습니다.
  • 물리적 출력을 논리적 출력과 결합할 수 있습니다.
  • 애니메이션(논리적 출력 내의 물리적 출력에 애니메이션을 적용할 수 있음).
  • 전체 시스템은 가능한 한 오류/하드웨어 오류에 강하도록 설계되었습니다. 여러 핵심 구성 요소의 연결이 끊기거나 고장난 경우에도 나머지 시스템은 여전히 ​​의도한 대로 작동합니다(예:하드웨어 오류로 인해 거실의 일부 보드에 연결할 수 없지만 욕실은 여전히 ​​의도한 대로 작동함).
  • 433Mhz 원격 릴레이 지원

  • 개념

    3년 전에 집을 개조하면서, 나는 나만의 홈 오토메이션 솔루션을 구현하기로 결정했습니다. 구현의 기본 아이디어는 릴레이를 사용하여 전원 분배기에서 모든 것을 제어하는 ​​것입니다. 이 결정으로 인해 모든 버튼, 램프, 소켓, 롤러 셔터 등은 자체 케이블로 액추에이터를 통해 전원 분배기에 연결해야 합니다. KNX 또는 EIB와 같은 버스는 필요하지 않습니다.

    참고 :독일에 거주하고 있기 때문에 모든 부품은 230V 전원 공급 장치와 함께 작동하도록 설계되었습니다. 다른 종류의 전원 공급 장치는 추가 수정이 필요할 수 있습니다. 230V 케이블(NYM), 새 전원 분배기 등의 설치는 내가 선호하는 사람이 수행합니다. 혼자가 아니라 전기 기술자입니다.


    하드웨어

    새로운 전원 분배기

    우리 집의 2개 층을 담당하는 새로운 전원 분배기를 설치했습니다.

    I2C 버스

    일반적으로 I2C 버스는 더 긴 케이블에서 작동하도록 설계되지 않았지만 몇 가지 트릭을 사용하여 가능한 최대 길이를 늘릴 수 있습니다(모든 최적화의 이유는 모르지만 WWW에서 찾은 것입니다).

    <울>
  • 5V에서 버스를 운전하십시오. RaspberryPi는 3.3V에서 버스를 구동하므로 I2C 레벨 시프터(P82B96)가 필요합니다. 이것은 RaspberryPi 2(내 솔루션에서는 Controller라고 함)에 추가된 최초의(유일한) 장치입니다. 이 연결을 위한 케이블은 가능한 한 짧아야 합니다. 사양에서는 최대 15V에서 버스를 실행할 수 있지만 PCF8574와 같은 슬레이브는 최대 5V만 지원합니다.
  • CAT7과 같은 트위스트 페어 케이블을 사용합니다. 한 쌍은 SDA&GND에 사용하고 다른 한 쌍은 SCL&GND에 사용하는 것이 중요합니다. SDA&SCL에 단일 트위스트 페어 케이블을 사용하지 마세요. 또한 케이블의 차폐가 PE(독일)에 연결되어 있는지 확인합니다.
  • 연선 케이블을 선호합니다. 이렇게 하면 모든 것을 연결하는 것이 더 복잡해 지지만 케이블 길이가 늘어납니다.
  • SDA 및 SCL용 버스 끝에 10k의 풀업 저항을 추가합니다.
  • 슬레이브가 더 빠른 속도를 지원하더라도 버스 속도를 100kbits(표준 모드)로 제한합니다.
  • I2C 버퍼(P82B96)를 포함합니다. IC는 레벨 시프터로 사용하거나 물리적 세그먼트에서 버스를 분리하는 데 사용할 수 있습니다. 전원 분배기 내에서 이 버퍼 중 하나를 사용했습니다. 버퍼는 버스 중앙에 위치해야 합니다.
  • 이 최적화된 I2C 버스는 전원 분배기 내의 모든 보드를 연결하는 데 사용됩니다.


    릴레이 보드(출력)

    CC도구 독일에서 I2C 버스에 연결할 수 있는 릴레이가 있는 보드를 판매합니다. 기판을 개별 부품 또는 회로 기판으로만 구매하는 것도 가능합니다. 이를 통해 포트 확장기를 핀 호환 가능한 대안으로 교체할 수 있습니다. 장치의 사용 가능한 주소가 제한되어 있기 때문에 전자가 필요합니다. 릴레이와 IC용 홀더를 추가하여 하나가 고장났을 때 쉽게 교체할 수 있도록 했습니다. 또 다른 요점은 PCA9555D MAX7311 대신 PCA9555D 더 저렴하고 더 쉽게 주문할 수 있습니다(독일).

    HSRel5 릴레이 보드에는 5개의 릴레이와 3개의 GPIO가 있습니다. . 모든 필수 포트는 내부 PCF8574에서 가져옵니다. 8개의 GPIO가 있는 8비트 포트 확장기 . 처음 5개는 릴레이에 사용되고 마지막 3개는 다른 출력에 사용할 수 있습니다. 릴레이는 포트 확장기(LED만 구동할 수 있음)에서 제공할 수 없는 작동을 위해 12V가 필요합니다. 따라서 릴레이 드라이버가 필요합니다. 릴레이는 릴레이 드라이버와 연결되고 그 대가로 릴레이 드라이버는 인버터에 연결됩니다. 포트 확장기의 모든 포트 상태가 HIGH이므로 이 인버터가 필요합니다. IC가 전원을 얻은 후. 이렇게 하면 의도하지 않은 동작인 모든 릴레이가 닫힙니다.

    결론: 첫 번째 릴레이를 닫아야 하는 경우 00011110(MSB)을 전송해야 합니다. I2C 버스를 사용하여 포트 확장기에 연결합니다. 이렇게 하면 첫 번째 포트가 낮음으로 설정됩니다. (다른 포트도 업데이트됨). 포트 확장기의 첫 번째 포트는 인버터의 첫 번째 입력에 연결됩니다. 그리고 인버터의 첫 번째 출력은 릴레이 드라이버(ULN2803)의 첫 번째 입력에 연결됩니다. 체인의 마지막 부분으로 릴레이는 릴레이 드라이버의 첫 번째 출력에 연결됩니다.

    CCTools의 또 다른 릴레이 보드 HSRel8(+8) 입니다. MAX7311을 사용하는 포트 확장기로 사용되며 8개의 릴레이와 8개의 GPIO 포함 . 이 보드에는 하드웨어 인버터가 필요하지 않습니다. 이는 높음 HSRel5 에서 릴레이 상태 꺼짐 을 의미합니다. 및 높음 HSRel8(+8) 상태 켜짐을 의미합니다. 이 다른 동작은 해당 장치의 드라이버에 의해 처리되며 소프트웨어의 일부입니다.

    모든 램프, 소켓 등은 이러한 릴레이 중 하나에 연결됩니다. 집에서는 현재 8개의 HSrel5를 사용합니다. 및 4 HSRel8 . 나는 또한 솔리드 스테이트 릴레이와 다른 종류의 릴레이가 있는 보드를 사용하지만 간략하게 유지하기 위해 여기에서 세부 사항에 대해 설명하지 않겠습니다. HSRel5 가장 간단한 릴레이 보드입니다. 그러나 PCF8574 8개의 고유한 주소만 허용합니다. PCF8574 A 동일한 포트 확장기이지만 8개의 다른 주소가 있습니다. 즉, 16개의 HSRel5 I2C에 연결할 수 있습니다. 버스.


    포트 확장기(입력)

    버튼, 동작 감지기 및 리드 스위치(창용)는 I2C-Port16 HS라는 보드에 배선됩니다. CCTools에서 . 이 보드에는 포트 확장기(MAX7311 ), 모든 포트용 풀업 저항(5V, 10K) 및 세라믹 커패시터(100NF ). 보드는 12V 또는 5V 전원 공급 장치와 함께 사용할 수 있습니다. 세라믹 커패시터는 노이즈를 필터링하는 데 사용됩니다(글리치 필터).

    모든 입력 기기(버튼, 동작 감지기, 리드 스위치)에는 전원 분배기로 연결되는 자체 케이블이 있습니다. CAT7 케이블은 PE(보호 접지)로 연결되는 차폐가 필요하므로 모든 입력 장치에 사용됩니다. 롤러 셔터 버튼과 같이 두 개 이상의 버튼이 있는 스팟은 단일 CAT7 만 사용하여 연결할 수 있습니다. 케이블.

    전원 분배기에서 모든 입력 장치는 포트 확장기의 한 포트와 GND에 연결됩니다. . 풀업 저항으로 인해 포트의 상태는 HIGH 입니다. 기본적으로. 버튼을 누르면 포트가 GND 에 연결됩니다. 결과적으로 낮음 항구의 상태. 동작 감지기와 리드 접점도 그렇게 작동합니다.

    공유 인터럽트 케이블은 모든 입력 보드에 연결됩니다. 이 케이블은 기본적으로 풀업되어 있습니다. 포트 확장기에서 상태가 변경된 경우 해당 포트 확장기가 인터럽트 상태를 설정합니다. 낮음. 이 동작은 I2C 버스를 사용하는 모든 포트 확장기의 지속적인 폴링을 방지합니다. Pi2의 소프트웨어는 해당 GPIO만 폴링합니다. 인터럽트-GPIO의 상태가 변경된 경우 각 입력 보드의 현재 상태가 그에 따라 폴링되고 필요한 경우 이벤트가 발생합니다.


    라즈베리 파이 2

    Raspberry Pi 2는 Windows 10 IoT를 실행하고 있으며 전원 분배기에 맞춤형 케이스가 장착되어 있습니다. 또한 상태 LED가 있는 프로토타이핑 실드인 인터럽트가 있습니다. 풀업 저항이 있는 포트(10K ), 보호 저항기(1K ) 및 세라믹 커패시터(100NF ) 글리치 필터링용. 모든 케이블은 나사 단자를 사용하여 배선할 수 있습니다.

    온도 및 습도 센서

    모든 방/장소(현재 10도)의 현재 온도 및 습도는 DHT22(AOSONG)를 사용하여 측정됩니다. 이 센서는 주소 지정을 지원하지 않는 독점 프로토콜을 사용하여 현재 온도 및 습도를 제공합니다. 이를 위해서는 모든 센서가 마이크로 컨트롤러에 연결되어야 합니다. 제 솔루션을 위해 Arduino Nano V3.0 을 추가하기로 결정했습니다. I2C의 노예로 버스. Arduino 나노 2.5초마다 연결된 모든 센서에서 값을 읽고 로컬에 캐시합니다. 이 값은 Arduino Nano에서 읽을 수 있습니다. 포트 ID(0-10)를 보낸 후. I2C 버스를 사용하여 레지스터에서 데이터를 읽을 때도 동일한 동작입니다.

    온도와 습도는 두 가지 다른 보기를 사용하여 웹 앱에 표시됩니다.

    습도 오른쪽에 있는 아이콘("Luftfeuchtigkeit" ) 항목은 벽에 곰팡이가 자랄 위험이 증가했는지 여부를 나타냅니다. 60% 미만의 값은 녹색입니다. , 70% 미만은 노란색 입니다. 70% 이상은 빨간색입니다.

    웹 앱은 모든 센서에 대한 개요도 제공합니다.


    하드웨어 설정

    다음 이미지는 입력 및 출력 보드를 사용하는 전원 분배기의 하드웨어 설정을 보여줍니다. 12V/5V 전원 공급 장치 및 N/PE 연결이 표시되지 않습니다.

    433Mhz 원격 릴레이

    이 도전 과정에서 프로젝트를 마이그레이션하고 문서화하는 동안 온도 및 습도 센서와 함께 일반 케이스 안에 편리하게 숨겨져 있는 433Mhz 발신 장치도 개발했습니다.

    이 기능은 릴레이 보드를 선택 사항으로 만듭니다. Arduino 나노 DHT22 (온도 및 습도) 센서도 433Mhz 신호를 보내고 있습니다. 발신자(FS1000A )는 집의 중앙 방에 있는 케이스 안에 온습도 센서와 함께 장착됩니다. 발신자의 범위를 더욱 넓히기 위해 추가로 12V 전원이 공급됩니다(3.3에서도 작동하지만 범위가 짧음).


    원격 릴레이의 주요 문제 중 하나는 상태 정보를 보내지 않는다는 것입니다. 따라서 사용자가 원래 리모컨을 사용하여 시스템에 상태 변경을 도입하는 것이 절대적으로 가능합니다. 동기화를 강제하기 위해 소프트웨어 솔루션은 5초마다 상태를 자동으로 업데이트합니다. 이렇게 하면 웹 앱에 표시되는 상태가 가능한 한 안정적으로 유지됩니다(그러나 원래 리모컨을 사용할 수 없게 됨).

    원격 릴레이는 모든 자동화 내에서 사용할 수 있으며 릴레이 보드의 릴레이와 동일한 기능을 제공합니다.

    433Mhz 리모콘의 코드는 현재 프로토타이핑 보드의 회로 빌드를 통해서만 수동으로 구성할 수 있습니다. 그런 다음 해당 코드가 구성에 복사됩니다. 프리징 필요한 회로 기판에 대한 스케치는 아래 참조 및 Arduino 스케치는 CK.HomeAutomation.SensorsBridge\RemoteCodeFinder 폴더의 저장소에 있습니다. .


    디지털 고양이 쓰레기통

    우리 고양이를 위한 고양이 화장실은 사용 후 신선한 공기를 마실 수 있는 창문이 없는 보관실에 있습니다. 이 문제로 인해 상자가 오래된 미사용 독감. 굴뚝에 연결된 관 앞에는 배전반에서 릴레이에 연결된 팬이 있습니다. 창고에 있는 동작 감지기가 고양이도 감지하고 몇 분 동안 선풍기를 가동합니다.

    고양이 화장실에는 원격으로 팬을 제어할 수 있는 웹 앱에 자체 아이콘이 있습니다.

    생성된 로그를 분석하고 해당 액추에이터 변경 사항(Azure SQL DB 또는 CSV 파일)으로 필터링하여 시간 경과에 따른 고양이의 화장실 사용을 추적하고 필요한 청소 간격을 개선할 수 있습니다.


    소프트웨어

    Windows 10 IoT가 출시되기 전에 소프트웨어는 G120 에서 실행되었습니다. GHI 전자에서 버전 4.3에서 .NET Micro Framework를 사용합니다. 그러나 주로 성능 부족(120Mhz, 16MB RAM 및 인터프리터)으로 인해 계획된 모든 기능이 계획대로 작동하지 않았습니다.

    몇 주 전에 Microsoft Azure 통합과 같은 기능을 추가하면서 Windows 10 IoT 백그라운드 작업으로 실행하기 위해 코드 베이스를 마이그레이션하기 시작했습니다.

    아래 참조된 리포지토리에는 Visual Studio 2015 솔루션 및 모든 종속 프로젝트가 포함되어 있습니다. Raspberry Pi 2를 홈 자동화 컨트롤러로 사용하는 데 필요한 모든 것입니다. 동시에 다른 릴레이 보드 또는 센서에 대한 사용자 지정 드라이버를 작성하여 확장을 위해 열려 있습니다.


    프로젝트

    소프트웨어 솔루션의 프로젝트는 다음과 같이 그룹화됩니다.

    <울>
  • 앱(웹 앱 포함)
  • 컨트롤러(Pi용 시작 프로젝트 및 홈 구성 포함)
  • SDK(모든 공유 프로젝트 포함)
  • CK.HomeAutomation.TraceViewer

    이 프로젝트에는 컨트롤러(Pi2 인스턴스)에서 보낸 추적 메시지를 표시하는 콘솔 애플리케이션이 포함되어 있습니다. 현재 모든 알림은 UDP 소켓을 사용하여 브로드캐스트 주소로 계속 전송됩니다. 따라서 방화벽에서 포트(예:19227)를 열어야 합니다. 저는 TraceViewer를 주로 버그 및/또는 잘못된 구성을 찾는 데 사용합니다.

    알림을 보내는 데 필요한 모든 클래스는 CK.HomeAutomation.Notifications 프로젝트에 있습니다. .


    CK.HomeAutomation.Networking

    이 프로젝트에는 기본 HTTP 서버의 구현이 포함되어 있습니다. HTTP 서버는 웹 앱에 필요하며 JSON 형식으로 상태 정보를 제공하고 상태 변경 요청을 수락합니다.

    HTTP 서버는 웹 앱을 호스팅할 수도 있습니다. 패키지 이름이 다르기 때문에 웹 앱의 콘텐츠는 관리 SMB 공유를 사용하여 대상 폴더에 수동으로 업로드해야 합니다.

    대상 폴더:\\[IP]\c$\Users\DefaultAccount\AppData\Local\Packages\CK.HomeAutomation.Controller-uwp_p2wxv0ry6mv8g\LocalState\app


    CK.HomeAutomation.Controller.*

    컨트롤러의 각 프로젝트 폴더는 시작 프로젝트입니다. IoT 백그라운드 작업 구현 . 자세한 문서가 제공될 때까지 이러한 프로젝트(현재 집에서 사용 중)를 예로 사용할 수 있습니다.

    또한 CK.HomeAutomation.Controller.Empty 프로젝트를 제공합니다. 솔루션을 가지고 놀기 위한 출발점으로. 참고 :이름이 Cellar인 컨트롤러 정원 및 주차장 조명을 담당하는 사람은 이 문서에서 다루지 않습니다.

    솔루션을 테스트하기 전에 다음 작업에 익숙해져야 합니다.

    <울>
  • 처음부터 Windows 10 IoT로 Raspberry Pi2 설정(https://ms-iot.github.io/content/en-US/win10/SetupRPI.htm)
  • Microsoft PowerShell 원격 세션을 사용하여 Raspberry Pi2에 연결(https://ms-iot.github.io/content/en-US/win10/samples/PowerShell.htm)
  • Raspberry Pi2에 범용 Windows 앱 배포
  • 솔루션 디렉토리에는 작은 PowerShell 도 포함됩니다. SetupRaspberryPi.ps1이라는 스크립트 Raspberry Pi2를 설정하기 위해 공통 명령 체인을 실행합니다. 스크립트를 실행하는 것이 권장되지만 필수는 아닙니다(자신의 인프라에 따라 모든 IP 설정을 조정해야 합니다. ).

    CK.HomeAutomation.액츄에이터

    이 프로젝트는 최고 수준의 추상화를 제공합니다. 홈, 룸 엔드 푸시 버튼, 램프, 소켓 등과 같은 모든 액추에이터는 이 프로젝트에서 구현되며 모든 액추에이터의 기능에 따라 특별한 이벤트와 메서드를 제공합니다.

    구성을 읽고 이해하기 쉽게 만드는 유창한 API를 사용하여 회의실을 만들 수 있습니다.

    MotionDetector - 액추에이터

    이 액추에이터는 사람과 방의 움직임을 감지하는 데 사용됩니다. Abus 의 모션 감지기 BW8085 360°를 사용합니다. 모든 방의 천장에 설치되어 있습니다.

    모션 감지기 액츄에이터의 구현은 두 가지 이벤트를 제공합니다. 둘 중 첫 번째는 MotionDetected입니다. 움직임이 감지되면 발생하는 이벤트입니다. 물리적 동작 감지기는 출력을 HIGH 로 유지합니다. 두 번째 이벤트 DetectionCompleted가 더 이상 감지되지 않을 때까지 레벨 해고됩니다.

    다음 이미지는 웹 앱의 동작 감지기에 대한 항목을 보여줍니다. 모든 동작 감지기는 웹 앱을 사용하여 비활성화할 수 있습니다(소프트웨어에서만). 빨간색 점은 현재 움직임이 감지되었음을 나타냅니다.

    버튼 - 액추에이터

    이 액추에이터는 물리적 푸시 버튼을 나타냅니다. 버튼에는 눌렸음을 나타내는 두 가지 이벤트가 있습니다. 이벤트 PressedShort 버튼이 짧은 시간(<1.5초) 동안 눌려지면 발생하고 이벤트 PressedLong 동안 버튼을 더 오래(> 1.5초) 누른 경우에만 실행됩니다. 두 번째 이벤트는 지속 시간(1.5초)이 초과되고 푸시 버튼에서 손을 떼지 않으면 자동으로 시작됩니다. 이 두 이벤트는 여러 기능을 가진 버튼을 허용합니다.

    예:

    솔루션에는 VirtualButton도 포함됩니다. . 이 버튼은 동일한 인터페이스(IButton ) 웹 앱을 통해서만 "누를 수" 있습니다.


    소켓, 램프, BinaryStateOutput - 액추에이터

    기본 클래스 BinaryStateOutput 바이너리 상태를 지원하는 모든 액추에이터에 사용됩니다(ON 꺼짐 ) 오직. 이러한 액추에이터의 예는 Socket입니다. 및 램프 . 기본 구현은 업데이트 방법을 제공합니다(ON 꺼짐 ) 또는 상태를 전환합니다. 버튼 IBinaryStateOutputActuator를 구현하는 개체와 상호 작용할 수 있습니다. , 이를 통해 여러 맞춤형 액추에이터를 추가할 수 있습니다.

    다음 이미지는 모든 바이너리 상태 출력에 대한 템플릿을 보여줍니다. 소켓과 램프의 경우 왼쪽 아이콘이 다릅니다. "Mückenstecker의 독약병과 같은 맞춤형 아이콘 " 항목은 구성 파일(Configuration.js ) 웹 앱용

    CombinedBinaryStateActuators

    BinaryStateOutput 유형의 모든 물리적 액추에이터 논리적 바이너리 상태 액츄에이터를 생성하는 데 사용할 수 있습니다. 하나의 액추에이터는 상태를 토글해야 하는 경우 새 상태를 결정하는 데 필요한 "마스터"로 설정되어야 합니다. 액츄에이터에는 고유한 ID가 있으며 다른 바이너리 상태 출력 액츄에이터처럼 사용할 수 있습니다(필수 인터페이스가 구현됨).

    이 구현의 중요한 이점 중 하나는 상태 업데이트가 처리되는 방식입니다. 일반적으로 바이너리 상태 출력의 새로운 상태는 I2C 버스를 통해 하나씩 각 장치에 직접 커밋됩니다. 이 동작은 각 액추에이터 상태 업데이트 사이에 짧지만 눈에 띄는 지연을 만듭니다. CombinedBinaryStateActuator 내부 변경 추적을 사용하여 이러한 지연을 방지합니다.

    예:

    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 상태. 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 상태. 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).

    예:

    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.

    예:

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

    예:

    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 데이터 베이스. 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 계정.

    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.

    미래

    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.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

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

    회로도

    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.

    제조공정

    1. 라즈베리 파이 온도 로거
    2. Raspberry Pi를 사용한 원격 날씨 모니터링
    3. Node-RED를 사용하여 Blynk하는 SensorTag
    4. Raspberry Pi를 사용한 모션 센서
    5. Raspberry Pi를 사용하여 집 온도 모니터링
    6. Windows 10 IoT Core – 심박수 펄스 읽기
    7. RASPBERRY PI 홈 자동화
    8. Raspberry Pi 2의 Windows 10 IoT Core – Adafruit 센서 데이터
    9. Windows 10 IoT 코어 및 SHT15
    10. Windows 10 IoT Core for Raspberry Pi 3 Model B+