Tài liệu

Bộ đếm do người dùng xác định

Lưu ý: Trình quản lý sạc cFos có thể đọc hầu hết các biến tần năng lượng mặt trời sử dụng SunSpec (loại thiết bị "SunSpec Solar Inverter / Meter"). Trong trường hợp này, bạn không cần tạo định nghĩa bộ đếm của riêng mình.

Trình quản lý sạc cFos cho phép bạn tạo định nghĩa đồng hồ đo của riêng mình để hỗ trợ đồng hồ đo không có trong danh mục tiêu chuẩn. Hiện tại có ba loại: bộ đếm Modbus, bộ đếm HTTP/JSON và bộ đếm MQTT/JSON. Các tệp định nghĩa cho các bộ đếm này rất giống nhau. Máy đo Modbus đọc dữ liệu của chúng qua Modbus từ các thanh ghi cụ thể, trong khi máy đo HTTP/JSON lấy dữ liệu của chúng thông qua yêu cầu HTTP và phân tích cú pháp JSON để phản hồi. Đối với máy đo MQTT/JSON, Trình quản lý sạc cFos đăng ký các chủ đề MQTT và phân tích cú pháp các thông báo được xuất bản theo chủ đề dưới dạng JSON. Trình quản lý sạc cFos sử dụng một "ngôn ngữ truy vấn" nhỏ để phân tích cú pháp. Đây là tài liệu về khả năng của MQTT trong Trình quản lý sạc cFos.

Ngoài một số biến được xác định trước, chẳng hạn như dòng điện và điện áp, đồng hồ đo do người dùng xác định cũng có thể đọc các biến không xác định, do người dùng xác định, đầu vào truy vấn và đầu ra đặt. Đọc các biến và thiết lập kết quả đầu ra cho phép đánh giá các công thức. Kết hợp với các biến Trình quản lý sạc và đầu ra Trình quản lý sạc toàn cầu được mô tả bên dưới, đây là một tính năng mạnh mẽ và thậm chí cho phép một số tác vụ tự động hóa tại nhà và điều khiển các thiết bị bên ngoài như bộ lưu trữ pin. Nếu bạn triển khai các tác vụ kiểm soát với điều này, vui lòng cung cấp phản hồi cho chúng tôi. Chúng tôi rất quan tâm đến những gì mọi người kiểm soát với Trình quản lý sạc cFos và nó giúp chúng tôi phát triển hơn nữa Trình quản lý sạc theo nhu cầu của khách hàng.

Dưới đây là một ví dụ đơn giản về định nghĩa Modbus đọc một thanh ghi công suất hoạt động duy nhất. Bạn có thể chỉ cần thay đổi số đăng ký cho ứng dụng cụ thể của mình:
Định nghĩa ví dụ cho một thanh ghi.

Đây là một định nghĩa mẫu cho Modbus và một cho HTTP/JSON:
Tải xuống định nghĩa mẫu cho đồng hồ Modbus
Tải xuống định nghĩa mẫu cho máy đo HTTP/JSON

Trình quản lý sạc đã đi kèm với một số tệp như vậy, nhưng bạn có thể tải lên tệp của riêng mình trong "Cấu hình hệ thống" và cũng có thể xóa chúng một lần nữa.
Tại đây, bạn sẽ tìm thấy một phần lớn các định nghĩa về bộ đếm mà chúng tôi cung cấp:
Tải xuống các định nghĩa bộ đếm được cung cấp

Nếu bạn đã tạo tệp bộ đếm của riêng mình và tệp đó có thể phù hợp với những người dùng khác, chúng tôi sẽ rất biết ơn nếu bạn có thể cung cấp tệp đó cho chúng tôi. Sau đó, chúng tôi sẽ cung cấp nó với các phiên bản trong tương lai của Trình quản lý sạc.

Tải xuống định nghĩa bộ đếm để biết thêm bộ đếm

Cấu trúc của một tệp định nghĩa:

Định nghĩa bộ đếm là các tệp JSON có Đối tượng JSON toàn cầu có các thuộc tính và đối tượng phụ. “rtype” xác định kiểu thao tác đọc: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' xác định loại thiết bị: 0 = Thiết bị khác, 1 = Đồng hồ đo, 2 = Biến tần, 4 = Bộ lưu trữ pin.

