Single sawtooth signal#
The characteristics of sawtooth signals (dynamic, slowly oscillating) are convenient to generate measurement sensor readings and publish telemetry data without having any hardware in place.
Sawtooth signal with MQTT#
Prerequisites#
The following examples depend on mosquitto_pub
usually contained
in the mosquitto-clients
distribution package or similar:
# Setup "mosquitto_pub"
aptitude install mosquitto-clients
Sensor#
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
sensor
{"sawtooth": 42}
# Verify it's actually JSON
sensor | python -mjson.tool
{
"sawtooth": 42
}
Transmitter#
Get real and actually transmit sensor values to Kotori by publishing them to the MQTT bus:
# Where to send data to
export MQTT_BROKER=kotori.example.org
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:
loop
Result#
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 [kotori.daq.services.mig ] INFO: [mqttkit-1 ] transactions: 1.00 tps
Sawtooth signal with HTTP#
Same as above for MQTT, but with slightly changed transmitter.
Prerequisites#
This example depends on HTTPie
:
aptitude install httpie
Transmitter#
# Define transmitter
transmitter() { http POST http://localhost:24642/api/$DEVICE_TOPIC/data; }
Result#
Sawtooth signal made from oscillating value of the current second.
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:
loop
Result:
Whole date of second, minute, hour, day and month.
Note
This uses the jo
tool by Jan-Piet Mens to format a JSON message on the command line, see also:
There are source release archives and windows binaries:
as well as distribution packages for Debian-based systems, e.g.: