문서

사용자 지정 카운터

참고: cFos 충전 관리자는 SunSpec을 사용하여 대부분의 태양광 인버터를 판독할 수 있습니다(장치 유형 "SunSpec 태양광 인버터/계량기"). 이 경우 자체 미터 정의를 생성할 필요가 없습니다.

CFos 충전 관리자를 사용하면 표준 레퍼토리에 없는 미터를 지원하기 위해 자신만의 미터 정의를 만들 수 있습니다. 현재 세 가지 유형이 있습니다: 모드버스 카운터, HTTP/JSON 카운터, MQTT/JSON 카운터입니다. 이러한 카운터의 정의 파일은 매우 유사합니다. 모드버스 카운터는 특정 레지스터에서 모드버스를 통해 데이터를 읽는 반면, HTTP/JSON 카운터는 HTTP 요청을 통해 데이터를 가져와 JSON을 응답으로 파싱합니다. MQTT/JSON 카운터의 경우, cFos 충전 관리자는 MQTT 토픽을 구독하고 해당 토픽에 게시된 메시지를 JSON으로 파싱합니다. 구문 분석을 위해 cFos 충전 관리자는 작은 "쿼리 언어"를 사용합니다. 다음은 cFos 충전 관리자의 MQTT 기능에 대한 문서입니다.

사용자 정의 카운터는 전류 및 전압과 같은 여러 사전 정의된 변수 외에도 알 수 없는 사용자 정의 변수를 읽고, 입력을 쿼리하고, 출력을 설정할 수 있습니다. 변수를 읽고 출력을 설정하면 공식을 평가할 수 있습니다. 아래에서 설명하는 충전 관리자 변수 및 글로벌 충전 관리자 출력과 함께 사용하면 강력한 기능으로 특정 홈 자동화 작업과 배터리 저장과 같은 외부 장치 제어도 가능합니다. 이를 통해 제어 작업을 실현해 보신다면 피드백을 보내주시기 바랍니다. 저희는 사람들이 cFos 충전 매니저로 무엇을 제어하는지에 대해 매우 관심이 많으며, 고객의 요구에 따라 충전 매니저를 더욱 발전시키는 데 도움이 됩니다.

다음은 유효 전력에 대한 단일 레지스터를 읽는 모드버스에 대한 간단한 정의 예제입니다. 특정 애플리케이션의 레지스터 번호를 쉽게 수정할 수 있습니다:
단일 레지스터에 대한 정의 예시.

다음은 모드버스에 대한 정의 예시와 HTTP/JSON에 대한 정의 예시입니다:
모드버스 카운터에 대한 정의 예제 다운로드
HTTP/JSON 카운터에 대한 샘플 정의 다운로드

이러한 파일 중 일부는 이미 충전 관리자에 포함되어 있지만, '시스템 구성'에서 직접 파일을 업로드하고 다시 삭제할 수도 있습니다.
여기에서 저희가 제공하는 대부분의 미터 정의를 찾을 수 있습니다:
제공된 카운터 정의 다운로드

자신만의 미터기 파일을 만들었고 다른 사용자들에게 도움이 될 수 있는 경우 해당 파일을 제공해 주시면 대단히 감사하겠습니다. 그러면 향후 버전의 충전 관리자와 함께 제공하도록 하겠습니다.

추가 카운터에 대한 카운터 정의 다운로드

정의 파일의 구조:

카운터 정의는 속성 및 하위 개체가 있는 전역 JSON 개체가 있는 JSON 파일입니다. 'rtype'은 읽기 작업의 유형을 결정합니다: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype'은 장치 유형을 결정합니다: 0 = 기타 장치, 1 = 미터기, 2 = 인버터, 4 = 배터리 저장소.

숫자는 접두사 0x를 사용하여 10진수 또는 16진수로 지정할 수 있습니다. //를 사용한 한 줄 주석도 허용됩니다.

정의 파일을 JSON5 유효성 검사기(예: 이 JSON5 유효성 검사기)를 통해 실행하는 것이 좋습니다. 다음 참조에서 수식에 사용할 수 있는 값을 이해하려면 수식 장을 반드시 읽어보셔야 합니다.

모드버스 정의에는 다음과 같은 속성을 가진 객체 'rtu'가 있습니다:

침묵_기간: 장치가 메시지의 시작을 인식할 수 있도록 Modbus RTU 액세스 전의 일시 정지 길이(msec) 결정됨
silence_same_slave, true: 동일한 장치에 여러 번 액세스하는 경우에도 일시 정지가 관찰됨
retries: 장치가 응답하지 않는 경우 재시도 횟수
rcv_timeout: 장치가 응답할 때까지 액세스당 최대 대기 시간(msec) 결정됨.

