At EMF, as well as giving every attendee the new TiLDA Mkπ badge they had a pile of TiLDA MKe badges from the 2014 event on sale.
These are not as nice as the 2016 badge, but given the knock down price a really good platform to mess around with.
It's an Arduino Due, Ciseco SRF data radio, black & white LCD display, LiPo charging circuit, 3.3v LDO regulator, accelerometer and assorted buttons/lights on a single board plus a battery to power it.
Given I already had on my radar that I wanted to build something that was a 'handheld unit with display and some kind of wireless comms' to use as in-game props I snapped some up. I have been using SRF radios extensively already, going so far as to write my own networking protocol for them, so it's almost like these badges were tailor made for me.
Having been professionally designed and made this is far better than anything I could hand solder in my cellar and will save me an absolute ton of time. They do lack WiFi but I have a load of ESP-01 ESP8266 WiFi modules which should be fairly easy to piggyback on and squeeze into the case if I need this.
Somebody has also come up with a 3D printable case for them so I've quickly printed one out. It's not a perfect fit, being slightly too shallow to close with the battery inside, but the source files are online so this has got me even closer to a finished device.
Now it comes down to writing the software and I'm experiencing version/dependency hell in the Arduino IDE so can't even upload 'blink' yet. The library files on the badge Wiki are made for an old version of the IDE so I suspect downgrading to the version they mention may well fix this. Once it works at all I'll try to rework things into a format/version modern versions of the IDE will deal with.
Electromagnetic Field 2016
This year I went along to Electromagnetic Field, the biggest maker/hacker event in the UK, and it was awesome.
You get something like 1400 like minded people in an environment akin to a music festival.
There's simply so much going on it's hard to get a balance between attending talks, socialising, playing with the various installations people bring and actually doing some making or coding.
To try and inspire everybody to have a go at the latter they produced this fantastic event badge. They've really pushed the boat out with this, it's got a colour screen, Wifi, accelerometer, compass, piezo sounder, LiPo battery/charger etc. etc. It runs MicroPython and you can connect to it as USB mass storage so it's possible to write code directly for it from almost anything with a USB port and a text editor.
Most impressive of all, while it doesn't exactly have an OS they have produced an ecosystem for it. The 'home' app is a menu system for accessing other apps and there's an 'app library' on a server you can install things from and a mechanism for updating them once on. Also people could upload code to the app library while at the event and by the end there were 69 apps in there.
Obviously some of these apps were broken/trivial/stupid but by the end I saw people wandering around with all manner of homebrew stuff on the screens of their badges. Best of all was an old school Elite style line drawing of a 3D cube rotating.
Sadly it's only a biennial event so I can't look forward to it in 2017 but I'm definitely going to make plans to go in 2018.
You get something like 1400 like minded people in an environment akin to a music festival.
There's simply so much going on it's hard to get a balance between attending talks, socialising, playing with the various installations people bring and actually doing some making or coding.
To try and inspire everybody to have a go at the latter they produced this fantastic event badge. They've really pushed the boat out with this, it's got a colour screen, Wifi, accelerometer, compass, piezo sounder, LiPo battery/charger etc. etc. It runs MicroPython and you can connect to it as USB mass storage so it's possible to write code directly for it from almost anything with a USB port and a text editor.
Most impressive of all, while it doesn't exactly have an OS they have produced an ecosystem for it. The 'home' app is a menu system for accessing other apps and there's an 'app library' on a server you can install things from and a mechanism for updating them once on. Also people could upload code to the app library while at the event and by the end there were 69 apps in there.
Obviously some of these apps were broken/trivial/stupid but by the end I saw people wandering around with all manner of homebrew stuff on the screens of their badges. Best of all was an old school Elite style line drawing of a 3D cube rotating.
Sadly it's only a biennial event so I can't look forward to it in 2017 but I'm definitely going to make plans to go in 2018.
Using ESP8266, NodeMCU and MQTT to create a wirelessly connected 'installation' - paused
It's been a while since an update. We had been due to play the game I was building for at the end of June but we've had to postpone.
My friend Mik, who is the driving force behind the game, became very ill and while we could have finished off the work and played it didn't seem right.
Nonetheless I've now got ten Wifi connected RFID readers that talk MQTT and emulate the sort of thing you see on security doors. Blinkenlight, buzzers etc.
They're a bit chunky but then they're hand built from hobbyist modules and have a 3xAA batteries in to drive them. So chunk was kind of unavoidable.
Also I've built a faux CCTV system with some Wifi IP cameras and a 'portal' that uses the same RFID cards to log you in. The portal is a single page full of JavaScript which links to the various cameras and either shows or hides them based on which card you present. So it's not really secure but it's for a game after all.
The setup uses a cheap eBay USB card reader and these just emulate a keyboard. When you present a card it sends the card ID and presses enter. A little bit of JavaScript to capture this and it looks like magic.
Implementing this all in JavaScript worked way more easily than I expected and I'm really looking forward to using this in a game.
We were throwing away two prehistoric Compaq TC1100 Wintel slate PCs from work and I managed to grab them. With Ubuntu Mate installed they work just great, even the horrible stylus is functional. What's great about them is it stops me building a 'high tech terminal' prop as they look like one without really looking exactly like a conventional laptop.
The whole thing isn't 100% finished, I'd been burning the midnight oil a bit and when it got postponed I stopped. Once we've got a new date for the game I'll get back on the horse.
In the meantime though I presented at the London Arduino Meetup about some of my previous work.
There's a video of my full presentation here, but DON'T WATCH THIS IF YOU PLAN TO PLAY THE NEXT WAYWARD SONS GAME AS THERE ARE MASSIVE SPOILERS IN THE Q&A.
Presentation Spoiler: I say 'um' too much.
There are also some nice photos on the organiser's flickr feed.
Now I'm freed up to work on other things, we've got the season of Lasertag LARP ahead and I seem to have managed to break/kill several of my 'tag weapons. I think I'll be fixing these this weekend.
My friend Mik, who is the driving force behind the game, became very ill and while we could have finished off the work and played it didn't seem right.
Nonetheless I've now got ten Wifi connected RFID readers that talk MQTT and emulate the sort of thing you see on security doors. Blinkenlight, buzzers etc.
They're a bit chunky but then they're hand built from hobbyist modules and have a 3xAA batteries in to drive them. So chunk was kind of unavoidable.
Also I've built a faux CCTV system with some Wifi IP cameras and a 'portal' that uses the same RFID cards to log you in. The portal is a single page full of JavaScript which links to the various cameras and either shows or hides them based on which card you present. So it's not really secure but it's for a game after all.
The setup uses a cheap eBay USB card reader and these just emulate a keyboard. When you present a card it sends the card ID and presses enter. A little bit of JavaScript to capture this and it looks like magic.
Implementing this all in JavaScript worked way more easily than I expected and I'm really looking forward to using this in a game.
We were throwing away two prehistoric Compaq TC1100 Wintel slate PCs from work and I managed to grab them. With Ubuntu Mate installed they work just great, even the horrible stylus is functional. What's great about them is it stops me building a 'high tech terminal' prop as they look like one without really looking exactly like a conventional laptop.
The whole thing isn't 100% finished, I'd been burning the midnight oil a bit and when it got postponed I stopped. Once we've got a new date for the game I'll get back on the horse.
In the meantime though I presented at the London Arduino Meetup about some of my previous work.
There's a video of my full presentation here, but DON'T WATCH THIS IF YOU PLAN TO PLAY THE NEXT WAYWARD SONS GAME AS THERE ARE MASSIVE SPOILERS IN THE Q&A.
Presentation Spoiler: I say 'um' too much.
There are also some nice photos on the organiser's flickr feed.
Now I'm freed up to work on other things, we've got the season of Lasertag LARP ahead and I seem to have managed to break/kill several of my 'tag weapons. I think I'll be fixing these this weekend.
Using ESP8266, NodeMCU and MQTT to create a wirelessly connected 'installation' - part 3
Producing lots of the same thing has been this week's task.
I spent a load of time messing around designing a 3D printed enclosure but kind of ended up with a box when my more ambitious design didn't really work. Still there are little pegs and clips to hold the modules loosely, which I've then fixed in place with some hot glue.
What I've got in each unit is a ESP-01 Wifi module, Arduino Pro Mini, MFRC522 RFID reader/writer, LDO regulator, Piezo sounder and a couple of big bright 10mm LEDs.
All of this is tested and working together with proof of concept code. Tomorrow I solder up the wiring looms.
Once I've done these ten, I've got another batch of similar, but slightly different stuff to design an enclosure for and assemble. I've learned a bunch of lessons while making this enclosure so it should take me much less time.
I spent a load of time messing around designing a 3D printed enclosure but kind of ended up with a box when my more ambitious design didn't really work. Still there are little pegs and clips to hold the modules loosely, which I've then fixed in place with some hot glue.
What I've got in each unit is a ESP-01 Wifi module, Arduino Pro Mini, MFRC522 RFID reader/writer, LDO regulator, Piezo sounder and a couple of big bright 10mm LEDs.
All of this is tested and working together with proof of concept code. Tomorrow I solder up the wiring looms.
Once I've done these ten, I've got another batch of similar, but slightly different stuff to design an enclosure for and assemble. I've learned a bunch of lessons while making this enclosure so it should take me much less time.
Hello old friend
Next month I'm in a LARP where several of us are playing the members of a heavy metal band. We're going to try to bring instruments and make a little noise before whatever befalls us happens. It's a horror LARP and we all expect to get chased by monsters and die because the band will be unarmed and useless. That doesn't mean we're going to do things by halves though. There will be corpse paint, long wigs and lots of black clothing, at least for me.
Way back when I used to play with guitars and do lots of messing around with them I made this fake 'stack'. It's driven by Smokey battery amps and even has two 'channels' on account of using the normal and high gain versions with a switch to choose which one is in the circuit.
The cabinets are built out of old chipboard shelving painted black and the speakers are 12" drivers of unknown make that I pulled from a pile of rubbish at work.
Being a one-off joke made in a weekend it's languished unloved in my cellar ever since, but today with a good clean off and fresh batteries it still rocks. I may touch the paint up a bit but that's all the work it needs.
With the little Orange amp driving one cabinet two of us get to make a noise. \m/
Way back when I used to play with guitars and do lots of messing around with them I made this fake 'stack'. It's driven by Smokey battery amps and even has two 'channels' on account of using the normal and high gain versions with a switch to choose which one is in the circuit.
The cabinets are built out of old chipboard shelving painted black and the speakers are 12" drivers of unknown make that I pulled from a pile of rubbish at work.
Being a one-off joke made in a weekend it's languished unloved in my cellar ever since, but today with a good clean off and fresh batteries it still rocks. I may touch the paint up a bit but that's all the work it needs.
With the little Orange amp driving one cabinet two of us get to make a noise. \m/
Using ESP8266, NodeMCU and MQTT to create a wirelessly connected 'installation' - part 2
This weekend was time for some field tests of the networking component.
I'd had this working at home for a while but we're setting up at an Airsoft site which is a fairly dense wood with large changes in elevation. There's also an assortment of fake buildings bashed together from wood and for some reason, old aluminium garage doors.
The site is roughly 90 acres in size and while we won't be using all of it we are going to be using the areas that have buildings. The radio tech I used last year really struggled with propagation through the trees and ended up with about a 50-100m range. This doesn't really cut it so it was imperative that I tested the new setup.
Each node is a plastic storage box filled with the following.
For those interested in the config, here's what I put on each firewall. It was done as a base script you can just copy and paste on then a second one to modify it specifically for each node. This could also mostly be done through the firewall GUI but making a command line script helps with making four identical nodes.
At the other end they connect to there's config like this.
I'd had this working at home for a while but we're setting up at an Airsoft site which is a fairly dense wood with large changes in elevation. There's also an assortment of fake buildings bashed together from wood and for some reason, old aluminium garage doors.
The site is roughly 90 acres in size and while we won't be using all of it we are going to be using the areas that have buildings. The radio tech I used last year really struggled with propagation through the trees and ended up with about a 50-100m range. This doesn't really cut it so it was imperative that I tested the new setup.
Each node is a plastic storage box filled with the following.
- Fortigate firewall, I had two 50Bs and two 60ADSLs. Old ones like this are plentiful and cheap on eBay and I already had these. I work with these professionally so I'm 100% comfortable configuring them. You get pretty much everything you might want from a firewall/router appliance even when forced to run very old versions of FortiOS. These SOHO models even have a small network switch integrated.
- Huawei E160G USB 3G modem. These slightly old 3G modems are also plentiful on eBay and I know they 100% work with FortiOS. Simply plug them into a USB port of the firewall and with a few lines of config you're ready to go.
- Netgear WG102 wireless access point. I just happened to have picked four up previously and they support a point-to-multpoint bridging mode that could connect all the nodes. They're old and only support 802.11b/g over 2.4Ghz but performance isn't the thing we need.
- 4W 2.4Ghz Wifi amplifier from China. We're working in a remote area with nobody to interfere with and I really needed the range this would give.
- 30AH 12V sealed lead-acid battery, another thing I had four of lurking at home. With all the components working off external PSUs that supply 12V then the ~12.5-13V these kick out meant I didn't have to mess around with any other DC-DC conversion to power things.
For those interested in the config, here's what I put on each firewall. It was done as a base script you can just copy and paste on then a second one to modify it specifically for each node. This could also mostly be done through the firewall GUI but making a command line script helps with making four identical nodes.
Then for each node I then had something like this.execute batch startconfig system adminedit "admin"set password XXXXXnextendconfig system globalset admintimeout 90set hostname nodeXset timezone 25set dst enableendconfig system ntpset ntpsync enableset syncinterval 30config ntpserveredit 1set server pool.ntp.orgnextendendconfig system modemset status enableset dial-on-demand disableset auto-dial enableset idle-timer 1set redial 10set phone1 "*99#"set distance 100endconfig system interfaceedit "internal"set mode staticunset ipset allowaccess ping https sshnextedit wan1set mode staticunset ipset allowaccess ping https sshconfig secondaryipedit 1set detectserver "0.0.0.0"set ip 192.168.0.1 255.255.255.0nextendnextedit wan2set mode staticunset ipset allowaccess ping https sshnextedit "wifi_clients"set vdom rootset type vlanset vlanid 2set interface wan1set mode staticunset ipset allowaccess ping https sshnextedit "modem"set allowaccess ping httpsset ddns enableset ddns-server dyndns.orgset ddns-domain "XXXXXXXXXX.homeip.net"set ddns-username "XXXXXXXXXXXXXX"set ddns-password XXXXXXXXXXXXXXXXXnextendconfig system dhcp serverdelete "internal_dhcp_server"edit "internal"set default-gateway 10.254.1.1set start-ip 10.254.1.2set end-ip 10.254.1.254set dns-server1 8.8.8.8set interface "internal"set netmask 255.255.255.0nextedit "wan1"set default-gateway 10.0.0.254set start-ip 10.0.0.5set end-ip 10.0.0.254set dns-server1 8.8.8.8set interface "wan1"set netmask 255.255.255.0nextedit "wifi_clients"set default-gateway 10.254.3.1set start-ip 10.254.3.2set end-ip 10.254.3.254set dns-server1 8.8.8.8set interface "wifi_clients"set netmask 255.255.255.0nextendconfig system dhcp reserved-addressedit "ap1"set ip 10.0.0.5set mac 00:1b:2f:96:2b:cbnextedit "ap2"set ip 10.0.0.6set mac 00:1b:2f:96:29:abnextedit "ap3"set ip 10.0.0.7set mac 00:1b:2f:98:40:d1nextedit "ap4"set ip 10.0.0.8set mac 00:1e:2a:15:a4:4anextendconfig vpn ipsec phase1-interfaceedit "tunnel"set interface "modem"set dpd enableset nattraversal enableset proposal 3des-sha1 3des-md5set mode aggressiveset remote-gw 1.2.3.4set psksecret XXXXXXXXXXXXXset localid XXXXXXXXXset peertype oneset peerid XXXXXXXXXXXnextendconfig router staticdelete 1endconfig firewall policydelete 1endconfig system zoneedit this_nodeset interface "internal" "wifi_clients"set intrazone allownextedit elsewhereset interface "modem" "tunnel"set intrazone allownextedit meshset interface "wan1"set intrazone allownextendconfig firewall addressedit "mesh"set subnet 10.0.0.0 255.255.255.0nextedit "wifi_clients"set subnet 10.1.0.0 255.255.255.0nextedit "node1"set subnet 10.1.0.0 255.255.0.0nextedit "node2"set subnet 10.2.0.0 255.255.0.0nextedit "node3"set subnet 10.3.0.0 255.255.0.0nextedit "node4"set subnet 10.4.0.0 255.255.0.0nextedit "ap_default"set subnet 192.168.0.229 255.255.255.255nextendconfig firewall addrgrpedit "this_node"set member "node2"nextedit "other_nodes"set member "node1" "node3" "node4"nextendconfig vpn ipsec phase2-interfaceedit "tunnel"set phase1name "tunnel"set keepalive enableset pfs enableset proposal 3des-sha1 3des-md5set src-addr-type nameset dst-addr-type nameset src-name "this_node"set dst-name "other_nodes"set auto-negotiate enablenextendconfig router ospfconfig areaedit 10.0.0.0set authentication md5nextendconfig networkedit 1set area 10.0.0.0set prefix 10.0.0.0 255.255.255.0nextendconfig redistribute "connected"set status enableendset router-id 10.0.0.254set default-information-originate enableset passive-interface tunnel internalendconfig firewall policyedit 1set srcintf this_nodeset dstintf elsewhereset srcaddr this_nodeset dstaddr other_nodesset service ANYset action acceptset schedule alwaysset nat disablenextedit 2set srcintf this_nodeset dstintf elsewhereset srcaddr this_nodeset dstaddr allset service ANYset action acceptset schedule alwaysset nat enablenextedit 3set srcintf elsewhereset dstintf this_nodeset srcaddr other_nodesset dstaddr this_nodeset service ANYset action acceptset schedule alwaysset nat disablenextedit 4set srcintf elsewhereset dstintf elsewhereset srcaddr other_nodesset dstaddr other_nodesset service ANYset action acceptset schedule alwaysset nat disablenextedit 5set srcintf elsewhereset dstintf elsewhereset srcaddr other_nodesset dstaddr allset service ANYset action acceptset schedule alwaysset nat enablenextedit 6set srcintf "this_node"set dstintf "mesh"set srcaddr "this_node"set dstaddr "ap_default"set action acceptset schedule "always"set service "ANY"set nat enablenextedit 7set srcintf "this_node"set dstintf "mesh"set srcaddr "this_node"set dstaddr "other_nodes"set action acceptset schedule "always"set service "ANY"set nat disablenextedit 8set srcintf "this_node"set dstintf "mesh"set srcaddr "this_node"set dstaddr "mesh"set action acceptset schedule "always"set service "ANY"set nat enablenextedit 9set srcintf "mesh"set dstintf "this_node"set srcaddr "mesh" "other_nodes"set dstaddr "this_node"set action acceptset schedule "always"set service "ANY"set nat disablenextedit 10set srcintf "mesh"set dstintf "elsewhere"set srcaddr "all"set dstaddr "all"set action acceptset schedule "always"set service "ANY"set nat enablenextendconfig log memory settingset status enableendconfig log memory filterset event enableset admin enableset auth enableset cpu-memory-usage enableset dhcp enableset ha enableset ipsec enableset ldb-monitor enableset pattern enableset ppp enableset sslvpn-log-adm enableset sslvpn-log-auth enableset sslvpn-log-session enableset system enableend
There's no real attempt at security or firewalling the Fortinet's just being used as a router with basic OSPF and a VPN plus a couple of local networks at each node. I may tidy it up later.config system globalset hostname node1endconfig system interfaceedit "internal"set ip 10.1.1.1 255.255.255.0nextedit "wan1"set ip 10.0.0.1 255.255.255.0nextedit "wifi_clients"set ip 10.1.2.1 255.255.255.0nextedit "modem"set ddns-domain "XXXXXXXXX.homeip.net"nextendconfig router ospfset router-id 10.0.0.1endconfig system dhcp serveredit "internal"set default-gateway 10.1.1.1set start-ip 10.1.1.2set end-ip 10.1.1.254nextedit "wan1"set default-gateway 10.1.0.1nextedit "wifi_clients"set default-gateway 10.1.2.1set start-ip 10.1.2.2set end-ip 10.1.2.254nextendconfig vpn ipsec phase1-interfaceedit "tunnel"set psksecret XXXXXXXXXXXXXXXXXXset peerid Hub1set localid Node1nextendconfig system interfaceedit "tunnel"set ip 10.253.0.2 255.255.255.255set remote-ip 10.253.0.1set allowaccess ping https sshnextendconfig router staticedit 1set device "tunnel"set dst 10.2.0.0 255.255.0.0set distance 128nextedit 2set device "tunnel"set dst 10.3.0.0 255.255.0.0set distance 128nextedit 3set device "tunnel"set dst 10.4.0.0 255.255.0.0set distance 128nextendconfig firewall addrgrpedit "this_node"set member "node1"nextedit "other_nodes"set member "node2" "node3" "node4"nextendexecute batch end
At the other end they connect to there's config like this.
config vpn ipsec phase1-interfaceedit "Node1"set type dynamicset interface "portA1"set peertype oneset mode aggressiveset proposal 3des-sha1 3des-md5set localid "Hub1"set peerid "Node1"set psksecret XXXXXXXXXXXXXXXXXX
nextedit "Node2"set type dynamicset interface "portA1"set peertype oneset mode aggressiveset proposal 3des-sha1 3des-md5set localid "Hub2"set peerid "Node2"set psksecret XXXXXXXXXXXXXXXXXXnextedit "Node3"set type dynamicset interface "portA1"set peertype oneset mode aggressiveset proposal 3des-sha1 3des-md5set localid "Hub3"set peerid "Node3"set psksecret XXXXXXXXXXXXXXXXXXnextedit "Node4"set type dynamicset interface "portA1"set peertype oneset mode aggressiveset proposal 3des-sha1 3des-md5set localid "Hub4"set peerid "Node4"set psksecret XXXXXXXXXXXXXXXXXXnextend
config firewall address
edit "Node1"
set subnet 10.1.0.0 255.255.0.0
next
edit "Node2"
set subnet 10.2.0.0 255.255.0.0
next
edit "Node3"
set subnet 10.3.0.0 255.255.0.0
next
edit "Node4"
set subnet 10.4.0.0 255.255.0.0
next
end
config vpn ipsec phase2-interface
edit "Node1"
set dst-addr-type name
set phase1name "Node1"
set proposal 3des-sha1 aes128-sha1
set src-addr-type name
set dst-name "Node1"
set src-name "Node 2,3,4"
next
edit "Node2"
set dst-addr-type name
set phase1name "Node2"
set proposal 3des-sha1 aes128-sha1
set src-addr-type name
set dst-name "Node2"
set src-name "Node 1,3,4"
next
edit "Node3"
set dst-addr-type name
set phase1name "Node3"
set proposal 3des-sha1 aes128-sha1
set src-addr-type name
set dst-name "Node3"
set src-name "Node 1,2,4"
next
edit "Node4"
set dst-addr-type name
set phase1name "Node4"
set proposal 3des-sha1 aes128-sha1
set src-addr-type name
set dst-name "Node4"
set src-name "Node 1,2,3"
next
end
config firewall policy
edit 1000
set srcintf "Node1"
set dstintf "Internet"
set srcaddr "Node1"
set dstaddr "all"
set action accept
set schedule "always"
set service "ANY"
set nat enable
next
edit 2000
set srcintf "Node2"
set dstintf "Internet"
set srcaddr "Node2"
set dstaddr "all"
set action accept
set schedule "always"
set service "ANY"
set nat enable
next
edit 1002
set srcintf "Node1"
set dstintf "Node2"
set srcaddr "Node1"
set dstaddr "Node2"
set action accept
set schedule "always"
set service "ANY"
next
edit 2001
set srcintf "Node2"
set dstintf "Node1"
set srcaddr "Node2"
set dstaddr "Node1"
set action accept
set schedule "always"
set service "ANY"
next
edit 1003
set srcintf "Node1"
set dstintf "Node3"
set srcaddr "Node1"
set dstaddr "Node3"
set action accept
set schedule "always"
set service "ANY"
next
edit 2003
set srcintf "Node2"
set dstintf "Node3"
set srcaddr "Node2"
set dstaddr "Node3"
set action accept
set schedule "always"
set service "ANY"
next
edit 3000
set srcintf "Node3"
set dstintf "Internet"
set srcaddr "Node3"
set dstaddr "all"
set action accept
set schedule "always"
set service "ANY"
set nat enable
next
edit 3001
set srcintf "Node3"
set dstintf "Node1"
set srcaddr "Node3"
set dstaddr "Node1"
set action accept
set schedule "always"
set service "ANY"
next
edit 3002
set srcintf "Node3"
set dstintf "Node2"
set srcaddr "Node3"
set dstaddr "Node2"
set action accept
set schedule "always"
set service "ANY"
next
edit 23
set srcintf "Node1"
set dstintf "Node4"
set srcaddr "Node1"
set dstaddr "Node4"
set action accept
set schedule "always"
set service "ANY"
next
edit 24
set srcintf "Node2"
set dstintf "Node4"
set srcaddr "Node2"
set dstaddr "Node4"
set action accept
set schedule "always"
set service "ANY"
next
edit 25
set srcintf "Node3"
set dstintf "Node4"
set srcaddr "Node3"
set dstaddr "Node4"
set action accept
set schedule "always"
set service "ANY"
next
edit 26
set srcintf "Node4"
set dstintf "Internet"
set srcaddr "Node4"
set dstaddr "all"
set action accept
set schedule "always"
set service "ANY"
set nat enable
next
edit 27
set srcintf "Node4"
set dstintf "Node1"
set srcaddr "Node4"
set dstaddr "Node1"
set action accept
set schedule "always"
set service "ANY"
next
edit 28
set srcintf "Node4"
set dstintf "Node2"
set srcaddr "Node4"
set dstaddr "Node2"
set action accept
set schedule "always"
set service "ANY"
next
edit 29
set srcintf "Node4"
set dstintf "Node3"
set srcaddr "Node4"
set dstaddr "Node3"
set action accept
set schedule "always"
set service "ANY"
next
end
Using ESP8266, NodeMCU and MQTT to create a wirelessly connected 'installation' - part 1
Following up on my last post I'm now neck deep in building an 'installation' where most the components connect over Wifi using ESP-01 ESP8266 modules.
Kicking off the project I've been doing the usual thing of building the first steps from an unapologetic cut & paste of 'stuff found on the Internet'. There seems to be a bit of gulf between the 'hello world' examples and people wrestling with complicated issues, but that's often the case with project examples.
So I thought it might be worth putting something back and actually documenting everything I'm doing, which will cover some of that middle ground.
The installation is going to be about 25 'things' that need to be 'orchestrated' to work together. This is happening over quite a large, remote outdoor area so this is being engineered from scratch to be self-sufficient in every way. Including power.
So far here's where I am on the planning front.
Kicking off the project I've been doing the usual thing of building the first steps from an unapologetic cut & paste of 'stuff found on the Internet'. There seems to be a bit of gulf between the 'hello world' examples and people wrestling with complicated issues, but that's often the case with project examples.
So I thought it might be worth putting something back and actually documenting everything I'm doing, which will cover some of that middle ground.
The installation is going to be about 25 'things' that need to be 'orchestrated' to work together. This is happening over quite a large, remote outdoor area so this is being engineered from scratch to be self-sufficient in every way. Including power.
So far here's where I am on the planning front.
- Wifi - This will be four 'nodes' each with a dedicated firewall, 3G modem, Wifi AP capable of mesh networking and most likely a Raspberry Pi to do the 'orchestration'. Yes you could squeeze all this out of the Pi but I want to compartmentalise the components. There may be Yagi antennas to increase range.
- Networking - Each 'node' will be connected to the others over the Wifi mesh and run OSPF to keep track of routing. There is also Internet access via the 3G. This 3G provides a backup connection for the Wifi over a hub & spoke VPN. I work in this field and have some kit in a Data Centre to connect back to. This stuff is my bread and butter so it's already tested and working, yay!
- Power - The 'nodes' will use 12V lead-acid deep cycle batteries. The event only lasts 4-6 hours and a lot of the kit I've scrounged will run straight off the 12-13V these deliver in practice. The 'things' will be powered either by 3x AA or 1x 18650 battery depending on if they're static or carried.
- Things - These are going to be driven by an Arduino/ESP8266 combo. The Arduino Pro Minis will do the procedural, timing sensitive stuff like drive I2C displays, talk to peripherals over SPI and so on. The ESP-01 will run Lua and act as a gateway to the Wifi and MQTT. Communication between the two will be over serial with a bit of simple message passing. In principle I could have bought a bigger ESP8266 dev board and used that. However this decision is still about compartmentalisation. The Arduino environment has a very mature set of libraries for talking to stuff, but is bad at the networking. Lua/NodeMCU simply doesn't have the libraries for the modules I'm using but seems to have decent networking support.
- Communication with 'things' - I have settled on MQTT because it's lightweight and seemingly well supported in Lua/NodeMCU. This means I don't have to roll my own networking protocol like I did last year. I may be able to 'gateway' the 868Mhz radio kit I built last year into MQTT but that's not a job for now.
- Orchestration of the 'things'. This will be done with some scripts on the Raspberry Pi at each node. For an MQTT broker I'll be using Mosquitto, probably with Python. The hand carried 'things' will have a bit of intelligence so can wander out of Wifi range and then update the nearest Pi when they get Wifi again. I've already tested some basic use of Mosquitto from NodeMCU.
- Enclosures - There will be 3D printed enclosures for all the 'things'. Not the cheapest or fastest way to do it but this kind of exercise is why I bought my printer. The enclosure for one thing is pretty much finalised and I've done work on another.
- Interaction - As well directly interacting with the installation, some people will be able to control it. For that I've acquired some old XP-era Pentium-M laptops (pictured) I am turning into web kiosks with Puppy Linux. This avoids having to leave a nice laptop sitting under a gazebo in the woods. Two of them are weird HP/Compaq TC1100 Windows Slate PCs which makes them quite a nice unusual looking thing to interact with. The batteries are obviously ruined so I will need to come up with a way to power them from 12V. I've got one inverter and one 12V powered laptop PSU, just need to find a third.
- Monitoring - As well as controlling some components, ideally some people will be able to watch other areas over 'CCTV' using the supplied laptops. Thanks to the generosity of a friend I've pulled together five identical old IP cameras that will go straight on the Wifi.
Sometimes it pays to be late to the party
About this time last year this development board made a big noise in the tinkerer scene.
The tiny little ESP8266 based ESP-01 gives you a microcontroller with decent Wifi support for very little money. I've just ordered some from China for £2.28 each.
It started out as a serially connected faux modem driven with AT commands intended to slave off other devices and get them on Wifi. With the SDK and a pile of useful info publicly available from the chip manufacturer soon there was alternative firmware floating around that let you actually use it in its own right to do things.
This variant of the board only has two GPIO pins you can use but the chip itself has loads more and there are now a whole slew of boards around that expose more these, notably NodeMCU.
Anyway I bought five of these almost a year ago and chucked them in a storage box, mostly because the pinout is breadboard-unfriendly and I was busy with other things.
Now I'm in the position where I'm building some props that ideally need to interact with people via Wifi and a browser so I hunted round for these and started to have a look.
First thing to do was update them and by pure accident I put the NodeMCU firmware on, rather than the AT firmware. I've previously stayed away from nodeMCU because I didn't want to learn yet another programming language. This mistake was quite fortuitous though as reading around the subject it seems NodeMCU has some really nice features and is powerful enough to allow me to offload the user interface stuff I need to the ESP-01.
The Lua programming language is interpreted and seems to have a few foibles but as implemented on the ESP8266 looks really useful and comes with great stuff like read/write access to a basic persistent filesystem in the flash memory of the device. This is where the Lua programs are stored and it always runs 'init.lua' on startup but you can have more than one .lua file on there and call them later if you wish. OK you've only about 64KB to play with but it gives you a place to store things too and this will probably be just right for my application. You can even upload files to it from a PC with some community contributed applications.
Should you be so minded it can run a minimal but conventional web server that serves files and at a push does basic CGI scripts with Lua. Although this is very much pushing the bounds of what it was designed for. I probably won't go this far but I can see myself embedding a basic server that responds to AJAX requests from another page.
I'm definitely late to this party but when the ESP8266 boards first came out they were a bit limited and seen as 'quirky'. Now after a year of community development this is really interesting stuff and I can see myself using it a lot this year.
The tiny little ESP8266 based ESP-01 gives you a microcontroller with decent Wifi support for very little money. I've just ordered some from China for £2.28 each.
It started out as a serially connected faux modem driven with AT commands intended to slave off other devices and get them on Wifi. With the SDK and a pile of useful info publicly available from the chip manufacturer soon there was alternative firmware floating around that let you actually use it in its own right to do things.
This variant of the board only has two GPIO pins you can use but the chip itself has loads more and there are now a whole slew of boards around that expose more these, notably NodeMCU.
Anyway I bought five of these almost a year ago and chucked them in a storage box, mostly because the pinout is breadboard-unfriendly and I was busy with other things.
Now I'm in the position where I'm building some props that ideally need to interact with people via Wifi and a browser so I hunted round for these and started to have a look.
First thing to do was update them and by pure accident I put the NodeMCU firmware on, rather than the AT firmware. I've previously stayed away from nodeMCU because I didn't want to learn yet another programming language. This mistake was quite fortuitous though as reading around the subject it seems NodeMCU has some really nice features and is powerful enough to allow me to offload the user interface stuff I need to the ESP-01.
The Lua programming language is interpreted and seems to have a few foibles but as implemented on the ESP8266 looks really useful and comes with great stuff like read/write access to a basic persistent filesystem in the flash memory of the device. This is where the Lua programs are stored and it always runs 'init.lua' on startup but you can have more than one .lua file on there and call them later if you wish. OK you've only about 64KB to play with but it gives you a place to store things too and this will probably be just right for my application. You can even upload files to it from a PC with some community contributed applications.
Should you be so minded it can run a minimal but conventional web server that serves files and at a push does basic CGI scripts with Lua. Although this is very much pushing the bounds of what it was designed for. I probably won't go this far but I can see myself embedding a basic server that responds to AJAX requests from another page.
I'm definitely late to this party but when the ESP8266 boards first came out they were a bit limited and seen as 'quirky'. Now after a year of community development this is really interesting stuff and I can see myself using it a lot this year.
Beware grey goo
I have bought myself a 3D printer. I'm quite excited about this but I've not done much beyond assemble the kit, learn how to use it and produce a pile of test prints. There will be more on it later when I've used it to help with a project.
It's become obvious that it takes a very long time to print things but the PSU and cooling fans whir continuously whether it's running or not.
I've also experimented with some time-lapse videos of printing, which while fun need me to leave the light on in the cellar.
Being able to switch all this off after it's done, especially if I've left it going while I'm at work, begs for some kind of home automation setup.
A friend showed me some LightwaveRF kit which is nice and I almost threw a pile of cash at it.
Then I remembered I picked up this rackmount PDU that a customer at work abandoned a few months ago. I didn't have the logon details and making it usable meant building a custom serial cable so I could do a reset from the console. An evening's faffing about and it's on my network ready to get used. An added bonus is I can use it to monitor power use should I be so inclined. It's quite a pricey piece of kit, so I'm surprised it was abandoned.
We're also chucking out a load of IEC-IEC mains cables at the moment so I'm going to snaffle up a load of long ones to use with this, either as is or modded to drive lights etc.
It's become obvious that it takes a very long time to print things but the PSU and cooling fans whir continuously whether it's running or not.
I've also experimented with some time-lapse videos of printing, which while fun need me to leave the light on in the cellar.
Being able to switch all this off after it's done, especially if I've left it going while I'm at work, begs for some kind of home automation setup.
A friend showed me some LightwaveRF kit which is nice and I almost threw a pile of cash at it.
Then I remembered I picked up this rackmount PDU that a customer at work abandoned a few months ago. I didn't have the logon details and making it usable meant building a custom serial cable so I could do a reset from the console. An evening's faffing about and it's on my network ready to get used. An added bonus is I can use it to monitor power use should I be so inclined. It's quite a pricey piece of kit, so I'm surprised it was abandoned.
We're also chucking out a load of IEC-IEC mains cables at the moment so I'm going to snaffle up a load of long ones to use with this, either as is or modded to drive lights etc.
OMG I haz data!
Last night I finally got around to setting up the dehumidifier sump in my cellar so that it pushes data to the Internet. I'd not bothered before as the cheap DHT11 humidity/temperature sensor I had was returning bogus readings.
Given they're dirt cheap it was easier it just buy a DHT21 instead of messing about troubleshooting and now I have believable humidity readings. It's a little higher than I see in the body of the cellar, but the sensor is stuffed down on the floor right next to the tank of water. I plan to fit a longer lead and mount the sensor at chest height somewhere further away on the assumption it will sort this out.
For data upload I am using the Sparkfun Phant service as it's free and very easy for a microcontroller to deal with.
All I've done here is grab the data as a CSV and draw the graph in Excel, there's much more work to be done to make this readily accessible.
This is a bit of a dry run for a later project, a friend has asked me to set up some monitoring of the beehives she's setting up on a roof in London in the Spring. The interesting stats to collect are apparently internal temperature, internal humidity (may be hard due to bees messing with the sensor) and the weight of the hive. So I get to mess around building an calibrating load cells.
Given they're dirt cheap it was easier it just buy a DHT21 instead of messing about troubleshooting and now I have believable humidity readings. It's a little higher than I see in the body of the cellar, but the sensor is stuffed down on the floor right next to the tank of water. I plan to fit a longer lead and mount the sensor at chest height somewhere further away on the assumption it will sort this out.
For data upload I am using the Sparkfun Phant service as it's free and very easy for a microcontroller to deal with.
All I've done here is grab the data as a CSV and draw the graph in Excel, there's much more work to be done to make this readily accessible.
This is a bit of a dry run for a later project, a friend has asked me to set up some monitoring of the beehives she's setting up on a roof in London in the Spring. The interesting stats to collect are apparently internal temperature, internal humidity (may be hard due to bees messing with the sensor) and the weight of the hive. So I get to mess around building an calibrating load cells.
Subscribe to:
Posts (Atom)