Kontrol Iklim Anda Dengan Tutorial Termostat Raspberry Pi ini

Diterbitkan: 2022-03-11

Pendingin udara di banyak rumah tidak memiliki fitur modern seperti otomatisasi sentral, termostat yang dapat diprogram, banyak sensor, atau kontrol Wi-Fi. Tetapi teknologi AC yang lebih tua masih dapat diandalkan, jadi dalam banyak kasus, tidak mungkin untuk segera ditingkatkan.

Namun, itu mengharuskan pengguna untuk sering mengganggu pekerjaan atau tidur untuk menyalakan atau mematikan AC. Ini terutama berlaku di rumah dengan tata letak yang ketat, seperti milik saya:

Denah lantai dengan unit AC di bagian atas, di kanan tengah. Outputnya harus membulat di dua sudut untuk mencapai sebagian besar ruangan, termasuk kamar tidur di kiri bawah.
Denah lantai saya yang tidak ortodoks membuat pendinginan dengan satu unit AC di dalam jendela menjadi tantangan. Tidak ada garis pandang langsung untuk remote control dari kamar tidur dan tidak ada jalur langsung untuk udara sejuk untuk mencapai semua kamar.

Rumah-rumah di AS umumnya memiliki AC sentral, tetapi ini tidak terjadi secara global. Tidak memiliki AC sentral membatasi opsi otomatisasi, membuatnya lebih sulit untuk mencapai suhu yang sama di seluruh rumah. Secara khusus, sulit untuk menghindari fluktuasi suhu yang mungkin memerlukan intervensi manual untuk mengatasinya.

Sebagai seorang engineer dan penggila Internet of Things (IoT), saya melihat peluang untuk melakukan beberapa hal berguna sekaligus:

  • Bantu menghemat energi dengan meningkatkan efisiensi unit AC saya yang berdiri sendiri
  • Jadikan rumah saya lebih nyaman melalui otomatisasi dan integrasi Google Home
  • Sesuaikan solusi saya persis seperti yang saya inginkan, alih-alih terbatas pada opsi yang tersedia secara komersial
  • Memoles beberapa keterampilan profesional saya, menggunakan perangkat keras yang telah dicoba dan diuji

AC saya adalah perangkat dasar dengan remote control inframerah sederhana. Saya mengetahui perangkat yang memungkinkan unit AC digunakan dengan sistem rumah pintar, seperti Sensibo atau Tado. Sebagai gantinya, saya mengambil pendekatan DIY dan membuat termostat Raspberry Pi, memungkinkan kontrol yang lebih canggih berdasarkan input sensor dari berbagai ruangan.

Perangkat Keras Termostat Raspberry Pi

Saya sudah menggunakan beberapa Raspberry Pi Zero Ws, ditambah dengan modul sensor DHT22, untuk memantau suhu dan kelembaban di ruangan yang berbeda. Karena denah lantai yang tersegmentasi, saya memasang sensor untuk memantau seberapa hangat suhu di berbagai bagian rumah saya.

Saya juga memiliki sistem pengawasan rumah (tidak diperlukan untuk proyek ini) pada PC Windows 10 dengan WSL 2. Saya ingin mengintegrasikan pembacaan sensor ke dalam video pengawasan, sebagai hamparan teks pada umpan video.

Menghubungkan Sensor

Sensornya mudah dihubungkan, hanya memiliki tiga koneksi:

Sambungan pertama adalah "VCC dari sensor ke PIN1 - 3v3", yang kedua adalah "DATA dari sensor ke PIN7 - GPIO4", dan yang ketiga adalah "GND dari sensor ke PIN9 - GND".
Diagram pengkabelan untuk modul DHT22, menunjukkan pin yang digunakan untuk menghubungkannya ke Raspberry Pi.

Saya menggunakan Raspberry Pi OS Lite, menginstal Python 3 dengan PiP dan perpustakaan Adafruit_DHT untuk Python untuk membaca data sensor. Secara teknis tidak digunakan lagi tetapi lebih mudah dipasang dan digunakan. Plus, ini membutuhkan lebih sedikit sumber daya untuk kasus penggunaan kami.

