Saya dihadapkan dengan tugas mengendalikan lantai yang hangat dari antarmuka Fibaro Home Center 2. Tampaknya menjadi tugas yang sederhana, tetapi tidak. Atas permintaan pelanggan, termostat harus didasarkan pada suhu lantai. Diputuskan untuk menggunakan termostat HeatIt.

Mereka paling sesuai dengan kebutuhan pelanggan:
- desain minimalis
- kemampuan memadamkan sebanyak mungkin segala sesuatu yang bersinar pada panel
- kemampuan untuk bekerja berdasarkan suhu lantai
- kemungkinan hubungan langsung dengan relay eksternal (karena pemanas di bawah lantai adalah air, Anda perlu mengontrol relay yang terletak di ruang boiler, yang membuka-tutup katup dari sirkuit yang sesuai)
Setelah mempelajari sedikit materi di jaringan, saya menemukan bahwa "keren" Fibaro Home Center 2 tidak dapat secara teratur mengatur termostat pada suhu> 30 derajat di antarmuka web dan> 28 derajat di aplikasi seluler. Apa untuk suhu lantai maksimum, tentu saja tidak cukup.

Pada saat yang sama, termostat HeatIt memungkinkan untuk mengatur hingga 40 derajat. Pertanyaannya adalah mengapa Fibaro tidak mengizinkan pemasang untuk mengatur kisaran suhu yang memungkinkan. Baiklah, saya pikir, kita akan menemukan sesuatu. Bahkan ada ide untuk menggeser pembacaan sensor NTC dengan resistor tambahan, tetapi kemudian pelanggan harus terbiasa dengan pembacaan suhu di "kakatua" bersyarat, yang tidak baik.
Ada sebuah ide, tetapi bagaimana jika kita mengambil dan mengirimkan nilai yang lebih besar?
Pertukaran antara klien web dan Home Center 2 dijelaskan dalam
Fibaro REST APITapi saya merasa lebih mudah untuk mencegat semua perintah di Wireshark.
Khusus untuk HeatIt:
POST / api / devices / 9 / action / setMode {"args": [1]}
POST / api / devices / 9 / action / setSetpointMode {"args": [1]}
POST / api / devices / 9 / action / setThermostatSetpoint {"args": [1,27]}
DeskripsisetMode - pemilihan mode (argumen: 1 - pada pemanasan, 11 - pemanasan ekonomis, 0 - off)
setSetpointMode - pilih mode dari mana suhu instalasi ditampilkan (argumennya sama)
setThermostatSetpoint - mengatur suhu target untuk mode (sesuai, argumen pertama adalah mode, yang kedua adalah suhu)
Anda juga dapat mengirim permintaan seperti:
DAPATKAN / api / callAction? DeviceID = ID & name = setThermostatSetpoint & arg1 = MODE & arg2 = TEMP VALUE
dll.
Anda juga dapat mempelajari semua perintah dan nilai untuk semua perangkat yang diinstal dengan permintaan REST:
DAPATKAN / api / perangkat
Jadi, kami mengirim termostat suhu 35 derajat, dan, lihatlah, termostat menerimanya.
Sekarang tugasnya adalah membuat pengganti untuk pengontrol suhu penuh waktu.
Opsi pertama adalah alat virtual Fibaro.
Saya membuat sketsa formulir:

Memulai menulis skrip:
Pertama, kami akan menemukan ID dari semua perangkat yang kami minati. Untuk melakukan ini, buka pengaturan masing-masing "perangkat" yang terkait dengan termostat kami dan lihat ID pada halaman atau di bilah alamat browser.
Dalam kasus saya, perangkat untuk mengatur suhu target (setPoint) - ID:
7Sensor suhu lantai - ID:
8Pemilihan mode operasi termostat - ID:
9

Selain itu, perangkat virtual kami juga memiliki ID sendiri, hanya dapat dilihat di bilah alamat browser, saya punya ID
12 ini . Selanjutnya, setiap elemen perangkat virtual juga memiliki ID sendiri, dalam kasus saya:
"Kecepatan saat ini." Saya memiliki ID "
Label1 ", "Suhu target" - ID "
Label2 "
Tombol "+" dan "-" - ID "
Button1 " dan ID "
Button2 ", masing-masing. "Mode" - ID "
Label1 ".
Nah, tombol "OFF", "ECO" dan "ON" - ID "
Button3 ", ID "
Button4 " dan ID "
Button5 ", masing-masing.
Loop utama:
Selanjutnya, kami menulis skrip untuk tombol:
Dengan tombol pemilihan mode, semuanya sederhana:
"MATI":
fibaro:call(9, 'setMode',0)
"ECO":
fibaro:call(9, 'setMode',11) fibaro:call(7, 'setSetpointMode',11)
"ON":
fibaro:call(9, 'setMode',1) fibaro:call(7, 'setSetpointMode',1)
Untuk tombol "+":
Untuk tombol "-":
currentSetPoint = tonumber(fibaro:getValue(7, 'value')) if (currentSetPoint > 5) then setPoint = currentSetPoint - 1 else setPoint = 5 end fibaro:call(7, 'setThermostatSetpoint',11, setPoint)
Secara umum, semuanya.
Ini berfungsi dengan baik, satu-satunya masalah adalah penundaan setelah menekan tombol. Jika Anda mengelola dari jaringan lokal, maka ini adalah 1-2 detik, tetapi jika Anda mengelola dari jarak jauh, penundaan dapat mencapai hingga 10 detik. Yaitu jika perlu, tambahkan atau turunkan suhu selusin derajat dari jarak jauh dapat memakan waktu beberapa menit.
Secara umum, ini tentu saja penopang, tetapi tidak ada jalan keluar lain. Dalam hal lain, ke depan, saya akan mengatakan bahwa seluruh sistem pada akhirnya akan berada di bawah kendali Iridium Mobile, jadi ini adalah solusi sementara.