Categories
Programming Python VSCP

New version of node-vscp-class (1.0.11)

A new version of the package node-vscp-class (1.0.11) was published at 2020-12-01T11:41:21.819Z. The shasum of this package was 4c6327ab52dab75a947a01fd1bcef1c65a92db8c.

Updated class/type definitions to latest

Categories
Programming Python VSCP

New version of node-vscp-type (1.0.9)

node-vscp-type (1.0.9)
A new version of the package node-vscp-type (1.0.9) was published at 2020-12-01T11:44:02.363Z. The shasum of this package was 78d8cce89b53ba3c300839d9d15629e284e5c276.

Update to latest type defs.

Categories
Programming Python VSCP

New release of pyvscp 0.3.9

  • Removed dependency on json module
  • Added getIsoDateTime(), getGuidStr() and toJSON() methods for vscp event classes

Available on PyPi Se also pyvscphelperpyvscpclasses and pyvscptypes

Docs are here

Categories
Programming Python VSCP

New release of pyvscp 0.3.7

  • Added dump to standard event class
  • Standard event now has UTC time set on create
  • Fixed timestamp setting
  • Added timestamp setter (also to constructor)
  • Added constructor with GUID assignment
  • Added missing getmac import
  • Fixed head constants
  • Added new double precision data type
  • Synced VSCP header data
  • Added setGUIDFromMAC

Available on PyPi Se also pyvscphelper, pyvscpclasses and pyvscptypes

Docs are here

Categories
node-js node-red VSCP

node-red-contrib-vscp (1.2.2)

A new version of the package node-red-contrib-vscp (1.2.2) was published at 2020-11-23T21:55:20.331Z. 

Error in documentation fixed.
Categories
Development VSCP

#VSCP Helper library 14.0.1 released

Full info and source and binary downloads can be found here

Categories
node-red VSCP

New version 1.2.5 of #nodered

The lastest version 1.2.5 of node-red now supports BinInt’s so now the event2value of pyvscp also works OK when the measurement coding is integers. So update if you experience this problem.

Release page

Categories
Python VSCP

#VSCP #Python libs.

I have released updated versions of the Python libs. They are still in alpha so structural changes can still happen. Be aware. Docs are also sparse at the moment but there are some simple samples available in the repositories for each lib. pyvscphelper is documented alongside the standard vscphelper library.

You find the libs here Install with

pip install <lib>

Update with

pip install --upgrade <lib>

For more information about VSCP go to the VSCP main site.

/Ake

Categories
VSCP

State of #VSCP

Hello everyone, must post a state of VSCP to show that things are rolling on even if activity looks dead right now. Yes, VSCP is still on active development. It is maybe not every user/developers favorite IoT framework but at least it’s maintainer (who does not love a child?) and a few others still like it.

For me I work on the next version of VSCP Works which I hope will be more stable and more useful then the present version which I personally never liked much, mostly due to the choice of using wxWidgets as a framework to build it. To get this thing out is the highest priority for me right now.

The new version of the VSCP daemon is quite stable as of the latest release. The thing that still needs to be done there is porting of some of the level II drivers to the new level II driver API. I just have’t found the time to do this yet. But will deliver on this point during this winter. I hope.

New things coming to the VSCP daemon is that MQTT client support will be built in instead being in a separate driver. This is in the line of work to use node-red for user interface tasks.

Also UDP and multicast support will go into the VSCP daemon again.

Both will be present in the next release of the VSCP daemon.

I use node-red with VSCP daily here at my location and much functionality in this house now is dependent on this setup. VSCP and node-red is a really a nice combination. More tools will come also here.

I added some VSCP functionality to ESPEasy (ESP8266/ESP32) for some time ago (a controller). It is hard to add generic functionality to a system that is not at all generic. But I gave up on this. Tired of trying to adjust to another really thoughtless solution. If I ever get time there will be sample code for the platforms some day. Tasmota is very nice but not at all generic when it comes to messages either. I plan to do a VSCP translator on MQTT level for my own use there as I really love many things about it.

Currently I am mounting some hardware here to control some stuff. It takes more time then I expected (does it not always?). But the thought is to have some things to work with and write demos and how-to’s around when the winter arrives with snow and cold temperatures (it’s late this year thankfully). Currently I am mounting hardware for lights and a weather station in my garage. More on this later.

well just a few words to show that this project still is alive and well.

Have fun!
/Ake

Categories
General VSCP

“Post is delivered” #vscp #nodered

Snow here today, quite a lot, so I am glad to have the “post is delivered sensor” so I don’t have to walk out to the postbox more than one time. So when I get the message on my phone today I am very pleased.

Yes it should be “there is” and that is changed now. But working. Yes!

I have written about this before here and here and I will probably write about this setup again as it is useful for many other areas.

I have not looked at battery voltage and signal strength before so I decided to email all events the sensor sends to me. This is simple in node-red of course

Just added the last row with a filter on just the sensors GUID.