Bạn có thể chỉ định các số ở dạng thập phân hoặc thập lục phân với tiền tố 0x. Nhận xét một dòng sử dụng // cũng được cho phép. Chúng tôi khuyên bạn nên chạy các tệp định nghĩa của mình thông qua trình xác thực JSON5, ví dụ: trình xác thực JSON5 này

Hãy nhớ đọc chương Công thức để hiểu những giá trị nào có thể được sử dụng trong các công thức trong tài liệu tham khảo sau.

Định nghĩa Modbus có đối tượng 'rtu' với các thuộc tính sau:

im lặng_period, tính bằng mili giây. xác định độ dài tạm dừng trước khi truy cập Modbus RTU để thiết bị nhận dạng thời điểm bắt đầu tin nhắn.
im lặng_same_slave, true: Tạm dừng được duy trì ngay cả khi có nhiều quyền truy cập vào cùng một thiết bị.
retries: Số lần thử lại nếu thiết bị không phản hồi.
rcv_timeout: tính bằng msec. thời gian chờ tối đa cho mỗi lần truy cập cho đến khi thiết bị phản hồi.

Các thuộc tính toàn cục này áp dụng cho Modbus TCP và RTU:

modbus_read: Số chức năng của lệnh đọc Modbus, thường là 3 hoặc 4.
modbus_read_max_registers: Số lượng thanh ghi tối đa có thể được đọc trong một lần.
modbus_allow_gaps: true = Các vùng thanh ghi không sử dụng có thể được đọc trong một thao tác đọc.

Đối với Modbus TCP và HTTP/JSON, có một đối tượng 'tcp' với các thuộc tính sau:

connect_timeout: là msec. thời gian chờ tối đa cho kết nối TCP.
delay_ after_connect: tính bằng mili giây. Tạm dừng sau khi thiết lập kết nối trước khi gửi lệnh đầu tiên.

Cả hai loại định nghĩa (Modbus và HTTP/JSON) cũng có các thuộc tính sau:

upd_delay: tính bằng mili giây. xác định khoảng thời gian mà một thiết bị có thể được đọc. Một số thiết bị trở nên quá tải khi được thăm dò quá thường xuyên.
nhà sản xuất: Chuỗi, tên nhà sản xuất. Điều này được thể hiện trong thông tin mở rộng của ô xếp.
delay_accumulated: true = Giá trị tích lũy (kWh) chỉ được truy vấn 3 giây một lần hoặc khi có đủ điện. false = Các giá trị này luôn được truy vấn.
ui_addr: URL, nếu khác với địa chỉ thiết bị để gọi giao diện web.
Dành riêng: Mảng có giá trị được hiểu là 0 (hữu ích nếu thiết bị hỗ trợ các giá trị nhất định tùy thuộc vào kiểu máy).

Nếu bạn bỏ qua các thuộc tính được liệt kê ở trên, Trình quản lý sạc cFos sẽ lấy các giá trị mặc định, hoạt động tốt trong hầu hết các trường hợp.

Bước tiếp theo trong định nghĩa JSON là định nghĩa các biến mà đồng hồ sử dụng để đọc hoặc tính toán các giá trị cho dòng điện, điện áp, v.v. Trình quản lý sạc nhận ra các biến sau:
type_designation, version, firmware_version, serial: Những thứ này tạo thành ký hiệu kiểu máy như được hiển thị trong thông tin mở rộng của ngăn xếp. Chúng được truy vấn một lần khi thiết lập hoặc đặt lại bộ đếm.
điện áp_l1..điện áp_l3, hiện tại_l1..cản_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: Trình quản lý sạc cFos cố gắng tính toán hiện tại_l1..l3, power_w và power_va đã ký từ các giá trị này cho điện áp_l1..l3. Bạn không phải chỉ định tất cả các biến. Trình quản lý sạc cFos cố gắng tính toán các giá trị từ các biến hiện có.
import_wh, export_wh: Trình quản lý sạc sử dụng các biến này để hiển thị import_wh và export_wh. Với các bộ đếm một chiều (ví dụ: bộ biến tần), bạn chỉ nên xác định import_wh. export_wh chỉ nên được xác định cho đồng hồ đo hai chiều (chẳng hạn như bộ nhớ hoặc đồng hồ đo điện đã mua).

