|
@ -0,0 +1,150 @@ |
|
|
|
|
|
# Things Gateway by Mozilla |
|
|
|
|
|
|
|
|
|
|
|
Build Your Own Web of Things Gateway. The "Web of Things" (WoT) is the idea of |
|
|
|
|
|
taking the lessons learned from the World Wide Web and applying them to IoT. |
|
|
|
|
|
It's about creating a decentralized Internet of Things by giving Things URLs on |
|
|
|
|
|
the web to make them linkable and discoverable, and defining a standard data |
|
|
|
|
|
model and APIs to make them interoperable. |
|
|
|
|
|
|
|
|
|
|
|
### Getting Started |
|
|
|
|
|
|
|
|
|
|
|
These instructions will get you a copy of OpenWrt's build system on your local |
|
|
|
|
|
machine for development and testing purposes. To check the prerequisites for |
|
|
|
|
|
your system check out this |
|
|
|
|
|
[link](https://openwrt.org/docs/guide-developer/build-system/install-buildsystem). |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
git clone https://github.com/openwrt/openwrt |
|
|
|
|
|
cd openwrt |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
### Configure the build system |
|
|
|
|
|
|
|
|
|
|
|
We need to configure the build system and select the Things Gateway package. |
|
|
|
|
|
This process is no different from selecting other OpenWrt packages. For this |
|
|
|
|
|
example we will be using build configuration for Raspberry Pi 2/3. |
|
|
|
|
|
|
|
|
|
|
|
Update feeds and open menuconfig interface: |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
make package/symlinks |
|
|
|
|
|
make menuconfig |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Select your target: |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
Target System (Broadcom BCM27xx) ---> |
|
|
|
|
|
Subtarget (BCM2709/BCM2710 32 bit based boards) ---> |
|
|
|
|
|
Target Profile (Raspberry Pi 2B/3B/3B+/3CM) ---> |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Things Gateway package is a bit beefy. In order to fit the image, extend the |
|
|
|
|
|
filesystem size from 256 to 1024 MB: |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
Target Images ---> |
|
|
|
|
|
(1024) Root filesystem partition size (in MB) |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Select Things Gateway package: |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
Languages ---> |
|
|
|
|
|
Node.js ---> |
|
|
|
|
|
<*> node-mozilla-iot-gateway |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Save and exit. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Building the image |
|
|
|
|
|
|
|
|
|
|
|
Run the build process and substitute <N> with the number of your CPU cores: |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
make -j<N> |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Flashing on the SD card |
|
|
|
|
|
|
|
|
|
|
|
Process of flashing the image will depend on which device you have. |
|
|
|
|
|
Instructions below are for Raspberry Pi 2/3. For other devices consult OpenWrt |
|
|
|
|
|
wiki pages. Be careful to replace the X in the third command with the drive |
|
|
|
|
|
letter of your SD card. |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
cd bin/targets/brcm2708/bcm2709 |
|
|
|
|
|
gunzip openwrt-brcm2708-bcm2709-rpi-2-ext4-factory.img.gz |
|
|
|
|
|
sudo dd if=openwrt-brcm2708-bcm2709-rpi-2-ext4-factory.img of=/dev/sdX conv=fsync |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
## Running Things Gateway from USB flash drive |
|
|
|
|
|
|
|
|
|
|
|
In case the device doesn't have enough internal storage space, it is possible |
|
|
|
|
|
to run Things Gateway of a USB flash drive. This requires USB flash drive with |
|
|
|
|
|
ext4 filesystem plugged in the device. |
|
|
|
|
|
|
|
|
|
|
|
### Configuration |
|
|
|
|
|
|
|
|
|
|
|
Do all steps from "Configure the build system" above, and after that change |
|
|
|
|
|
node-mozilla-iot-gateway selection from "\*" to "M". This will build the |
|
|
|
|
|
package and all of it's dependencies but it will not install Things Gateway. |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
Languages ---> |
|
|
|
|
|
Node.js ---> |
|
|
|
|
|
<M> node-mozilla-iot-gateway |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
### Prepare the device |
|
|
|
|
|
|
|
|
|
|
|
We need to auto mount the USB flash drive in order for the gateway to start at |
|
|
|
|
|
boot. To do so, open a console on your embedded device and create a /etc/fstab |
|
|
|
|
|
file with the following contents. This assumes your USB flash drive is |
|
|
|
|
|
/dev/sda1: |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
/dev/sda1 /opt ext4 rw,relatime,data=ordered 0 1 |
|
|
|
|
|
/opt/root /root none defaults,bind 0 0 |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Add "mount -a" to the end of the "boot" function in /etc/init.d/boot |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
boot() { |
|
|
|
|
|
. |
|
|
|
|
|
. |
|
|
|
|
|
. |
|
|
|
|
|
/bin/config_generate |
|
|
|
|
|
uci_apply_defaults |
|
|
|
|
|
|
|
|
|
|
|
# temporary hack until configd exists |
|
|
|
|
|
/sbin/reload_config |
|
|
|
|
|
|
|
|
|
|
|
# Added by us |
|
|
|
|
|
mount -a |
|
|
|
|
|
} |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
### Install Things Gateway package |
|
|
|
|
|
|
|
|
|
|
|
After successfully mounting the USB drive, transfer the .ipk file from your |
|
|
|
|
|
local machine to the device and install it. Note that your package version |
|
|
|
|
|
might defer. Also note that location of .ipk file depends on the selected |
|
|
|
|
|
target, but it will be within ./bin/packages directory. We need to use |
|
|
|
|
|
"--force-space" or else opkg might complain about insufficient space. |
|
|
|
|
|
|
|
|
|
|
|
On your local machine: |
|
|
|
|
|
``` |
|
|
|
|
|
cd bin/packages/arm_cortex-a9_vfpv3/packages/ |
|
|
|
|
|
scp node-mozilla-iot-gateway_0.6.0-1_arm_cortex-a9_vfpv3.ipk root@192.168.1.1:/tmp |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
On the device: |
|
|
|
|
|
``` |
|
|
|
|
|
opkg --force-space install /tmp/node-mozilla-iot-gateway_0.6.0-1_arm_cortex-a9_vfpv3.ipk |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
Things Gateway should now start at every boot. |