문서

MQTT 적용 분야

MQTT는 중앙 메시지 브로커가 있는 인터넷 프로토콜입니다. 이 메시지 브로커를 통해 참가자는 특정 "주제"를 구독하고 주제에 메시지를 보낼 수 있습니다. CFos 충전 관리자는 특정 주제에 대한 메시지를 수신할 수 있으며, 따라서 MQTT를 통해 제어할 수 있습니다. 또한 관리하는 장치의 상태를 전달할 수도 있습니다. CFos 파워 브레인 월박스도 MQTT를 통해 제어하고 상태를 전송할 수 있습니다. 이는 홈 오토메이션 시스템에 연결하거나 산업 제어(M2M) 및 모니터링 및 녹화를 위해 유용합니다. 모든 주제는 cfos_mqtt로 시작합니다. 여러 대의 cFos MQTT 장치를 하나의 MQTT 브로커에 연결하려는 경우, 설정에서 조정할 수 있는 cfos_mqtt_<일련 번호>/로 주제를 시작할 수 있습니다. 구성에서 기본 MQTT 브로커의 URL을 설정할 수도 있습니다. URL은 선택적으로 mqtt://mqtts: //로 시작할 수 있습니다. Mqtts://를 사용하면 cFos 충전 관리자 또는 cFos 파워 브레인 월박스가 TLS 연결을 설정합니다. 암호화되지 않은 연결에는 표준 포트 1883이, TLS 연결에는 8883이 사용됩니다. 그러나 URL에 포트를 지정할 수도 있습니다. 사용자 이름과 비밀번호는 일반적인 URL 표기법(예: mqtt: //user:password@192.168.2.111)으로 지정할 수 있습니다. cFos 충전 관리자 구성에서 MQTT 브로커를 지정하는 경우, 개별 브로커를 지정하거나 단순히 mqtt를 작성할 수 있습니다. 이 경우 구성에 저장된 기본 브로커가 사용됩니다.

CFos 충전 관리자는 MQTT 3.1.1과 MQTT 5를 모두 지원합니다. URL이 mqtt3:// 또는 mqtt5://로 시작하면(암호화된 연결의 경우 mqtts3:// 및 mqtts5://) 프로토콜 버전이 결정됩니다. 기본값은 MQTT 3.1.1입니다. 오류 메시지가 표시되면 cFos 충전 관리자는 MQTT 5에 대해 MQTT 3.1.1로 다시 전환하려고 시도합니다. 이는 구형 Mosquitto 브로커에서는 작동하지만 다른 브로커에서는 작동하지 않을 수 있습니다.

참고: MQTT를 설정하려면 관리자 비밀번호가 필요하므로 충전 관리자가 그에 따라 데이터를 처리합니다. 따라서 관리자 비밀번호로만 액세스할 수 있는 데이터가 의도적으로 전송됩니다.

