Catatan: Manajer Pengisian cFos dapat membaca sebagian besar inverter surya menggunakan SunSpec (tipe perangkat "SunSpec Solar Inverter / Meter"). Dalam hal ini, anda tidak perlu membuat definisi meteran anda sendiri.
CFos Charging Manager memungkinkan Anda untuk membuat definisi meteran Anda sendiri untuk mendukung meteran yang tidak ada dalam repertoar standar. Saat ini ada tiga jenis: Penghitung Modbus, penghitung HTTP/JSON dan penghitung MQTT/JSON. File-file definisi untuk counter-counter ini sangat mirip. Penghitung Modbus membaca datanya melalui Modbus dari register tertentu, sementara penghitung HTTP/JSON mengambil datanya melalui permintaan HTTP dan mengurai JSON sebagai respons. Untuk penghitung MQTT/JSON, Manajer Pengisian cFos berlangganan topik MQTT dan mengurai pesan yang diterbitkan di bawah topik sebagai JSON. Untuk penguraian, cFos Charging Manager menggunakan "bahasa kueri" kecil. Berikut ini adalah dokumentasi kemampuan MQTT di cFos Charging Manager.
Selain sejumlah variabel yang sudah ditentukan sebelumnya, seperti arus dan tegangan, penghitung yang ditentukan pengguna juga dapat membaca variabel yang ditentukan pengguna yang tidak diketahui, meminta input dan mengatur output. Membaca variabel dan mengatur output memungkinkan evaluasi formula. Dalam kombinasi dengan variabel Charging Manager dan output Charging Manager global yang dijelaskan di bawah ini, ini adalah fitur yang dahsyat dan bahkan memungkinkan tugas otomatisasi rumah tertentu dan kontrol perangkat eksternal seperti penyimpanan baterai. Jika Anda menyadari tugas kontrol dengan ini, mohon berikan umpan balik kepada kami. Kami sangat tertarik dengan apa yang dikontrol orang dengan cFos Charging Manager dan ini membantu kami untuk mengembangkan Charging Manager lebih lanjut sesuai dengan kebutuhan pelanggan.
Berikut ini adalah contoh definisi sederhana untuk Modbus yang membaca satu register untuk daya aktif. Anda dapat dengan mudah memodifikasi nomor register untuk aplikasi spesifik Anda:
Contoh definisi untuk register tunggal.
Berikut ini adalah contoh definisi untuk Modbus dan satu untuk HTTP/JSON:
Unduh contoh definisi untuk Modbus meter
Unduh contoh definisi untuk HTTP/JSON meter
Charging Manager sudah dilengkapi dengan beberapa file seperti itu, tetapi Anda dapat mengunggah file Anda sendiri di bawah "System configuration" dan juga menghapusnya lagi.
Di sini Anda akan menemukan sebagian besar definisi meteran yang kami sediakan:
Unduh definisi penghitung yang disediakan
Jika Anda telah membuat file penghitung Anda sendiri dan mungkin relevan bagi pengguna lain, kami akan sangat berterima kasih jika Anda dapat menyediakannya bagi kami. Kemudian kami akan memberikannya dengan versi Charging Manager di masa mendatang.
Unduh definisi meteran untuk meteran tambahanDefinisi penghitung adalah file JSON dengan objek JSON global yang memiliki properti dan sub-objek. 'rtype' menentukan jenis operasi pembacaan: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' menentukan jenis perangkat: 0 = Perangkat lain, 1 = Meteran, 2 = Inverter, 4 = Penyimpanan baterai.
Anda dapat menentukan angka dalam desimal atau heksa dengan awalan 0x. Komentar satu baris dengan menggunakan // juga diperbolehkan.
Kami merekomendasikan untuk menjalankan file definisi Anda melalui validator JSON5, misalnya validator JSON5 ini. Anda harus membaca bab Rumus untuk memahami nilai mana yang dapat digunakan dalam rumus dalam referensi berikut.
silence_period, dalam msec. ditentukan, panjang jeda sebelum akses Modbus RTU, sehingga perangkat mengenali awal pesan.
silence_same_slave, true: Jeda juga diamati dengan beberapa akses ke perangkat yang sama.
retries: Jumlah retries jika perangkat tidak merespons.
rcv_timeout: dalam msec. waktu tunggu maksimum per akses hingga perangkat merespons.
modbus_read: Nomor fungsi dari perintah baca Modbus, biasanya 3 atau 4.
modbus_read_max_registers: Jumlah maksimum register yang dapat dibaca dalam satu waktu.
modbus_allow_gaps: true = Area register yang tidak terpakai dapat dibaca dalam operasi baca.
connect_timeout: dalam msec. waktu tunggu maksimum untuk koneksi TCP.
delay_after_connect: dalam msec. Jeda setelah koneksi terjalin sebelum mengirim perintah pertama.
upd_delay: dalam msec. menentukan interval waktu pembacaan perangkat. Beberapa perangkat akan kelebihan beban jika terlalu sering ditanyakan.
manufacturer: String, nama produsen. Ini ditampilkan dalam informasi tambahan ubin.
delay_accumulated: true = Nilai akumulasi (kWh) hanya ditanyakan setiap 3 detik atau jika ada daya yang cukup. false = Nilai-nilai ini selalu ditanyakan.
ui_addr: URL, jika berbeda dengan alamat perangkat untuk memanggil antarmuka web.
dicadangkan: Larik dengan nilai yang diinterpretasikan sebagai 0 (berguna jika perangkat mendukung nilai tertentu, tergantung modelnya).
Jika Anda menghilangkan properti yang tercantum di atas, cFos Charging Manager mengambil nilai default yang bekerja dengan baik dalam banyak kasus.
Dalam definisi JSON, langkah selanjutnya adalah definisi variabel yang digunakan meteran untuk membaca atau menghitung nilai arus, tegangan, dll. Variabel berikut ini digunakan oleh Charging Manager. Manajer Pengisian Daya mengetahui variabel berikut ini:
type_designation, version, firmware_version, serial: Variabel-variabel ini membentuk nama model seperti yang ditunjukkan pada info tambahan pada ubin. Ini ditanyakan sekali ketika mengatur atau mengatur ulang meteran.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: CFos Charging Manager mencoba menghitung nilai untuk voltage_l1..l3, current_l1..l3 yang ditandatangani, power_w dan power_va dari ini. Anda tidak harus menentukan semua variabel. Charging Manager cFos mencoba untuk menghitung nilai dari variabel yang ada.
import_wh, export_wh: Charging Manager menggunakan variabel-variabel ini untuk menampilkan import_wh dan export_wh. Untuk pengukur searah (misalnya inverter), anda harus selalu mendefinisikan import_wh saja. Export_wh hanya boleh didefinisikan untuk pengukur dua arah (seperti tangki penyimpanan atau pengukur referensi jaringan).
soc: Jika tersedia, Status Pengisian daya tangki penyimpanan baterai ditampilkan dalam % di ubin.
Selain itu, Anda dapat menetapkan variabel lain dengan nama berbeda yang dibacakan pada setiap pembaruan atau dihitung menggunakan rumus. Jika Anda mendefinisikan variabel yang dimulai dengan CM, misalnya CM._set_price, nilai yang ditetapkan akan disimpan dalam variabel Manajer Pengisian global (lihat di bawah) dan dapat ditanyakan.
Variabel dengan *: Jika Anda mendefinisikan variabel yang dimulai dengan *, variabel tersebut akan ditampilkan di UI pada ubin meteran di bawah informasi yang diperluas, misalnya suhu penyimpanan baterai.
Objek diberi nama sesuai dengan nama variabel yang tercantum di atas dan memiliki properti sebagai berikut: fixed: String dengan nilai tetap.
Berguna jika, misalnya, tidak ada nilai yang dapat ditentukan, misalnya untuk type_designation atau voltase. expr: String, variabel tidak dibacakan tetapi dievaluasi sebagai rumus. type: Jika bukan fixed atau expr, jenis variabel: int16, uint16, int32, uint32, float, int64, string. Ini penting bagi Modbus untuk membaca register dalam format yang benar. uint16 dan uint32 adalah tipe yang hanya dapat menerima bilangan positif.
Dengan JSON/HTTP, Anda biasanya dapat menggunakan float. resolusi: float, nilai yang dibaca dikalikan dengan 'resolusi'. Nilai untuk tegangan harus dalam volt, arus dalam miliampere, daya dalam watt, energi dalam watt-jam (Wh).
Dengan 'resolusi' negatif, Anda dapat membalikkan nilai jika memiliki tanda yang berlawanan. sekali: bool (benar atau salah), jika benar, nilai hanya dibaca satu kali saat perangkat diinisialisasi, jika tidak, secara berkala. alamat: angka (Modbus) atau string (HTTP / JSON), nomor register Modbus atau URL HTTP dari nilai yang akan dibaca. kueri:
String, untuk HTTP JSON, spesifikasi dalam bahasa kueri Manajer Pengisian Daya yang digunakan untuk menemukan nilai yang akan dibaca dalam respons JSON. order: String, untuk Modbus urutan byte, baik "hl" atau "lh", yang berisi nilai tersebut. length: angka, untuk Modbus, panjang string dalam register. Untuk variabel 'versi' dan 'firmware_version', 'length' digunakan untuk mengubah versi numerik menjadi string dengan titik-titik. Nilai 2 atau 4 diizinkan untuk 'length', yang kemudian menghasilkan format versi a.b, dan a.b.c.d. Dengan 'length' 2 dan tipe 'int16' atau 'uint16', Charging Manager memisahkan byte rendah dan tinggi dengan titik, dengan 'int32' atau 'uint32' kata rendah dan tinggi, dengan 'int64' kata rendah dan tinggi. Untuk 'lenth' 4 dan 'int32' atau 'uint32', Manajer Pengisian membagi nilai menjadi 4 byte yang dipisahkan dengan titik.
Untuk 'int64', 4 kata yang sesuai. regex: String. Jika ekspresi reguler ditentukan, respons penghitung tidak perlu dalam bentuk JSON. Seluruh kecocokan dari ekspresi reguler atau kelompok pertama akan dievaluasi sebagai hasilnya. Harap gunakan ini hanya jika perangkat tidak mengembalikan JSON.
Berikut adalah daftar fitur ekspresi reguler kami: sembarang karakter: . kelas bernama:
\d \s \w \D \S \W kelas anonim: [a-z0-9_], [^0-9], [^\d] kelompok dengan alternatif: (ab|cd|ef) kelompok yang tidak diambil: (?:ab|cd) (serakah) sekali atau tidak sama sekali: a?, a???
(serakah ) banyak atau tidak sama sekali: a*, a*?
(serakah ) sekali atau lebih: a+, a+? awal string: ^ akhir string: $
Charging Manager dapat menanyakan hingga 32 nilai input dari berbagai register atau elemen JSON per perangkat. Properti "Input" adalah larik JSON. Anda harus mendefinisikan properti berikut ini untuk masing-masing input:
address: Address (Modbus register atau URL).
hitung: Jumlah bit input yang akan dibaca dengan permintaan ini.
query: Untuk HTTP/JSON, bahasa kueri untuk menemukan nilai dalam respons.
Manajer Pengisian cFos membaca semua input yang didefinisikan dengan cara ini dengan setiap pembaruan dan menempatkan bit-bit secara internal dalam array, yang kemudian dapat ditanyakan dengan rumus, Input1..InputN...
Manajer Pengisian Daya dapat mengalihkan hingga 32 output per perangkat. Output didefinisikan dalam "output" sebagai larik JSON objek output. Semua output dialihkan pada akhir setiap siklus pembaruan jika status masing-masing output telah berubah.
Untuk setiap output, Anda harus mendefinisikan properti berikut di objek output:
alamat: URL HTTP dengan metode HTTP opsional, misalnya GET http://www.example.com?output1=${var1}. Untuk mengatur register Modbus, anda dapat menggunakan HTTP API dari cFos Charging Manager. Charging Manager mendeteksi akses yang cocok di localhost dan mengarahkan permintaan ke handler internal, sehingga Anda tidak memerlukan otorisasi seperti pada akses HTTP API eksternal. Jika URL kosong setelah semua penggantian, tidak ada keluaran yang ditetapkan. Sebagai contoh, Anda hanya dapat mengganti keluaran jika variabel tertentu ada (lihat rumus: fungsi exists()). Dalam alamat Anda juga dapat menentukan ${address} dan ${id}. Ini adalah alamat perangkat saat ini dan ID Modbus seperti yang didefinisikan dalam pengaturan. Alamat dan id terutama digunakan untuk menggunakan Modbus API (lihat di bawah).
body: Tubuh HTTP opsional untuk POST atau PUT.
Dalam URL dan body, Anda dapat menggunakan rumus ${expr} yang merujuk variabel Charging Manager global atau dari penghitung masing-masing. Rumus 'expr' dievaluasi saat mengatur keluaran dan diganti dalam teks URL atau badan. Jika, pada contoh di atas, http://www.example.com?output1=1 mengatur keluaran dan http://www.example.com?output1=0 menghapusnya, Anda dapat mendefinisikan variabel 'var1' dan mengaturnya ke 1 atau 0 sesuai keinginan. Dengan cara ini, Anda juga dapat menulis nilai numerik untuk mengontrol kinerja memori dalam register Modbus yang sebelumnya telah Anda simpan dalam variabel menggunakan rumus.
Jika alih-alih mengoper nilai numerik dalam URL, Anda perlu mengganti satu teks dengan teks lain tergantung pada rumus, seperti dengan soket WLAN Shelly, Anda dapat menuliskannya seperti ini: ${if expr`text1`text2}. 'Apostrof' adalah tanda kutip (kode ASCII 96). Jika 'expr' != 0, text1 akan dimasukkan, jika tidak, text2. Untuk soket WLAN Shelly, URL-nya akan terlihat seperti ini: http://<ip-addr>/relay/0?turn=${if expr`on`off}, yaitu jika expr != 0, Charging Manager akan memanggil http://<ip-addr>/relay/0?turn=on, jika tidak, http://<ip-addr>/relay/0?turn=off.
Jika Anda memasukkan jalur relatif sebagai URL, Manajer Pengisian Daya akan mengambil alamat yang dikonfigurasikan untuk masing-masing perangkat. Jika Anda memasukkan 'localhost' sebagai domain, Charging Manager akan mengambil alamat perangkat yang menjalankannya. Jika mendeteksi akses ke API-nya sendiri, ia menggunakan penangan internal alih-alih mengeksekusi akses HTTP penuh, sehingga Anda tidak perlu menyimpan nama pengguna dan kata sandi dalam definisi penghitung. URL yang dimulai dengan * akan menyebabkan Charging Manager selalu melakukan akses HTTP penuh.
Atur ulang keluaran: Selain larik "output", Anda juga dapat mendefinisikan larik bernama "reset" yang terstruktur seperti larik "output". Ini dapat digunakan untuk mengatur ulang output ke nilai awal ketika perangkat dinonaktifkan. Dengan ini, dikombinasikan dengan variabel yang ditentukan pengguna dan "once": true, Anda dapat mengatur unit kembali ke kondisi awal.
Tulis output secara berkala: Untuk beberapa perangkat, output harus ditulis secara berkala, jika tidak, perangkat akan mengatur ulang nilainya ke "default". Sebagai contoh, memori Kostal menggunakan aturan default lagi jika kontrol memori tidak ditulis secara aktif untuk sementara waktu. Untuk mengatur output secara berkala, Anda dapat mengawali alamat dengan #xxx#, di mana xxx menunjukkan setiap berapa detik output ditulis ulang, meskipun nilai yang akan ditulis tetap sama. Sebagai contoh, jika alamatnya adalah /cnf?cmd=set_cm_vars&name=test&val=42, Anda dapat menggunakan #30#/cnf?cmd=set_cm_vars&name=test&val=42 untuk memastikan bahwa nilai ini dituliskan setiap 30 detik.
Saat ini, nama anggota dan operator "." dan "[]" dapat digunakan dalam ekspresi pencarian "query", contoh:
tes | Elemen bernama "test" |
nama1.nama2 | Elemen bernama "nama2" dalam objek anak "nama1" |
nama[idx] | Elemen "idx" dari elemen objek "nama". "idx" bisa berupa angka, misalnya untuk array atau string |
nama["u2"] | Elemen "u2" dari elemen objek "nama", sesuai dengan "nama.u2" |
name[{"el1": "v1", "el2": 3}].value | Pilih elemen larik yang memenuhi kondisi notasi objek dan evaluasi elemen bernama 'nilai'. Di sini, misalnya, dalam larik 'nama', elemen dipilih yang memiliki elemen objek 'el1' dengan nilai 'v1' dan 'el2' dengan nilai 3 dan kemudian nilai elemen 'nilai' dikembalikan dari objek ini. |
Anda bisa membuat variabel dalam konfigurasi Charging Manager. Anda bisa menggunakan nilai tetap atau formula sebagai nilainya. Pada akhir setiap siklus pembaruan, Charging Manager menghitung ulang nilai variabel-variabel ini jika perlu. Anda kemudian dapat menggunakannya dalam parameter Charging Manager (tertentu), Charging Rules (Aturan Pengisian Daya) atau untuk mengontrol output. Anda juga bisa menulis Ex.member atau Mx.member sebagai variabel. Di sini, Exdan Mxadalah ID perangkat dari wallbox atau meteran yang diatur dalam Charging Manager. member adalah variabel "yang ditentukan pengguna" yang disimpan dalam perangkat yang sesuai. Beberapa variabel mungkin memiliki makna khusus: Untuk KEBA "out1" adalah output switching, untuk ABB B23 meter "out1" dan "out2" adalah output switching (untuk model yang mendukung ini). Angka 1 mengaktifkan output, angka 0 mematikannya lagi.
Jika Anda memiliki peralatan yang harus dinyalakan dalam kondisi tertentu tetapi kemudian dijalankan untuk sementara waktu (misalnya mesin cuci, mesin pencuci piring), Anda juga dapat mendefinisikan variabel sebagai "pemicu". Maka rumus variabelnya adalah kondisi dimana variabel tersebut diatur ke 1. Setelah waktu yang dapat disesuaikan, variabel tersebut kemudian diatur ke 0 lagi. "Kondisi pemicu ulang" memungkinkan waktu hingga mematikan (yaitu mengatur variabel ke 0) untuk diperpanjang lagi dan lagi selama kondisi terpenuhi.
Untuk tujuan pengujian, Anda dapat menampilkan Manajer Pengisian Daya dan variabel meteran, misalnya harga Awattar saat ini:
Dalam konfigurasi Charging Manager, Anda dapat mengonfigurasi output global seperti dijelaskan di atas dalam definisi penghitung di bawah 'Output'. Ini ditetapkan pada akhir setiap siklus pembaruan jika statusnya telah berubah. Jika Anda ingin mengontrol output switching pada perangkat yang ditentukan pengguna, konvensi di atas direkomendasikan (lihat Charging Manager Variables): Anda menetapkan variabel dengan nama "out1", "out2", dsb. di dalam penghitung yang ditentukan pengguna dan mengatur output di dalam penghitung yang ditentukan pengguna yang mengalihkan output tergantung pada nilai variabel-variabel ini.
Modbus API dari Charging Manager digunakan untuk mengontrol perangkat Modbus yang memiliki alamat Modbus RTU atau TCP (dapat diakses dari Charging Manager). Untuk Modbus RTU, masukkan COMx,bd,8,p,s sebagai alamat, di mana x adalah nomor port COM, bd adalah baud rate, p adalah paritas ('N', 'E' atau 'O') dan s adalah jumlah stop bit (1 atau 2), seperti dalam konfigurasi masing-masing perangkat. Untuk Modbus TCP, penerima adalah alamat IP perangkat dalam jaringan Charging Manager termasuk nomor port.
URL (untuk HTTP GET) dari Modbus API adalah:
/cnf?cmd=modbus_get atau /cnf?cmd=modbus_set
Manajer Pengisian cFos mendukung parameter kueri tambahan berikut:
addr: Alamat perangkat Modbus RTU atau TCP yang disebutkan di atas.
func: Nomor fungsi Modbus, misalnya untuk membaca 3 atau 4, untuk menulis 6 atau 16.
id: ID perangkat dari perangkat Modbus.
reg: Nomor register Modbus. Nilai bisa diberikan dalam desimal atau hex (dengan prefix 0x).
val: angka, nilai yang akan ditulis ke dalam register. Hilangkan saat membaca.
type: 'w' 16bit (default), d = 32bit, f = float, q = 64bit, s = string.
cnt: angka, panjang maksimum string dalam register, hilangkan untuk tipe lain atau set ke 1.
order: String, urutan byte, baik "hl" atau "lh".
Catatan: Jika 'counter' Anda terutama memiliki tugas kontrol, Anda bisa mencentang opsi 'Hide device' dalam pengaturan ubin ini supaya perangkat ini tidak muncul pada halaman awal.
Catatan: Beberapa meter yang dibaca melalui HTTP memerlukan nama pengguna/kata sandi sebagai otorisasi. Anda bisa menentukan ini dalam alamat untuk akses HTTP, misalnya dengan http://username:[email protected].
Jika nama pengguna atau kata sandi Anda mengandung "@", Anda harus menggantinya dengan "%40".