Experimental CoAP-based Machine-to-Machine (M2M) Protocol
C Shell Makefile M4 C++ Ruby
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
.travis Replace all CoAP connectivity bits with LibNyoci. (#56) Apr 5, 2017
SMCP.xcodeproj Merge pull request #46 from darconeous/feature/dtls Jul 26, 2016
src smcpd: Minor fixes and updates Apr 11, 2017
.gitignore Major rework and start of 0.07.00 development. Jun 5, 2016
.uncrustify.cfg Fix whitespace errors Jun 5, 2012
CONTRIBUTING.md Documentation Updates Jul 3, 2016
doxygen.cfg.in Version bump to 0.6.3 May 22, 2013


SMCP — Simple Management and Control Protocol

SMCP is an experimental CoAP-based machine-to-machine (M2M) protocol that is in the early stages of development. It allows you to create complicated interdependent relationships between resources on different devices without relying on an outside service. A very rough high-level scatter-shot description of the protocol is described here.

This project contains a library (libsmcp) which is used to implement the protocol. This project also includes smcpd, which is a plug-in based posix CoAP daemon that can be used as a starting point for adding SMCP support to Linux-based embedded devices and servers.

libsmcp uses LibNyoci for CoAP connectivity. LibNyoci was spun off from libsmcp in late March of 2017 to allow SMCP to focus on M2M features.

libsmcp's current features include:

  • In-band multicast group management (Working toward full [RFC7390][3] support)
  • Resource pairing (Pull-based, using CoAP observing)

All of the above features are configurable in-band using CoAP.

Planned features include:

  • Additional resource pairing types (Push and Sync)
  • Pairing predicates and transforms (Functional relationships between resources using a simple forth-like language)
  • Scenes
  • Timers (counts down to an event after being triggered)
  • Scheduled events (time-of-day, sunset/sunrise, etc)
  • Rich access controls

libsmcp is currently working toward a v1.0 API. Until v1.0 is released, all APIs are subject to change.

Getting Help

If you are having trouble with SMCP, you can join the official SMCP mailing list and ask your questions there.

Getting, building, and installing via Git

The first step is to get and install LibNyoci.

Once you have your dependencies, go ahead and clone SMCP:

$ git clone git://github.com/darconeous/smcp.git
$ cd smcp

To build the latest tagged stable release:

$ git checkout latest-release
$ ./configure
$ make
$ sudo make install

For bleeding-edge:

$ git checkout master
$ git archive origin/autoconf/master | tar xv
$ ./configure
$ make
$ sudo make install

Getting, building, and installing from an archive

$ curl https://github.com/darconeous/smcp/archive/full/latest-release.zip > latest-release.zip
$ unzip latest-release.zip
$ cd smcp-latest-release
$ ./configure
$ make
$ sudo make install

Installing via Homebrew on OS X

To get the "latest-release":

$ brew tap darconeous/embedded
$ brew install smcp

To get the bleeding-edge release:

$ brew tap darconeous/embedded
$ brew install smcp --HEAD

Authors and Contributors