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ợ các đồ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 tin đị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 từ các thanh ghi cụ thể thông qua Modbus, trong khi máy đo HTTP/JSON lấy dữ liệu của chúng qua yêu cầu HTTP và đọc JSON dưới dạng phản hồi. Đối với máy đo MQTT/JSON, Trình quản lý tính phí cFos đăng ký Chủ đề MQTT và đọc các thông báo được xuất bản theo chủ đề dưới dạng JSON. Trình quản lý tính phí cFos sử dụng một “Ngôn ngữ truy vấn” nhỏ để đọc nó. Đây là tài liệu về các 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 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 được đặt. Việc đọ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. Đây là một tính năng mạnh mẽ kết hợp với các biến của Trình quản lý sạc và đầu ra của Trình quản lý sạc toàn cầu được mô tả bên dưới, đồng thời thậm chí cho phép một số tác vụ tự động hóa gia đình nhất đị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 sử dụng điều này để thực hiện các nhiệm vụ kiểm soát, 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ì khách hàng có thể kiểm soát với Trình quản lý sạc cFos và điều đó 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Đị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.
im lặng_thời gian, tính bằng msec: Xác định độ dài tạm dừng trước khi truy cập Modbus RTU để thiết bị nhận ra phần bắt đầu của tin nhắn.
Silence_same_slave, true: Việc 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 đến khi thiết bị phản hồi, cho mỗi lần truy cập.
modbus_read: Số chức năng của lệnh Modbus để đọc, 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 đăng ký không sử dụng có thể được đọc trong thao tác đọc.
connect_timeout: là msec: Thời gian chờ tối đa cho một kết nối TCP.
delay_after_connect: tính bằng msec: Tạm dừng sau khi thiết lập kết nối trước khi gửi lệnh đầu tiên.
upd_delay: tính bằng msec: Xác định khoảng thời gian mà thiết bị có thể được đọc. Một số thiết bị trở nên quá tải nếu đượ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 sẽ được hiển thị trong thông tin mở rộng của ô.
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ó đủ năng lượng. false = Những 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ó cá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.
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ị dòng điện, điện áp, v.v. Trình quản lý sạc biết các biến sau:
type_designation, version, firmware_version, serial: Những thông tin này tạo thành ký hiệu mẫu 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, current_l1..current_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 từ các giá trị này cho volt_l1..l3, signature current_l1..l3, power_w và power_va. Bạn không cần 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. Đối với đồng hồ đo một chiều (ví dụ: bộ biến tần), bạn chỉ nên xác định import_wh. Chỉ nên xác định Xuất_wh cho đồng hồ đo hai chiều (chẳng hạn như đồng hồ đo mức tiêu thụ điện hoặc lưu trữ).
soc: Nếu có, Trạng thái sạc của bộ lưu trữ pin được hiển thị ở đây theo % trong ô.
Ngoài ra, bạn có thể xác định các biến bổ sung với các tên khác nhau được đọc hoặc tính toán bằng công thức sau mỗi lần cập nhật. Nếu bạn xác định các biến bắt đầu bằng 'CM.' bắt đầu, ví dụ: CM._set_price, các giá trị được chỉ định sẽ được lưu trữ trong các biến của 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 sẽ được hiển thị trong giao diện người dùng trong ô đồng hồ đo dưới thông tin mở rộng, ví dụ: nhiệt độ của bộ lưu trữ pin.
Lưu ý: Chỉ có thể sử dụng số và chữ cái az và AZ làm tên 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 nhưng đượ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: nổi. 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, giá trị chỉ được đọc một lần khi thiết bị được khởi tạo, nếu không thì định kỳ.
địa chỉ: số (Modbus) hoặc Chuỗi (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 trong 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.
thứ tự: Chuỗi. Đối với Modbus, thứ tự byte là "hl" hoặc "lh", trong đó giá trị có sẵn. chiều dài: số. Với Modbus, độ dài của một chuỗi trong các thanh ghi, 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ó điể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: $
Trình quản lý sạc có thể truy vấn tối đa 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.
query: Đố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ý sạc cFos đọc tất cả đầu vào được xác định theo cách này và đặt các bit bên trong vào một mảng mà sau đó có thể được truy vấn trong các công thức, input1..InputN.
Trình quản lý sạc có thể chuyển đổi tối đa 32 đầu ra trên mỗi thiết bị. Đầu ra được xác định trong phần "đầu ra" dưới dạng mảng JSON của các đối tượng đầu ra. Tất cả các đầu ra sẽ được chuyển đổi 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.
Đối với mỗi đầu ra, bạn phải xác định các thuộc tính sau trong đối tượng đầu ra:
địa chỉ: URL HTTP với phương thức HTTP tùy chọn, ví dụ: GET//}. Để thiết lập các thanh ghi Modbus, bạn có thể sử dụng API HTTP của Trình quản lý sạc cFos. Trình quản lý sạc phát hiện các 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ộ, do đó bạn không cần ủy quyền như với các 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 tồn tại một số biến nhất định (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: Nội dung HTTP tùy chọn cho POST hoặc PUT.
Trong URL và nội dung, bạn có thể sử dụng công thức ${expr} tham chiếu các biến trong Trình quản lý sạc toàn cầu hoặc đồng hồ đo tương ứng. Công thức 'expr' được đánh giá khi đặt đầu ra và được thay thế trong văn bản của URL hoặc nội dung. Trong ví dụ trên, nếu http://www.example.com?output1=1 đặt đầu ra và http://www.example.com?output1=0 xóa nó, 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ạn cũng có thể ghi các giá trị số để kiểm soát hiệu suất bộ nhớ vào các thanh ghi Modbus mà trước đó 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ố, bạn cần thay thế một văn bản trong URL 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ư thế này: ${if expr`text1`text2}. "Dấu nháy đơn" là dấu backtick (mã ASCII 96). Nếu 'expr' != 0, text1 được sử dụng, nếu không thì text2. Đối với ổ cắm Shelly WLAN, URL trông như thế này: http://<ip-addr>/tiếp sức/0?turn=${if expr`on`off}, tức là nếu expr != 0 Trình quản lý sạc sẽ gọi thì http ://<ip-addr>/chuyển tiếp/0?turn=bật, nếu không thì http://<ip-addr>/chuyển tiếp/0?turn=off.
Nếu bạn nhập đường dẫn tương đối làm URL, Trình quản lý sạc sẽ lấy địa chỉ được định cấu hình cho thiết bị tương ứng. Nếu bạn chỉ định 'localhost' làm miền thì Trình quản lý sạc sẽ lấy địa chỉ của thiết bị mà nó đang chạy. Nếu 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 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 bộ đếm. URL bắt đầu bằng '*' khiến Trình quản lý sạc luôn thực hiệ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 gọi là "đặt lại" có cấu trúc giống như mảng "đầu ra". Điều này cho phép các đầu ra đượ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à "once": true, cho phép bạn đưa thiết bị về trạng thái ban đầu.
Ghi đầu ra định kỳ: Trên một số thiết bị, đầu ra phải được ghi định kỳ, nếu không thiết bị sẽ đặt các giá trị về "tiêu chuẩn". Ví dụ: bộ nhớ Kostal sẽ trở lại quy tắc mặc định nếu bộ đ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 #xxx# vào đầu địa chỉ, trong đó xxx cho biết mỗi giây đầu ra sẽ đượ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.
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 tra | Phần tử có tên "test" |
name1.name2 | Phầ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 . |
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ý sạc có thể tính toán lại giá trị của biến này. Sau đó, bạn có thể sử dụng những thông số này 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 làm biến. Ở đây E x và M x là ID thiết bị của hộp treo tường hoặc đồng hồ đo được thiết lập trong Trình quản lý sạc. 'thành viên' là biến "tùy chỉnh" được lưu trữ trong thiết bị tương ứng. Một số biến có thể có ý nghĩa đặc biệt: Đối với KEBA "out1" là đầu ra chuyển mạch, đối với ABB B23 mét "out1" và "out2" là đầu ra chuyển mạch (trên các mẫu hỗ trợ điều này). Số 1 sẽ tắt đầu ra, số 0 sẽ tắt lại.
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.
Lưu ý: Chỉ có thể sử dụng số và chữ cái az và AZ làm tên biến.
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ý tính phí và đồng hồ đo, ví dụ: giá hiện tại từ Awattar:
Trong cấu hình Trình quản lý sạc, bạn có thể định cấu hình các đầu ra chung như được mô tả ở trên trong định nghĩa đồng hồ đo 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 việc chuyển đổi đầu ra trong các thiết bị do người dùng xác định, nên sử dụng quy ước trên (xem Biến của Trình quản lý sạc): Bạn đặt các biến có tên "out1", "out2", v.v. trong bộ đếm do người dùng xác định và thiết lập đầu ra trong bộ đếm do người dùng xác định sẽ chuyển đổi đầu ra tùy thuộc vào giá trị của biến này.
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 (Trình quản lý sạc có thể truy cập được). Là địa chỉ cho Modbus RTU, hãy nhập COMx,bd,8,p,s, như trong cấu hình của từng thiết bị, 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 (dành 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 được đề cập ở trên.
func: Số chức năng Modbus, ví dụ để đọc 3 hoặc 4, để viết 6 hoặc 16.
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 (có tiền tố 0x).
val: number: Giá trị cần ghi vào thanh ghi. Bỏ qua khi đọc.
gõ: '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, đối với các loại khác thì bỏ qua hoặc đặt thành 1.
order: Chuỗi: 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".