Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Otomasi Rumah menggunakan Raspberry Pi 2 (Windows 10 IoT Core)

Komponen dan persediaan

Raspberry Pi 2 Model B
× 1
HSRel5 - I²C-Bus-Relaisplatine
Papan relai dengan 5 relai, 3 koneksi GPIO dan I2C, mendukung pemasangan di distributor daya, berdasarkan PCF8574 .
× 1
HSRel8(+8) - 8fach-Relaisplatine
Papan relai dengan 8 relai, 8 koneksi GPIO dan I2C, mendukung pemasangan pada distributor daya, berdasarkan MAX7311 .
× 1
I2C-Port 16 HS 16Bit-Porterweiterung
Papan expander port dengan 16 koneksi GPIO dan I2C, mendukung pemasangan di distributor daya, berdasarkan MAX7311.
× 1
DR-60-12 Hutschienen Netzteil 12V / 54W
catu daya 12V untuk semua perangkat
× 1
Hutschienen Netzteil 15W 5V 3A; Artinya, DR-30-5
catu daya 5V untuk semua perangkat
× 1
Prototipe Perisai untuk Raspberry Pi
Digunakan untuk menambahkan LED untuk indikasi status dan input interupsi yang dilindungi untuk papan input. Juga menyediakan terminal sekrup 3 kutub untuk koneksi yang andal.
× 1
I2C-Buffer HS
Penggeser level I2C termasuk resistor pull-up yang diperlukan, dll, mendukung pemasangan di distributor daya, berdasarkan P82B96 .
× 1
Arduino Nano R3
Digunakan sebagai jembatan antara sensor DHT22 dan bus I2C.
× 1
433Mhz Pengirim &Penerima
Untuk mendukung relai nirkabel.
× 1

Aplikasi dan layanan online

Microsoft Visual Studio 2015
Perangkat Lunak Arduino (IDE)

Tentang proyek ini

Pembaruan 2: Proyek ini masih berkembang dan banyak fitur baru telah diterapkan (seperti Twitter-Client dan integrasi Telegram-Bots). Silakan periksa repositori GitHub dan catatan rilis untuk mempelajari lebih lanjut tentang fitur-fitur baru (atau ikuti saya di Twitter) . Saya harap saya dapat memperbarui halaman proyek ini sesegera mungkin.

Pembaruan 1: Pertama saya ingin mengucapkan "terima kasih" kepada semua orang yang telah membaca halaman proyek ini dan memberi saya umpan balik (baik pribadi atau di komentar). Sangat menyenangkan untuk mempresentasikan proyek ini di Maker Faire Rome 2015 dan Microsoft Technical Summit 2015 dan acara mendatang masih menunggu. Saya menambahkan beberapa gambar dari acara tersebut.

Saya sedang mengembangkan solusi otomatisasi rumah selama 3 tahun terakhir. Ini termasuk pemasangan fisik perangkat keras dan pengembangan perangkat lunak.

Fitur

Saat ini, fitur berikut didukung.

Masukan

  • Tombol tekan (BUSCH-JAEGER 2020US)
  • Detektor gerakan (Abus 360° BW8085)
  • Suhu ruangan (Perangkat saya sendiri berdasarkan DHT22)
  • Kelembaban ruangan (Perangkat saya sendiri berdasarkan DHT22)
  • Status jendela (terbuka atau tertutup menggunakan kontak buluh Honeywell Slimline)
  • Matahari Terbit, Matahari Terbenam, Suhu &Kelembaban (Diambil dari OpenWeatherMap)

Keluaran

  • Lampu (langit-langit) (digerakkan oleh relai, tanpa peredupan)
  • Socket (digerakkan oleh relai, tanpa peredupan)
  • Rana rol (jendela) (digerakkan oleh dua relai untuk naik dan turun)
  • Kipas (langit-langit) (digerakkan oleh 3 relai untuk setiap roda gigi)
  • Kipas kamar mandi (digerakkan oleh 2 relai untuk setiap gigi)

