cFos 충전 컨트롤러 - HTTP API

다음 기능은 Modbus 레지스터를 HTTP에 매핑합니다.
참고: HTTP API를 사용하기 위해 Modbus를 활성화 할 필요는 없습니다.

cFos Power Brain Controller의 주소에 HTTP GET 또는 POST 요청을 사용합니다.
http://192.168.2.111/cnf?cmd=modbus&device=meter1&read=35154.
응답은 JSON 형식입니다.

  • cmd 는 항상 modbus입니다.
  • device = meter1 또는 meter2 또는 EVSE
  • read = read 레지스터의 주소
  • write = 읽을 레지스터의 주소
  • value = 쓸 값
  • values = 쓸 값 배열, 예 : [1,2,3,4]

주소에는 데이터 유형을 지정하기위한 접미사가있을 수 있습니다 (기본값은 16 비트 정수).

  • d = 32 비트 정수 (모드 버스 레지스터 2 개)
  • q = 64 비트 정수 (4 개의 modbus 레지스터)
  • s = 문자열
cFos 충전 컨트롤러 - Modbus 레지스터

다음은 HTTP API를 사용하는 방법에 대한 몇 가지 예입니다.

Modbus

/cnf?cmd=modbus&device=meter1&read=8002
응답:
1

/cnf?cmd=modbus&device=meter1&read=8062d
응답:
-1

/cnf?cmd=modbus&device=meter1&read=8016s
응답:
"cFos Power Brain"

/cnf?cmd=modbus&device=meter1&read=8002&count=10
응답:
[1,257,256,0,256,0,26211,26165,11619,13366]

/cnf?cmd=modbus&device=meter2&read=all
응답:
{"8000d":-821755904,"8002":1,"8003":257,"8004":16777216,"8006":256,"8007":0,"8008s":"fcf5-c46d-310c","8016s":"cFos Power Brain","8040":41,"8041":1,"8042d":1000,"8044":1,"8045":230,"8046":230,"8047":230,"8050q":0,"8054d":0,"8056":0,"8057":0,"8058q":0,"8062d":-1,"8064d":0,"8066d":0,"8068d":0,"8070":0,"8071":0,"8120d":0}

/cnf?cmd=modbus&device=evse&write=8044&value=7
응답:
"ok"

/cnf?cmd=modbus&device=evse&write=8050q&value=1"
응답:
"ok"

/cnf?cmd=modbus&device=evse&write=8044d&value=1"
응답:
"bad modbus register size"

/cnf?cmd=modbus&device=evse&write=8044&values=[7,230,230,230 ]
응답:
"ok"

일반 요청

모든 충전 관리자 장치의 상태를 요청합니다.
/cnf?cmd=get_dev_info

PIN 또는 RFID 설정 :
/cnf?cmd=enter_rfid&rfid=r&dev_id=d
r은 PIN 또는 RFID (숫자), d는 특정 월 박스를 선택하기위한 선택적 장치 ID입니다. 장치 ID를 선택하지 않으면 충전 관리자가 PIN 또는 RFID를 자동으로 할당하려고합니다.

