diff --git a/apps/emqx_gateway_ocpp/src/emqx_ocpp_schema.erl b/apps/emqx_gateway_ocpp/src/emqx_ocpp_schema.erl
index 774907d6c..b57fd2adc 100644
--- a/apps/emqx_gateway_ocpp/src/emqx_ocpp_schema.erl
+++ b/apps/emqx_gateway_ocpp/src/emqx_ocpp_schema.erl
@@ -33,8 +33,8 @@ fields(ocpp) ->
desc => ?DESC(heartbeat_checking_times_backoff)
}
)},
- {upstream, sc(ref(upstream), #{desc => ?DESC(upstream)})},
- {dnstream, sc(ref(dnstream), #{desc => ?DESC(dnstream)})},
+ {upstream, sc(ref(upstream), #{})},
+ {dnstream, sc(ref(dnstream), #{})},
{message_format_checking,
sc(
hoconsc:union([all, upstream_only, dnstream_only, disable]),
@@ -59,7 +59,7 @@ fields(ocpp) ->
desc => ?DESC(json_schema_id_prefix)
}
)},
- {listeners, sc(ref(ws_listeners), #{desc => ?DESC(ws_listeners)})}
+ {listeners, sc(ref(ws_listeners), #{})}
] ++ emqx_gateway_schema:gateway_common_options();
fields(ws_listeners) ->
[
@@ -67,9 +67,11 @@ fields(ws_listeners) ->
{wss, sc(map(name, ref(wss_listener)), #{})}
];
fields(ws_listener) ->
- emqx_gateway_schema:ws_listener() ++ [{websocket, sc(ref(websocket), #{})}];
+ emqx_gateway_schema:ws_listener() ++
+ [{websocket, sc(ref(websocket), #{})}];
fields(wss_listener) ->
- emqx_gateway_schema:wss_listener() ++ [{websocket, sc(ref(websocket), #{})}];
+ emqx_gateway_schema:wss_listener() ++
+ [{websocket, sc(ref(websocket), #{})}];
fields(websocket) ->
DefaultPath = <<"/ocpp">>,
SubProtocols = <<"ocpp1.6, ocpp2.0">>,
@@ -125,15 +127,15 @@ fields(upstream) ->
];
fields(dnstream) ->
[
- {strit_mode,
- sc(
- boolean(),
- #{
- required => false,
- default => false,
- desc => ?DESC(dnstream_strit_mode)
- }
- )},
+ %%{strit_mode,
+ %% sc(
+ %% boolean(),
+ %% #{
+ %% required => false,
+ %% default => false,
+ %% desc => ?DESC(dnstream_strit_mode)
+ %% }
+ %% )},
{topic,
sc(
string(),
@@ -165,6 +167,29 @@ fields(dnstream) ->
desc(ocpp) ->
"The OCPP gateway";
+desc(upstream) ->
+ "Upload stream topic to notify third-party system what's messages/events reported by "
+ "Charge Point. Available placeholders:\n"
+ "- cid
: Charge Point ID\n"
+ "- clientid
: Equal to Charge Point ID\n"
+ "- action
: Message Name in OCPP";
+desc(dnstream) ->
+ "Download stream topic to forward the system message to device. Available placeholders:\n"
+ "- cid
: Charge Point ID\n"
+ "- clientid
: Equal to Charge Point ID\n"
+ "- action
: Message Name in OCPP";
+desc(ws_listeners) ->
+ "Websocket listeners";
+desc(ws_listener) ->
+ "Websocket listener";
+desc(ws) ->
+ "Websocket listener";
+desc(wss_listener) ->
+ "Websocket over TLS listener";
+desc(wss) ->
+ "Websocket over TLS listener";
+desc(websocket) ->
+ "Websocket options";
desc(_) ->
undefined.
diff --git a/rel/i18n/emqx_gateway_schema.hocon b/rel/i18n/emqx_gateway_schema.hocon
index 5f7d71913..2f0a012f2 100644
--- a/rel/i18n/emqx_gateway_schema.hocon
+++ b/rel/i18n/emqx_gateway_schema.hocon
@@ -114,4 +114,84 @@ udp_listener_udp_opts.desc:
udp_listeners.desc:
"""Settings for the UDP listeners."""
+fields_ws_opts_path.desc:
+"""WebSocket's MQTT protocol path. So the address of EMQX Broker's WebSocket is:
+ws://{ip}:{port}/mqtt
"""
+
+fields_ws_opts_path.label:
+"""WS MQTT Path"""
+
+fields_ws_opts_piggyback.desc:
+"""Whether a WebSocket message is allowed to contain multiple MQTT packets."""
+
+fields_ws_opts_piggyback.label:
+"""MQTT Piggyback"""
+
+fields_ws_opts_compress.desc:
+"""If true
, compress WebSocket messages using zlib
.
+The configuration items under deflate_opts
belong to the compression-related parameter configuration."""
+
+fields_ws_opts_compress.label:
+"""Ws compress"""
+
+fields_ws_opts_idle_timeout.desc:
+"""Close transport-layer connections from the clients that have not sent MQTT CONNECT message within this interval."""
+
+fields_ws_opts_idle_timeout.label:
+"""WS idle timeout"""
+
+fields_ws_opts_max_frame_size.desc:
+"""The maximum length of a single MQTT packet."""
+
+fields_ws_opts_max_frame_size.label:
+"""Max frame size"""
+
+fields_ws_opts_fail_if_no_subprotocol.desc:
+"""If true
, the server will return an error when
+ the client does not carry the Sec-WebSocket-Protocol
field.
+
Note: WeChat applet needs to disable this verification."""
+
+fields_ws_opts_fail_if_no_subprotocol.label:
+"""Fail if no subprotocol"""
+
+fields_ws_opts_supported_subprotocols.desc:
+"""Comma-separated list of supported subprotocols."""
+
+fields_ws_opts_supported_subprotocols.label:
+"""Supported subprotocols"""
+
+fields_ws_opts_check_origin_enable.desc:
+"""If true
, origin
HTTP header will be
+ validated against the list of allowed origins configured in check_origins
+ parameter."""
+
+fields_ws_opts_check_origin_enable.label:
+"""Check origin"""
+
+fields_ws_opts_allow_origin_absence.desc:
+"""If false
and check_origin_enable
is
+ true
, the server will reject requests that don't have origin
+ HTTP header."""
+
+fields_ws_opts_allow_origin_absence.label:
+"""Allow origin absence"""
+
+fields_ws_opts_check_origins.desc:
+"""List of allowed origins.
See check_origin_enable
."""
+
+fields_ws_opts_check_origins.label:
+"""Allowed origins"""
+fields_ws_opts_proxy_port_header.desc:
+"""HTTP header used to pass information about the client port. Relevant when the EMQX cluster is deployed behind a load-balancer."""
+
+fields_ws_opts_proxy_port_header.label:
+"""Proxy port header"""
+
+fields_ws_opts_proxy_address_header.desc:
+"""HTTP header used to pass information about the client IP address.
+Relevant when the EMQX cluster is deployed behind a load-balancer."""
+
+fields_ws_opts_proxy_address_header.label:
+"""Proxy address header"""
+
}
diff --git a/rel/i18n/emqx_ocpp_schema.hocon b/rel/i18n/emqx_ocpp_schema.hocon
new file mode 100644
index 000000000..4c010f9f2
--- /dev/null
+++ b/rel/i18n/emqx_ocpp_schema.hocon
@@ -0,0 +1,47 @@
+emqx_ocpp_schema {
+
+default_heartbeat_interval.desc:
+"""The default Heartbeat time interval"""
+
+heartbeat_checking_times_backoff.desc:
+"""The backoff for heartbeat checking times"""
+
+message_format_checking.desc:
+"""Whether to enable message format legality checking.
+EMQX checks the message format of the upload stream and download stream against the
+format defined in json-schema.
+When the check fails, emqx will reply with a corresponding answer message.
+
+The checking strategy can be one of the following values:
+- all
: check all messages
+- upstream_only
: check upload stream messages only
+- dnstream_only
: check download stream messages only
+- disable
: don't check any messages"""
+
+upstream_topic.desc:
+"""The topic for Upload stream Call Request messages."""
+
+upstream_topic_override_mapping.desc:
+"""Upload stream topic override mapping by Message Name."""
+
+upstream_reply_topic.desc:
+"""The topic for Upload stream Reply messages."""
+
+upstream_error_topic.desc:
+"""The topic for Upload stream error topic."""
+
+dnstream_topic.desc:
+"""Download stream topic to receive request/control messages from third-party system.
+This value is a wildcard topic name that subscribed by every connected Charge Point."""
+
+dnstream_max_mqueue_len.desc:
+"""The maximum message queue length for download stream message delivery."""
+
+json_schema_dir.desc:
+"""JSON Schema directory for OCPP message definitions.
+Default: ${application}/priv/schemas"""
+
+json_schema_id_prefix.desc:
+"""The ID prefix for the OCPP message schemas."""
+
+}
diff --git a/scripts/spellcheck/dicts/emqx.txt b/scripts/spellcheck/dicts/emqx.txt
index d482cd3f3..a3dd4a00b 100644
--- a/scripts/spellcheck/dicts/emqx.txt
+++ b/scripts/spellcheck/dicts/emqx.txt
@@ -289,3 +289,8 @@ Keyspace
OpenTSDB
saml
idp
+ocpp
+OCPP
+dnstream
+upstream
+priv