이러한 글로벌 속성은 Modbus TCP 및 RTU에 적용됩니다:

modbus_read: 모드버스 읽기 명령의 함수 번호(보통 3 또는 4)
modbus_read_max_registers: 한 번에 읽을 수 있는 최대 레지스터 수.
modbus_allow_gaps: true = 읽기 작업에서 사용되지 않는 레지스터 영역을 읽을 수 있습니다.

Modbus TCP 및 HTTP/JSON의 경우 다음과 같은 속성을 가진 객체 'tcp'가 있습니다:

connect_timeout: msec. TCP 연결의 최대 대기 시간.
delay_after_connect: msec. 연결이 설정된 후 첫 번째 명령을 보내기 전에 일시 중지합니다.

두 정의 유형(Modbus 및 HTTP/JSON) 모두 다음과 같은 추가 속성이 있습니다:

upd_delay: 밀리초 단위로 장치를 읽을 수 있는 간격을 결정합니다. 일부 장치는 너무 자주 쿼리하면 과부하가 걸립니다.
manufacturer: 문자열, 제조업체 이름. 이는 타일의 확장 정보에 표시됩니다.
delay_accumulated: true = 누적 값(kWh)은 3초마다 또는 전력이 충분한 경우에만 쿼리됩니다. false = 이 값은 항상 쿼리됩니다.
ui_addr: 웹 인터페이스 호출을 위한 장치 주소와 다른 경우 URL.
예약됨: 0으로 해석되는 값이 있는 배열(기기가 모델에 따라 특정 값을 지원하는 경우 유용).

위에 나열된 속성을 생략하면 cFos 충전 관리자는 대부분의 경우 잘 작동하는 기본값을 사용합니다.

JSON 정의에서 다음 단계는 계량기가 전류, 전압 등의 값을 읽거나 계산하는 데 사용하는 변수를 정의하는 것입니다. 충전 관리자가 사용하는 변수는 다음과 같습니다.
type_designation, 버전, 펌웨어_버전, serial: 타일의 확장 정보에 표시된 대로 모델 이름을 구성합니다.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: CFos 충전 관리자는 이 값에서 전압_l1..l3, 부호 있는 current_l1..l3, power_w 및 power_va에 대한 값을 계산하려고 합니다. 모든 변수를 지정할 필요는 없습니다.
import_wh, export_wh: 충전 관리자는 이 변수를 사용하여 import_wh 및 export_wh를 표시합니다. 단방향 계량기(예: 인버터)의 경우 항상 import_wh만 정의해야 합니다. 양방향 계량기(예: 저장 탱크 또는 계통 참조 계량기)에 대해서만 export_wh를 정의해야 합니다.

soc: 사용 가능한 경우 배터리 저장 탱크의 충전 상태가 타일에 % 단위로 표시됩니다.
또한 업데이트할 때마다 읽거나 공식을 사용하여 계산되는 다른 이름을 가진 다른 변수를 정의할 수 있습니다. CM으로 시작하는 변수(예: CM._set_price)를 정의하면 할당된 값이 글로벌 충전 관리자 변수에 저장되며(아래 참조), 이에 따라 쿼리할 수 있습니다.
가 붙은 변수: 로 시작하는 변수를 정의하면 해당 변수가 UI의 계량기 타일에서 확장 정보(예: 배터리 저장소 온도) 아래에 표시됩니다.

변수의 정의입니다:


객체의 이름은 위에 나열된 변수 이름의 이름을 따서 지정되며 다음과 같은 속성을 가집니다. fixed: 고정된 값을 가진 문자열입니다.

예를 들어 type_designation 또는 전압과 같이 값을 확인할 수 없는 경우에 유용합니다. expr: 문자열, 변수를 읽지 않고 수식으로 평가합니다. type: 고정 또는 expr이 아닌 경우 변수 유형: int16, uint16, int32, uint32, float, int64, 문자열입니다. 이는 모드버스에서 올바른 형식으로 레지스터를 읽기 위해 중요합니다. uint16 및 uint32는 양수만 허용할 수 있는 유형입니다.
해상도: float, 읽기 값에 '해상도'를 곱한 값을 사용할 수 있습니다. 전압 값은 볼트, 전류는 밀리암페어, 전력은 와트, 에너지는 와트시(Wh) 단위여야 합니다.