Saya juga ingin memiliki log dari semua bacaan jadi saya menggunakan server pihak ketiga, ThingSpeak, untuk meng-host data saya dan menyajikannya melalui panggilan API. Ini relatif mudah, dan karena saya tidak memerlukan pembacaan waktu nyata, saya memilih untuk mengirim data setiap lima menit.

 import requests import time import random import Adafruit_DHT KEY = 'api key' def pushData(temp:float, hum:float): '''Takes temp and humidity and pushes to ThingsSpeak''' url = 'https://api.thingspeak.com/update' params = {'api_key': KEY, 'field5': temp, 'field6': hum} res = requests.get(url, params=params) def getData(sensor:int, pin:int): ''' Input DHT sensor type and RPi GPIO pin to collect a sample of data Parameters: sensor: Either 11 or 22, depending on sensor used (DHT11 or DHT22) pin: GPIO pin used (eg 4) ''' try: humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) return humidity, temperature except: Exception("Error reading sensor data") return False if __name__ == "__main__": sensor = 22 # Change to 11 if using DHT11 pin = 4 # I used GPIO pin 4 while True: h, t = getData(sensor, pin) pushData(t, h) time.sleep(300)

Pada PC pengawasan khusus saya, yang menjalankan WSL 2, saya menyiapkan skrip PHP yang mengambil data dari ThingSpeak, memformatnya, dan menulisnya dalam file .txt sederhana. File .txt ini diperlukan untuk perangkat lunak pengawasan saya untuk melapisinya di atas aliran video.

Karena saya sudah memiliki beberapa otomatisasi di rumah, termasuk bola lampu pintar dan beberapa rutinitas di Google Home, maka saya akan menggunakan data sensor sebagai termostat pintar di Google Home. Rencana saya adalah membuat Google Home rutin yang akan menyalakan atau mematikan AC secara otomatis berdasarkan suhu ruangan, tanpa perlu masukan pengguna.

Foto perangkat berbentuk keping hitam.
Unit remote control pintar Wi-Fi Wi-Fi SafeHome PT11IR PNI.

Solusi all-in-one yang lebih mahal seperti dari Sensibo dan Tado memerlukan pengaturan teknis yang lebih sedikit, tetapi dengan biaya yang lebih murah, PNI SafeHome PT11IR memungkinkan saya menggunakan telepon untuk mengontrol sejumlah perangkat inframerah dalam jangkauannya. Aplikasi kontrol, Tuya, terintegrasi dengan Google Home.

Mengatasi Masalah Integrasi Google Home

Dengan AC dan data sensor yang diaktifkan dengan cerdas, saya mencoba agar Raspberry dikenali sebagai termostat di Google Home tetapi tidak berhasil. Saya dapat mengirim data sensor ke Google IoT Cloud dan layanan Pub/Sub-nya, tetapi tidak ada cara untuk mengirimkannya ke Google Home untuk membuat rutinitas berdasarkan data tersebut.

Setelah merenungkan ini selama beberapa hari, saya memikirkan pendekatan baru. Bagaimana jika saya tidak perlu mengirim data ke Google Home? Bagaimana jika saya dapat memeriksa data secara lokal dan mengirim perintah ke Google Home untuk menghidupkan atau mematikan AC? Saya menguji perintah suara dengan sukses, jadi pendekatan ini tampaknya menjanjikan.

Pencarian cepat memunculkan Assistant Relay, sistem bertenaga Node.js yang memungkinkan pengguna mengirim perintah ke Google Assistant, memungkinkan pengguna untuk mengikat apa pun ke Google Assistant selama ia tahu apa yang harus dilakukan dengan input yang diterimanya.

Lebih baik lagi, dengan Assistant Relay, saya dapat mengakhiri perintah ke Google Assistant saya hanya dengan mengirimkan permintaan POST ke perangkat yang menjalankan server Node.js (dalam hal ini, Raspberry Pi Zero W saya) dengan beberapa parameter yang diperlukan. Itu dia. Skrip didokumentasikan dengan baik jadi saya tidak akan membahas banyak detail di sini.

Karena data sensor sudah dibaca di PC pengawasan, saya pikir saya bisa mengintegrasikan permintaan ke dalam skrip PHP untuk menyimpan semuanya di satu tempat.

Karena Anda mungkin tidak memiliki persyaratan file .txt , Anda dapat menyederhanakan prosesnya dengan langsung membaca data sensor dan mengeluarkan perintah berdasarkan data tersebut ke Layanan Asisten Google, melalui Asisten Relay. Semua ini dapat dilakukan dari satu perangkat Raspberry Pi, tanpa memerlukan perangkat keras tambahan. Namun, karena saya sudah menyelesaikan setengah dari pekerjaan, masuk akal untuk menggunakan apa yang saya miliki. Kedua skrip dalam artikel ini dapat digunakan pada satu mesin; selanjutnya, skrip PHP dapat ditulis ulang dengan Python, jika diperlukan.

Mengatur Kondisi dan Mengotomatiskan Operasi

Saya ingin siklus daya otomatis terjadi hanya pada malam hari, jadi saya menentukan jam yang saya ingin operasikan secara otomatis—10 malam hingga 7 pagi—dan menyetel suhu yang diinginkan. Mengidentifikasi interval suhu yang tepat—untuk mencapai rentang yang nyaman tanpa memperpendek masa pakai unit AC dengan memutar daya terlalu sering—memerlukan beberapa upaya untuk memperbaikinya.