Fitur lainnya

  • Solusinya berisi aplikasi web untuk iOS, Android, Windows, Mac OSX yang dapat digunakan untuk mengontrol aktuator virtual. Konfigurasi untuk aplikasi web dimuat dari pengontrol (contoh Windows IoT).
  • Semua peristiwa yang dihasilkan oleh input dan output dapat dipublikasikan ke Microsoft Azure Event Hub dan/atau dicatat ke file CSV.
  • Pengontrol (contoh Windows IoT) menyediakan pelacakan berbasis UDP yang dapat ditampilkan menggunakan aplikasi konsol. Jejaknya sangat detail dan dapat digunakan untuk menemukan bug atau aktuator terhubung yang salah, dll.
  • Aktuator khusus dapat ditambahkan untuk mendukung lebih banyak perangkat keras.
  • Keluaran fisik dapat digabungkan ke keluaran logis.
  • Animasi (output fisik dalam output logis dapat dianimasikan).
  • Seluruh sistem dirancang agar tahan terhadap kesalahan/kegagalan perangkat keras. Meskipun beberapa komponen inti terputus/rusak, sistem lainnya tetap berfungsi sebagaimana mestinya (misalnya, beberapa papan di ruang tamu tidak dapat dijangkau karena kegagalan perangkat keras, tetapi kamar mandi tetap berfungsi sebagaimana mestinya)  
  • Dukungan untuk relai jarak jauh 433Mhz.


Konsep

Saat kami merenovasi rumah kami 3 tahun yang lalu, saya memutuskan untuk menerapkan solusi otomatisasi rumah saya sendiri. Ide utama di balik penerapannya adalah untuk mengontrol semuanya mulai dari distributor daya menggunakan relai. Karena keputusan ini, setiap tombol, lampu, soket, rana rol, dll. perlu dihubungkan dengan kabelnya sendiri melalui aktuator ke distributor daya. Bus seperti KNX atau EIB tidak diperlukan.

Catatan :Karena saya tinggal di Jerman, setiap komponen dirancang untuk bekerja dengan catu daya 230V. Jenis catu daya lainnya mungkin memerlukan modifikasi lebih lanjut. Pemasangan kabel 230V (NYM), distributor daya baru, dll. dilakukan oleh pilihan saya tukang listrik dan tidak sendirian.


Perangkat Keras

Distributor listrik baru

Kami memasang distributor listrik baru yang bertanggung jawab atas dua lantai rumah kami.

Bus I2C

Secara umum, bus I2C tidak dirancang untuk bekerja dengan kabel yang lebih panjang tetapi dimungkinkan untuk menambah panjang semaksimal mungkin menggunakan beberapa trik (Saya tidak tahu alasan untuk setiap pengoptimalan tetapi ini adalah hal-hal yang saya temukan di WWW).

  • Kemudikan bus dengan kecepatan 5V. RaspberryPi menggerakkan bus pada 3.3V, sehingga diperlukan pemindah level I2C (P82B96) . Ini adalah perangkat pertama (dan satu-satunya) yang ditambahkan ke RaspberryPi 2 (disebut Controller dalam solusi saya). Kabel untuk koneksi ini harus sesingkat mungkin. Spesifikasi memungkinkan menjalankan bus hingga 15V tetapi slave seperti PCF8574 hanya mendukung maks 5V.
  • Gunakan kabel twisted pair seperti CAT7. Penting untuk menggunakan satu pasang untuk SDA&GND dan satu lagi dengan SCL&GND. Jangan menggunakan kabel twisted pair tunggal untuk SDA&SCL. Pastikan juga pelindung kabel tersambung ke PE (di Jerman).
  • Lebih suka kabel untai. Ini membuatnya lebih rumit untuk menghubungkan semuanya tetapi akan menambah panjang kabel.
  • Tambahkan resistor pull-up dengan 10k ke ujung bus untuk SDA dan SCL.
  • Batasi kecepatan bus hingga 100kbit (Mode Standar) bahkan jika slave mendukung kecepatan yang lebih cepat.
  • Sertakan buffer I2C (P82B96). IC dapat digunakan sebagai pemindah level atau dapat digunakan untuk memisahkan bus dalam segmen fisik. Saya menggunakan salah satu buffer ini dalam distributor daya. Buffer harus ditempatkan di tengah bus.

Bus I2C yang dioptimalkan ini digunakan untuk menghubungkan setiap papan dalam distributor daya.


Papan relai (output)

CCTools dari Jerman menjual papan dengan relay yang dapat dihubungkan ke bus I2C. Dimungkinkan juga untuk membeli papan sebagai bagian individu atau papan sirkuit saja. Ini memungkinkan penggantian port expander dengan alternatif yang kompatibel dengan pin. Yang pertama diperlukan karena alamat perangkat yang tersedia terbatas. Saya menambahkan dudukan untuk relai dan IC sehingga saya dapat menggantinya dengan lebih mudah jika salah satunya rusak. Poin lainnya adalah saya dapat menggunakan PCA9555D bukannya MAX7311 karena PCA9555D lebih murah dan dapat dipesan lebih mudah (di Jerman).