음수 '해상도'를 사용하면 값이 반대 부호를 갖는 경우 값을 반전시킬 수 있습니다. once: bool(참 또는 거짓), 참이면 장치가 초기화될 때 값을 한 번만 읽고 그렇지 않으면 주기적으로 읽습니다. 주소: 숫자(Modbus) 또는 문자열(HTTP/JSON), 읽을 값의 Modbus 등록 번호 또는 HTTP URL입니다. 쿼리:
문자열, HTTP JSON의 경우 JSON 응답에서 읽을 값을 찾는 충전 관리자의 쿼리 언어 사양입니다. 순서: 문자열, Modbus의 경우 값이 있는 바이트 순서(hl 또는 lh)입니다. 길이: 숫자, Modbus의 경우 레지스터에 있는 문자열의 길이입니다. 'version' 및 'firmware_version' 변수의 경우 'length'는 숫자 버전을 점이 있는 문자열로 변환하는 데 사용됩니다. 'length'에는 2 또는 4의 값을 사용할 수 있으며, 이 경우 버전 형식은 a.b 및 a.b.c.d가 됩니다. '길이'가 2이고 유형이 'int16' 또는 'uint16'인 경우 충전 관리자는 점으로 로우바이트와 하이바이트를 구분하고, 'int32' 또는 'uint32'는 로우워드와 하이워드를, 'int64'는 로우워드와 하이워드를 구분합니다. 'lenth' 4와 'int32' 또는 'uint32'의 경우 충전 관리자는 값을 점으로 구분한 4바이트로 분할합니다.
'int64'의 경우 그에 따라 4개의 단어로 분할됩니다. 정규식: 문자열. 정규식을 지정한 경우 카운터 응답이 JSON일 필요는 없습니다. 정규식의 전체 일치 항목 또는 첫 번째 그룹이 결과로 평가됩니다. 디바이스가 JSON을 반환하지 않는 경우에만 이 기능을 사용하세요.

정규식 기능 목록은 다음과 같습니다. 모든 문자: :



\ 익명 클래스: [a-z0-9_], [^0-9], [^\d] 대체어가 있는 그룹: (ab|cd|ef) 캡처되지 않은 그룹: (?:ab|cd) (greedy) 한 번 또는 없음: a?, a????
(욕심 ) 많거나 없음: a*, a*?


(greedy) 한 번 이상: a+, a+? 문자열의 시작: ^ 문자열의 : $

입력의 정의:

충전 관리자는 장치당 서로 다른 레지스터 또는 JSON 요소에서 최대 32개의 입력 값을 쿼리할 수 있습니다. "입력" 속성은 JSON 배열입니다. 각 입력에 대해 다음 속성을 정의해야 합니다.
address: 주소(Modbus 레지스터 또는 URL).
count: 이 요청으로 읽을 입력 비트 수.
쿼리: HTTP/JSON의 경우 응답에서 값을 찾기 위한 쿼리 언어입니다.

CFos 충전 관리자는 업데이트할 때마다 이러한 방식으로 정의된 모든 입력을 읽고 내부적으로 배열에 비트를 배치한 다음 입력1..입력N... 수식을 사용하여 쿼리할 수 있습니다.

출력의 정의:

충전 관리자는 장치당 최대 32개의 출력을 전환할 수 있습니다. 출력은 "출력"에서 출력 개체의 JSON 배열로 정의됩니다. 각 출력의 상태가 변경된 경우 각 업데이트 주기가 끝날 때마다 모든 출력이 전환됩니다.
각 출력에 대해 출력 객체에서 다음 속성을 정의해야 합니다.
주소: 선택적 HTTP 메서드가 포함된 HTTP URL(예: GET http://www.example.com?output1=${var1}). 모드버스 레지스터를 설정하려면 cFos 충전 관리자의 HTTP API를 사용할 수 있습니다. 충전 관리자는 로컬 호스트에서 일치하는 액세스를 감지하고 요청을 내부 핸들러로 리디렉션하므로 외부 HTTP API 액세스와 같이 권한 부여가 필요하지 않습니다. 모든 교체 후 URL이 비어 있으면 출력이 설정되지 않습니다. 예를 들어 특정 변수가 존재하는 경우에만 출력을 전환할 수 있습니다(수식: exists() 함수 참조). 주소에 ${address} 및 ${id}를 추가로 지정할 수 있습니다. 이는 설정에 정의된 현재 장치 주소와 Modbus ID입니다. 주소와 ID는 주로 Modbus API를 사용하는 데 사용됩니다(아래 참조).
body: POST 또는 PUT을 위한 선택적 HTTP 본문입니다.
URL과 본문에서 글로벌 충전 관리자 변수 또는 각 카운터를 참조하는 ${expr} 공식을 사용할 수 있습니다. 'expr' 수식은 출력을 설정할 때 평가되어 URL 또는 본문의 텍스트에서 대체됩니다. 위의 예에서 http://www.example.com?output1=1 가 출력을 설정하고 http://www.example.com?output1=0 가 삭제하는 경우, 변수 'var1'을 정의하고 원하는 대로 1 또는 0으로 설정할 수 있습니다. 이러한 방식으로 이전에 수식을 사용하여 변수에 저장한 모드버스 레지스터의 메모리 성능을 제어하기 위해 숫자 값을 작성할 수도 있습니다.
URL에 숫자 값을 전달하는 대신 수식에 따라 한 텍스트를 다른 텍스트로 대체해야 하는 경우(예: 셸리 무선랜 소켓) ${if expr`text1`text2}와 같이 작성할 수 있습니다. '아포스트로피'는 백틱(ASCII 코드 96)입니다. 'expr' != 0이면 text1이 삽입되고, 그렇지 않으면 text2가 삽입됩니다. 셸리 무선랜 소켓의 경우 URL은 다음과 같습니다: http://<ip-addr>/relay/0?turn=${if expr`on`off}, 즉, expr != 0이면 충전 관리자가 http://<ip-addr>/relay/0?turn=on, 그렇지 않으면 http://<ip-addr>/relay/0?turn=off를 호출합니다.

상대 경로를 URL로 입력하면 충전 관리자는 각 장치에 대해 구성된 주소를 사용합니다. 도메인으로 'localhost'를 입력하면 충전 관리자가 실행 중인 장치의 주소를 사용합니다. 자체 API에 대한 액세스를 감지하면 전체 HTTP 액세스를 실행하는 대신 내부 핸들러를 사용하므로 카운터 정의에 사용자 이름과 비밀번호를 저장할 필요가 없습니다. 로 시작하는 URL은 충전 관리자가 항상 전체 HTTP 액세스를 수행하도록 합니다.

출력 재설정: "출력" 배열 외에도 "출력" 배열과 같은 구조의 "재설정"이라는 이름의 배열을 정의할 수도 있습니다. 이는 장치가 비활성화되었을 때 출력을 초기값으로 재설정하는 데 사용할 수 있습니다. 이를 사용자 정의 변수 및 "한 번": true와 함께 사용하면 장치를 초기 상태로 다시 설정할 수 있습니다.
출력을 주기적으로 쓰기: 일부 장치의 경우 출력을 주기적으로 기록해야 하며, 그렇지 않으면 장치가 값을 "기본값"으로 재설정합니다. 예를 들어, Kostal 메모리는 메모리 컨트롤을 한동안 활발하게 쓰지 않으면 기본 규칙을 다시 사용합니다. 출력을 주기적으로 설정하려면 주소 앞에 #xxx#을 붙이면 되는데, 여기서 xxx는 기록할 값이 동일하게 유지되더라도 출력이 몇 초마다 다시 쓰여지는지를 나타냅니다. 예를 들어 주소가 /cnf?cmd=set_cm_vars&name=test&val=42인 경우 #30#/cnf?cmd=set_cm_vars&name=test&val=42를 사용하여 이 값을 30초마다 쓰도록 할 수 있습니다.

쿼리 언어의 정의:

현재 '쿼리' 검색 표현식에는 멤버 이름과 연산자 "." 및 "[]"를 사용할 수 있습니다(예시):

테스트'test'라는 이름의 요소
name1.name2하위 객체 "name1"의 요소 "name2
name[idx]객체 요소 "이름"의 요소 "idx". "idx"는 숫자(예: 배열 또는 문자열)일 수 있습니다
name["u2"]객체 요소 "name"의 요소 "u2"는 "name.u2"에 해당합니다
name[{"el1": "v1", "el2": 3}].value객체 표기법의 조건을 충족하는 배열 요소를 선택하고 'value'라는 요소를 평가합니다. 예를 들어, 'name' 배열에서 값이 'v1'인 'el1'과 값이 3인 'el2'를 객체 요소로 가진 요소를 선택한 다음 이 객체에서 'value' 요소의 값을 반환합니다.

글로벌 충전 관리자 변수:

충전 관리자 구성에서 변수를 만들 수 있습니다. 고정 값 또는 수식을 값으로 사용할 수 있습니다. 각 업데이트 주기가 끝날 때마다 충전 관리자는 필요한 경우 이러한 변수의 값을 다시 계산합니다. 그런 다음 (특정) 충전 관리자 매개변수, 충전 규칙에서 사용하거나 출력을 제어하는 데 사용할 수 있습니다. Ex.member 또는 Mx.member를 변수로 작성할 수도 있습니다. 여기서 Ex와 Mx는충전 관리자에 설정된 월박스 또는 계량기의 장치 ID입니다. member는 해당 장치에 저장되는 "사용자 정의" 변수입니다. 일부 변수는 특별한 의미를 가질 수 있습니다: KEBA의 경우 "out1"은 스위칭 출력이고, ABB B23 계량기의 경우 "out1" 및 "out2"는 스위칭 출력입니다(이를 지원하는 모델의 경우). 1은 출력을 전환하고 0은 출력을 다시 끕니다.

특정 조건에서 전원을 켠 다음 잠시 동안 작동해야 하는 가전 제품(예: 세탁기, 식기세척기)이 있는 경우 변수를 "트리거"로 정의할 수도 있습니다. 그러면 변수의 공식은 변수가 1로 설정되는 조건입니다. 조정 가능한 시간이 지나면 다시 0으로 설정됩니다. "트리거 조건"을 사용하면 조건이 충족되는 한 끄기(즉, 변수를 0으로 설정)까지의 시간을 계속해서 연장할 수 있습니다.

테스트 목적으로 충전 관리자 및 미터기 변수를 표시할 수 있습니다(예: 현재 Awattar 가격):


                        카운터 변수의 스크린샷 표시

글로벌 충전 관리자 출력:

충전 관리자 구성에서 '출력' 아래의 카운터 정의에 설명된 대로 글로벌 출력을 구성할 수 있습니다. 상태가 변경된 경우 각 업데이트 주기가 끝날 때마다 설정됩니다. 사용자 정의 장치에서 스위칭 출력을 제어하려면 위의 규칙을 따르는 것이 좋습니다(충전 관리자 변수 참조): 사용자 정의 카운터에 'out1', 'out2' 등의 이름을 가진 변수를 설정하고 이 변수의 값에 따라 출력을 전환하는 출력을 사용자 정의 카운터에 설정합니다.

충전 관리자의 글로벌 모드버스 API:

충전 관리자의 모드버스 API는 모드버스 RTU 또는 TCP 주소(충전 관리자에서 액세스 가능)를 가진 모드버스 장치를 제어하는 데 사용됩니다. Modbus RTU의 경우 주소로 COMx,bd,8,p,s를 입력합니다. 여기서 x는 COM 포트 번호, bd는 전송 속도, p는 패리티('N', 'E' 또는 'O'), s는 개별 장치의 구성에서와 같이 정지 비트 수(1 또는 2)를 입력합니다. Modbus TCP의 경우 수신자는 포트 번호를 포함하여 충전 관리자 네트워크에 있는 장치의 IP 주소입니다.
Modbus API의 URL(HTTP GET의 경우):
/cnf?cmd=modbus_get 또는 /cnf?cmd=modbus_set
cFos 충전 관리자는 다음과 같은 추가 쿼리 매개변수를 지원합니다:
addr:
func: 모드버스 기능 번호(예: 읽기 3 또는 4, 쓰기 6 또는 16)
id: 모드버스 장치의 장치 ID
reg: 모드버스 레지스터 번호. 값은 10진수 또는 16진수(접두사 0x 포함)로 지정할 수 있습니다.
val: 숫자, 레지스터에 기록할 값입니다.
type: 'w' 16비트(기본값), d = 32비트, f = 실수, q = 64비트, s = 문자열.
cnt: 숫자, 레지스터에 있는 문자열의 최대 길이, 다른 유형은 생략하거나 1로 설정합니다.
order: 문자열, 바이트 순서, 'hl' 또는 'lh' 중 하나입니다.

참고: '카운터'에 주로 제어 작업이 있는 경우 이 타일의 설정에서 '장치 숨기기' 옵션을 선택하면 이 장치가 시작 페이지에 표시되지 않도록 할 수 있습니다.

참고: HTTP를 통해 판독되는 일부 계량기에는 사용자 이름/비밀번호가 인증 수단으로 필요합니다. HTTP 액세스 주소(예: http: //username:password@192.168.2.111)에 이를 지정할 수 있습니다 . 사용자 이름이나 비밀번호에 "@"가 포함된 경우 "%40"으로 바꿔야 합니다.