Skrip PHP yang membuat hamparan data sensor diatur untuk dijalankan setiap lima menit melalui tugas cron, jadi satu-satunya hal yang saya tambahkan ke dalamnya adalah kondisi dan permintaan POST.

Namun, ini menimbulkan masalah. Jika persyaratan terpenuhi, skrip akan mengirim perintah "hidupkan" setiap lima menit, bahkan jika AC sudah menyala. Ini menyebabkan unit berbunyi bip mengganggu, bahkan pada perintah "matikan". Untuk memperbaikinya, saya membutuhkan cara untuk membaca status unit saat ini.

Keanggunan bukan prioritas, jadi saya membuat file JSON yang berisi array. Kapan pun perintah "hidupkan" atau "matikan" berhasil diselesaikan, skrip akan menambahkan status terakhir ke larik ini. Ini memecahkan redundansi; namun, hari-hari yang sangat panas atau pemanasan yang berlebihan selama musim dingin dapat menyebabkan kondisi tersebut kembali terjadi. Saya memutuskan penggantian manual akan cukup dalam situasi ini. Saya akan meninggalkan menambahkan pengembalian sebelum cuplikan beralih ke tujuan ini sebagai latihan untuk pembaca:

 <?php switch(true) { case $temperature > 27: turnAc('on'); break; case $temperature < 24: turnAc('off'); break; } function turnAc($status) { $command = 'turn on hallway ac'; // hallway ac is the Google Home device name for my AC if ($status == 'off') { $command = 'turn off hallway ac'; } if ($status == 'on' && checkAc() == 'on') { return; } if ($status == 'off' && checkAc() == 'off') { return; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'local assistant server ip', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS =>'{ "command": '.$command.', "converse": false, "user": "designated user" }', CURLOPT_HTTPHEADER => array( 'Content-Type: application/json' ), )); $response = curl_exec($curl); curl_close($curl); $obj = null; try { $obj = json_decode($response); } catch (Exception $e) { } if (!$obj || $obj->success != true) { markAc($status == 'on' ? 'off' : 'on'); // if error, mark it as opposite status return; } markAc($status); } function markAc($status) { $file = __DIR__ . "/markAc.json"; $json = json_decode(file_get_contents($file), true); $json[] = array(date('F j, YH:i:s'), $status); $handler = fopen($file, "w") or die("Unable to open file!"); $txt = json_encode($json); fwrite($handler, $txt); fclose($handler); } function checkAc() { $file = __DIR__ . "/markAc.json"; $json = json_decode(file_get_contents($file), true); $end = array_pop($json); return $end[1]; }

Ini berhasil tetapi tidak pada upaya pertama. Saya harus mencari tahu hal-hal di sepanjang jalan dan mengubahnya sesuai kebutuhan. Mudah-mudahan, dengan manfaat dari pengalaman saya, Anda tidak perlu melakukan banyak hal untuk melakukannya dengan benar pertama kali.

Nilai Pengontrol Termostat Raspberry Pi

Saya termotivasi untuk mengotomatiskan AC saya karena tata letak rumah saya yang tidak konvensional terkadang menghasilkan suhu yang sangat berbeda di ruangan yang berbeda. Tetapi mengotomatisasi pemanasan dan pendinginan memiliki manfaat bahkan bagi mereka yang tidak menghadapi masalah khusus ini.

Orang-orang di seluruh dunia hidup di berbagai iklim dan membayar harga energi yang berbeda (dan tarif yang berbeda pada waktu yang berbeda dalam sehari), sehingga peningkatan kecil dalam efisiensi energi dapat membuat otomatisasi bermanfaat di wilayah tertentu.

Selain itu, karena semakin banyak rumah menjadi otomatis, ada alasan untuk mengeksplorasi potensi mengotomatisasi perangkat dan peralatan lama yang haus daya seperti AC, pemanas listrik, dan pemanas air. Karena perangkat ini biasanya berukuran besar, sulit dipasang, dan mahal untuk ditingkatkan, banyak orang akan terjebak dengannya selama bertahun-tahun yang akan datang. Membuat perangkat "bodoh" ini sedikit lebih pintar tidak hanya dapat meningkatkan kenyamanan dan efisiensi energi, tetapi juga memperpanjang masa pakainya.


Bacaan Lebih Lanjut di Blog Teknik Toptal:

  • Cara Membangun Server Raspberry Pi untuk Pengembangan
  • Cara menggunakan kembali ponsel cerdas lama Anda sebagai remote control