Nota: Pengurus Pengecasan cFos boleh membaca kebanyakan penyongsang solar menggunakan SunSpec (jenis peranti "Penyongsang / Meter Suria SunSpec"). Dalam kes ini, anda tidak perlu mencipta definisi kaunter anda sendiri.
Pengurus Pengecasan cFos membolehkan anda mencipta definisi meter anda sendiri untuk menyokong meter yang tiada dalam himpunan standard. Pada masa ini terdapat tiga jenis: kaunter Modbus, kaunter HTTP/JSON dan kaunter MQTT/JSON. Fail definisi untuk kaunter ini sangat serupa. Meter Modbus membaca data mereka melalui Modbus daripada daftar tertentu, manakala meter HTTP/JSON mendapatkan data mereka melalui permintaan HTTP dan menghuraikan JSON sebagai tindak balas. Untuk meter MQTT/JSON, Pengurus Pengecasan cFos melanggan topik MQTT dan menghuraikan mesej yang diterbitkan di bawah topik sebagai JSON. Pengurus Pengecasan cFos menggunakan "bahasa pertanyaan" kecil untuk menghuraikan. Berikut ialah dokumentasi keupayaan MQTT dalam Pengurus Pengecasan cFos.
Sebagai tambahan kepada beberapa pembolehubah yang dipratentukan, seperti arus dan voltan, meter yang ditakrifkan pengguna juga boleh membaca pembolehubah yang ditakrifkan pengguna, input pertanyaan dan output yang ditetapkan. Membaca dalam pembolehubah dan output tetapan membolehkan penilaian formula. Dalam kombinasi dengan pembolehubah Pengurus Pengecasan dan output Pengurus Pengecasan global yang diterangkan di bawah, ini merupakan ciri yang berkuasa dan malah membenarkan tugas automasi rumah tertentu dan kawalan peranti luaran seperti storan bateri. Jika anda melaksanakan tugas kawalan dengan ini, sila berikan maklum balas kepada kami. Kami sangat berminat dengan perkara yang dikawal oleh orang ramai dengan Pengurus Pengecasan cFos dan ia membantu kami mengembangkan lagi Pengurus Pengecasan mengikut keperluan pelanggan.
Berikut ialah contoh mudah definisi Modbus yang membaca daftar kuasa aktif tunggal. Anda hanya boleh menukar nombor daftar untuk aplikasi khusus anda:
Contoh definisi untuk satu daftar.
Berikut adalah definisi contoh untuk Modbus dan satu untuk HTTP/JSON:
Muat turun definisi sampel untuk meter Modbus
Muat turun definisi sampel untuk meter/
Pengecas Pengecas sudah dilengkapi dengan beberapa fail seperti itu, tetapi anda boleh memuat naik fail anda sendiri di bawah "Konfigurasi sistem" dan juga menghapusnya lagi.
Di sini anda akan menemui sebahagian besar definisi kaunter yang kami sediakan:
Muat turun definisi meter yang dibekalkan
Sekiranya anda telah membuat fail kaunter anda sendiri dan mungkin relevan untuk pengguna lain, kami akan sangat berterima kasih sekiranya anda dapat membuatnya tersedia untuk kami. Kemudian kami akan menyampaikannya dengan Pengurus Pengecasan versi yang akan datang.
Muat turun definisi kaunter untuk lebih banyak kaunterTakrifan balas ialah fail JSON dengan Objek JSON global yang mempunyai sifat dan sub-objek. 'rtype' menentukan jenis operasi baca: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' menentukan jenis peranti: 0 = Peranti lain, 1 = Meter, 2 = Penyongsang, 4 = Storan bateri.
Anda boleh menentukan nombor sama ada dalam perpuluhan atau hex dengan awalan 0x. Komen satu baris menggunakan // juga dibenarkan. Kami mengesyorkan menjalankan fail definisi anda melalui pengesah JSON5, mis
Pastikan anda membaca bab Rumus untuk memahami nilai yang boleh digunakan dalam formula dalam rujukan berikut.
silence_period, dalam msec. menentukan panjang jeda sebelum akses Modbus RTU supaya peranti mengenali permulaan mesej.
silence_same_slave, true: Jeda dikekalkan walaupun dengan berbilang akses kepada peranti yang sama.
cuba semula : Bilangan percubaan semula jika peranti tidak bertindak balas.
rcv_timeout: dalam msec. masa menunggu maksimum bagi setiap akses sehingga peranti bertindak balas.
modbus_read: Nombor fungsi perintah baca Modbus, biasanya 3 atau 4.
modbus_read_max_registers: Bilangan maksimum daftar yang boleh dibaca sekali gus.
modbus_allow_gaps: true = Kawasan daftar yang tidak digunakan boleh dibaca dalam operasi baca.
connect_timeout: ialah msec. masa menunggu maksimum untuk sambungan TCP.
delay_after_connect: dalam msec. Jeda selepas mewujudkan sambungan sebelum menghantar arahan pertama.
upd_delay: dalam msec. menentukan selang waktu peranti boleh dibaca. Sesetengah peranti menjadi lebih muatan apabila ditinjau terlalu kerap.
pengilang: Rentetan, nama pengilang. Ini ditunjukkan dalam maklumat lanjutan jubin.
delay_accumulated: true = Nilai terkumpul (kWj) hanya disoal setiap 3 saat atau apabila terdapat kuasa yang mencukupi. false = Nilai-nilai ini sentiasa disoal.
ui_addr: URL, jika berbeza daripada alamat peranti untuk memanggil antara muka web.
terpelihara: Tatasusunan dengan nilai ditafsirkan sebagai 0 (berguna jika peranti menyokong nilai tertentu bergantung pada model).
Jika anda meninggalkan sifat yang disenaraikan di atas, Pengurus Pengecasan cFos akan menggunakan nilai lalai, yang berfungsi dengan baik dalam kebanyakan kes.
Langkah seterusnya dalam definisi JSON ialah definisi pembolehubah yang digunakan oleh meter untuk membaca atau mengira nilai untuk arus, voltan, dsb. Pengurus Pengecasan mengenali pembolehubah berikut:
type_designation, version, firmware_version, serial: Ini membentuk penetapan model seperti yang ditunjukkan dalam maklumat lanjutan jubin. Ini disoal sekali apabila menyediakan atau menetapkan semula kaunter.
voltan_l1..voltan_l3, arus_l1..arus_l3, kuasa_w, kuasa_var, kuasa_va, kuasa_w_l1..kuasa_w_l3: Pengurus Pengecasan cFos cuba mengira arus_l1..l3, kuasa_w dan kuasa_va yang ditandatangani daripada nilai ini untuk voltan_l1..l3. Anda tidak perlu menentukan semua pembolehubah. Pengurus Pengecasan cFos cuba mengira nilai daripada pembolehubah sedia ada.
import_wh, export_wh: Pengurus Pengecasan menggunakan pembolehubah ini untuk memaparkan import_wh dan export_wh. Dengan pembilang satu arah (cth penyongsang) anda hanya perlu mentakrifkan import_wh. export_wh hendaklah hanya ditakrifkan untuk meter dwiarah (seperti memori atau meter elektrik yang dibeli).
soc: Tersedia serta-merta, keadaan pengecasan storan bateri dipaparkan di sini dalam % dalam jubin.
Di samping itu, anda boleh menentukan pembolehubah lain dengan nama yang berbeza, yang dibaca dengan setiap kemas kini atau dikira menggunakan formula. Jika anda mentakrifkan pembolehubah yang menggunakan CM. bermula, cth. CM._set_price, nilai yang ditetapkan disimpan dalam pembolehubah Pengurus Pengecasan global (lihat di bawah) dan boleh disoal sewajarnya.
Pembolehubah dengan *: Jika anda mentakrifkan pembolehubah yang bermula dengan * , ini dipaparkan dalam UI dalam jubin kaunter di bawah maklumat lanjutan, cth suhu storan bateri.
Objek dinamakan sempena nama pembolehubah yang disenaraikan di atas dan mempunyai sifat berikut:
tetap: Rentetan dengan nilai tetap. Berguna jika, sebagai contoh, tiada nilai boleh ditentukan, cth. untuk jenis_penetapan atau voltan.
expr: String, pembolehubah tidak dibaca, tetapi dinilai sebagai formula.
jenis: Jika tidak tetap atau expr, jenis pembolehubah: int16, uint16, int32, uint32, float, int64, rentetan Ini penting untuk Modbus membaca daftar dalam format yang betul. uint16 dan uint32 adalah jenis yang hanya boleh menerima nombor positif. Dengan JSON/HTTP anda biasanya boleh menggunakan apungan.
resolusi: terapung, nilai baca didarab dengan 'resolusi'. Nilai voltan mestilah dalam volt, arus dalam miliampere, kuasa dalam watt, dan tenaga dalam watt-jam (Wh). Dengan 'resolusi' negatif anda boleh menyongsangkan nilai jika ia mempunyai tanda yang bertentangan.
sekali: bool (benar atau salah), jika benar, nilai hanya dibaca sekali apabila peranti dimulakan, sebaliknya secara berkala.
alamat: nombor (Modbus) atau String (HTTP/JSON), nombor daftar Modbus atau URL HTTP nilai yang akan dibaca.
pertanyaan: String, untuk HTTP JSON, maklumat dalam bahasa pertanyaan pengurus pengecasan yang mana ia mencari nilai untuk dibaca dalam respons JSON.
tertib: Rentetan, untuk Modbus tertib bait, sama ada "hl" atau "lh", di mana nilainya tersedia. panjang: nombor, dengan Modbus panjang rentetan dalam daftar. Untuk pembolehubah 'versi' dan 'versi_firmware', 'panjang' digunakan untuk menukar versi angka kepada rentetan dengan noktah. Nilai 2 atau 4 dibenarkan untuk 'panjang', yang kemudiannya menghasilkan format versi ab, dan abcd. Untuk 'panjang' 2 dan taip 'int16' atau 'uint16', Pengurus Pengecasan memisahkan bait rendah dan tinggi dengan titik, untuk perkataan rendah dan tinggi 'int32' atau 'uint32', untuk dword rendah dan tinggi 'int64'. Dengan 'lenth' 4 dan 'int32' atau 'uint32', Pengurus Pengecasan memecahkan nilai kepada 4 bait yang dipisahkan oleh titik. Untuk 'int64' 4 perkataan sepadan.
regex: String. Jika ungkapan biasa ditentukan, respons balas tidak perlu berada dalam JSON. Akibatnya, sama ada padanan keseluruhan ungkapan biasa atau kumpulan pertama dinilai. Sila gunakan hanya jika peranti tidak mengembalikan JSON. Berikut ialah senarai ciri ungkapan biasa kami:
sebarang char: .
dinamakan kelas: \d \s \w \D \S \W
kelas tanpa nama: [a-z0-9_], [^0-9], [^\d]
kumpulan dengan alternatif: (ab|cd|ef)
kumpulan tidak ditangkap: (?:ab|cd)
(tamak) sekali atau tiada: a?, a??
(tamak) ramai atau tiada: a*, a*?
(tamak) sekali atau lebih: a+, a+?
permulaan rentetan: ^
hujung rentetan: $
Pengurus Pengecasan boleh membuat pertanyaan sehingga 32 nilai input daripada daftar berbeza atau elemen JSON bagi setiap peranti. Sifat "Input" ialah tatasusunan JSON. Anda mesti menentukan sifat berikut untuk setiap input:
alamat: alamat (daftar Modbus atau URL).
count: bilangan bit input dibaca dengan permintaan ini.
pertanyaan: Untuk HTTP/JSON, bahasa pertanyaan untuk mencari nilai dalam respons.
Dengan setiap kemas kini, Pengurus Pengecasan cFos membaca semua input yang ditakrifkan dengan cara ini dan meletakkan bit secara dalaman dalam tatasusunan yang kemudiannya boleh ditanya dalam formula, Input1..InputN.
Pengurus Pengecasan boleh menukar sehingga 32 output bagi setiap peranti. Output ditakrifkan di bawah "output" sebagai tatasusunan JSON objek output. Semua output ditukar pada akhir setiap kitaran kemas kini jika status output masing-masing telah berubah.
Anda mesti menentukan sifat berikut dalam objek output untuk setiap output:
alamat: URL HTTP dengan kaedah HTTP pilihan, cth. GET//}. Untuk menetapkan daftar Modbus, anda boleh menggunakan API HTTP Pengurus Pengecasan cFos. Pengurus Pengecasan mengiktiraf akses yang sesuai kepada localhost dan mengubah hala permintaan kepada pengendali dalaman supaya anda tidak memerlukan kebenaran, seperti akses API HTTP luaran. Jika URL kosong selepas semua penggantian, tiada output ditetapkan. Sebagai contoh, anda hanya boleh menukar output jika pembolehubah tertentu wujud (lihat formula: wujud() fungsi). Anda juga boleh menentukan ${address} dan ${id} dalam alamat. Ini ialah alamat peranti semasa dan ID Modbus seperti yang ditetapkan dalam tetapan. Alamat dan id digunakan terutamanya untuk menggunakan API Modbus (lihat di bawah).
body: Badan HTTP pilihan untuk POST atau PUT.
Dalam URL dan kandungan, anda boleh menggunakan formula ${expr} yang merujuk pembolehubah Pengurus Pengecasan global atau daripada meter masing-masing. Formula 'expr' dinilai apabila output ditetapkan dan digantikan dalam teks URL atau kandungan. Dalam contoh di atas, jika//menetapkan output dan//mengosongkannya, anda boleh mentakrifkan pembolehubah 'var1' dan menetapkannya kepada 1 seperti yang dikehendaki atau tetapkan 0. Dengan cara ini, anda juga boleh menulis nilai berangka untuk mengawal prestasi memori dalam daftar Modbus yang anda simpan sebelum ini dalam pembolehubah menggunakan formula.
Jika, daripada menghantar nilai berangka dalam URL, anda perlu menggantikan teks dengan yang lain bergantung pada formula, seperti dengan soket WLAN Shelly, anda boleh menulisnya seperti ini: ${if expr`text1`text2}. "apostrof" ialah tanda belakang (kod ASCII 96). Jika 'expr' != 0, text1 digunakan, sebaliknya text2. URL untuk soket WLAN Shelly kelihatan seperti ini, contohnya: http://<ip-addr>/relay/0?turn=${if expr`on`off}, iaitu jika expr != 0 the Charging Manager maka memanggil http ://<ip-addr>/geganti/0?turn=on, jika tidak http://<ip-addr>/relay/0?turn=off.
Jika anda memasukkan laluan relatif sebagai URL, Pengurus Pengecasan menggunakan alamat yang dikonfigurasikan untuk peranti masing-masing. Jika anda memasukkan 'localhost' sebagai domain, Pengurus Pengecasan mengambil alamat peranti yang ia sedang berjalan. Jika ia mengesan akses kepada APInya sendiri, ia menggunakan pengendali dalaman dan bukannya melaksanakan akses HTTP penuh, supaya anda tidak perlu menyimpan nama pengguna dan kata laluan dalam definisi meter. URL yang bermula dengan * menyebabkan Pengurus Pengecasan sentiasa melaksanakan akses HTTP penuh.
Tetapkan semula output: Sebagai tambahan kepada tatasusunan "output", anda juga boleh menentukan tatasusunan bernama "set semula" yang berstruktur seperti tatasusunan "output". Ini bermakna output boleh ditetapkan semula kepada nilai awalnya apabila peranti dinyahaktifkan. Ini, digabungkan dengan pembolehubah yang ditentukan pengguna dan "sekali": benar, membolehkan anda memulihkan peranti kepada keadaan asalnya.
Tulis output secara berkala: Dengan sesetengah peranti, output mesti ditulis secara berkala, jika tidak peranti menetapkan semula nilai kepada "lalai". Sebagai contoh, memori Kostal menggunakan peraturan standardnya semula jika kawalan memori tidak ditulis secara aktif untuk seketika. Untuk menetapkan output secara berkala, anda boleh awalan alamat dengan #xxx#, dengan xxx menentukan berapa saat output ditulis semula, walaupun nilai yang akan ditulis kekal sama. Sebagai contoh, jika alamatnya ialah /cnf?cmd=set_cm_vars&name=test&val=42, anda boleh menggunakan #30#/cnf?cmd=set_cm_vars&name=test&val=42 untuk memastikan nilai ini ditulis setiap 30 saat menjadi.
Pada masa ini, nama ahli dan pengendali "." boleh digunakan dalam ungkapan carian "pertanyaan". dan "[]" digunakan, contoh:
ujian | Elemen bernama "ujian" |
nama1.nama2 | Elemen bernama "name2" dalam objek kanak-kanak "name1" |
nama [idx] | Elemen "idx" elemen objek "nama". "idx" boleh berupa angka, misalnya untuk tatasusunan atau rentetan |
nama ["u2"] | Elemen "u2" elemen objek "nama" sesuai dengan "name.u2" |
nama[{"el1": "v1", "el2": 3}].nilai | Pilih elemen tatasusunan yang memenuhi syarat tatatanda objek dan nilaikan elemen bernama 'nilai'. Di sini, sebagai contoh, elemen dipilih dalam tatasusunan 'nama' yang mempunyai elemen objek 'el1' dengan nilai 'v1' dan 'el2' dengan nilai 3 dan kemudian nilai elemen 'nilai' dikembalikan daripada objek ini . |
Anda boleh membuat pembolehubah dalam konfigurasi Pengurus Pengecasan. Anda boleh menggunakan nilai tetap atau formula sebagai nilai. Pada akhir setiap kitaran kemas kini, Pengurus Pengecasan mengira semula nilai pembolehubah ini jika perlu. Anda kemudian boleh menggunakan ini dalam (tertentu) parameter pengurus pengecasan, peraturan pengecasan atau untuk mengawal output. Anda juga boleh menulis E x.member atau M x.member sebagai pembolehubah. Di sini E x dan M x ialah ID peranti bagi kotak dinding atau meter yang disediakan dalam Pengurus Pengecasan. ahli ialah pembolehubah "ditakrifkan pengguna" yang disimpan dalam peranti yang sepadan. Sesetengah pembolehubah boleh mempunyai makna istimewa: Dengan KEBA "out1" ialah output pensuisan, dengan ABB B23 meter "out1" dan "out2" ialah output pensuisan (untuk model yang menyokong ini). A 1 menukar output, 0 mematikannya semula.
Jika anda mempunyai peranti yang perlu dihidupkan dalam keadaan tertentu tetapi kemudian perlu dijalankan untuk seketika (cth mesin basuh, mesin basuh pinggan mangkuk), anda juga boleh mentakrifkan pembolehubah sebagai "pencetus". Kemudian formula pembolehubah adalah keadaan yang menetapkan pembolehubah kepada 1. Selepas masa boleh laras, ia kemudian ditetapkan semula kepada 0. "Keadaan pencetus semula" membenarkan masa sehingga pemadaman (iaitu menetapkan pembolehubah kepada 0) untuk dilanjutkan lagi dan lagi selagi syarat dipenuhi.
Untuk tujuan ujian, anda boleh memaparkan Pengurus Pengecasan dan pembolehubah meter, contohnya harga semasa daripada Awattar:
Dalam konfigurasi Pengurus Pengecasan, anda boleh mengkonfigurasi output global seperti yang diterangkan di atas dalam definisi meter di bawah 'Output'. Ini ditetapkan pada penghujung setiap kitaran kemas kini jika statusnya telah berubah. Jika anda ingin mengawal output pensuisan dalam peranti yang ditentukan pengguna, konvensyen di atas disyorkan (lihat pembolehubah Pengurus Pengecasan): Anda menetapkan pembolehubah dengan nama "out1", "out2", dll. dalam meter yang ditentukan pengguna dan sediakan output dalam meter yang ditentukan pengguna yang berada dalam Tukar output bergantung pada nilai pembolehubah ini.
Modbus API Pengurus Pengecasan digunakan untuk mengawal peranti Modbus yang mempunyai sebarang alamat Modbus RTU atau TCP (yang boleh dicapai oleh Pengurus Pengecasan). Masukkan COMx,bd,8,p,s sebagai alamat untuk Modbus RTU, seperti dalam konfigurasi peranti individu, dengan x ialah nombor port COM, bd ialah kadar baud, p ialah pariti ('N', ' E' atau ' O') dan s ialah bilangan bit henti (1 atau 2). Dengan Modbus TCP, alamat ialah alamat IP peranti dalam rangkaian Pengurus Pengecasan termasuk nombor port.
URL (untuk HTTP GET) API Modbus ialah:
/cnf?cmd=modbus_get atau /cnf?cmd=modbus_set
Pengurus Pengecasan cFos menyokong parameter pertanyaan tambahan berikut:
addr: Alamat peranti Modbus RTU atau TCP di atas.
func: Nombor fungsi Modbus, cth. 3 atau 4 untuk membaca, 6 atau 16 untuk menulis.
id: ID Peranti peranti Modbus.
reg: Nombor daftar Modbus. Nilai boleh ditentukan dalam perpuluhan atau hex (dengan awalan 0x).
val: nombor, nilai untuk ditulis ke dalam daftar. ketinggalan semasa membaca.
jenis: 'w' 16bit (lalai), d = 32bit, f = float, q = 64bit, s = rentetan.
cnt: nombor, panjang maksimum rentetan dalam daftar, tinggalkan untuk jenis lain atau tetapkan kepada 1.
tertib: Rentetan yang mengandungi susunan bait, sama ada "hl" atau "lh".
Nota: Jika 'Meter' anda digunakan terutamanya untuk tujuan kawalan, anda boleh menyemak pilihan 'Sembunyikan peranti' dalam tetapan jubin ini supaya peranti ini tidak muncul pada halaman mula.
Nota: Beberapa meter dibaca melalui HTTP memerlukan nama pengguna/kata laluan sebagai kebenaran. Anda boleh menentukan ini dalam alamat untuk akses HTTP, contohnya dengan http://username:[email protected]
. Jika nama pengguna atau kata laluan anda mengandungi "@", anda mesti menggantikannya dengan "%40".