Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
wattsworth
/
puppet
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
7656742d
authored
Sep 18, 2017
by
John Doe
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
added timeout=0 for bundle install to prevent timeout
parent
9ff46497
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
29 deletions
docs/index.rst
modules/rails_api/manifests/init.pp
docs/index.rst
View file @
7656742d
...
@@ -7,6 +7,8 @@
...
@@ -7,6 +7,8 @@
The Wattsworth Project
The Wattsworth Project
======================
======================
Collect, process, and visualize IoT sensor data.
.. NOTE::
.. NOTE::
...
@@ -14,34 +16,73 @@ The Wattsworth Project
...
@@ -14,34 +16,73 @@ The Wattsworth Project
* See `web </web>`_ for information on the frontend interface (user facing)
* See `web </web>`_ for information on the frontend interface (user facing)
Collect, process, and visualize IoT sensor data. Each Wattsworth is a complete
sensor network stack with support for:
1. **Data Collection** Collect and store highbandwidth data
Unlike traditional IoT solutions, Wattsworth is a confederation of
self sufficient nodes. Each node collects, processes and stores its own data
and provides a web interface to visualize the data.
For many situations a single node can solve your problem. For more complex
sensor networks multiple nodes can be combined into a mesh or a client-server
architecture.
1. **Data Collection** Collect and store time series data
2. **Data Processing** Build flexible signal processing pipelines.
2. **Data Processing** Build flexible signal processing pipelines.
3. **Data Visualization** View data
at any resolution
using an intuitive web interface
3. **Data Visualization** View data using an intuitive web interface
Nodes may be combined into a mesh or operate individually. There is no central
Follow the instructions below to set up a node and start using Wattsworth.
cloud server.
Install
Step 0:
Install
+++++++
+++++++
On a fresh Ubuntu installation (>= 16.0
2 LTS
) run the following to install
On a fresh Ubuntu installation (>= 16.0
4
) run the following to install
the Wattsworth software stack::
the Wattsworth software stack::
$> sudo apt-get update
$> sudo apt-get update
$> sudo apt-get install puppet
$> sudo apt-get install puppet
git
$> git clone https://git.wattsworth.net/wattsworth/puppet.git
$> git clone https://git.wattsworth.net/wattsworth/puppet.git
$> cd puppet
$> cd puppet
$> sudo puppet apply --modulepath=./modules --verbose site.pp
$> sudo puppet apply --modulepath=./modules --verbose site.pp
Add a Reader Module
Step 1: Generate Data
+++++++++++++++++++
+++++++++++++++++++++
Wattsworth's data processing engine is called Joule. Joule works with
Streams and Modules. Streams are sets of time series data (eg temperatures,
voltages, accelerations, etc). Modules are executable programs that read and
write to streams. There are two types of modules: readers and filters. Readers
collect external data (eg sensor readings) and write it to a stream. Let's start by
creating a reader that produces a stream of random data.
Copy the following to ``/etc/joule/module_configs/random_reader.conf``::
[Main]
exec_cmd = joule reader random 2 10
name = Demo Reader
[Source]
# a reader has no inputs
[Destination]
output = /demo/random
Time series data is stored as streams. Streams are similar to files in a
This file tells Joule to create a new module called **Demo Reader** that is
filesystem. Copy the following to
started by the command ``joule reader random 2 10``. The random reader is a
``/etc/joule/stream_configs/random.conf`` to allocate a new stream.
built-in reader provided by Joule. It takes two command line arguments, the
number of elements to "read" and the range of random numbers. In this case we
are producing a two element stream of random numbers ranging from [0, 10]. Try
running the module from the command line::
# output columns: timestamp (us), element1, element2
$> joule reader random 2 10
Starting random stream: 2 elements @ 10.0Hz
1504275719114302 0.52250357475642772 0.27410492447391688
1504275719214302 0.3504811731191021 0.60611860137921958
1504275719314302 0.16871102294606499 0.26205382675613365
#... output continues, type Ctrl-C to stop
When Joule runs this program as a module this output is written to a stream. The
configuration file specifies this output stream is ``/demo/random``. Before
we can start writing data to this stream we have to create it. To do this copy
the following to ``/etc/joule/stream_configs/random.conf``
.. code-block:: ini
.. code-block:: ini
...
@@ -57,21 +98,13 @@ filesystem. Copy the following to
...
@@ -57,21 +98,13 @@ filesystem. Copy the following to
[Element2]
[Element2]
name = rand2
name = rand2
Reader modules read data from sensors and store it into a stream. Copy the
Every stream must have a unique ``path`` similar to a file on a filesystem. The
following to ``/etc/joule/module_configs/random_reader.conf`` to configure a
``keep`` parameter tells Joule to save only the most recent week of data. This
module to produce data for your new stream::
prevents our disk from filling up. Next we list the elements in this stream.
This stream has two elements named *rand1* and *rand2*.
[Main]
Now we are ready to start collecting data.
exec_cmd = joule reader random 2 10
From the terminal restart the Joule process to activate our new module::
name = Demo Reader
[Source]
# a reader has no inputs
[Destination]
output = /demo/random
From the terminal restart the Joule process to activate the module::
$> sudo service jouled restart
$> sudo service jouled restart
$> joule modules # show the active modules
$> joule modules # show the active modules
...
@@ -92,6 +125,13 @@ data.
...
@@ -92,6 +125,13 @@ data.
Add a Filter Module
Add a Filter Module
+++++++++++++++++++
+++++++++++++++++++
Modules can be
connected together to build flexible data acquisition and signal processing
pipelines. There are two types of modules, readers and filters.
Reader modules collect data. This data can come from local sensors,
remote IoT nodes, third party API's or any other source. Let's start simple and
create a reader module that produces random data.
Filter modules process data generated by readers or by other filters. Filters
Filter modules process data generated by readers or by other filters. Filters
store their results into one or more output streams. Copy the
store their results into one or more output streams. Copy the
following to ``/etc/joule/stream_configs/averaged.conf`` to allocate
following to ``/etc/joule/stream_configs/averaged.conf`` to allocate
...
@@ -111,7 +151,6 @@ a new stream::
...
@@ -111,7 +151,6 @@ a new stream::
[Element2]
[Element2]
name = filtered2
name = filtered2
Configure a
From the terminal restart the Joule process to activate the filter::
From the terminal restart the Joule process to activate the filter::
...
...
modules/rails_api/manifests/init.pp
View file @
7656742d
...
@@ -37,6 +37,7 @@ class rails_api {
...
@@ -37,6 +37,7 @@ class rails_api {
path
=>
[
'/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
],
path
=>
[
'/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
],
refreshonly
=>
true
,
refreshonly
=>
true
,
user
=>
'rails'
,
user
=>
'rails'
,
timeout
=>
0
,
require
=>
[
Vcsrepo
[
'/opt/api'
],
Package
[
'bundler'
]]
require
=>
[
Vcsrepo
[
'/opt/api'
],
Package
[
'bundler'
]]
}
}
exec
{
'db_setup'
:
exec
{
'db_setup'
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment