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 daripada daftar tertentu melalui Modbus, manakala meter HTTP/JSON mengambil data mereka melalui permintaan HTTP dan membaca JSON sebagai respons. Untuk meter MQTT/JSON, Pengurus Pengecasan cFos melanggan Topik MQTT dan membaca mesej yang diterbitkan di bawah topik sebagai JSON. Pengurus Pengecasan cFos menggunakan "Bahasa Pertanyaan" kecil untuk membacanya. 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 tidak diketahui, ditakrif pengguna, input pertanyaan dan output yang ditetapkan. Membaca dalam pembolehubah dan output tetapan membolehkan formula dinilai. Ini ialah ciri yang berkuasa dalam kombinasi dengan pembolehubah Pengurus Pengecasan dan output Pengurus Pengecasan global yang diterangkan di bawah malah membenarkan tugas automasi rumah tertentu dan kawalan peranti luaran seperti storan bateri. Jika anda menggunakan ini untuk melaksanakan tugas kawalan, sila berikan maklum balas kepada kami. Kami sangat berminat dengan perkara yang dikawal oleh pelanggan kami 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 RTU Modbus supaya peranti mengenali permulaan mesej.
silence_same_slave, true: Jeda dikekalkan walaupun terdapat berbilang akses kepada peranti yang sama.
cuba semula: Bilangan percubaan semula jika peranti tidak bertindak balas.
rcv_timeout: dalam msec: Masa menunggu maksimum sehingga peranti bertindak balas, setiap akses.
modbus_read: Nombor fungsi arahan Modbus untuk membaca, 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 membuat sambungan sebelum menghantar arahan pertama.
upd_delay: dalam msec: Menentukan selang masa peranti boleh dibaca. Sesetengah peranti menjadi lebih muatan jika ditinjau terlalu kerap.
pengilang: Rentetan, nama pengeluar. Ini akan dipaparkan dalam maklumat dikembangkan 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 yang ditafsirkan sebagai 0 (berguna jika peranti menyokong nilai tertentu bergantung pada model).
Jika anda meninggalkan sifat yang disenaraikan di atas, Pengurus Pengecasan cFos mengambil nilai lalai, yang berfungsi dengan baik dalam kebanyakan kes.
Seterusnya dalam definisi JSON ialah definisi pembolehubah yang digunakan oleh pembilang untuk membaca atau mengira nilai untuk arus, voltan, dsb. Pengurus Pengecasan mengetahui 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.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_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. Untuk meter satu arah (cth. penyongsang) anda hendaklah sentiasa mentakrifkan import_wh. Export_wh hanya boleh ditakrifkan untuk meter dwiarah (seperti meter storan atau penggunaan grid).
soc: Jika tersedia, Keadaan Caj unit storan bateri dipaparkan di sini dalam % dalam jubin.
Selain itu, anda boleh menentukan pembolehubah tambahan dengan nama yang berbeza, yang dibaca atau dikira menggunakan formula dengan setiap kemas kini. Jika anda mentakrifkan pembolehubah bermula dengan 'CM.' mula, cth. CM._set_price, nilai yang ditetapkan disimpan dalam pembolehubah Pengurus Pengecasan global (lihat di bawah) dan boleh ditanya dengan sewajarnya.
Pembolehubah dengan *: Jika anda menentukan pembolehubah yang bermula dengan '*', ini akan dipaparkan dalam UI dalam jubin meter di bawah maklumat lanjutan, cth.
Nota: Hanya nombor dan huruf az dan AZ boleh digunakan sebagai nama pembolehubah.
Objek dinamakan sempena nama pembolehubah yang disenaraikan di atas dan mempunyai sifat berikut:
tetap: Rentetan dengan nilai tetap. Berguna jika tiada nilai boleh ditentukan, contohnya untuk jenis_penetapan atau voltan.
expr: Rentetan. 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 bagi 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.
pesanan: String. Untuk Modbus, susunan bait, sama ada "hl" atau "lh", di mana nilainya tersedia. panjang: nombor. Dengan Modbus panjang rentetan dalam daftar, dengan pembolehubah 'versi' dan 'firmware_version' 'panjang' digunakan untuk menukar versi berangka menjadi rentetan dengan mata. 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 yang 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 dalam "output" sebagai tatasusunan JSON objek output. Semua output ditukar pada akhir setiap kitaran kemas kini jika status output masing-masing telah berubah.
Untuk setiap output anda mesti menentukan sifat berikut dalam objek output:
alamat: URL HTTP dengan kaedah HTTP pilihan, cth. GET//}. Untuk menetapkan daftar Modbus, anda boleh menggunakan API HTTP Pengurus Pengecasan cFos. Pengurus Pengecasan mengesan akses yang sesuai kepada localhost dan mengubah hala permintaan kepada pengendali dalaman, jadi 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 kepada pembolehubah Pengurus Pengecasan global atau meter masing-masing. Formula 'expr' dinilai apabila menetapkan output dan digantikan dalam teks URL atau kandungan. Dalam contoh di atas, jika http://www.example.com?output1=1 menetapkan output dan http://www.example.com?output1=0 mengosongkannya, anda boleh mentakrifkan pembolehubah 'var1' dan menetapkannya kepada 1 seperti yang dikehendaki atau tetapkan 0. Anda juga boleh menulis nilai berangka untuk mengawal prestasi memori ke dalam daftar Modbus yang telah anda simpan sebelum ini dalam pembolehubah menggunakan formula.
Jika, bukannya menghantar nilai berangka, anda perlu menggantikan satu teks dalam URL 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. Untuk soket WLAN Shelly, URL kelihatan seperti ini: http://<ip-addr>/relay/0?turn=${if expr`on`off}, iaitu jika expr != 0 Pengurus Pengecas memanggil kemudian 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 mengambil alamat yang dikonfigurasikan untuk peranti masing-masing. Jika anda menentukan '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 menjalankan akses HTTP penuh, supaya anda tidak perlu menyimpan nama pengguna dan kata laluan dalam definisi kaunter. 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 yang dipanggil "set semula" berstruktur seperti tatasusunan "output". Ini membolehkan output ditetapkan semula kepada nilai awalnya apabila peranti dinyahaktifkan. Ini, digabungkan dengan pembolehubah yang ditentukan pengguna dan "sekali": benar, membolehkan anda mengembalikan peranti kepada keadaan asalnya.
Tulis output secara berkala: Pada sesetengah peranti, output mesti ditulis secara berkala, jika tidak, peranti menetapkan nilai kembali kepada "standard". Sebagai contoh, memori Kostal akan kembali kepada peraturan lalainya jika pengawal memori tidak ditulis secara aktif untuk seketika. Untuk menetapkan output secara berkala, anda boleh awalan alamat dengan #xxx#, di mana xxx menunjukkan setiap saat output akan 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 boleh mengira semula nilai pembolehubah ini. 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 "tersuai" yang disimpan dalam peranti yang sepadan. Sesetengah pembolehubah boleh mempunyai makna istimewa: Untuk KEBA "out1" ialah output pensuisan, untuk ABB B23 meter "out1" dan "out2" ialah output pensuisan (pada 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.
Nota: Hanya nombor dan huruf az dan AZ boleh digunakan sebagai nama pembolehubah.
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 kaunter yang ditentukan pengguna dan sediakan output dalam kaunter yang ditentukan pengguna menukar output bergantung pada nilai pembolehubah ini.
API Modbus Pengurus Pengecasan digunakan untuk mengawal peranti Modbus yang mempunyai sebarang alamat Modbus RTU atau TCP (boleh dicapai oleh Pengurus Pengecasan). Sebagai alamat untuk Modbus RTU, masukkan COMx,bd,8,p,s, 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 yang dinyatakan di atas.
func: Nombor fungsi Modbus, cth. untuk membaca 3 atau 4, untuk menulis 6 atau 16.
id: ID Peranti peranti Modbus.
reg: Nombor daftar Modbus. Nilai boleh ditentukan dalam perpuluhan atau hex (dengan awalan 0x).
val: nombor: Nilai yang perlu ditulis pada daftar. Abaikan semasa membaca.
jenis: 'w' 16bit (lalai), d = 32bit, f = float, q = 64bit, s = rentetan.
cnt: number: Panjang maksimum rentetan dalam daftar, untuk jenis lain tinggalkan atau tetapkan kepada 1.
tertib: Rentetan: Tertib 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:password@192.168.2.111
. Jika nama pengguna atau kata laluan anda mengandungi "@", anda mesti menggantikannya dengan "%40".