Dokumentasi

Penghitung yang ditentukan pengguna

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 tersedia dalam repertoar standar. Saat ini ada tiga jenis: Penghitung Modbus, penghitung HTTP/JSON, dan penghitung MQTT/JSON. File definisi untuk penghitung ini sangat mirip. Penghitung Modbus membaca datanya dari register tertentu melalui Modbus, sedangkan penghitung HTTP/JSON mengambil datanya melalui permintaan HTTP dan membaca JSON sebagai respons. Untuk MQTT/JSON meter, cFos Charging Manager berlangganan topik MQTT dan membaca pesan yang diterbitkan di bawah topik sebagai JSON. CFos Charging Manager menggunakan "Query Language" kecil untuk membaca. Berikut ini adalah dokumentasi dari kemampuan MQTT di cFos Charging Manager.

Selain berbagai variabel yang telah ditentukan sebelumnya, seperti arus dan tegangan, penghitung yang ditentukan pengguna juga dapat membaca variabel yang tidak diketahui, variabel yang ditentukan pengguna, input kueri, dan mengatur output. Pembacaan dalam variabel dan pengaturan output memungkinkan formula untuk dianalisis. Dikombinasikan dengan variabel Charging Manager dan output Charging Manager global yang dijelaskan di bawah ini, ini merupakan fitur yang kuat dan bahkan memungkinkan tugas otomatisasi rumah tertentu dan kontrol perangkat eksternal seperti unit penyimpanan baterai. Jika Anda menyadari tugas kontrol dengan ini, mohon berikan umpan balik kepada kami. Kami sangat tertarik dengan apa yang dikendalikan oleh pelanggan kami dengan cFos Charging Manager dan hal 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 tambahan

Struktur berkas definisi:

Definisi 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.

Definisi Modbus memiliki objek 'rtu' dengan properti berikut:




silence_period, dalam msec: Menentukan panjang jeda sebelum akses Modbus RTU sehingga perangkat mengenali dimulainya pesan. silence_same_slave, true: Jeda juga dipertahankan untuk beberapa akses ke perangkat yang sama. retries: Jumlah percobaan ulang jika perangkat tidak merespons. rcv_timeout: dalam msec: Waktu tunggu maksimum hingga perangkat merespons, per akses.

Properti global ini berlaku untuk Modbus TCP dan RTU:

modbus_read:

Nomor fungsi perintah Modbus untuk membaca, 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 digunakan dapat dibaca dalam operasi baca.

Untuk Modbus TCP dan HTTP/JSON terdapat objek 'tcp' dengan properti berikut:


connect_timeout: dalam msec: Waktu tunggu maksimum untuk koneksi TCP. delay_after_connect: dalam msec: Jeda setelah koneksi dibuat sebelum perintah pertama dikirim.

Kedua jenis definisi (Modbus dan HTTP/JSON) memiliki properti tambahan berikut ini:

upd_delay: dalam msec: Menentukan interval di mana perangkat dapat dibaca.
Beberapa perangkat akan kelebihan beban jika terlalu sering ditanyakan. manufacturer: String, nama produsen.


Ini ditampilkan dalam informasi tambahan pada 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 ditafsirkan sebagai 0 (berguna jika perangkat mendukung nilai tertentu, tergantung modelnya).

Jika Anda menghilangkan properti yang tercantum di atas, cFos Charging Manager menggunakan nilai default, yang bekerja dengan baik dalam banyak kasus.

Langkah selanjutnya dalam definisi JSON adalah definisi variabel yang digunakan meteran untuk membaca atau menghitung nilai arus, tegangan, dll.
Manajer Pengisian Daya mengenali variabel berikut ini: type_designation, version, firmware_version, serial: Variabel-variabel ini membentuk penunjukan model, seperti yang ditunjukkan pada informasi yang diperluas 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 untuk menghitung dari nilai-nilai ini untuk voltage_l1..l3, current_l1..l3 yang ditandatangani, power_w dan power_va. 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 hanya perlu mendefinisikan import_wh.

