Sawtooth signal

The characteristics of sawtooth signals (dynamic, slowly oscillating) are convenient to generate and publish measurement or telemetry data values without having any hardware in place.


The following examples depend on mosquitto_pub usually contained in the mosquitto-clients distribution package or similar:

# Setup "mosquitto_pub"
aptitude install mosquitto-clients

Single sawtooth signal


Let’s define a an example sensor emitting a single sawtooth signal:

# Define an example sensor emitting a single sample of a sawtooth signal in JSON format
sensor() { echo "{\"sawtooth\": $(date +%-S)}"; }

Check if the sensor works properly:

# Read sensor value
{"sawtooth": 42}

# Verify it's actually JSON
sensor | python -mjson.tool
    "sawtooth": 42


Get real and actually transmit sensor values to Kotori by publishing them to the MQTT bus:

# Where to send data to
export MQTT_TOPIC=mqttkit-1/testdrive/area-42/node-1

# Define the transmission command to send telemetry data to the "testdrive" network
transmitter() { mosquitto_pub -h $MQTT_BROKER -t $MQTT_TOPIC/data.json -l; }

# Acquire and transmit a single sensor reading
sensor | transmitter

Periodic transmitter

“hands-free”, periodic dry-dock measurements:

measure() { sensor | transmitter; }
loop() { while true; do measure; echo -n .; sleep 1; done; }

Start publishing:



Sawtooth signal made from oscillating value of current second.

In /var/log/kotori/kotori.log, you should see things like:

2016-05-27T03:03:58+0200 [            ] INFO: [mqttkit-1   ] transactions: 1.00 tps

Multiple sawtooth signals

A more advanced sensor might be:

# Let's define multiple sawtooth signals, also derived from current time
sensor() { jo second=$(date +%-S) minute=$(date +%-M) hour=$(date +%-H) day=$(date +%-d) month=$(date +%-m); }

Check if the sensor works properly:

# Read sensor values
sensor | python -mjson.tool
    "day": 27,
    "hour": 2,
    "minute": 37,
    "month": 5,
    "second": 45

Restart transmitting:



Whole date of second, minute, hour, day and month.