soc: Có sẵn ngay lập tức, trạng thái sạc của bộ lưu trữ pin được hiển thị ở đây theo % trong ô xếp.
Ngoài ra, bạn có thể xác định các biến khác có tên khác, được đọc ra sau mỗi lần cập nhật hoặc được tính bằng công thức. Nếu bạn xác định các biến sử dụng CM. bắt đầu, ví dụ: CM._set_price, các giá trị được chỉ định được lưu trữ trong các biến Trình quản lý sạc toàn cầu (xem bên dưới) và có thể được truy vấn tương ứng.
Các biến có *: Nếu bạn xác định các biến bắt đầu bằng * , các biến này được hiển thị trong giao diện người dùng trong ngăn xếp bộ đếm dưới thông tin mở rộng, ví dụ như nhiệt độ của bộ lưu trữ pin.

Định nghĩa một biến:

Đối tượng được đặt tên theo tên của biến được liệt kê ở trên và có các thuộc tính sau:
cố định: Chuỗi có giá trị cố định. Hữu ích nếu, ví dụ, không có giá trị nào có thể được xác định, ví dụ: đối với loại_chỉ định hoặc điện áp.
expr: Chuỗi, biến không được đọc ra mà được đánh giá dưới dạng công thức.
type: Nếu không cố định hoặc expr, loại biến: int16, uint16, int32, uint32, float, int64, string. Điều quan trọng là Modbus phải đọc các thanh ghi theo đúng định dạng. uint16 và uint32 là loại chỉ có thể chấp nhận số dương. Với JSON/HTTP bạn thường có thể sử dụng float.
độ phân giải: float, giá trị đọc được nhân với 'độ phân giải'. Giá trị điện áp phải tính bằng vôn, dòng điện tính bằng miliampe, công suất tính bằng watt và năng lượng tính bằng watt-giờ (Wh). Với 'độ phân giải' âm, bạn có thể đảo ngược một giá trị nếu nó có dấu ngược lại.
một lần: bool (đúng hoặc sai), nếu đúng thì giá trị chỉ được đọc một lần khi khởi tạo thiết bị, nếu không thì định kỳ.
address: số (Modbus) hoặc String (HTTP/JSON), số đăng ký Modbus hoặc URL HTTP của giá trị cần đọc.
truy vấn: Chuỗi, đối với HTTP JSON, thông tin bằng ngôn ngữ truy vấn của trình quản lý tính phí mà nó tìm thấy giá trị cần đọc trong phản hồi JSON.
order: Chuỗi, đối với Modbus, thứ tự byte là "hl" hoặc "lh", trong đó giá trị có sẵn. length: số, với Modbus là độ dài của một chuỗi trong các thanh ghi. Đối với các biến 'version' và 'firmware_version', 'length' được sử dụng để biến các phiên bản số thành chuỗi có dấu chấm. Giá trị 2 hoặc 4 được phép cho 'độ dài', sau đó dẫn đến các định dạng phiên bản ab và abcd. Đối với 'length' 2 và loại 'int16' hoặc 'uint16', Trình quản lý sạc phân tách byte thấp và cao bằng dấu chấm, đối với từ thấp và cao 'int32' hoặc 'uint32', đối với từ thấp và cao 'int64'. Với 'lenth' 4 và 'int32' hoặc 'uint32', Trình quản lý sạc sẽ chia giá trị thành 4 byte, phân tách bằng dấu chấm. Đối với 'int64' 4 từ tương ứng.
biểu thức chính quy: Chuỗi. Nếu một biểu thức chính quy được chỉ định thì phản hồi của bộ đếm không cần phải ở dạng JSON. Kết quả là toàn bộ kết quả khớp của biểu thức chính quy hoặc nhóm đầu tiên được đánh giá. Vui lòng chỉ sử dụng nếu thiết bị không trả về JSON. Dưới đây là danh sách các tính năng của biểu thức chính quy của chúng tôi:
bất kỳ ký tự nào: .
các lớp được đặt tên: \d \s \w \D \S \W
các lớp ẩn danh: [a-z0-9_], [^0-9], [^\d]
các nhóm có lựa chọn thay thế: (ab|cd|ef)
nhóm không bị bắt: (?:ab|cd)
(tham lam) một lần hay không: a?, a??
(tham lam) nhiều hay không: a*, a*?
(tham lam) một lần hoặc nhiều lần: a+, a+?
bắt đầu chuỗi: ^
cuối chuỗi: $

