Skip to content

Arduino sketch templates used by the openSenseMap-api

License

Notifications You must be signed in to change notification settings

sensebox/node-sketch-templater

Repository files navigation

senseBox sketch-templater

Arduino sketch templates used by the openSenseMap-api

Build Status NPM Version

Changelog

See CHANGELOG.md

Usage

Install via npm install --save @sensebox/sketch-templater or yarn add @sensebox/sketch-templater

const Sketcher = require('@sensebox/sketch-templater');

const mySketcher = new Sketcher('<your api post domain>');

// generate Sketch
const mySketch = mySketcher.generateSketch(box);
const mySketchBase64 = mySketcher.generateSketch(box, { encoding: 'base64' });

Adding new Templates

To add new templates, just create a new .tpl file in the templates directory. A template consists of two parts. The first line contains a JSON object for configuration. The second line until the end is used as the template text.

Example configuration in first line

Specify a single model:

{ "model": "homeEthernet" }

Specify multiple models:

{ "models": ["homeWifi", "homeWifiFeinstaub"] }

Templating values

The templater uses special transformers to process the templates. The transformers are applied through searching for @@SUB_TEMPLATE_KEY@@ occurrences in the template files. Each replacement starts and ends with a double @. To specify a transformer, append a pipe (|) and the transformer name. When no transformer is specified, it just returns the input variable. For adding new template transformers, see Adding Transformers.

As of writing this, the following replacements can be made:

Template text Replacement
@@SENSEBOX_ID@@ the senseBox ID
@@SENSOR_IDS@@ sensor IDs
@@NUM_SENSORS@@ the number of sensors
@@INGRESS_DOMAIN@@ the domain of your ingress server

Additionally, the following transformers are implemented:

Transformer name Description
as-is Do nothing.
toDefine Transform an array of sensors to multiple #define statements.
toProgmem Transform an array of sensors to multiple const char xxSENSOR_ID[] PROGMEM = "<id>"; statements.

Adding Transformers

In order to add a new transformer, just add a function in src/transformers.js to the module.exports. The function should return a string.

Adding Replacements

Add your additional replacements in src/index.js in the method _cloneBox to the second parameter of the Object.assign call.

License

MIT 2017 Matthias Pfeil, Jan Wirwahn, Gerald Pape