Skip to content
uwiger edited this page Dec 20, 2012 · 13 revisions

Newer versions on top.

(latest)

When specifying an external device ID, the old format was e.g. <<"a00000001=700">>, that is, the account ID code followed by the encoded device ID. This format is still accepted, but it is also possible to use the format [Sep][AccountName][Sep][DeviceID], where [Sep] is any character, except 'a', which doesn't appear in the account name. For example, if the account name is "Feuerlabs", and the device ID "700", the external device ID could be encoded as "*Feuerlabs*700".

If the protocol for connected devices relies on a periodic keep-alive (like e.g. the ga_ck3 protocol), It is now possible to add the parameter session-timeout when provisioning a device. The value is given in seconds, where 0 means that no session timeout is used. This is also the default value.

v 0.2.18

A first version of a control script, ctl, which can be used to start, stop and transform the exodm system. This script is basically a wrapper to the exodm script, and ensures that paths and environment variables are set correctly.

While deploying, we identified some issues with device group management, which could result in notifications not being delivered. These issues were resolved with patches.

v 0.2.17

Changed internal representation of latitude/longitude in the device object to floating point. There was an inconsistency in how lat/longs were presented, between waypoint notifications and device lookup. This has been corrected.

v 0.2.16

Bug when converting group and role ID numbers to JSON. The numbers were stored as HEX internally, but conversion used base 10, which obviously doesn't work well for IDs above 9.

Numeric values where passed as JSON strings instead of as numbers.

Added missing RPCs in exodm.yang and corrected buggy ones.

Added delete-device-group.sh to scripts

Added remove-config-set-members.sh to scripts

Changed localhost to ec2-23-21-255-140.compute-1.amazonaws.com in all scripts.

Added possibility to set GA_SCRIPT_HOST environment variables to target scripts to alternate exodm servers than the default.

Minor script bug fixes

Added create-device-type.sh to scripts

Added delete-device-type.sh to scripts

Added deprovision-device.sh to scripts

Added list-device-type-members.sh scripts

Added list-device-types.sh scripts

Added update-device-type.sh to scripts

(Scripts to handle software package upload and push to devices are yet to be implemented.)

The HTTP client had a hard-coded "Host: localhost" header. This is now set to contain the target hostname.

v 0.2.13

Introduced device-type

A device-type is a new concept linking devices to a protocol (and eventually more things). When provisioning a device, instead of specifying "protocol", specify e.g. "device-type": "ck3"

Yang validation

The yang-based RPC validation has been moved to the yang application and generalized. This was quite a comprehensive change, forcing changes in many places in the code.

exodm_ck3 plugin extracted

Plugins are now meant to be placed in EXODM_ROOT/rel/plugins/<plugin>/ebin. They will be picked up automatically by the system.

The plugin mechanism relies on an environment variable, ERL_SETUP_LIBS="$EXODM_ROOT/rel/plugins"

v 0.2.12

Yang-to-JSON type conversion

  • Enum values were previously passed along as binaries; they are now converted to integers
  • Booleans are converted to true and false, as they should be.

Changed representation of device objects.

Previously:

(exodm@127.0.0.1)4> kvdb_conf:read_tree(a00000001_dev,<<"102">>).
{conf_tree,<<"102">>,
           [{<<"__did">>,[],<<"102">>},
            {<<"activity">>,[],<<0,0,0,0>>},
            {<<"config_set">>,[{<<"ck3">>,[],<<>>}]},
            {<<"description">>,[],<<>>},
            {<<"device-key">>,[],<<0,0,0,0,0,0,0,2>>},
            {<<"imei">>,[],<<>>},
            {<<"imsi">>,[],<<>>},
            {<<"latitude">>,[],<<0,194,248,91>>},
            {<<"longitude">>,[],<<0,87,223,120>>},
            {<<"msisdn">>,[],<<>>},
            {<<"name">>,[],<<>>},
            {<<"protocol">>,[],<<"ga_ck3">>},
            {<<"server-key">>,[],<<0,0,0,0,0,0,0,1>>},
            {<<"timestamp">>,[],<<80,135,96,4>>}]}

Now, only a few top-level keys remain (config_set, 'device-key', 'server-key', groups, protocol), and remaining attributes are gathered under the node 'a' (as in 'attributes'):

(exodm@ps102810.dreamhostps.com)7> kvdb_conf:read_tree(a00000001_dev,<<"600">>).
{conf_tree,<<"600">>,
           [{<<"a">>,
             [{<<"latitude">>,[],<<0,0,0,0>>},
              {<<"longitude">>,[],<<0,0,0,0>>},
              {<<"msisdn">>,[],<<"+467331231234">>},
              {<<"timestamp">>,[],<<0,0,0,0>>}]},
            {<<"config_set">>,[{<<"ck3">>,[],<<>>}]},
            {<<"device-key">>,[],<<0,0,0,0,0,0,0,2>>},
            {<<"did">>,[],<<"600">>},
            {<<"protocol">>,[],<<"ga_ck3">>},
            {<<"server-key">>,[],<<0,0,0,0,0,0,0,1>>}]}

Device group membership

Previously, groups were added to devices (in the device table) as {DID*group[00000001]*gid, [], GID}, which carried a risk of duplicates, and was also fairly awkward to handle. Now groups are keyed as DID*groups*GID, which is automatically unique, and much easier to manage.

Timers

Timeout expressions are now allowed in RPC requests. When upgrading an old system, the table <<<"rpc_timers">>> must be created. This can be done by calling exodm_db:init_timers().

v 0.2.7.5.1

Installed att Getaround since 5 Oct 2012.