Hanya untuk pengukur dua arah (seperti pengukur penyimpanan atau pengukur referensi jaringan), export_wh harus didefinisikan. soc: Jika tersedia, status pengisian daya penyimpanan baterai ditampilkan di sini dalam % di ubin.
Anda juga dapat mendefinisikan variabel lain dengan nama yang 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 di variabel Manajer Pengisian daya global (lihat di bawah) dan dapat ditanyakan.
Variabel dengan ekstensi *: Jika Anda mendefinisikan variabel yang dimulai dengan '*', variabel ini akan ditampilkan di UI pada ubin meteran di bawah informasi yang diperluas, misalnya suhu unit penyimpanan baterai.
Catatan: Hanya angka dan huruf a-z dan A-Z yang dapat digunakan sebagai nama variabel.

Definisi variabel:


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, tipe variabel: int16, uint16, int32, uint32, float, int64, string. Hal 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 sekali saat perangkat diinisialisasi, jika tidak maka nilai akan dibaca secara berkala. alamat: angka (Modbus) atau string (HTTP/JSON).
Nomor register Modbus atau URL HTTP dari nilai yang akan dibaca. query: 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", di mana nilai tersebut ada. 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 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] grup dengan alternatif: (ab|cd|ef) grup 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: $

Definisi input:

Manajer Pengisian Daya dapat meminta hingga 32 nilai input per perangkat dari berbagai register atau elemen JSON. Properti "Input" adalah larik JSON.
Anda harus menentukan properti berikut ini untuk setiap input: address: Alamat (register Modbus atau URL).
count:
Jumlah bit input yang dibaca dengan permintaan ini. query: Untuk HTTP/JSON, bahasa permintaan untuk menemukan nilai dalam respon.

CFos Charging Manager membaca semua input yang didefinisikan dengan cara ini dengan setiap pembaruan dan menyimpan bit secara internal dalam sebuah array, yang kemudian dapat ditanyakan dalam formula, Input1..InputN.

Definisi output:

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.

Anda harus mendefinisikan properti berikut dalam objek output untuk setiap 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 mengenali akses yang sesuai pada localhost dan mengalihkan 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()). Anda juga dapat menentukan ${alamat} dan ${id} dalam alamat. Ini adalah alamat perangkat saat ini dan ID Modbus seperti yang ditentukan dalam pengaturan.
'address' 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 yang mereferensikan variabel manajer pengisian daya global atau dari penghitung masing-masing menggunakan ${expr}. Rumus 'expr' dievaluasi ketika output ditetapkan 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 menjadi 1 atau 0 sesuai kebutuhan. 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, Anda perlu mengganti satu teks dalam URL dengan yang lain tergantung pada rumusnya, misalnya untuk soket WLAN Shelly, Anda dapat menuliskannya sebagai berikut: ${if expr`text1`text2}. "Apostrof" adalah tanda kutip (kode ASCII 96). Jika 'expr' != 0, text1 digunakan, jika tidak, text2. Untuk soket WLAN Shelly, URL-nya akan terlihat seperti ini, misalnya: 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 menggunakan alamat yang dikonfigurasikan untuk masing-masing perangkat. Jika Anda memasukkan 'localhost' sebagai domain, Charging Manager akan menggunakan alamat perangkat yang menjalankannya. Jika ia mengenali akses ke API-nya sendiri, ia menggunakan penangan internal alih-alih mengeksekusi akses HTTP penuh sehingga Anda tidak perlu memasukkan nama pengguna dan kata sandi dalam definisi penghitung. URL yang diawali dengan '*' menyebabkan Charging Manager selalu mengeksekusi akses HTTP penuh.