The full flow is at the end of this post.

Now I receive six emails when the post is delivered. And I will go through them all here

Event #1

The email is

{
  "vscpHead":32864,
  "vscpClass":10,
  "vscpType":6,
  "vscpGuid":"FF:FF:FF:FF:FF:FF:FF:FE:5C:CF:7F:07:76:03:00:00",
  "vscpObId":5,
  "vscpTimeStamp":11704000,
  "vscpDateTime":"2020-10-20T10:51:17.000Z",
  "vscpData":[168,64,214,0,0]
}

which is

a temperature measurement (class=10, Type=6). The data is a bit cryptic when we need to decode it manually. But info on how to do that is here so we can try it out.

The data coding byte is 168 which is 0xA8 in hexadecimal and 0x10101000 in binary. The three leftmost bits (0b101) is the coding and in this case we have a 32-bit floating point value in byte 1,2,3,4. Bits 0,1,2 of the data coding byte is the sensor index and it is zero here so this is from sensor 0. Bits 3,4 is the unit. And if we look in the spec. we see that the unit is degrees Celsius.

The floating point value 64,214,0,0 is on MSB form and I am on a PC so it should be be 0,0,214,64. I can use a simple C program to find the floating point value

#include <stdio.h>
#include <string.h>
#include <inttypes.h>

int main() {
    uint8_t iv[4] = {0,0,214,64};
    memcpy( (uint8_t *)&fvalue, (uint8_t *)&iv, 4 );
    printf("Memconversion: %f\n", fvalue);
    return 0;
}

This will print

Memconversion: 6.687500

which is totally wrong as the temperature is around -1.5 degrees C here right now. Maybe the post bin is a very nice place to be in or maybe there is some self heating going on. Room for investigation.

Event #2

The email is

{
  "vscpHead":32864,
  "vscpClass":1040,
  "vscpType":6,   "vscpGuid":"FF:FF:FF:FF:FF:FF:FF:FE:5C:CF:7F:07:76:03:00:00",
  "vscpObId":5,
  "vscpTimeStamp":11776000,
  "vscpDateTime":"2020-10-20T10:51:17.000Z",
  "vscpData":[0,0,0,1,54,46,54,56,56,0]
}

In the VSCP Specification we find that class=1040, type=6 is also a a temperature measurement, but here as a Level II event and on string form. In the specification we see that first byte is sensor index (0), the second is the zone (0), the third byte is the sub zone (0), and the fourth byte is the unit (1). Byte 4,5,6,7,8,9 make up the string with the value which is 6.688. The zero at the end is the string termination. Not needed but often given. So again the temperature is 6.688 degrees Celsius.

Event #3

The email is

{
  "vscpHead":32864,
  "vscpClass":10,
  "vscpType":16,
  "vscpGuid":"FF:FF:FF:FF:FF:FF:FF:FE:5C:CF:7F:07:76:03:00:00",
  "vscpObId":5,
  "vscpTimeStamp":11849000,
  "vscpDateTime":"2020-10-20T10:51:17.000Z",
  "vscpData":[137,131,11,83]
}

Class=10, type=16 is a Voltage measurement. This is the battery voltage (electric potential). Again we look at the coding byte which is 137, which is 0x89 in hexadecimal and 0b10001001 in binary. Data coding is 0b100 which tells that the data is a normalized integer. For a normalized integer the second byte is the exponent of the number. Here 131 which is 0x83 in hexadecimal. Bit 7 is set which means the decimal point for the integer in the following bytes should be shifted to the left.Bits 0-5 tells how many steps, tree in this case. The integer is 0xB53 which is 2899 in decimal. Shifting the decimal point three steps to the right gives 2.899 V. And we know the battery voltage.

Event #4

The email is

{
  "vscpHead":32864,
  "vscpClass":15,
  "vscpType":6,
  "vscpGuid":"FF:FF:FF:FF:FF:FF:FF:FE:5C:CF:7F:07:76:03:00:00",
  "vscpObId":5,
  "vscpTimeStamp":11921000,
  "vscpDateTime":"2020-10-20T10:51:17.000Z",
  "vscpData":[85,45,56,54]
}

Here class=15, type=6 which is Signal strength. Again the first byte is the coding byte and is 85 which is 0x55 in hexadecimal and 0b01010101 in binary. Data coning is 0v010 which tells the rest of the bytes is a string and if we decode that we get -86 The unit bits are 0b10 (bits 5,6) and we see in the specification that this dBm. So signal strength is -86 dBm. Pretty good for a snowy day.

Event #5

The last email is

{
  "vscpHead":32864,
  "vscpClass":20,
  "vscpType":29,
  "vscpGuid":"FF:FF:FF:FF:FF:FF:FF:FE:5C:CF:7F:07:76:03:00:00",
  "vscpObId":5,
  "vscpTimeStamp":11660000,
  "vscpDateTime":"2020-10-20T10:51:16.000Z",
  "vscpData":[0,0,0]
}