HSRel5 papan relai memiliki 5 relai dan 3 GPIO . Semua port yang diperlukan diambil dari PCF8574 internal Port expander 8bit yang memiliki 8 GPIO . 5 yang pertama digunakan untuk relay dan 3 yang terakhir dapat digunakan untuk output lainnya. Relay membutuhkan 12V untuk beroperasi yang tidak dapat disediakan oleh port expander (yang hanya dapat menggerakkan LED). Jadi, diperlukan driver relay. Relai dihubungkan dengan driver relai dan sebagai gantinya driver relai dihubungkan ke inverter. Inverter ini diperlukan karena status semua port di port expander adalah TINGGI setelah IC mendapat daya. Ini akan menutup semua relai, yang merupakan perilaku yang tidak disengaja.

Kesimpulan: Jika relai pertama ditutup, relai tersebut harus mengirim 00011110 (MSB) ke port expander menggunakan bus I2C. Ini akan menyetel port pertama ke RENDAH (port lain juga diperbarui). Port pertama dari perluasan port disambungkan ke input pertama inverter. Dan keluaran pertama dari inverter disambungkan ke masukan pertama dari driver relai (ULN2803). Sebagai bagian terakhir dari rantai, relai dihubungkan ke output pertama dari driver relai.

Papan relai lain dari CCTools adalah HSRel8(+8) yang menggunakan MAX7311 sebagai port expander dan berisi 8 relai dan 8 GPIO . Papan ini tidak memerlukan inverter perangkat keras. Ini berarti bahwa TINGGI status untuk relai di HSRel5 berarti MATI dan TINGGI nyatakan di HSRel8(+8) berarti ON. Perilaku yang berbeda ini ditangani oleh driver untuk perangkat tersebut dan merupakan bagian dari perangkat lunak.

Setiap lampu, soket, dll. terhubung ke salah satu relai ini. Di rumah saya saat ini saya menggunakan 8 HSRel5 dan 4 HSRel8 . Saya juga menggunakan papan dengan relai solid state dan jenis relai lainnya, tetapi untuk mempersingkatnya, saya tidak akan membahas detailnya di sini. HSRel5 adalah papan estafet paling sederhana. Tapi PCF8574 hanya mengizinkan 8 alamat berbeda. PCF8574 A adalah port expander yang sama tetapi memiliki 8 alamat berbeda. Ini berarti bahwa 16 HSRel5 dapat ditransfer ke I2C bis.


Ekspander port (input)

Tombol, pendeteksi gerakan, dan sakelar buluh (untuk jendela) disambungkan ke papan yang disebut I2C-Port16 HS dari CCTools . Board ini berisi port expander (MAX7311 ), resistor pull-up (5V, 10K) untuk setiap port dan kapasitor keramik (100NF ). Papan dapat digunakan dengan catu daya 12V atau 5V. Kapasitor keramik digunakan untuk menyaring kebisingan (filter kesalahan).

Setiap perangkat input (tombol, pendeteksi gerakan, sakelar buluh) memiliki kabelnya sendiri yang mengarah ke distributor daya. Sebuah CAT7 Kabel digunakan untuk setiap perangkat input karena harus memiliki pelindung, yang terhubung dengan PE (proteksi ground). Tempat yang memiliki lebih dari satu tombol seperti tombol untuk roller shutters dapat dihubungkan hanya menggunakan satu CAT7 kabel.

Di distributor daya, setiap perangkat input disambungkan ke satu port dari port expander dan GND . Karena resistor pull-up, status pada port adalah TINGGI secara default. Menekan tombol akan menghubungkan port ke GND yang menghasilkan RENDAH keadaan pelabuhan. Detektor gerakan dan kontak buluh berfungsi seperti itu juga.

interupsi shared yang dibagikan kabel disambungkan ke semua papan masukan. Kabel ini ditarik secara default. Jika terjadi perubahan status di salah satu port expander, port expander yang sesuai akan menyetel status interupsi untuk RENDAH. Perilaku ini mencegah polling terus menerus dari semua ekspander port menggunakan bus I2C. Perangkat lunak di Pi2 hanya mengumpulkan GPIO yang sesuai. Jika status di interupsi-GPIO telah diubah, status saat ini dari setiap papan input akan disurvei dan peristiwa akan diaktifkan jika diperlukan.


Raspberry Pi 2

