|
|
hace 4 años | |
|---|---|---|
| .. | ||
| docs | hace 5 años | |
| etc | hace 5 años | |
| include | hace 4 años | |
| intergration_test | hace 5 años | |
| priv | hace 5 años | |
| src | hace 4 años | |
| test | hace 4 años | |
| .gitignore | hace 5 años | |
| README.md | hace 4 años | |
| TODO | hace 5 años | |
| rebar.config | hace 5 años | |
emqx-coap is a CoAP Gateway for EMQ X Broker. It translates CoAP messages into MQTT messages and make it possible to communiate between CoAP clients and MQTT clients.
libcoap is an excellent coap library which has a simple client tool. It is recommended to use libcoap as a coap client.
To compile libcoap, do following steps:
git clone http://github.com/obgm/libcoap
cd libcoap
./autogen.sh
./configure --enable-documentation=no --enable-tests=no
make
libcoap/examples/coap-client -m put -e 1234 "coap://127.0.0.1/mqtt/topic1?c=client1&u=tom&p=secret"
A mqtt message with topic="topic1", payload="1234" has been published. Any mqtt client or coap client, who has subscribed this topic could receive this message immediately.
libcoap/examples/coap-client -m get -s 10 "coap://127.0.0.1/mqtt/topic1?c=client1&u=tom&p=secret"
And you will get following result if any mqtt client or coap client sent message with text "1234567" to "topic1":
v:1 t:CON c:GET i:31ae {} [ ]
1234567v:1 t:CON c:GET i:31af {} [ Observe:1, Uri-Path:mqtt, Uri-Path:topic1, Uri-Query:c=client1, Uri-Query:u=tom, Uri-Query:p=secret ]
The output message is not well formatted which hide "1234567" at the head of the 2nd line.
File: etc/emqx_coap.conf
## The UDP port that CoAP is listening on.
##
## Value: Port
coap.port = 5683
## Interval for keepalive, specified in seconds.
##
## Value: Duration
## -s: seconds
## -m: minutes
## -h: hours
coap.keepalive = 120s
## Whether to enable statistics for CoAP clients.
##
## Value: on | off
coap.enable_stats = off
emqx_coap enable one-way authentication by default.
If you want to disable it, comment these lines.
File: etc/emqx_coap.conf
## The DTLS port that CoAP is listening on.
##
## Value: Port
coap.dtls.port = 5684
## Private key file for DTLS
##
## Value: File
coap.dtls.keyfile = {{ platform_etc_dir }}/certs/key.pem
## Server certificate for DTLS.
##
## Value: File
coap.dtls.certfile = {{ platform_etc_dir }}/certs/cert.pem
For two-way autentication:
## A server only does x509-path validation in mode verify_peer,
## as it then sends a certificate request to the client (this
## message is not sent if the verify option is verify_none).
## You can then also want to specify option fail_if_no_peer_cert.
## More information at: http://erlang.org/doc/man/ssl.html
##
## Value: verify_peer | verify_none
## coap.dtls.verify = verify_peer
## PEM-encoded CA certificates for DTLS
##
## Value: File
## coap.dtls.cacertfile = {{ platform_etc_dir }}/certs/cacert.pem
## Used together with {verify, verify_peer} by an SSL server. If set to true,
## the server fails if the client does not have a certificate to send, that is,
## sends an empty certificate.
##
## Value: true | false
## coap.dtls.fail_if_no_peer_cert = false
./bin/emqx_ctl plugins load emqx_coap
To subscribe any topic, issue following command:
GET coap://localhost/mqtt/{topicname}?c={clientid}&u={username}&p={password} with OBSERVE=0
unauthorized will be returned.forbidden will be returned.To cancel observation, issue following command:
GET coap://localhost/mqtt/{topicname}?c={clientid}&u={username}&p={password} with OBSERVE=1
unauthorized will be returned.Server will issue an observe-notification as a subscribed message.
Issue a coap put command to publish messages. For example:
PUT coap://localhost/mqtt/{topicname}?c={clientid}&u={username}&p={password}
unauthorized will be returned.forbidden will be returned.Device should issue a get command periodically, serve as a ping to keep mqtt session online.
GET coap://localhost/mqtt/{any_topicname}?c={clientid}&u={username}&p={password}
unauthorized will be returned.emqx-coap gateway does not accept POST and DELETE requests.
Topics in URI should be percent-encoded, but corresponding uri_path option has percent-encoding converted. Please refer to RFC 7252 section 6.4, "Decomposing URIs into Options":
Note that these rules completely resolve any percent-encoding.
That implies coap client is responsible to convert any percert-encoding into true character while assembling coap packet.
ClientId/username/password/topic in the coap URI are the concepts in mqtt. That is to say, emqx-coap is trying to fit coap message into mqtt system, by borrowing the client/username/password/topic from mqtt.
The Auth/ACL/Hook features in mqtt also applies on coap stuff. For example:
Discovery always return "
,"For example
libcoap/examples/coap-client -m get "coap://127.0.0.1/.well-known/core"
Apache License Version 2.0
EMQ X Team.