현재 트랜잭션 덮어 쓰기 :
/cnf?cmd=override_device&dev_id=d&flags=f&mamps=ma&rfid=id
d는 장치 ID이고 id는 RFID/PIN이 필요할 수 있으며 플래그는 다음과 같습니다.
'C': 로딩 비활성화(관리자 비밀번호 또는 사용자 PIN/RFID 필요)
'c': 다시 로드 비활성화(관리자 비밀번호 또는 사용자 PIN/RFID 필요)
'E': 월박스의 과금 규칙 비활성화(admin pwd 필요)
''': 월박스의 과금 규칙을 다시 비활성화합니다(관리자 암호 필요).
'U': 사용자 과금 규칙 비활성화(사용자 RFID/PIN 필요)
'u': 사용자의 과금 규칙을 다시 비활성화(사용자 RFID/PIN 필요)

이러한 방식으로 설정된 플래그는 월박스에서 차량의 플러그를 뽑을 때까지 유지됩니다.

mamps=ma: 충전 전류를 ma mA로 덮어씁니다(제한).

시뮬레이션된 에너지 미터 설정:
/cnf?cmd=soft_meter&dev_id=d&val=v
v(선택 사항)는 Wh/VAh로 설정할 에너지입니다. v가 존재하지 않으면 카운터는 읽기 전용입니다. d는 EVSE의 장치 ID입니다. 반환 값은 설정되기 전의 이전 카운터 판독값입니다.

HTTP 카운터 및 월 박스

카운터

충전 관리자가 읽지 않지만 HTTP POST 또는 GET을 사용하여 외부적으로 현재 값을 지정할 수 있는 카운터(장치 유형 'HTTP 입력')를 만들 수 있습니다.
/cnf?cmd=set_ajax_meter&dev_id=x
x는 장치 구성에 표시되는 장치 ID입니다 (예 : M1).

POST 본문에는 다음과 같이 JSON 객체가 포함됩니다.

{
   "model": string,
   "import_vah": number,
   "export_wh": number,
   "voltage": [v1, v2, v3],
   "current": [c1, c2, c3],
   "power_w": number
   "power_va": number
   "is_va": bool
}

에너지 값은 Wh 또는 VAh로, 전압은 V로, 전류는 mA로, 전력은 W 또는 VA로 표시됩니다. "is_va" true 또는 false는 전력이 W 또는 VA로 지정되었는지 여부를 나타냅니다. "model"은 타일에 표시된 모델 문자열입니다. power_w는 선택 사항입니다. power_w가 전달되지 않으면 Power_va가 사용됩니다.

일부 사용자(#diebestenuserderwelt)는 컬 도구를 사용하여 카운터에 데이터를 제공합니다. 예:
curl -i -X POST -H 'Content-Type: application/json' -d '{ "model": "TestModell", "import_wh": 12345, "export_wh": 23456, "voltage": [231, 232, 233], "current": [10001, 10002, 10003], "power_va": 2000 }' --user admin:1234abcd 'http://192.168.2.111/cnf?cmd=set_ajax_meter&dev_id=M3'

HTTP GET으로 요청은 다음과 같이 작성됩니다.
http://192.168.2.111/cnf?cmd=set_ajax_meter&dev_id=M3&model=TestModell&import_wh=12345&export_wh=23456&voltage=231,232,233&current=10001,10002,10003&power_va=2000

다음은 cFos HTTP 입력 측정기와 ioBroker를 사용하여 스마트 측정기를 연결하기 위한 또 다른 포럼 항목입니다.

월 박스

충전 관리자가 읽거나 제어하지 않지만 HTTP POST 또는 GET을 사용하여 외부에서 값을 지정할 수 있는 벽 상자(장치 유형 'HTTP 입력')를 만들 수도 있습니다. 그러면 제어 값이 응답으로 반환됩니다.
/cnf?cmd=set_ajax_evse&dev_id=x
x는 장치 구성에 표시되는 장치 ID입니다 (예 : E1).

POST 본문에는 다음과 같이 JSON 객체가 포함됩니다.

{
   "state": number,
   "max_charging_current": number,
   "current": [c1, c2, c3],
   "total_energy": number,
   "model": string,
   "rfid": string
}

"model"은 타일에 표시된 모델 문자열입니다. "rfid"를 사용하면 충전 프로세스에 RFID를 추가 할 수 있습니다. 에너지 값은 Wh로, 전류는 mA로 제공됩니다. "state"의 값은 다음과 같습니다.
1 = 대기 (A), 2 = EV 존재 (B), 3 = 충전 (C), 4 = 인공 호흡으로 충전 (D), 5 = 오류 (E)

HTTP GET으로 요청은 다음과 같이 작성됩니다.
http://192.168.2.111/cnf?cmd=set_ajax_evse&dev_id=M3&model=TestModell&state=st&max_charging_current=m&current=c1,c2,c3&total_energy=t&rfid=r

이에 대한 응답으로이 요청은 다음 JSON 객체를 반환합니다.

{
   "device_enabled": true/false, // 장치 활성화/비활성화
   "charging_enabled": true/false, // 충전 허용 / 허용되지 않음
   "paused": true/false, // true = 장치가 일시적으로 일시 중지됨
   "charging_current": 숫자 // 지정된 충전 전류 (mA)
}

이 반환 객체는 호출자에 의해 평가되어야하며 EVSE는 그에 따라 설정되어야합니다. 예를 들어 충전 전류는 그에 따라 변경되어야합니다.

Web interface (English)

All requests return an answer in JSON. Values marked with r/o are read-only. Please note: We do not guarantee the stability of this API. Functionality, parameters, values, etc. may change without notice.

Retrieve info about load-balancing and all devices

/cnf?cmd=get_dev_info
Return value (sample):
{
"params" : {
"title" : "cFos Power Brain",
"desc" : "Standard-Konfiguration",
"max_total_power" : 22000,   // total installed power in W
"power_reserve" : 0,   // power reserve (subtracted from max_total_power)       
"overdraft" : 0,       // generated overdraft, can be set to 0
"max_total_evse_power" : 0,   // max power available to all EVSEs
"consumed_evse_power" : 0,    // r/o, consumed EVSE power in W
"remaining_evse_power" : 22000,   // r/o, remaining EVSE power in W
"lb_enabled" : false,   // true: load balancing enabled, false: disabled (observation mode)
"disable_policy" : 1,   // on device disable: 0 disable EVSE, 1 use min. charging current, -1 remove charging current limit (free charging)
"cycle_time" : 3009,   // current update cycle time in msec
"max_evses" : 3,   // maximum number of licensed EVSEs
"shareware_mode" : false,   // false, if licensed, true if trial version
"version" : "1.8.1095",
"time" : 1645281534,   // current time stamp
"vsn" : 
{
"vendorid" : 52997,   // cFos
},
"ocpp_gateway_license_cnt" : 0,  // number of licensed OCPP gateways
"ocpp_gateway_licenses_used" : 0   // number of used OCPP gateways
},
"devices" : [   // array of configured devices
{
"dev_type" : "evse_powerbrain",   // a sample EVSE
"device_enabled" : 1,   // 1 = device enabled, 0 = disabled
"name" : "Wallbox",   // config item: name
"address" : "evse",   // address: URL, IP address or COM Port + Parameters
"id" : 1,   // Modbus ID
"dev_id" : "E1",   // unique device ID, EVSE always begin with E
"number" : 1,   // config item: number
"desc" : "cFos Power Brain Wallbox 11kW",   // config item: description
"com_err" : false,   // true, if active communication error
"com_err_secs" : 1404660,   // time since last com error
"com_errors" : 0,   // number of com errors
"last_error" : "",   // text of last error
"is_evse" : true,   // true for EVSEs, false for meters
"used_phases" : 0,   // 0=determine, otherwise bitfield: bit0 L1, bit1 L2, bit2 L3
"label" : "",   // config item: text displayed when plugged in
"min_charging_cur" : 6000,   // minimum charging current in mA
"max_power" : 11040,   // maximum charging power in W
"prio" : 1,   // charging priority
"charging_enabled" : true,   // r/o, true if charging allowed
"cur_charging_power" : 0,   // r/o, current charging power in W
"total_energy" : 7120572,   // r/o, total used charging energy in Wh
"phases" : 0,   // currently used phases, bitfield: bit0 L1, bit1 L2, bit2 L3
"state" : 1,   // 1 = waiting for EV, 2 = EV presend, 3 = charging, 4 = charging/vent, 5 = error, 6 = offline
"model" : "cFos Power Brain,1.0,1.8.1095,6d-31-0c",   // r/o, model string: Manufacturer,device,device version, firmware version, serial number
"paused" : false,   // true, if device paused due to energy shortage or phase imbalance
"pause_time" : 300,   // current elapsed pause time in secs
"pause_min_time" : 300,   // min. secs before end of pause
{
"dev_type" : "meter_powerbrain",  // a sample meter
"device_enabled" : 1,   // 1 = device enabled, 0 = disabled
"name" : "S0 Zähler 1",   // config item: name
"address" : "meter1",   // address: URL, IP address or COM Port + Parameters
"id" : 2,   // Modbus ID
"dev_id" : "M1",   // unique device ID, meters always begin with M
"number" : 1,   // config item: number
"desc" : "cFos Power Brain, S0 Zähler 1",   // config item: description
"com_err" : false,   // true, if active communication error
"com_err_secs" : 1404660,   // time since last com error
"com_errors" : 0,   // number of com errors
"last_error" : "",   // text of last error
"is_evse" : true,   // true for EVSEs, false for meters
"used_phases" : 0,   // 0=determine, otherwise bitfield: bit0 L1, bit1 L2, bit2 L3
"is_va" : false,   // true if display is VA, false for W
"invert" : false,   // if true, current and power values are inverted
"import" : 15,   // imported energy in Wh
"export" : 0,   // exported energy in Wh
"power" : 0,   // current power (active or apparent) in W or VA
"current_l1" : 0,   // current L1 in mA
"current_l2" : 0,   // current L2 in mA
"current_l3" : 0,   // current L3 in mA
"voltage_l1" : 230,   // Voltage L1 in V
"voltage_l2" : 230,   // Voltage L2 in V
"voltage_l3" : 230,   // Voltage L31 in V
"role" : 0,   // 0 = display, 1 = consumption, 2 = production, 3 = grid demand, 4 = vehicle consumption, 5 = storage
"model" : "cFos Power Brain,1.0,1.8.1095,6d-31-0c"   // r/o, model string: Manufacturer,device,device version, firmware version, serial number
}
]
}
         

Get/set Charging Manager parameters

/cnf?cmd=get_params
/cnf?cmd=set_params

HTTP GET get_params returns a JSON object, HTTP POST set_params needs a JSON object in the message body


Return value (sample):
//         see values for get_dev_info.
 //        In Addition there is a device meta struct to allow for selection of device types:
"dev_meta": 
{
"evse_powerbrain" : "cFos Power Brain",   // EVSE device type : name
"evse_mennekes_modbus" : "Heidelberg Energy Control",
"meter_elenker_meter" : "ModbusMeter 5A",   // meter device type : name
"meter_kostal_powermeter" : "Kostal Powermeter",
"meter_orno_we516" : "Orno OR-WE-516",
}         
         

Set device configuration

/cnf?cmd=set_params
POST payload (sample):
{
   devices: [   // array of device objects, currently may only contain 1 device
   {   // for most of the device properties, see get_dev_info
attach: ""   // device ID of an attached meter
battery_save_threshold: 0   // in mA, if charging current falls below this threshold, charging will be stopped, 0 = disable
charging_rules: [   // array of charging rules
// charging rules are work in progress, expect frequent changes to their object layout.
{
   "days": d,     // d is a bitfields a weekdays: bit0 Monday...bit6 Sunday
   "mode": m,     // m mode of the rule: 0=absolule current, 1=relative current, 2=current solar current, 3=relative current solar current, 4=solar current minus current value, 5=solar surplus
   "current": c,  // c current in mA
   "enabled": e,  // e = true for an active rule, false for ignored rules
   "udur": u,     // u = undercut duration in secs
   "time": t      // t in minutes after midnight (for time based rules)
   "dur":  dur    // dur in minutes (for time based rules)
   "expr": expr   // expr is evaluated to determine the rule current (for expression rules)
   "input": in    // in = string specifying the input and level (for input based rules)
   "price_level", p   // p = price level (for cost baseed rules)
   "solar": s     // solar current in mA (for solar based rules)
}
]
enable_snooze: true   // true, allow device snooze
enable_wakeup: true   // true, allow device wakeup for charging
fixed_rfid: ""   // use fixed RFID for OCPP
group: 0   // device belongs to this group, 0 = main group
ocpp_gateway_client_id: "CP42"
phase_rotation: 0
soft_meter: 7120572   // estimated charged energy in W (if device has no meter)
users: ["1170223812"]   // array of user ids which are allowed to charge at this EVSE
   ]
}
         

Get / set user info

/cnf?cmd=get_users
/cnf?cmd=get_user
/cnf?cmd=set_user
*** ml: String not found [name='cfos_cm_sample_resp']:
:
// get_user retrieves a single user object, set_user POSTs a single user object, get_users retrieves an array of user objects
// set_user may be called without admin password if it contains a valid user ID, creation of new users requires admin access

[   // array of users
{
"id" : "2167520770",   // unique user ID
"name" : "wusel",   // name
"display" : true,   // true if user may be displayed while plugged in
"dev_ids" :    // EVSEs the user may use
[
"E1"
],
"rfids" : 
[   // array of RFIDs
{
"id" : "4711",   // RFID / PIN
"name" : "TeSt",   // Name
"ac_auth" : true,   // true: used to authorize
"ac_ovch" : false,  // true: used to stop charging
"used_phases" : 7   // used to override used phases, 0 = don't override
}
],
"charging_rules" : 
[   // array of charging rules for this user
]
}
]
         

Accept license:
/cnf?cmd=accept_license&acc=1&allow_usage_stats=a
a = 1 allow reporting of usage stats to cFos eMobililty, a = 0 disallow

Change admin password:
/cnf?cmd=change_admin_pwd&old_pwd=old&new_pwd=new
old, new are the old and new admin password

Delete a device:
/cnf?cmd=del_device&dev_id=d
d is a valid device ID

Get a unique user ID (for creation of a new user):
/cnf?cmd=get_new_user_id
returns a new user ID as a JSON string

Reset a device:
/cnf?cmd=reset_device&dev_id=d
d is a valid device ID. The device will be destroyed and re-created

Start stop diagnose logging:
/cnf?cmd=set_diag_logging&enable=e
e = 1 to start, e = 0 to stop diagnose logging. Runs for 5 minutes if not stopped