MQTT 브로커에 대한 참고 사항: Stefan G.(#diebestenuserderwelt) 덕분에 ioBroker에 내장된 MQTT 브로커를 테스트할 수 있었습니다. 이 MQTT 3.1.1 브로커는 (2023년 2월 기준) 표준을 준수하지 않는 여러 가지 방식으로 작동합니다: 연결 시도가 오류 메시지 없이 자동으로 종료되고, 페이로드가 PUBLISH 패킷에서 누락되는 경우가 있으며, PUBLISH 패킷이 두 번 전송되는 것처럼 보입니다(구성 설정으로 이를 끌 수 있습니까?). 즉, API 요청이 두 번 이상 실행될 수 있으므로 이 브로커는 충전 관리자 API를 제어하는 데 적합하지 않습니다. 저희는 가능한 한 많은 브로커와 호환되는 MQTT 구현에 관심이 있지만, 현재로서는 ioBroker에 Mosquitto를 사용하는 것을 권장합니다.

장치 유형 "HTTP 입력"을 통해 계량기와 월박스를 통합합니다.

이러한 장치에 HTTP를 통해 공급하는 대신(HTTP API -> HTTP 미터 및 월박스 참조), 이러한 장치도 MQTT를 수신할 수 있습니다. 장치 주소로 mqtt 또는 MQTT 브로커 URL을 입력합니다. 그러면 해당 계량기 또는 월박스는 cfos_mqtt/set/<장치 ID> 토픽을 수신합니다(예: 장치 ID가 M1인 계량기의 경우 cfos_mqtt/set/M1). 그러면 HTTP 입력 계량기는 "HTTP 계량기 및 월박스"의 HTTP API에 설명된 대로 JSON 문자열을 메시지로 기대합니다. 따라서 MQTT 소스는 이 형식으로 데이터를 전달해야 합니다. 이렇게 하면 다른 소스(예: 홈 자동화 시스템)에서 데이터를 가져온 다음 충전 관리자에 공급하여 cFos 충전 관리자가 지원하지 않는 장치를 통합할 수 있습니다.
참고: 소스의 데이터가 HTTP 카운터가 예상하는 것과 다른 형식인 경우 사용자 지정 카운터를 만들 수도 있습니다. MQTT의 경우 아래에 설명되어 있습니다.


예: HTTP 입력 카운터를 생성했고 장치 ID가 M3인 경우. Mosquitto 브로커의 주소를 주소로 입력했습니다(예: mqtt://192.168.2.30). Mosquitto가 실행 중인 컴퓨터의 명령줄에 다음 명령을 입력하면 됩니다:
mosquitto_pub -h localhost -t cfos_mqtt/set/M3 -m '{ "model": "TestModell", "import_wh": 12345, "export_wh": 23456, "voltage": [231, 232, 233], "current": [10001, 10002, 10003] }'
를 입력하면 카운터에 위의 값이 포함됩니다.

충전 관리자 장치의 상태 전송

충전 관리자 구성에서 MQTT 브로커 URL(또는 표준 브로커의 경우 mqtt)을 지정할 수 있으며, 그러면 충전 관리자가 모든 장치의 상태를 cfos_mqtt/get/dev_info 항목 아래에 게시합니다. 이 정보는 HTTP get_dev_info에서 알려진 형식으로 전송됩니다. 이렇게 하면 미터의 전력 값이나 월박스의 상태와 같은 모든 장치 값을 UI에서도 볼 수 있습니다. 개별 장치만 구독하려는 경우, '디스플레이' 아래의 개별 장치 설정에서 "MQTT를 통해 정보 게시" 확인란을 비활성화하고 대신 "MQTT를 통해 정보 게시" 옵션을 체크하면 됩니다. 그러면 해당 장치에 대한 해당 JSON 문자열이 cfos_mqtt/get/<device-ID> 항목 아래에 게시됩니다. 또한 모든 전역 값은 "params" 아래의 HTTP get_dev_info에서 알려진 형식으로 출력되므로 cfos_mqtt/get/params 항목 아래에서 구독할 수 있습니다.

mQTT를 통한 cFos 충전 관리자 API 제어

CFos 충전 관리자 구성에서 "MQTT를 통한 API 액세스를 위한 브로커"에서 MQTT 브로커 URL(또는 표준 브로커의 경우 mqtt)을 지정할 수 있습니다. 이 값이 비어 있지 않으면, cFos 충전 관리자는 cfos_mqtt/api/로 시작하는 모든 토픽을 구독합니다. 그런 다음 해당 토픽의 메시지를 마치 토픽 이름이 /cnf? 로 시작하는 HTTP URL인 것처럼 해석하여 HTTP API로 전달합니다. 그런 다음 충전 관리자는 HTTP API의 응답을 cfos_mqtt/api_res라는 토픽 아래에 JSON으로 게시합니다. 이렇게 하면 거의 모든 HTTP API를 MQTT를 통해 제어할 수 있습니다. 긴 JSON 응답을 전달하는 API 호출은 예외입니다. 예: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1은 API 함수 set_cm_var를 사용하여 충전 관리자 변수 x를 1로 설정합니다. cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 아래의 메시지는 장치 ID가 E1인 월박스에 대한 RFID 5678을 입력합니다(확장 RFID 기능도 참조하세요).
HTTP POST를 통해 전송된 데이터는 주제 아래의 메시지에 넣을 수 있습니다.

예: 충전 관리자가 사용할 수 있는 최대 총 전류를 주기적으로 변경합니다:
일반 충전 관리자 설정의 "MQTT를 통한 API 액세스를 위한 브로커"(또는 "구성"에 저장된 기본 브로커를 사용하려는 경우 간단히 mqtt)에서 브로커를 입력합니다.
그런 다음 MQTT를 사용하여 다음 내용이 포함된 JSON 객체
{"max_total_cur_prc": p}

에 게시합니다. 여기서 p는 미리 설정된 최대 총 스트림의 몇 퍼센트를 차지해야 하는지를 백분율로 나타낸 값입니다.
참고: 일부 HTTP API 호출은 충전 관리자가 구성을 저장하도록 합니다. 이러한 호출을 너무 자주 실행하면 플래시(cFos 파워 브레인 또는 cFos 월박스 부스터의 경우) 또는 라즈베리의 SD 카드가 마모될 수 있습니다. 따라서 단일 매개변수 "max_total_cur_prc"를 사용하여 "set_params"를 호출하면 매개변수가 저장되지 않습니다.

MQTT를 통한 월박스 제어

CFos 충전 관리자가 "로드 관리" 모드가 아닌 "관찰" 모드에 있는 경우, MQTT를 사용하여 모든 월박스를 직접 제어할 수 있습니다. 이는 특히 "관찰" 모드에서 슬레이브로 작동하는 cFos Power Brain 월박스에 적용됩니다. 이렇게 하려면 충전 관리자 설정의 MQTT 아래에서 "월박스 제어 활성화" 옵션을 선택해야 합니다. 그러면 cFos 충전 관리자가 MQTT 토픽 cfos_mqtt/ctl을 수신하고 JSON 객체가 포함된 메시지를 기대합니다. 이 객체에는 장치 ID를 이름으로 하는 프로퍼티로 하위 객체가 있습니다. 하위 객체는 다음과 같습니다: {"cur": c, "ena": b, "wke": b}, 여기서 c는 충전 전류(mA)이고, b는 각각 참 또는 거짓일 수 있습니다. "ena": false는 월박스에서 충전을 비활성화하고, "wke": true는 월박스에 "자동차 깨우기" 명령을 보내려고 시도합니다(현재 cFos Power Brain 월박스에서만 가능). "cur", "ena", "wke"를 생략하여 특정 제어 기능만 실행할 수도 있습니다.
예: {"E1":


{cur: 8000, ena: true, wke: true}, "E2": {cur: 10000}}

장치 ID를 가진 월박스의 충전 전류를 8A로 설정하고 충전을 활성화한 후 차량 절전 해제를 시도합니다. 또한, 월박스 E2의 충전 전류는 10A로 설정됩니다.

MQTT를 통해 로깅 및 트랜잭션 로그 보내기

"구성" 아래의 시스템 로그에서 로그 항목 전송을 위한 MQTT 브로커 URL을 지정할 수 있습니다. 그러면 cFos 충전 관리자가 모든 로그 항목을 cfos_mqtt/log 항목 아래에 게시합니다. 이를 통해 충전 관리자 로그를 원격으로 모니터링할 수 있습니다. "구성"에서 트랜잭션 로그 항목에 대한 MQTT 브로커 URL을 지정할 수도 있습니다. 그러면 모든 충전 트랜잭션이 cfos_mqtt/ta_log 항목으로 전송됩니다. 이를 통해 충전 트랜잭션 계정 데이터를 원격으로 평가하고 다른 시스템에서 충전 트랜잭션 백업을 생성할 수 있습니다. 충전 트랜잭션은 충전 플러그를 꽂을 때 시작되고 플러그를 뽑을 때 종료됩니다.

MQTT를 사용한 사용자 정의 카운터

MQTT의 경우 rtype = 2를 사용하여 사용자 정의 카운터를 생성할 수 있습니다. 이러한 카운터는 HTTP 카운터(rtype = 1)와 유사하게 정의됩니다. 하지만 여기서 주소는 HTTP URL이 아니라 MQTT 토픽입니다.




예시: "power_w": {"address": "/test_topic3", "type": "float", "query": "power_w"}
여기서 사용자 정의 카운터는 /test_topic3 토픽에 가입하고 "power_w" 속성을 가진 JSON 객체를 기대합니다(예: {"power_w": 1234}). 카운터 변수마다 다른 토픽을 가질 수 있으며 해당 토픽에 메시지가 게시되는 즉시 업데이트됩니다.