Atur ulang keluaran: Selain larik "output", Anda juga dapat mendefinisikan larik bernama "reset" yang terstruktur seperti larik "output". Hal ini memungkinkan output diatur ulang ke nilai awal ketika perangkat dinonaktifkan. Ini dapat digunakan dalam kombinasi dengan variabel yang ditentukan pengguna dan "once": true untuk mengatur ulang perangkat 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 akan kembali ke aturan default jika kontrol memori tidak ditulis secara aktif selama beberapa saat. Untuk mengatur output secara berkala, Anda dapat mengawali alamat dengan #xxx#, di mana xxx mengindikasikan 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.

Definisi Bahasa Kueri:

Saat ini, nama anggota dan operator "." dan "[]" dapat digunakan dalam ekspresi pencarian "query", contoh:

tesElemen bernama "test"
nama1.nama2Elemen 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}].valuePilih 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.

Variabel Manajer Pengisian Global:

Anda dapat membuat variabel dalam konfigurasi Charging Manager. Anda dapat menggunakan nilai tetap atau rumus sebagai nilainya. Pada akhir setiap siklus pembaruan, Manajer Pengisian Daya menghitung ulang nilai variabel-variabel ini jika perlu. Anda kemudian dapat menggunakan ini dalam parameter Charging Manager (tertentu), aturan pengisian daya, atau untuk mengontrol output. Anda juga dapat menulis Ex.member atau Mx.member sebagai variabel. Dalam kasus ini, Exdan Mxadalah ID perangkat dari kotak dinding atau meteran yang diatur di Charging Manager. 'member' adalah variabel "yang ditentukan pengguna" yang disimpan di perangkat terkait. Beberapa variabel dapat memiliki arti khusus: Untuk KEBA, 'out1' adalah output switching, untuk meteran ABB B23, 'out1' dan 'out2' adalah output switching (untuk model yang mendukung ini). Angka 1 akan mengaktifkan output, angka 0 akan mematikannya kembali.

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.

Catatan: Hanya angka dan huruf a-z dan A-Z yang dapat digunakan sebagai nama variabel.

Untuk tujuan pengujian, Anda dapat menampilkan variabel manajer pengisian daya dan meteran, misalnya harga Awattar saat ini:


                        Tampilan tangkapan layar variabel penghitung

Keluaran Manajer Pengisian Daya Global:

Dalam konfigurasi Charging Manager, Anda dapat mengonfigurasi output global seperti yang dijelaskan di atas dalam definisi penghitung di bawah 'Output'. Ini ditetapkan pada akhir setiap siklus pembaruan jika statusnya telah berubah. Jika Anda ingin mengontrol pengalihan output di perangkat yang ditentukan pengguna, konvensi di atas direkomendasikan (lihat variabel Charging Manager): Anda menetapkan variabel dengan nama "out1", "out2", dsb. di penghitung yang ditentukan pengguna dan mengatur output di penghitung yang ditentukan pengguna yang mengalihkan output tergantung pada nilai variabel-variabel ini.

API Modbus Global dari Manajer Pengisian Daya:

API Modbus dari Charging Manager digunakan untuk mengontrol perangkat Modbus yang memiliki alamat Modbus RTU atau TCP (dapat diakses dari Charging Manager). Seperti pada konfigurasi masing-masing perangkat, masukkan COMx,bd,8,p,s sebagai alamat Modbus RTU, 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). Untuk Modbus TCP, alamat yang dituju 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 Charging Manager cFos mendukung parameter query tambahan berikut ini: 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: Device ID dari perangkat Modbus. reg: Nomor register Modbus.
Nilai dapat ditentukan dalam desimal atau heksa (dengan awalan 0x). val: number: Nilai yang akan ditulis ke register.
Hilangkan saat membaca. type: 'w' 16bit (default), d = 32bit, f = float, q = 64bit, s = string.

c nt: angka: Panjang maksimum dari string dalam register, hilangkan untuk tipe lain atau set ke 1. order: String: Urutan byte, bisa "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:password@192.168.2.111. Jika nama pengguna atau kata sandi Anda mengandung "@", Anda harus menggantinya dengan "%40".