This page will show how you can use the Xively service with VSCP.
Methods described here are only available from the 0.4.1.13 version and higher of VSCP & Frieds.
First of all create a development account on the Xively site. Then create a feed. As a result you will get a feed id and an API key.
git clone https://github.com/xively/libxively.git
or you can download it compressed
wget https://github.com/xively/libxively/archive/master.zip unzip master.zip
the go into the folder
cd libxively or cd libxively-master make all
The file datastream_update in the bin folder of the lib do what we want if we want to update integer values. If we issue
./datastream_update API-KEY FEED-id name value
the value will be updated. This may look like
./datastream_update 9ycPu4AxlK3YyqoEULi39abh1xfnyHwX1A9tu7pqKe3inOTi 2805488985 temp_office 21
If integer value is what you want to update this is all you need to do and you can go to step 5.
To change this example program so it logs floating point values instead of integers you have to change a line and recompile. The file is located at
and the line you need to change is at line 53. You change this line from
xi_set_value_i32( &datapoint, atoi( argv[ 4 ] ) );
xi_set_value_f32( &datapoint, atof( argv[ 4 ] ) );
and then you issue
to build gain. After this change datastream_update will handle decimal numbers and
./datastream_update 9ycPu4AxlK3YyqoEULi39abh1xfnyHwX1A9tu7pqKe3inOTi 2805488985 temp_office 21.15
will work as wall
Now we need to add this to VSCP. We do this by adding a DM entry that looks like this
<row enabled="true" groupid="xively-logger"> <!-- Mask - We just care for class and type --> <mask priority="0" class="0xffff" type="0xff" guid="00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"></mask> <!-- CALSS1.MEASUREMENT, Type=6, Temperature event --> <filter priority="0" class="0x000a" type="6" guid="FF:FF:FF:FF:FF:FF:FF:FE:00:26:55:CA:1F:DA:00:02"></filter> <!-- Allowed historical --> <allowed_from>1977-01-01 00:00:00</allowed_from> <!-- Allowed also far into the future --> <allowed_to>2099-12-31 23:59:59</allowed_to> <!-- Allowed every day in the week --> <allowed_weekdays>mtwtfss</allowed_weekdays> <!-- At all times --> <allowed_time>*-*-* *:*:*</allowed_time> <!-- Control code - --> <control>0x80000000</control> <!-- Action code == Execute command --> <action>0x00000010</action> <!-- Action parameter --> <param>/usr/local/bin/datastream_update 9ycPu4AxlK3YyqoEULi39abh1xfnyHwX1A9tu7pqKe3inOTi 2805488985 temp_office %measurement_float</param> <!-- Comment for decision matrix row --> <comment>Log temperature to Xively</comment> </row>
What we say here is that we want to log all temperatures measurement events from a node with nodeid=2 on interface FF:FF:FF:FF:FF:FF:FF:FE:00:26:55:CA:1F:DA:00:00. When they are received we execute a program datastream_update we updated and tested above. For the parameters to the program we recognize the api-key followed by the feed id and the name of the channel but %measurement_float is new. This is just an escape sequence where the daemon automatically set in the floating point value for the measurement.There are many others defined and you can read about them in the specification document section 14.7.6
Now restart the daemon with
and CLASS1.MEASUREMENT, TYPE=6, Temperature events will be collected in Xively and you can investigate them further there in diagram form ets.
If you are a smart (girl) you use the built in web interface of the daemon to update the decision matrix of course.
Configuration/DM - New element
install the Xively Python library with
$ pip install xively-python
Now can go ahead and install the Xively python library within our virtualenv:
$ pip install xively-python
This command should run for a few seconds, and you should see that it installs the Xively library, plus any dependencies that it requires.
If you are getting an error message that says “Could not find a version that satisfies the requirement”, you should try running
pip install --pre xively-python.
As above create a channel on Xively. In this sample we use “temp_office”
folder of the VSCP & Friends source tree you have a python executable called xively_update.py which you can use to update measurement values.This simple program expect four parameters as the c example above
api-key feed-id datapoint-name datapoint-value
so a typical update should have an action parameter that looks something like
<!-- Action parameter --> <param>xively_update 9ycPu4AxlK3YyqoEULi39abh1xfnyHwX1A9tu7pqKe3inOTi 2805488985 temp_office %measurement_float</param>
Se step 5 of the C example for the complete decision matrix row needed. Just add this row (or many of them) to start to log data to Xively. Thats all there is to it.
For convinience the code for the action is here
#!/usr/bin/python # Use as a VSCP action to update meaurement values to Xively # See http://www.vscp.org/wiki/doku.php/howto/how_to_xively?do=edit&rev=0 # Ake Hedman, Grodans Paradis AB, <email@example.com> import sys import xively if len(sys.argv) < 5: print 'Xively Data updater' print '===================' print 'Error: To few paramers.' print 'Should be: api-key feed-id datapoint-name datapoint-value' else: # Connect to the API using your API key. client = xively.XivelyAPIClient(sys.argv) # Create a new Feed object. feed = client.feeds.get(sys.argv) # Let's give it one datastream with id 'temperature' datastream = feed.datastreams.get(sys.argv) datastream.current_value = sys.argv # We only want to change current_value. datastream.update(fields=['current_value'])
see the Xively python api documentation on how to create datapoints etc
The VSCP MQTT driver can be used with Xively also. The usage is described here.
A full step by step sample will be available soon.