Class=20 and type=29. According to the specification this is an information event telling that something has woken up. Data is index,zone,subzone and they are all set to zero as the GUID clearly tells who woke up in this case.


You may wounder about the vscpHead=32864. What is the meaning? This is a bit field (full definitions is here) giving some info about the event. In this case it tells that this event comes from a dumb node (but 15 is set). That is a node that does not have registers, a decision matrix and the other attributes of a smart node. It also have priority set to normal priority. This is selldome used in VSCP though.

The vscpObId is a channel number that end users normally does not need to care about.

Instead of manually decoding the data, the use of VSCP works would be preferred of course. It would have done the job above automatically. Bur now you know a little more about VSCP events in general.


The promised node-red flow is here

[{"id":"8387a5b3.258038","type":"vscp-tcp-in","z":"5ffcb26.533894c","name":"Localhost","host":"eaaa0283.83ca08","username":"admin","password":"secret","filter":"","keyctx":"vscp2","x":140,"y":120,"wires":[["9fe6d87d.7e56d","bee0ea0b.013a9"]]},{"id":"9fe6d87d.7e56d","type":"vscpfilter","z":"5ffcb26.533894c","vscppriority":"","vscpclass":"20","vscptype":"29","vscpguid":"FF:FF:FF:FF:FF:FF:FF:FE:5C:CF:7F:07:76:03:00:00","name":"Filter on Woken Up from mailbox","x":420,"y":120,"wires":[["b237b908.eb9ee8","e6bf6581.256c98","cb6535fa.e7dc38"]]},{"id":"b8a49e5b.388688","type":"inject","z":"5ffcb26.533894c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Post","payloadType":"str","x":430,"y":220,"wires":[["b237b908.eb9ee8","e6bf6581.256c98"]]},{"id":"b237b908.eb9ee8","type":"function","z":"5ffcb26.533894c","name":"Define message","func":"msg = {\n payload : 'There is post to collect in the mailbox',\n topic : 'There is post',\n to : 'akhe@grodansparadis.com',\n from: 'akhe@grodansparadis.com'\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":820,"y":120,"wires":[["ccf59966.89df9"]]},{"id":"ccf59966.89df9","type":"e-mail","z":"5ffcb26.533894c","server":"mailhost.ljusnet.se","port":"25","secure":false,"tls":false,"name":"akhe@grodansparadis.com","dname":"Ljusnet","x":1000,"y":120,"wires":[]},{"id":"17d730fb.949a3f","type":"telegram sender","z":"5ffcb26.533894c","name":"telegram","bot":"42a44e6b.b2fde","x":1000,"y":220,"wires":[[]]},{"id":"e6bf6581.256c98","type":"function","z":"5ffcb26.533894c","name":"Define message","func":"\nmsg.payload = {};\nmsg.payload.chatId = \"1105118733\";\nmsg.payload.type = \"message\";\nmsg.payload.content = \"There is post to collect in the mailbox\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":820,"y":220,"wires":[["17d730fb.949a3f"]]},{"id":"cb6535fa.e7dc38","type":"function","z":"5ffcb26.533894c","name":"Define message","func":"msg.payload = \"Post has been delivered\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":820,"y":300,"wires":[["6d1af59f.bb754c"]]},{"id":"6d1af59f.bb754c","type":"ui_audio","z":"5ffcb26.533894c","name":"sound","group":"b5541ba5.781d38","voice":"en-GB","always":true,"x":990,"y":300,"wires":[]},{"id":"bee0ea0b.013a9","type":"vscpfilter","z":"5ffcb26.533894c","vscppriority":"","vscpclass":"","vscptype":"","vscpguid":"FF:FF:FF:FF:FF:FF:FF:FE:5C:CF:7F:07:76:03:00:00","name":"Filter on Woken Up from mailbox","x":440,"y":380,"wires":[["3bbfc1f1.3d2f36"]]},{"id":"3bbfc1f1.3d2f36","type":"e-mail","z":"5ffcb26.533894c","server":"mailhost.ljusnet.se","port":"25","secure":false,"tls":false,"name":"akhe@grodansparadis.com","dname":"Ljusnet","x":800,"y":380,"wires":[]},{"id":"eaaa0283.83ca08","type":"vscp-tcp-config-host","name":"Localhost","host":"localhost","port":"9598","timeout":"10000","interface":"","keepalive":""},{"id":"42a44e6b.b2fde","type":"telegram bot","botname":"pi11_bot","usernames":"brattberg_pi11_bot","chatids":"1234","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false},{"id":"b5541ba5.781d38","type":"ui_group","name":"Temperatures","tab":"b0073866.5d3d68","order":1,"disp":true,"width":"6","collapse":false},{"id":"b0073866.5d3d68","type":"ui_tab","name":"Home","icon":"dashboard","order":2,"disabled":false,"hidden":false}]