Raspberry Pi 2 menjalankan Windows 10 IoT dan dipasang dengan kasing khusus ke distributor daya. Ia juga memiliki pelindung prototipe dengan LED status, interupsi port dengan resistor pull-up (10K ), resistor perlindungan (1K ), dan kapasitor keramik (100NF ) untuk penyaringan kesalahan. Semua kabel dapat disambungkan menggunakan terminal sekrup.

Sensor Suhu &Kelembaban

Suhu dan kelembaban saat ini di setiap ruangan/tempat (saat ini 10) diukur menggunakan DHT22 (AOSONG). Sensor ini menyediakan suhu dan kelembaban saat ini menggunakan protokol berpemilik yang tidak mendukung pengalamatan. Ini mengharuskan setiap sensor dihubungkan ke pengontrol mikro. Untuk solusi saya, saya memutuskan untuk menambahkan Arduino Nano V3.0 sebagai budak I2C bis. Arduino Nano membaca nilai dari semua sensor yang terpasang setiap 2,5 detik dan menyimpannya di cache secara lokal. Nilai-nilai ini dapat dibaca dari Arduino Nano setelah mengirim id port (0-10). Ini adalah perilaku yang sama ketika membaca data dari register menggunakan bus I2C.

Suhu dan kelembapan ditampilkan di aplikasi web menggunakan dua tampilan berbeda.

Ikon di sisi kanan kelembapan ("Luftfeuchtigkeit" ) entri menunjukkan apakah ada peningkatan risiko tumbuhnya jamur di dinding atau tidak. Nilai kurang dari 60% adalah hijau , kurang dari 70% adalah kuning dan di atas 70% adalah merah.

Aplikasi web juga memberikan gambaran umum tentang semua sensor.


Penyiapan perangkat keras

Gambar berikut mengilustrasikan pengaturan perangkat keras di distributor daya menggunakan papan input dan output. Catu daya 12V/5V dan koneksi N/PE tidak ditampilkan.

Relai jarak jauh 433Mhz

Saat memigrasikan dan mendokumentasikan proyek selama tantangan ini, saya juga mengembangkan unit pengirim 433Mhz yang tersembunyi dengan nyaman di dalam kotak biasa bersama dengan sensor suhu dan kelembaban.

Fitur ini membuat papan relai opsional. Arduino Nano yang bertanggung jawab atas DHT22 (Suhu dan Kelembaban) sensor juga mengirimkan sinyal 433Mhz. Pengirim (FS1000A ) dipasang bersama dengan sensor suhu dan kelembaban di dalam kotak di ruang tengah rumah. Untuk meningkatkan jangkauan pengirim lebih jauh, ini juga didukung dengan 12V (juga bekerja dengan 3,3 tetapi jarak pendek).


Salah satu masalah utama dengan relai jarak jauh adalah mereka tidak mengirimkan informasi status apa pun. Jadi sangat mungkin bagi pengguna untuk memperkenalkan perubahan status ke sistem dengan menggunakan remote asli. Untuk memaksa sinkronisasi, solusi perangkat lunak secara otomatis memperbarui status setiap 5 detik. Ini membuat status yang ditampilkan di aplikasi web dapat diandalkan (tetapi membuat penggunaan remote asli tidak berguna).

Relai jarak jauh dapat digunakan dalam setiap otomatisasi dan menyediakan fitur yang sama seperti relai dari papan relai.

Kode remote 433Mhz saat ini hanya dapat dikonfigurasi secara manual melalui pembuatan sirkuit pada papan prototipe. Kode-kode tersebut kemudian disalin ke konfigurasi. mengecek sketsa untuk papan sirkuit yang diperlukan dirujuk di bawah dan Arduino sketch terletak di repositori di folder CK.HomeAutomation.SensorsBridge\RemoteCodeFinder .


Kotak kotoran kucing digital

Kotak kotoran kucing untuk kucing kami ditempatkan di ruang penyimpanan yang sayangnya tidak memiliki jendela untuk membiarkan udara segar setelah digunakan. Karena masalah ini, kotak terhubung ke tidak terpakai old lama cerobong. Di depan tabung yang terhubung ke cerobong asap, ada kipas yang disambungkan ke relai di distributor daya. Detektor gerakan di gudang bahkan mendeteksi kucing dan menyalakan kipas selama beberapa menit.

Kotak kotoran kucing memiliki ikonnya sendiri di aplikasi web yang memungkinkan untuk mengontrol kipas dari jarak jauh.