Định nghĩa các yếu tố đầu vào:

Trình quản lý sạc có thể truy vấn tới 32 giá trị đầu vào từ các thanh ghi hoặc phần tử JSON khác nhau trên mỗi thiết bị. Thuộc tính "Đầu vào" là một mảng JSON. Bạn phải xác định các thuộc tính sau cho mỗi đầu vào:
address: địa chỉ (đăng ký Modbus hoặc URL).
count: số bit đầu vào được đọc với yêu cầu này.
truy vấn: Đối với HTTP/JSON, ngôn ngữ truy vấn để tìm giá trị trong phản hồi.

Với mỗi bản cập nhật, Trình quản lý tính phí cFos đọc tất cả các đầu vào được xác định theo cách này và đặt các bit bên trong một mảng mà sau đó có thể được truy vấn trong các công thức, Input1..InputN.

Định nghĩa đầu ra:

Trình quản lý sạc có thể chuyển tối đa 32 đầu ra trên mỗi thiết bị. Đầu ra được xác định trong "đầu ra" dưới dạng một mảng JSON của các đối tượng đầu ra. Tất cả các đầu ra được chuyển vào cuối mỗi chu kỳ cập nhật nếu trạng thái của đầu ra tương ứng đã thay đổi.
Bạn phải xác định các thuộc tính sau trong đối tượng đầu ra cho mỗi đầu ra:
địa chỉ: URL HTTP với phương thức HTTP tùy chọn, ví dụ: GET//}. Để đặt các thanh ghi Modbus, bạn có thể sử dụng API HTTP Trình quản lý sạc cFos. Trình quản lý sạc nhận ra quyền truy cập thích hợp vào máy chủ cục bộ và chuyển hướng yêu cầu đến trình xử lý nội bộ để bạn không cần ủy quyền, như với quyền truy cập API HTTP bên ngoài. Nếu URL trống sau tất cả các lần thay thế, thì không có đầu ra nào được đặt. Ví dụ: bạn chỉ có thể chuyển đổi đầu ra nếu một số biến nhất định tồn tại (xem công thức: hàm tồn tại()). Bạn cũng có thể chỉ định ${address} và ${id} trong địa chỉ. Đây là địa chỉ thiết bị hiện tại và ID Modbus như được đặt trong cài đặt. Địa chỉ và id chủ yếu được sử dụng để sử dụng API Modbus (xem bên dưới).
body: Phần thân HTTP tùy chọn cho POST hoặc PUT.
Trong URL và nội dung, bạn có thể sử dụng các công thức ${expr} tham chiếu các biến Trình quản lý sạc toàn cầu hoặc từ đồng hồ đo tương ứng. Công thức 'expr' được đánh giá khi đầu ra được đặt và thay thế trong văn bản của URL hoặc nội dung. Trong ví dụ trên, nếu//đặt đầu ra và//xóa đầu ra, bạn có thể xác định một biến 'var1' và đặt nó thành 1 như mong muốn hoặc đặt 0. Bằng cách này, bạn cũng có thể ghi các giá trị số để kiểm soát hiệu suất bộ nhớ trong các thanh ghi Modbus mà trước đây bạn đã lưu trữ trong một biến bằng công thức.
Nếu thay vì chuyển một giá trị số trong URL, bạn phải thay thế một văn bản bằng một văn bản khác tùy thuộc vào công thức, chẳng hạn như với ổ cắm Shelly WLAN, bạn có thể viết nó như sau: ${if expr`text1`text2}. "Dấu nháy đơn" là một dấu gạch ngược (mã ASCII 96). Nếu 'expr' != 0, text1 được sử dụng, nếu không thì text2. Ví dụ: URL cho ổ cắm Shelly WLAN trông như sau: http://<ip-addr>/relay/0?turn=${if expr`on`off}, tức là nếu expr != 0 thì Trình quản lý sạc gọi http://<ip-addr>/relay/0?turn=on on, nếu không thì http://<ip-addr>/relay/0?turn=off.

