Proyek ini memungkinkan untuk membaca informasi dari pompa panas Panasonic Aquarea dan melaporkan datanya ke server MQTT atau sebagai format JSON melalui HTTP.
Anda dapat menemukan README_DE.md di sini.
Ada versi Belanda README_NL.md yang ada di sini.
Tidak ada yang bisa membaca README_FI.md.
Bantuan terjemahan ke bahasa lain diterima.
Rilis terbaru tersedia di sini. Biner terkompilasi ESP8266 dapat diinstal pada mini Wemos D1, pada PCB HeishaMon dan umumnya pada papan berbasis ESP8266 yang kompatibel dengan pengaturan build Wemos (setidaknya flash 4MB). Anda juga dapat mengunduh kode dan mengkompilasinya sendiri (lihat perpustakaan yang diperlukan di bawah). Biner ESP32-S3 ditujukan untuk versi heishamon yang lebih baru dan besar.
HeishaMon dapat berkomunikasi dengan Panasonic Aquarea H, J, K dan L&series. Jenis HP yang dikonfirmasi oleh pengguna dapat Anda temukan di sini
Jika Anda ingin mengkompilasi gambar ini sendiri, pastikan untuk menggunakan perpustakaan yang disebutkan dan dukungan untuk sistem file pada esp8266 jadi pilih opsi flash yang benar di arduino ide untuk itu.
Saat memulai, tanpa wifi yang dikonfigurasi, hotspot wifi terbuka akan terlihat memungkinkan Anda untuk mengkonfigurasi jaringan wifi dan server MQTT Anda. Halaman konfigurasi akan berlokasi di http://192.168.4.1 .
Setelah mengonfigurasi dan mem-boot, gambar akan dapat membaca dan berbicara dengan pompa panas Anda. Koneksi GPIO13/GPIO15 akan digunakan untuk komunikasi sehingga komputer/pengunggah Anda tetap terhubung ke board jika Anda mau.
Serial 1 (GPIO2) dapat digunakan untuk menghubungkan jalur serial lain (GND dan TX dari papan saja) untuk membaca beberapa data debugging.
Semua data yang diterima akan dikirim ke topik MQTT yang berbeda (lihat di bawah untuk deskripsi topik). Ada juga topik MQTT 'panasonic_heat_pump/log' yang menyediakan logging debug dan hexdump dari paket yang diterima (jika diaktifkan di portal web).
Anda dapat menghubungkan jaringan 1wire di GPIO4 yang akan melaporkan topik MQTT terpisah (panasonic_heat_pump/1wire/sensorid).
Software ini juga mampu mengukur Watt pada port S0 sebesar dua kWh meter. Anda hanya perlu menghubungkan GPIO12 dan GND ke S0 satu kWh meter dan jika membutuhkan kWh meter kedua gunakan GPIO14 dan GND. Ini akan melaporkan topik MQTT panasonic_heat_pump/s0/Watt/1 dan panasonic_heat_pump/s0/Watt/2 dan juga dalam output JSON. Anda dapat mengganti 'Watt' di topik sebelumnya dengan 'Watthour' untuk mendapatkan penghitung konsumsi dalam WattHour (per mqtt pesan) atau menjadi 'WatthourTotal' untuk mendapatkan total konsumsi yang diukur dalam WattHour. Untuk menyinkronkan WatthourTotal dengan kWh-meter Anda, publikasikan nilai yang benar ke MQTT ke topik panasonic_heat_pump/s0/WatthourTotal/1 atau panasonic_heat_pump/s0/WatthourTotal/2 dengan opsi 'retain' saat heishamon melakukan boot ulang. Setelah reboot, heishamon membaca nilai ini sebagai nilai terakhir yang diketahui yang dapat Anda sinkronkan menggunakan metode ini.
Memperbarui firmware semudah membuka menu firmware dan, setelah mengautentikasi dengan nama pengguna 'admin' dan kata sandi 'heisha' (atau lainnya yang disediakan saat pengaturan), mengunggah biner di sana.
Output json dari semua data yang diterima (heatpump dan 1wire) tersedia di url http://heishamon.local/json (ganti heishamon.local dengan alamat ip perangkat heishamon Anda jika MDNS tidak berfungsi untuk Anda).
Dalam folder 'integrasi' Anda dapat menemukan contoh cara menghubungkan platform otomatisasi Anda ke HeishaMon.
Fungsionalitas aturan memungkinkan Anda mengontrol pompa panas dari dalam HeishaMon itu sendiri. Yang membuatnya lebih dapat diandalkan daripada harus berurusan dengan domotica eksternal melalui WiFi. Saat memposting kumpulan aturan baru, aturan tersebut segera divalidasi dan bila valid digunakan. Jika aturan baru tidak valid maka aturan tersebut akan diabaikan dan aturan lama akan dimuat kembali. Anda dapat memeriksa konsol untuk mendapatkan masukan mengenai hal ini. Jika ada aturan baru yang valid yang membuat HeishaMon crash, maka secara otomatis akan dinonaktifkan pada reboot berikutnya, sehingga Anda dapat membuat perubahan. Ini mencegah HeishaMon masuk ke boot loop.
Teknik yang digunakan dalam pustaka aturan memungkinkan Anda bekerja dengan kumpulan aturan yang sangat besar, namun praktik terbaiknya adalah menjaganya tetap di bawah 10.000 byte.
Perhatikan bahwa pengiriman perintah ke pompa panas dilakukan secara asinkron. Jadi, perintah yang dikirim ke pompa panas di awal sintaks Anda tidak akan langsung tercermin dalam nilai dari pompa panas di kemudian hari. Oleh karena itu, nilai pompa panas harus dibaca dari pompa panas itu sendiri, bukan berdasarkan nilai yang Anda simpan sendiri.
Dua aturan umum adalah spasi wajib dan titik koma digunakan sebagai karakter akhir baris.
Kumpulan aturan menggunakan struktur variabel berikut:
#
: Global Variabel-variabel ini dapat diakses di seluruh kumpulan aturan tetapi harus didefinisikan di dalam blok aturan. Jangan gunakan global untuk semua variabel Anda, karena ini akan terus menggunakan memori.
$
: Lokal Variabel-variabel ini berada di dalam blok aturan. Ketika blok aturan selesai, variabel-variabel ini akan dibersihkan, membebaskan semua memori yang digunakan.
@
: Parameter pompa panas Ini sama dengan yang tercantum di halaman dokumentasi Kelola Topik dan seperti yang ditemukan di beranda HeishaMon. Aturan ini juga mengikuti logika R/W seperti yang digunakan melalui MQTT dan REST API. Artinya topik membaca berbeda dengan topik menulis. Jadi pembacaan status pompa panas dilakukan melalui @Heatpump_State
, mengubah status pompa panas melalui @SetHeatpump
.
%
: Variabel tanggal dan waktu Ini dapat digunakan untuk aturan berbasis tanggal dan waktu. Saat ini %hour
(0 - 23), %minute
(0 - 59), %month
(1 - 12), dan day
(1 - 7) didukung. Semuanya bilangan bulat biasa. Konfigurasi NTP yang tepat diperlukan untuk mengatur tanggal dan waktu sistem yang benar pada HeishaMon.
?
: Parameter termostat Variabel ini mencerminkan parameter yang dibaca dari termostat yang terhubung saat menggunakan fungsionalitas OpenTherm. Ketika OpenTherm didukung, dokumentasi ini akan diperluas dengan informasi yang lebih tepat. Dapat memeriksa tab opentherm untuk variabel yang dapat digunakan. Nama membaca dan menulis sama, namun tidak semua nilai mendukung membaca dan/atau menulis. Tab opentherm juga mencantumkan ini.
ds18b20#2800000000000000
: Nilai suhu 1 kabel Dallas Gunakan variabel ini untuk membaca suhu sensor yang terhubung. Nilai-nilai ini tentu saja hanya dapat dibaca. Id sensor harus ditempatkan setelah hashtag.
Ketika sebuah variabel dipanggil tetapi belum disetel ke suatu nilai, nilainya akan menjadi NULL
.
Variabel dapat berupa boolean ( 1
atau 0
), float ( 3.14
), integer ( 10
), dan tipe string. Mendefinisikan string dilakukan dengan tanda kutip tunggal atau ganda.
Aturan ditulis dalam blok event
atau function
. Ini adalah blok yang terpicu ketika sesuatu terjadi; baik nilai pompa panas atau termostat baru telah diterima atau pengatur waktu diaktifkan. Atau dapat digunakan sebagai fungsi biasa
on [event] then [...] end on [name] then [...] end
Peristiwa dapat berupa parameter atau pengatur waktu Pompa Panas atau termostat:
on @Heatpump_State then [...] end on ?setpoint then [...] end on timer=1 then [...] end
Saat mendefinisikan fungsi, Anda cukup memberi nama pada blok Anda dan kemudian Anda dapat memanggilnya dari mana saja:
on foobar then [...] end on @Heatpump_State then foobar(); end
Fungsi dapat memiliki parameter yang dapat Anda panggil:
on foobar($a, $b, $c) then [...] on @Heatpump_State then foobar(1, 2, 3); end
Jika Anda memanggil suatu fungsi dengan nilai lebih kecil dari fungsi tersebut, semua parameter lainnya akan memiliki nilai NULL.
Saat ini ada satu fungsi khusus yang dipanggil saat sistem di-boot ketika kumpulan aturan baru disimpan:
on System#Boot then [...] end
Fungsi khusus ini dapat digunakan untuk menyetel global atau pengatur waktu tertentu pada awalnya.
Operator reguler didukung dengan asosiatif dan prioritas standarnya. Ini memungkinkan Anda juga menggunakan matematika biasa.
&&
: Dan
||
: Atau
==
: Sama dengan`
>=
: Lebih besar atau sama dengan itu
>
: Lebih besar lagi
<
: Lebih kecil dari itu
<=
: Lebih kecil atau sama dengan itu
-
: Minus
%
: Modulus
*
: Kalikan
/
: Membagi
+
: Ditambah
^
: Kekuatan
Tanda kurung dapat digunakan untuk memprioritaskan operator karena dapat digunakan dalam matematika biasa.
coalesce
Mengembalikan nilai pertama bukan NULL
. Misalnya, $b = NULL; $a = coalesce($b, 1);
akan mengembalikan 1. Fungsi ini menerima argumen dalam jumlah tidak terbatas.
max
Mengembalikan nilai maksimum parameter input.
min
Mengembalikan nilai minimum parameter input.
isset
Mengembalikan boolean true ketika variabel input masih NULL
dalam kasus lain ia akan mengembalikan false.
round
Membulatkan input float ke bilangan bulat terdekat.
floor
Nilai bilangan bulat terbesar yang kurang dari atau sama dengan input float.
ceil
Nilai integer terkecil yang lebih besar atau sama dengan input float.
setTimer
Menyetel pengatur waktu untuk dipicu dalam X detik. Parameter pertama adalah nomor pengatur waktu dan parameter kedua adalah jumlah detik sebelum diaktifkan. Pengatur waktu hanya menyala satu kali sehingga harus disetel ulang untuk kejadian yang berulang. Ketika pengatur waktu terpicu, maka akan terjadi peristiwa pengatur waktu seperti yang dijelaskan di atas. Misalnya
print
Mencetak nilai ke konsol.
concat
Menggabungkan berbagai nilai menjadi string gabungan. Misalnya: @SetCurves = concat('{zone1:{heat:{target:{high:', @Z1_Heat_Curve_Target_High_Temp, ',low:32}}}}');
on System#Boot then setTimer(3, 60); end on timer=3 then [...] setTimer(3, 60); end
Satu-satunya kondisi yang didukung adalah if
, else
, dan elseif
:
if [condition] then [...] else if [condition] then [...] end end
if [condition] then [...] elseif [condition] then if [condition] then [...] else [...] end elseif [condition] then [...] else [...] end
Setelah sistem aturan digunakan oleh lebih banyak pengguna, contoh tambahan akan ditambahkan ke dokumentasi.
Menghitung PERANG
on calcWar($Ta1, $Tb1, $Ta2, $Tb2) then #maxTa = $Ta1; if @Outside_Temp >= $Tb1 then #maxTa = $Ta1; elseif @Outside_Temp <= $Tb2 then #maxTa = $Ta2; else #maxTa = $Ta1 + (($Tb1 - @Outside_Temp) * ($Ta2 - $Ta1) / ($Tb1 - $Tb2)); end end
Titik setel termostat
on ?roomTemp then calcWar(32, 14, 41, -4); $margin = 0.25; if ?roomTemp > (?roomTempSet + $margin) then if @Heatpump_State == 1 then @SetHeatpump = 0; end elseif ?roomTemp < (?roomTempSet - $margin) then if @Heatpump_State == 0 then @SetHeatpump = 1; end else @SetZ1HeatRequestTemperature = round(#maxTa); end end
Reset pabrik dapat dilakukan pada antarmuka web tetapi jika antarmuka web tidak tersedia, Anda dapat melakukan reset ganda. Reset ganda sebaiknya dilakukan tidak terlalu cepat tetapi juga tidak terlalu lambat. Biasanya setengah detik antara kedua pengaturan ulang sudah cukup. Untuk menunjukkan bahwa reset ganda melakukan reset pabrik, led biru akan berkedip cepat (Anda perlu menekan reset lagi sekarang untuk memulai ulang HeishaMon kembali normal di mana hotspot WiFi akan terlihat lagi).
Di bawah ini Anda dapat menemukan beberapa detail teknis tentang proyek tersebut. Cara membuat kabel Anda sendiri. Cara membuat PCB Anda sendiri, dll.
Komunikasi dapat dilakukan melalui salah satu dari dua soket: CN-CNT atau CN-NMODE. Jika Anda sudah memiliki antarmuka WiFi Panasonic CZ-TAW1 yang ingin Anda ganti dengan HeishaMon, yang perlu dilakukan hanyalah mencolokkan kabel dari CZ-TAW1 dan menyambungkannya kembali ke perangkat HeishaMon Anda. Namun HeishaMon dan modul CZ-TAW1 asli tidak dapat digunakan secara bersamaan sebagai perangkat aktif. Namun dimungkinkan untuk menempatkan HeishaMon pada mode "Dengarkan Saja" yang memungkinkan HeishaMon dan modul CZ-TAW1 asli untuk hidup berdampingan. Satu-satunya kelemahannya adalah HeishaMon tidak dapat mengirim perintah dan menggunakan opsi PCB opsional.
Parameter komunikasi: TTL 5V UART 9600,8,E,1
Pin-out CN-CNT (dari atas ke bawah)
1 - +5V (250mA)
2 - 0-5V TX (dari pompa panas)
3 - 0-5V RX (ke pompa panas)
4 - +12V (250mA)
5 - GND
Pin-out CN-NMODE (dari kiri ke kanan)
"Peringatan! Seperti yang tercetak di PCB, pin kiri adalah pin 4 dan pin kanan adalah pin 1. Jangan hitung 1 sampai 4 dari kiri!
4 - +5V (250mA)
3 - 0-5V TX (dari pompa panas)
2 - 0-5V RX (ke pompa panas)
1 - GND
HeishaMon akan menerima daya dari Panasonic melalui kabel (daya 5v).
Memungkinkan untuk menghubungkan HeishaMon dalam jarak jauh. Hingga 5 meter berfungsi dengan kabel normal. Untuk jarak yang lebih jauh, konfigurasi TTL-ke-RS485 seperti yang ditunjukkan pada gambar di bawah dapat dilakukan. Namun HeishaMon memerlukan daya eksternal menggunakan daya 5v (misalnya dari kabel USB).
Pesanan RS-Online
perintah Conrad
Gunakan kabel 4 konduktor berpelindung 24 AWG.
PCB yang diperlukan untuk menyambung ke pompa panas dirancang oleh anggota proyek dan tercantum di bawah. Bagian terpenting dari perangkat keras adalah peralihan level antara 5v dari Panasonic ke 3.3v dari HeishaMon dan jalur pengaktifan GPIO13/GPIO15 setelah boot.
Desain PCD dari anggota proyek
Gambar Wemos D1 beta
Gambar ESP12-F
Untuk mempermudah Anda dapat memesan PCB lengkap dari beberapa anggota proyek:
Toko Tindie dari Igor Ybema (alias TheHogNL) yang berbasis di Belanda
papan:
esp8266 oleh komunitas esp8266 versi 3.0.2 Arduino
Semua lib yang kami gunakan diperlukan untuk kompilasi.
Daftar topik MQTT terdokumentasi terkini dapat ditemukan di sini
Perangkat lunak ini juga mendukung pembacaan sensor suhu 1-kawat ds18b20. Konfigurasi 1 kabel yang tepat (dengan resistor pull-up 4,7kohm) yang terhubung ke GPIO4 akan dibaca setiap detik yang dikonfigurasi (minimal 5) dan dikirim ke topik panasonic_heat_pump/1wire/"sensor-hex-address". Pada papan yang sudah jadi, resistor 4,7kohm ini sudah terpasang.
Heishamon yang lebih baru dan besar berisi dua relay onboard yang dapat dinyalakan dan dimatikan menggunakan perintah MQTT. Relai dapat digunakan untuk peralihan kontak apa pun, bahkan listrik 230V (maks 5A). Misalnya untuk mengganti kontak 230V di pompa panas untuk mengontrol 'termostat eksternal', menghidupkan atau mematikan pompa, atau perangkat berdaya rendah lainnya. Saya tidak menyarankan penggunaan relai sebagai saklar pemanas listrik karena menggunakan terlalu banyak daya. Untuk mengontrol relay cukup kirimkan nilai 1 atau 0 ke topik MQTT "panasonic_heat_pump/gpio/relay/one" untuk relay satu atau "panasonic_heat_pump/gpio/relay/two" untuk relay dua.
Jika papan heishamon Anda mendukung opentherm, perangkat lunak juga dapat digunakan untuk menjembatani informasi opentherm dari termostat yang kompatibel ke otomatisasi rumah Anda melalui MQTT atau JSON dan seperti disebutkan di atas, perangkat lunak ini juga dapat dihubungkan langsung dalam aturan untuk menghubungkan informasi opentherm ke pompa panas dan sebaliknya , misalnya untuk menampilkan suhu luar dari pompa panas pada termostat terbuka Anda. Jika Anda mengaktifkan dukungan opentherm di pengaturan akan ada tab baru yang terlihat di halaman web. Pada tab itu Anda akan melihat nilai opentherm. Ada yang bertipe R(ead) dan ada pula yang bertipe W(rite), dan ada pula yang keduanya. Baca berarti termostat dapat membaca informasi tersebut dari heishamon. Anda memberikan informasi tersebut melalui MQTT (atau menggunakan aturan) dengan memperbarui nilai ini pada topik mqtt 'opentherm/read', misalnya 'panasonic_heat_pump/opentherm/read/outsideTemp'. Nilai tulis adalah informasi dari termostat, seperti 'roomTemp'. Ini tersedia di topik mqtt 'opentherm/write'. Anda dapat menggunakan nilai-nilai ini untuk mengubah perilaku pompa panas sesuka Anda menggunakan otomatisasi rumah dan perintah set mqtt ke heishamon dalam menggunakan aturan internal.
Variabel opentherm yang tersedia adalah:
chEnable yang merupakan boolean yang menunjukkan apakah pemanas sentral harus diaktifkan. Ini sering digunakan ketika termostat ingin memanaskan rumah Anda.
dhwEnable yang merupakan boolean yang menunjukkan apakah pemanasan dhw harus diaktifkan. Sering digunakan sebagai pilihan pengguna pada termostat untuk menonaktifkan pemanas DHW selama liburan
coollingEnable yang merupakan boolean yang menunjukkan apakah pendinginan harus diaktifkan. Jumlah pendinginan diminta di 'coolingControl', lihat di bawah.
roomTemp adalah nilai floating point dari suhu ruangan yang diukur dengan termostat
roomTempSet adalah nilai floating point dari setpoint suhu ruangan yang diminta pada termostat
chSetpoint adalah nilai floating point dari setpoint air yang dihitung oleh termostat. Termostat opentherm mencoba menyetel chSetpoint ini agar tidak melampaui setpoint ruangan. Dapat digunakan untuk menyetel setpoint air pada pompa panas, tetapi sebagian besar termostat merespons terlalu cepat dibandingkan dengan cara kerja pompa panas
maxRelativeModulation adalah jumlah modulasi (0-100%) yang boleh digunakan oleh pompa panas (budak opentherm) (lihat relativeModulation dalam nilai READ, yang harus selalu sama atau lebih rendah dari maks ini)
cooldownControl adalah jumlah pendinginan (0-100%) yang diminta termostat dari pompa panas. Memerlukan termostat terbuka dengan dukungan pendinginan.
dhwSetpoint adalah nilai floating point yang merupakan setpoint DHW saat ini berdasarkan termostat, namun juga dapat diatur oleh heishamon untuk menggantinya. Tidak semua termostat mendukung hal ini. Seharusnya tidak disetel lebih tinggi dari dhwSetUppBound, lihat di bawah.
maxTSet adalah nilai floating point yang menentukan setpoint air maksimum. Pengguna dapat mengaturnya di termostat atau juga dapat mengatur dari heishamon. Seharusnya tidak disetel lebih tinggi dari chSetUppBound, lihat di bawah.
chPressure adalah nilai floating point yang mendefinisikan tekanan air terukur dari pemanas sentral yang disediakan oleh heishamon
outsideTemp adalah nilai floating point yang mendefinisikan suhu luar terukur dari pemanas sentral yang disediakan oleh heishamon
inletTemp adalah nilai floating point yang menentukan suhu masuk air terukur dari pemanas sentral yang disediakan oleh heishamon
outletTemp adalah nilai floating point yang menentukan suhu keluar air terukur dari pemanas sentral yang disediakan oleh heishamon
dhwTemp adalah nilai floating point yang mendefinisikan suhu dhw terukur dari pemanas sentral yang disediakan oleh heishamon
relativeModulation adalah jumlah (0-100%) modulasi yang sedang dijalankan oleh pompa panas (budak opentherm), harus selalu lebih rendah atau sama dengan maxRelativeModulation yang disetel oleh termostat
flameState adalah nilai boolean (kirim 'true', 'on' atau '1' untuk mengaktifkan) yang menentukan apakah pemanas sentral menyediakan panas ke pusat
chState adalah nilai boolean (kirim 'true', 'on' atau '1' untuk mengaktifkan) yang menentukan apakah pompa panas berada pada mode pemanas ruangan/pusat (misalnya katup 3 arah pada ruangan, dalam mode pemanasan)
dhwState adalah nilai boolean (kirim 'true', 'on' atau '1' untuk mengaktifkan) yang menentukan apakah pompa panas berada pada mode DHW (misalnya katup 3 arah pada dhw)
coolingState adalah nilai boolean (kirim 'true', 'on' atau '1' untuk mengaktifkan) yang menentukan apakah pompa panas berada pada mode pendinginan ruangan/pusat (misalnya katup 3 arah pada ruangan, dalam mode pendinginan)
dhwSetUppBound adalah nilai bilangan bulat dari 0 hingga 127 yang menetapkan suhu DHW maksimal yang didukung sehingga termostat tidak dapat meminta dhwSetpoint lebih tinggi dari ini. Default diatur ke 75. Untuk mengganti, kirim pesan MQTT ke topik ini dan simpan sehingga heishamon menerimanya lagi setelah reboot.
dhwSetLowBound adalah nilai bilangan bulat dari 0 hingga 127 yang menetapkan suhu minimum DHW yang didukung sehingga termostat tidak dapat meminta dhwSetpoint lebih rendah dari ini. Default diatur ke 40. Untuk mengganti, kirim pesan MQTT ke topik ini dan simpan sehingga heishamon menerimanya lagi setelah reboot.
chSetUppBound adalah nilai bilangan bulat dari 0 hingga 127 yang menetapkan suhu maksimum CH (air pemanas) yang didukung sehingga termostat tidak dapat meminta chSetpoint lebih tinggi dari ini. Default diatur ke 65. Untuk mengganti, kirim pesan MQTT ke topik ini dan simpan sehingga heishamon menerimanya lagi setelah reboot.
chSetLowBound adalah nilai bilangan bulat dari 0 hingga 127 yang menetapkan suhu min CH (air pemanas) yang didukung sehingga termostat tidak dapat meminta chSetpoint lebih rendah dari ini. Default diatur ke 20. Untuk mengganti, kirim pesan MQTT ke topik ini dan simpan sehingga heishamon menerimanya lagi setelah reboot.
Daftar byte terdokumentasi yang didekripsi saat ini dapat ditemukan di sini
Openhab2
Asisten Rumah
Panduan IOBroker
Domotikz