Dengan menganalisis log yang dihasilkan dan pemfilteran oleh perubahan aktuator yang sesuai (file Azure SQL DB atau CSV), kami dapat melacak penggunaan kotak kotoran kucing dari waktu ke waktu dan oleh karena itu meningkatkan interval pembersihan yang diperlukan.


Perangkat Lunak

Sebelum rilis Windows 10 IoT, perangkat lunak berjalan pada G120 dari elektronik GHI menggunakan .NET Micro Framework di Versi 4.3. Tetapi terutama karena kurangnya kinerja (120Mhz, RAM 16MB, dan juru bahasa) tidak semua fitur yang direncanakan berfungsi sesuai rencana.

Beberapa minggu yang lalu saya mulai memigrasikan basis kode untuk dijalankan sebagai tugas latar belakang Windows 10 IoT, sambil menambahkan fitur seperti integrasi Microsoft Azure.

Repositori yang dirujuk di bawah ini berisi Solusi Visual Studio 2015 dan semua proyek yang bergantung. Itu semua yang diperlukan untuk menggunakan Raspberry Pi 2 sebagai Pengontrol Otomatisasi Rumah, sementara terbuka untuk ekstensi dengan menulis driver khusus untuk papan atau sensor relai lainnya.


Proyek

Proyek solusi perangkat lunak dikelompokkan menjadi:

  • Aplikasi (Berisi aplikasi web)
  • Pengontrol (Berisi proyek startup untuk Pi dan konfigurasi rumah)
  • SDK (Berisi semua proyek bersama)

CK.HomeAutomation.TraceViewer

Proyek ini berisi aplikasi konsol yang menampilkan pesan jejak yang dikirim oleh pengontrol (contoh Pi2). Saat ini semua notifikasi terus dikirim ke alamat broadcast menggunakan soket UDP. Oleh karena itu membuka port (misalnya 19227) di firewall diperlukan. Saya menggunakan TraceViewer terutama untuk menemukan bug dan/atau kesalahan konfigurasi.

Semua kelas yang diperlukan untuk mengirim pemberitahuan terletak di proyek CK.HomeAutomation.Notifications .


CK.HomeAutomation.Networking

Proyek ini berisi implementasi server HTTP dasar. Server HTTP diperlukan untuk aplikasi web dan menyediakan informasi status dalam format JSON dan menerima permintaan dengan perubahan status.

Server HTTP juga dapat meng-host aplikasi web. Karena nama paket yang berbeda, konten aplikasi web harus diunggah secara manual ke folder tujuan menggunakan pembagian SMB administratif.

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


CK.HomeAutomation.Controller.*

Setiap proyek di Controllers folder adalah proyek startup mengimplementasikan Tugas Latar Belakang IoT . Sampai dokumentasi terperinci diberikan, seseorang dapat menggunakan proyek ini (saat ini digunakan di rumah saya) sebagai contoh.

Selain itu saya menyediakan proyek CK.HomeAutomation.Controller.Empty sebagai titik awal untuk bermain-main dengan solusi. CATATAN :Pengontrol bernama Cellar yang bertanggung jawab atas lampu taman dan tempat parkir tidak tercakup dalam dokumentasi ini.