Nếu bạn nhập một đường dẫn tương đối làm URL, Trình quản lý sạc sẽ sử dụng địa chỉ được định cấu hình cho thiết bị tương ứng. Nếu bạn nhập 'localhost' làm miền, Trình quản lý sạc sẽ lấy địa chỉ của thiết bị mà nó đang chạy. Nếu nó phát hiện quyền truy cập vào API của chính nó, nó sẽ sử dụng trình xử lý nội bộ thay vì thực hiện quyền truy cập HTTP đầy đủ, do đó bạn không phải lưu trữ tên người dùng và mật khẩu trong định nghĩa đồng hồ đo. URL bắt đầu bằng dấu * khiến Trình quản lý sạc luôn thực hiện quyền truy cập HTTP đầy đủ.

Đặt lại đầu ra: Ngoài mảng "đầu ra", bạn cũng có thể xác định một mảng có tên "đặt lại" có cấu trúc giống như mảng "đầu ra". Điều này có nghĩa là các đầu ra có thể được đặt lại về giá trị ban đầu khi thiết bị ngừng hoạt động. Điều này, kết hợp với các biến do người dùng xác định và "một lần": đúng, cho phép bạn khôi phục thiết bị về trạng thái ban đầu.
Ghi đầu ra định kỳ: Với một số thiết bị, đầu ra phải được ghi định kỳ, nếu không thiết bị sẽ đặt lại các giá trị về "mặc định". Ví dụ: bộ nhớ Kostal sử dụng lại các quy tắc tiêu chuẩn của nó nếu điều khiển bộ nhớ không được ghi tích cực trong một thời gian. Để đặt đầu ra theo định kỳ, bạn có thể thêm tiền tố #xxx# vào trước địa chỉ, trong đó xxx chỉ định số giây đầu ra được ghi lại, ngay cả khi giá trị được ghi vẫn giữ nguyên. Ví dụ: nếu địa chỉ là /cnf?cmd=set_cm_vars&name=test&val=42, bạn có thể sử dụng #30#/cnf?cmd=set_cm_vars&name=test&val=42 để đảm bảo rằng giá trị này được ghi mỗi 30 giây trở thành.

Định nghĩa ngôn ngữ truy vấn:

Hiện tại, tên thành viên và toán tử "." Có thể được sử dụng trong biểu thức tìm kiếm "truy vấn". và "[]" được sử dụng, ví dụ:

kiểm traPhần tử có tên "test"
name1.name2Phần tử có tên "name2" trong đối tượng con "name1"
tên [idx]Phần tử "idx" của phần tử đối tượng "tên". "idx" có thể là một số, ví dụ: cho mảng hoặc một chuỗi
tên ["u2"]Phần tử "u2" của phần tử đối tượng "name" tương ứng với "name.u2"
name [{"el1": "v1", "el2": 3}]. giá trịChọn phần tử mảng thỏa mãn điều kiện ký hiệu đối tượng và đánh giá phần tử có tên 'giá trị'. Ở đây, ví dụ: phần tử được chọn trong mảng 'tên' có các phần tử đối tượng 'el1' với giá trị 'v1' và 'el2' với giá trị 3 và sau đó giá trị của phần tử 'giá trị' được trả về từ đối tượng này .

Các biến Trình quản lý tính phí toàn cầu:

Bạn có thể tạo các biến trong cấu hình Trình quản lý sạc. Bạn có thể sử dụng một giá trị cố định hoặc một công thức làm giá trị. Vào cuối mỗi chu kỳ cập nhật, Trình quản lý tính phí sẽ tính toán lại giá trị của biến này nếu cần. Sau đó, bạn có thể sử dụng chúng trong (một số) thông số của trình quản lý sạc, quy tắc sạc hoặc để kiểm soát đầu ra. Bạn cũng có thể viết E x.member hoặc M x.member dưới dạng một biến. Ở đây E x và M x là ID thiết bị của hộp treo tường hoặc đồng hồ được thiết lập trong Trình quản lý sạc. thành viên là một biến "do người dùng định nghĩa" được lưu trữ trong thiết bị tương ứng. Một số biến có thể có ý nghĩa đặc biệt: Với KEBA "out1" là đầu ra chuyển mạch, với ABB B23 mét "out1" và "out2" là đầu ra chuyển mạch (đối với các kiểu máy hỗ trợ điều này). A 1 chuyển đầu ra, 0 lại tắt.

