문서

사용자 지정 카운터

참고: 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'가 있습니다:




silence_period, msec: 장치가 메시지 시작을 인식할 수 있도록 Modbus RTU 액세스 전 일시 중지 길이를 결정합니다. 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 연결의 최대 대기 시간 지연_after_connect: in msec: 연결이 설정된 후 첫 번째 명령이 전송되기 전까지 일시 중지합니다.

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

upd_delay: msec 단위: 디바이스를 읽을 수 있는 간격을 결정합니다.
일부 장치는 너무 자주 쿼리하면 과부하가 걸립니다. manufacturer: 문자열, 제조업체 이름.


지연_누적 : true = 3초마다 또는 전력이 충분한 경우에만 누적 값(kWh)을 쿼리합니다. false = 이 값을 항상 쿼리합니다. ui_addr: 웹 인터페이스 호출을 위한 장치 주소와 다른 경우 URL입니다. 예약됨: 0으로 해석되는 값이 포함된 배열(기기가 모델에 따라 특정 값을 지원하는 경우 유용함).

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

JSON 정의의 다음 단계는 미터가 전류, 전압 등의 값을 읽거나 계산하는 데 사용하는 변수를 정의하는 것입니다.
충전 관리자는 유형 지정, 버전, 펌웨어 버전, 시리얼: 타일의 확장 정보에 표시된 대로 모델 지정을 구성하는 변수를 인식합니다.
전압_l1..전압_l3, 전류_l1..전류_l3, 전력_w, 전력_var, 전력_va, 전력_w_l1..전력_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에 표시됩니다.
참고: 변수 이름에는 숫자와 문자 a-z 및 A-Z만 사용할 수 있습니다.

변수의 정의입니다:


이 객체의 이름은 위에 나열된 변수의 이름을 따르며 다음과 같은 속성을 가집니다. fixed: 고정된 값을 가진 문자열입니다.
예를 들어 type_designation 또는 전압과 같이 값을 확인할 수 없는 경우에 유용합니다. expr: 문자열입니다.
변수를 읽지 않고 수식으로 평가합니다. type: 고정 또는 expr이 아닌 경우 변수의 유형: int16, uint16, int32, uint32, float, int64, 문자열. 이는 모드버스에서 올바른 형식으로 레지스터를 읽기 위해 중요합니다. uint16 및 uint32는 양수만 허용하는 유형입니다.
JSON/HTTP에서는 일반적으로 float를 사용할 수 있습니다. 해상도: float. 읽기 값에 '해상도'를 곱합니다. 전압 값은 볼트 단위, 전류는 밀리암페어 단위, 전력은 와트 단위, 에너지는 와트시(Wh) 단위여야 합니다.
음수 '해상도'를 사용하면 값의 부호가 반대인 경우 값을 반전시킬 수 있습니다. : 부울(참 또는 거짓).
참이면 장치가 초기화될 때 값을 한 번만 읽고, 그렇지 않으면 주기적으로 읽습니다. 주소: 숫자(Modbus) 또는 문자열(HTTP/JSON).
모드버스 레지스터 번호 또는 읽을 값의 HTTP URL입니다. 쿼리: 문자열.
HTTP JSON의 경우 JSON 응답에서 읽을 값을 찾는 충전 관리자의 쿼리 언어 사양입니다. order: 문자열. 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 배열입니다.
각 입력에 대해 다음 속성을 정의해야 합니다. 주소: 주소(모드버스 레지스터 또는 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}를 지정할 수도 있습니다. 이것은 설정에 정의된 현재 장치 주소와 모드버스 ID입니다.
'address'와 '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으로 설정할 수 있습니다. 이러한 방식으로 이전에 수식을 사용하여 변수에 저장한 값을 Modbus 레지스터에 숫자 값으로 작성하여 메모리 성능을 제어할 수도 있습니다.
숫자 값을 전달하는 대신 수식에 따라 URL의 한 텍스트를 다른 텍스트로 바꿔야 하는 경우(예: 셸리 WLAN 소켓의 경우) 다음과 같이 작성할 수 있습니다: ${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 액세스를 실행하도록 합니다.

출력 재설정: "출력" 배열 외에도 "출력" 배열과 같은 구조의 "resets"라는 배열을 정의할 수도 있습니다. 이렇게 하면 디바이스가 비활성화될 때 출력을 초기값으로 재설정할 수 있습니다. 이는 사용자 정의 변수 및 "한 번"(true)과 함께 사용하여 디바이스를 초기 상태로 재설정할 수 있습니다.
출력을 주기적으로 쓰기: 일부 디바이스의 경우 출력을 주기적으로 기록해야 하며, 그렇지 않으면 디바이스가 값을 '기본값'으로 재설정합니다. 예를 들어, 코스탈 메모리는 한동안 메모리 제어를 활발하게 쓰지 않으면 기본 규칙으로 되돌아갑니다. 출력을 주기적으로 설정하려면 주소 앞에 #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으로 설정)까지의 시간을 계속해서 연장할 수 있습니다.

참고: 변수 이름에는 숫자와 문자 a-z 및 A-Z만 사용할 수 있습니다.

테스트 목적으로 충전 관리자 및 미터 변수를 표시할 수 있습니다(예: 현재 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 주소입니다.



모드버스 API의 URL(HTTP GET의 경우)은 /cnf?cmd=modbus_get 또는 /cnf?cmd=modbus_set입니다. cFos 충전 관리자는 다음 추가 쿼리 매개변수를 지원합니다: addr:


F unc: 모드버스 기능 번호(예: 읽기 3 또는 4, 쓰기 6 또는 16). id: 모드버스 장치의 장치 ID. reg: 모드버스 레지스터 번호.
값은 10진수 또는 16진수(접두사 0x 포함)로 지정할 수 있습니다. val: 숫자: 레지스터에 기록할 값입니다.
Type: 'w' 16비트(기본값), d = 32비트, f = float, q = 64비트, s = 문자열.

c nt: 숫자: 레지스터에 있는 문자열의 최대 길이, 다른 유형은 생략하거나 1로 설정합니다. order: 문자열: 바이트 순서, 'hl' 또는 'lh' 중 하나입니다.

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

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