Sebelum menguji solusi, Anda harus terbiasa dengan tugas-tugas berikut:

  • Menyiapkan Raspberry Pi2 dengan Windows 10 IoT dari awal (https://ms-iot.github.io/content/en-US/win10/SetupRPI.htm)
  • Terhubung dengan Raspberry Pi2 menggunakan sesi jarak jauh Microsoft PowerShell (https://ms-iot.github.io/content/en-US/win10/samples/PowerShell.htm)
  • Menyebarkan aplikasi windows universal ke Raspberry Pi2.

Direktori solusi juga menyertakan PowerShell . kecil skrip bernama SetupRaspberryPi.ps1 untuk menjalankan rantai perintah umum untuk mengatur Raspberry Pi2. Direkomendasikan tetapi tidak diharuskan untuk mengeksekusi skrip (pastikan untuk menyesuaikan semua pengaturan IP sesuai dengan infrastruktur Anda sendiri ).

CK.HomeAutomation.Aktuator

Proyek ini memberikan tingkat abstraksi tertinggi. Rumah, kamar, ujung setiap aktuator seperti tombol tekan, lampu, soket, dll. diimplementasikan dalam proyek ini dan menyediakan acara dan metode khusus sesuai dengan fitur setiap aktuator.

Ruangan dapat dibuat menggunakan API yang lancar yang membuat konfigurasi mudah dibaca dan dipahami.

MotionDetector - Aktuator

Aktuator ini digunakan untuk mendeteksi orang dan gerakan di dalam ruangan. Saya menggunakan pendeteksi gerakan BW8085 360° dari Abus yang dipasang di langit-langit setiap ruangan.

Implementasi aktuator pendeteksi gerakan menyediakan dua peristiwa. Yang pertama dari keduanya adalah MotionDetected peristiwa yang dipecat jika gerakan terdeteksi. Detektor gerakan fisik menjaga output pada TINGGI level sampai tidak ada gerakan lebih lanjut yang terdeteksi, di mana peristiwa kedua DetectionCompleted dipecat.

Gambar berikut menunjukkan entri untuk pendeteksi gerakan di aplikasi web. Setiap pendeteksi gerakan dapat dinonaktifkan (hanya dalam perangkat lunak) menggunakan aplikasi web. Titik merah menunjukkan bahwa gerakan saat ini terdeteksi.

Tombol - Aktuator

Aktuator ini mewakili tombol tekan fisik. Tombol memiliki dua peristiwa yang menunjukkan bahwa itu ditekan. Acara PressedShort dipecat jika tombol ditekan untuk durasi yang singkat (<1,5 detik), sementara acara PressedLong diaktifkan hanya jika tombol ditekan lebih lama (> 1,5 detik). Peristiwa kedua juga otomatis diaktifkan jika durasi (1,5 detik) telah terlampaui dan tombol tekan tidak dilepaskan. Dua peristiwa ini memungkinkan tombol dengan banyak fitur.

Contoh:

Solusinya juga berisi VirtualButton . Tombol ini mengimplementasikan antarmuka yang sama (IButton ) dan hanya dapat "ditekan" menggunakan aplikasi web.


Soket, Lampu, BinaryStateOutput - Aktuator

Kelas dasar BinaryStateOutput digunakan untuk setiap aktuator yang mendukung keadaan biner (ON dan MATI ) hanya. Contoh untuk aktuator tersebut adalah Socket dan Lampu . Implementasi dasar menyediakan metode untuk memperbarui (ON dan MATI ) atau mengubah status. Tombol dapat berinteraksi dengan objek yang mengimplementasikan IBinaryStateOutputActuator , ini memungkinkan penambahan beberapa aktuator khusus.

Gambar berikut menunjukkan template untuk setiap keluaran status biner. Ikon di sisi kiri berbeda untuk soket dan lampu. Ikon khusus seperti botol racun di "Mückenstecker " entri dapat ditentukan menggunakan file konfigurasi (Configuration.js ) untuk aplikasi web.

CombinedBinaryStateActuators

Setiap aktuator fisik jenis BinaryStateOutput dapat digunakan untuk membuat aktuator keadaan biner logis. Satu aktuator harus disetel ke "master" yang diperlukan untuk menentukan status baru jika status harus diaktifkan. Aktuator memiliki ID sendiri dan dapat digunakan seperti aktuator keluaran keadaan biner lainnya (antarmuka yang diperlukan diimplementasikan).

Salah satu keuntungan penting dari implementasi ini adalah cara menangani pembaruan status. Biasanya keadaan baru dari keluaran keadaan biner secara langsung dikomit ke setiap perangkat satu per satu melalui bus I2C. Perilaku ini membuat penundaan singkat namun terlihat di antara setiap pembaruan status aktuator. CombinedBinaryStateActuator mencegah penundaan ini menggunakan pelacakan perubahan internal.

Contoh:

StateMachine - Aktuator

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 negara. 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 negara. 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 at night. It is possible to specify one time range for the ON state and multiple time ranges for the OFF negara. 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 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 Akun.

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.

Future

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.

Kode

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

Skema

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.

Proses manufaktur

  1. Pencatat Suhu Raspberry Pi
  2. Pemantauan Cuaca Jarak Jauh Menggunakan Raspberry Pi
  3. SensorTag ke Blynk Menggunakan Node-RED
  4. Sensor Gerak menggunakan Raspberry Pi
  5. Pantau suhu rumah Anda menggunakan Raspberry Pi
  6. Windows 10 IoT Core – Membaca Denyut Jantung
  7. RASPBERRY PI HOME AUTOMATION
  8. Windows 10 IoT Core pada Raspberry Pi 2 – Data Adafruit Sensor
  9. Windows 10 IoT Core dan SHT15
  10. Windows 10 IoT Core untuk Raspberry Pi 3 Model B+