Nếu bạn có các thiết bị phải được bật trong một số điều kiện nhất định nhưng sau đó phải chạy một lúc (ví dụ: máy giặt, máy rửa chén), bạn cũng có thể xác định biến là "trình kích hoạt". Sau đó, công thức của biến là điều kiện đặt biến thành 1. Sau một thời gian điều chỉnh, nó sẽ được đặt lại về 0. "Điều kiện kích hoạt lại" cho phép kéo dài thời gian cho đến khi tắt (nghĩa là đặt biến thành 0) lặp đi lặp lại miễn là điều kiện được đáp ứng.

Với mục đích thử nghiệm, bạn có thể hiển thị các biến số của Trình quản lý sạc và đồng hồ đo, ví dụ: giá hiện tại từ Awattar:


                        Ảnh chụp màn hình hiển thị các biến đếm

Đầu ra của Trình quản lý sạc toàn cầu:

Trong cấu hình Trình quản lý sạc, bạn có thể định cấu hình đầu ra toàn cầu như được mô tả ở trên trong định nghĩa đồng hồ trong 'Đầu ra'. Chúng được đặt vào cuối mỗi chu kỳ cập nhật nếu trạng thái của chúng đã thay đổi. Nếu bạn muốn kiểm soát đầu ra chuyển mạch trong các thiết bị do người dùng xác định, quy ước trên được khuyến nghị (xem các biến Trình quản lý sạc): Bạn đặt các biến có tên "out1", "out2", v.v. trong đồng hồ do người dùng xác định và thiết lập đầu ra trong đồng hồ do người dùng xác định nằm trong Chuyển đổi đầu ra tùy thuộc vào giá trị của biến này.

API Modbus toàn cầu của Trình quản lý sạc:

API Modbus của Trình quản lý sạc được sử dụng để điều khiển các thiết bị Modbus có bất kỳ địa chỉ Modbus RTU hoặc TCP nào (có thể liên hệ với Trình quản lý sạc). Nhập COMx, bd, 8, p, s làm địa chỉ cho Modbus RTU, như trong cấu hình của các thiết bị riêng lẻ, trong đó x là số cổng COM, bd là tốc độ truyền, p là chẵn lẻ ('N', ' E 'hoặc' O ') và s là số bit dừng (1 hoặc 2). Với Modbus TCP, địa chỉ là địa chỉ IP của thiết bị trong mạng Trình quản lý sạc bao gồm số cổng.
URL (cho HTTP GET) của API Modbus là:
/cnf? cmd = modbus_get hoặc /cnf? cmd = modbus_set
Trình quản lý sạc cFos hỗ trợ các tham số truy vấn bổ sung sau:
addr: Địa chỉ thiết bị Modbus RTU hoặc TCP ở trên.
func: Số chức năng Modbus, ví dụ: 3 hoặc 4 để đọc, 6 hoặc 16 để ghi.
id: ID thiết bị của thiết bị Modbus.
reg: Số đăng ký Modbus. Giá trị có thể được chỉ định ở dạng thập phân hoặc hex (với tiền tố 0x).
val: số, giá trị được ghi vào thanh ghi. thiếu sót trong khi đọc.
: 'w' 16bit (mặc định), d = 32bit, f = float, q = 64bit, s = string.
cnt: số, độ dài tối đa của chuỗi trong thanh ghi, bỏ qua các kiểu khác hoặc đặt thành 1.
order: Chuỗi chứa thứ tự byte, "hl" hoặc "lh".

Lưu ý: Nếu 'Đồng hồ đo' của bạn chủ yếu được sử dụng cho mục đích điều khiển, bạn có thể chọn tùy chọn 'Ẩn thiết bị' trong cài đặt của ô này để thiết bị này không xuất hiện trên trang bắt đầu.

Lưu ý: Một số đồng hồ đọc qua HTTP yêu cầu tên người dùng/mật khẩu làm ủy quyền. Bạn có thể chỉ định điều này trong địa chỉ để truy cập HTTP, ví dụ: với http://username:password@192.168.2.111. Nếu tên người dùng hoặc mật khẩu của bạn chứa "@", bạn phải thay thế nó bằng "%40".