Categories
node-red VSCP

howto: Notification when mail arrives

Remember the Howto: Snailmail sensor? Of course I need a notification on my phone when mail arrives so I can use my old legs and go out and get it.

I use email and Telegram for this. I also have added a SMS message to but this costs money (to much really) and I like “free”.

The setup is simple.

Common

The first to do is to listen for incoming events from the VSCP daemon where the mailbox thing delivers them. I could have used a MQTT broker here but have chosen to stick to an all VSCP solution for this.

The server is the local machine in this case as I have node-red installed on it as well. Well I have about twelve (last count) node-red installations running here so there are machines to choose from.

The setup is simple

The localhost is setup as

I use a standard setup, just listen on all traffic (no filter), no interface. So at this point I get a lot of events. I could have added a filter here to ease the work for node-red and let the VSCP Daemon do the filtering. But I like when my applications work hard so node-red take care of that task.

Filtering is the next state. The filter looks like this

I filter on CLASS1.INFORMATION /VSCP_TYPE_INFORMATION_WOKEN_UP which is sent when the lid of the postbox is opened. I also filter on the GUID from the postbox device. The GUID from the device is a good example of a GUID derived from a devices MAC address. It is built from a template like this

FF:FF:FF:FF:FF:FF:FF:FE:YY:YY:YY:YY:YY:YY:XX:XX

where YY is the MAC address of the device and XX is something the designer can use the way he/she likes. Read more about this here if you are interested.

After the filter we now only get an event when the Woken up event is sent.

Email

The email setup is using the standard email tool (node-red-node-email). Nothing special with this setup. Just plain old mail delivery.

Before the email node I specify the mail content

I think it is pretty clear from the above picture where all fields go in the email.

Nothing more to it. An email is now sent when physical post arrives.

Telegram

Telegram is a perfect (and free) way to deliver/receive messages. There are apps and tools available for every platform. One just set up a bot (channel) and then subscribe to it on devices that should get the message. Download telegram first for your platform(s) (computer, tablet or phone).

Microsoft have a good walk through here on how to create a new bot. No need for me to repeat the steps.

In node-red I use the node-red-contrib-telegrambot node (telegram sender in this case). There are many other packages around but this one worked fine so I stick to it. My setup is like this

and

The token is the token you get from the setup. It looks something like this

The message needs to be defined here also and that is done in the stage before the telegram sender node. This is how I set it up

Now if you have installed Telegram on your phone/computer/tablet or whatever you will never miss the post delivery again and if you are fast enough you may even have time to wave to the postman/postgirl.

Here is the node-red code for this setup

[{"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"]]},{"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"]]},{"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 are post to collect in the mailbox\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":820,"y":220,"wires":[["17d730fb.949a3f"]]},{"id":"eaaa0283.83ca08","type":"vscp-tcp-config-host","z":"","name":"Localhost","host":"localhost","port":"9598","timeout":"10000","interface":"","keepalive":""},{"id":"42a44e6b.b2fde","type":"telegram bot","z":"","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}]
Talk

If you want your computer to say “post is delivered” when mail arrives, add this

[{"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":"b5541ba5.781d38","type":"ui_group","z":"","name":"Temperatures","tab":"b0073866.5d3d68","order":1,"disp":true,"width":"6","collapse":false},{"id":"b0073866.5d3d68","type":"ui_tab","z":"","name":"Home","icon":"dashboard","disabled":false,"hidden":false}]

Have fun!

2 replies on “howto: Notification when mail arrives”

hey Ake, I try out this app on the weekend. Nice example on how to use VSCP with nodejs and arduino!

/Henk

I still have to go out to the mailbox to check if there is mail because I don’t get any bills today either. 😉 But it all works when I do. Maybe one day I will trust this setup. Enjoying the daily walk until then.

Hope all is good with you guys!

Leave a Reply to adminCancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.