Project

General

Profile

Users Guide » History » Version 55

Hammel, 29 Sep 2019 17:47

1 10 Hammel
h1. Ironman Users Guide
2 1 Hammel
3 7 Hammel
table{border-collapse;width:100%}.
4 8 Hammel
|={font-size:140%;margin-bottom:15px;background-color:#fdd}. This document is under development and is likely not accurate at this time. |
5 7 Hammel
6 2 Hammel
{{>toc}}
7
8 34 Hammel
In this document the term _host system_ refers to a Linux desktop or laptop that will be used to download and install software onto an SD card.
9 1 Hammel
10 10 Hammel
h2. Overview
11
12 17 Hammel
_*Ironman*_ is a home automation project based on the PiBox build system.  It supports a Nest-like monitor for controlling Arduino based sensors, cameras and remote voice control.
13 1 Hammel
14 43 Hammel
table{align=center}.
15 42 Hammel
|!{width:640px}http://redmine.graphics-muse.org/attachments/download/114!|
16 1 Hammel
|={font-size:120%;margin-bottom:15px;background-color:#dff}. *Design Intent of the Ironman Project* |
17 43 Hammel
|=. Mark I release is in progress.  Mark II and Mark III are future development plans. |
18 1 Hammel
19 17 Hammel
_*Ironman*_ consists of the following components.
20 12 Hammel
21
| *Monitor* | The Nest-like control hub based on a Raspberry Pi 2/3 and the official 7" touchscreen display |
22
| *Sensors* | Arduino based devices, such as door alarms and cameras, running code based on a sensor and camera templates for pairing and secure communication with the Monitor |
23
| *Jarvis*  | A Java application that supports voice control of Monitor managed devices |
24
| *Controllers* | Network enabled control of Monitor managed devices |
25
26 1 Hammel
h3. Security
27
28 17 Hammel
_*Ironman*_ supports AES encrypted communication with IoT sensors and Jarvis interfaces.
29 12 Hammel
30
h3. What it is
31
32 17 Hammel
_*Ironman*_ is a do-it-yourself system, where you buy the parts and assemble them as described, modifying the provided code to suit your needs and handling flashing and maintenence.  _*Ironman*_ is designed to allow you to build your own home automation system where you specify the devices you want to control and how you want to control them.  
33 12 Hammel
34
h3. What it is not
35
36 17 Hammel
_*Ironman*_ is not a product.  It is not intended for anyone other than Makers (aka DIY'ers) who like to tinker and see not just how to assemble things but why they actually work.
37 12 Hammel
38 17 Hammel
While the Users Guide is intended to bring up a currently working version of _*Ironman*_ with limited sensor and camera support, if you aren't prepared to deal with writing code or flashing devices and dealing with electrical circuits then _*Ironman*_ is not for you.
39 10 Hammel
40 1 Hammel
h2. The Ironman Monitor
41 3 Hammel
42 17 Hammel
The _*Ironman*_ Monitor runs on a Raspberry Pi 2 or 3 and provides a central hub for management of home automation devices.  It uses a 7" touch screen display and a mechanical switch to manage pairing with IoT devices and Jarvis interfaces.
43 3 Hammel
44
h3. Installation Prerequisites
45 1 Hammel
46 11 Hammel
* A "Raspberry Pi 2 or 3":https://www.adafruit.com/product/3055
47
* The official "Raspberry Pi 7inch touchscreen display":https://www.sparkfun.com/products/13733
48
* The Pi 2/3 requires a "V / 2A power supply":https://www.adafruit.com/product/1994.  For best results, use a power supply rated to at least 5.25V to avoid under voltage conditions.  For ease of use the power supply cable should include an "on/off switch":https://www.adafruit.com/product/2379.
49 27 Hammel
* A keyboard is required for initial installation.  A "wireless keyboard":https://www.adafruit.com/product/922 should work as will a wired keyboard.  The keyboard will not be needed for normal operation but can be helpful in debugging.
50 3 Hammel
* The Pi 2/3 requires a microSD card that is at least 4GB.  A mechanism for using the SD card on your host system is needed, such as an SD card USB adapter or an SD port on your laptop.
51 32 Hammel
* A mechanical switch, such as a "SPDT":https://www.electronicshub.org/switches/#Single_Pole_Double_Throw_Switch_SPDT, should be connected to the Pi GPIOs to allow for pairing the Monitor with IoT Sensors and Jarvis interfaces.  The ASCII diagram below describes the setup. The LED is off in normal mode, lit in Config Mode, and off in Pair Mode until something tries to pair with the Pi which then turns on the LED for 3 seconds. Config and Pair mode operations ared discussed in later sections.  A Fritzing Diagram (attachment:IronmanMonitorSwitch.fzz) is available for this hardware component.
52 30 Hammel
!>{width:300px}IronmanMonitorSwitchBreadboard.png(Ironman Monitor Switch)!
53 1 Hammel
<pre>
54 16 Hammel
                      ___
55
   Config/Pair Mode  |---|  Normal Mode
56
                   --------- 
57
                  |         |
58
                   --------- 
59
connector pins -->  |  |  |  
60
                    |  |   ------ Not connected
61
                    |  |
62
                    |  ----330 Ohm R-----
63
                    |  |                |
64
                    |  |  +-----LED------
65
                    |  |  |
66
          RPi pin   7  9  13     
67
         RPi GPIO   4  G  27
68 6 Hammel
</pre>
69 5 Hammel
70 27 Hammel
* You will need to have sudo access for your Linux user id.
71 16 Hammel
72 1 Hammel
h3. Generating the SD Card for the Pi
73 3 Hammel
74 1 Hammel
* Download the RPi 2 Development Platform 
75 4 Hammel
** _wget <url>_
76
** Unpack the archive to a directory called *image*.
77 17 Hammel
* Download the _*Ironman*_ Package Collection
78 4 Hammel
** _wget <url>_
79 1 Hammel
** Unpack the archive to a directory called *package*.
80 18 Hammel
* In a terminal window run: _dmesg -w_
81
* Insert the microSD card and note the device name displayed for the newly added card as displayed in the _dmesg -w_ terminal window.  It should be something like /dev/sdb or /dev/sde.
82
* Kill the _dmesg -w_ command with Ctrl-C.
83 4 Hammel
84
From the *image* directory
85 1 Hammel
* Format the SD card
86
** _sudo ./mksd.sh -d <device name>_
87 18 Hammel
** where <device name> is the name you noted from the output of _dmesg -w_.
88 3 Hammel
* Mount the boot partition from the sd card: 
89 4 Hammel
** _sudo mkdir -p /mnt/boot_
90
** _sudo mount <device name>1 /mnt/boot_
91 18 Hammel
** where <device name> is the name you noted from the output of _dmesg -w_.
92 4 Hammel
* Install the Development Platform to the SD card
93
** _sudo ./mkinstall.sh -b /mnt/boot -d <device name>2_ 
94 18 Hammel
** where <device name> is the name you noted from the output of _dmesg -w_.
95 3 Hammel
96 4 Hammel
From the *package* directory
97 3 Hammel
* Mount the root partition from the sd card: 
98 4 Hammel
** _sudo mkdir -p /mnt/root_
99
** _sudo mount <device name>1 /mnt/root_
100 17 Hammel
* Copy the _*Ironman*_ Package Collection files to /root of the root partition on the SD card
101 4 Hammel
** _sudo cp *.opk /mnt/root/root_
102 3 Hammel
103
Make sure all writes to the SD card have completed
104 4 Hammel
* _sync;sync;sync_
105 3 Hammel
106
Unmount the SD card partitions
107 4 Hammel
* _sudo umount /mnt/boot_
108
* _sudo umount /mnt/root_
109 3 Hammel
110 4 Hammel
Remove the SD card from the host system and insert it into the Raspberry Pi 2.
111 1 Hammel
112
h3. First time boot
113
114 26 Hammel
Power on the Monitor and wait for it to complete installation.  During this time the display may be upside down.  Once initial installation is complete the display will be right side up.
115 22 Hammel
116
Once the display shows two xterm windows it is ready to complete installation.  Type the following command to install the _*Ironman*_ package collection.
117
118
  opkg install *.opk
119
120
Wait for this command to complete, then reboot the system either by power it off and back on or by typing the command 
121
122
  reboot
123
124 44 Hammel
The Monitor is now fully installed and ready for use.  At this point the keyboard can be removed though you may want to leave it connected for debugging purposes.
125 22 Hammel
126
h3. First time configuration
127
128 33 Hammel
!>{width:300px}ironman-config-ui.png(Ironman Config UI)!
129 24 Hammel
130 22 Hammel
Turn the power off and set the Mode switch to Config/Pair, then power the Monitor back on.  The LED should light indicating the Monitor is ready to be configured.
131
132
Use a smartphone or laptop with wifi to connect to the "ironman" SSID.  The default password is _ironman1_.  Then use a browser to connect to the Ironman web UI at 
133
134
  http://192.168.36.1:1337
135
136 25 Hammel
The display should be as shown in the adjacent photo.  There are two network domains to configure, as described in the following table.
137
138
|_. Domain |_. Description |
139
| Internet Connection | This is how the Monitor will connect to your home network. |
140
| Sensors Network | This is how the Monitor will communicate with your IoT devices. |
141 22 Hammel
142 36 Hammel
After both networks are configured, power off the Monitor and set the Mode switch to Normal, then power the Monitor on.  The Monitor is now ready to use with IoT sensors, Jarvis and controllers.
143
144 1 Hammel
h3. Network configuration
145
146 34 Hammel
The Monitor's hardware supports WiFi B/G/N networks.  However, in order to use the Monitor as both a WiFi client on the local
147
network and as an Access Point for IoT devices, only G networks are supported by the Ironman software.
148
149
h4. Internet Connection
150
151
The Internet Connection domain configures the Monitor to connect to your local network.  
152
153
|_. Field |_. Description |
154
|Location |Unique name for this monitor, such as Bedroom or Office.  This name is used to identify monitors by name via commands from Jarvis or other remote controllers|
155
|SSID |Network name configured on your router for your local WiFi network. |
156
|Security | Type of security used on your router. Only WPA2 Personal and WPA2 Enterprise are currently supported. |
157
|Password | Your router's password, specifically for the SSID entered previously. |
158
159
The *Show Password* button will display the password typed in the Password field.  By default this button is not enabled, causing the Password field to be hidden using asterisks for each character.
160
161
h4. Sensor Network
162
163
The Sensor Network domain is used to configure the Monitor's private network used with IoT devices.  Data on this network is not routed to the Internet Connection and data from the Internet Connection domain are not routed to the Sensor Network.
164
165
|_. Field |_. Description |
166
|SSID |Network name for this private WiFi network. This name will be hidden on Wifi scans.|
167
|Channel | Channel to use.  Select a channel that has low use in your neighborhood.  Only a subset of channels on G networks are available.  This will be addressed in future releases. |
168
|Password | Password IoT devices should use to gain access to the specified SSID. |
169
|Static IP | An IP address to give the Monitor as it acts as an Access Point. This should be a Class C subnet for the network, which limits the number of IoT devices that can be managed by a single Monitor to 254. |
170
171
The *Show Password* button will display the password typed in the Password field.  By default this button is not enabled, causing the Password field to be hidden using asterisks for each character.
172
173 38 Hammel
h2. IoT Sensor
174 1 Hammel
175 38 Hammel
h3. Sensor Types
176
177
There is currently only one sensor type:  imlightsw (light switch).  
178
179 46 Hammel
The sensor template GIT repository, which is the imlightsw repo, is intended to be used to design additional sensor types, such as door and window alarms, window shade controllers, environment sensors and so forth.
180 38 Hammel
181
h4. Light Switch
182 47 Hammel
!>{width:300px}imlightsw.png(Ironman Light Switch)!
183 38 Hammel
184 50 Hammel
This prototype light switch (attachment:imlightsw-with-relay-2.fzz) uses a relay to power an LED on and off.  The breadboard power supply can be replaced with an "HLK-PM01":http://www.hlktech.net/product_detail.php?ProId=54 and an "LM3671 5V to 3.3v buck converter":https://www.adafruit.com/product/2745 to power the board from mains (110v).
185 38 Hammel
186 1 Hammel
The FTDI connection is used to connect and "FTDI Basic board":https://www.sparkfun.com/products/9873 so that a the output from the ESP-01 can be viewed in a terminal program.
187 51 Hammel
188
The ESP-01 has a Blue LED that is used to provide visual information using blink patterns.
189
190
h5. Config Button
191
192
This button has multiple uses, depending on where it is used.  
193
194
_AP Config Mode_
195
196 55 Hammel
AP Config Mode means the device is running as an WiFi Access Point, allowing you to connect to it via a web browser to configure the device for use on a Monitor's Sensor network.
197 51 Hammel
198
* AP Config mode is disabled by default, that is, when the Config Button is in the off position.
199 55 Hammel
* If Config Button is ON at boot, imlightsw enters AP config mode.  In this mode the LED will blink twice and then stop.  Once the device is connected to a Monitor's Sensor network it will blink 4 times.
200 51 Hammel
* After configuration is complete, button must be set OFF and device power cycled.
201
202
_Pair Mode_
203
204
Pair Mode is used to pair the imlightsw device with an Ironman Monitor.  Pairing involves the exchange of secret keys that will be used to encrypt messages between the Monitor and the imlightsw device.
205
206
* The Config Button is OFF at boot.
207
* Later the Config Button is turned on and imlightsw enters PAIR mode.  In this mode the blue LED stays on.
208 1 Hammel
* After the device has paired with a Monitor the blue LED blinks.
209 51 Hammel
* The Config Button must be turned off for normal operation.
210 55 Hammel
211 51 Hammel
212
h5. Blue LED Blink Patterns
213
214
A _blink_ implies the LED turns on and then off.
215
216
|_. LED State |_. Blink Speed |_. Blink Count |_. Device Mode |
217
|Blink        | 1/sec       | 2             | Entered AP Config Mode |
218
|Blink        | 1/sec       | 4             | Device is connected to monitor |
219
|Blink        | 1/.125 sec  | 5             | Device failed to connect to monitor |
220
|Solid On     | N/A         | N/A           | Entered Pair Mode |
221
|Blink        | 2/.150 sec then 1/.200 sec | continuous             | Waiting to Pair with Monitor|
222
|Blink        | 1/.100 sec  | 3             | Not currently paired with Monitor|
223
224
h5. Reset Button
225
226
The Reset Button is used to return the imlightsw to it's initial state, prior to configuration and pairing.  If the device is reset it will need to be configured to use the network again as well as paired with an Ironman Monitor before it can be managed.
227
228
* The Reset Button is ON at boot.
229
* The device removes all configuration from itself.
230
* The Reset Button must be turned off, then the device can be rebooted and reconfigured.
231
232
table{border-collapse;width:100%}.
233
|={font-size:120%;margin-bottom:15px;background-color:#fdd}.  The Reset Button is not connected in code currently due to the limit on GPIO pins in the ESP-01.  To fully reset the ESP-01 you must compile the code with RESET=1, flash and run the code, then recompile with RESET=0 (or not specified on the command line) and flash again. |
234 49 Hammel
235 38 Hammel
h3. Flashing the firmware
236 52 Hammel
!>{width:300px}imlightsw-flasher.png(Ironman Light Switch Flasher)!
237 38 Hammel
238 52 Hammel
This prototype light switch flasher (attachment:imlightsw-flasher.fzz) is used to program the ESP-01.  A separate flasher circuit like this is required due to the limited number of GPIO pins on the ESP-01.
239 38 Hammel
240 53 Hammel
The "FTDI Basic board":https://www.sparkfun.com/products/9873 is required to connect the ESP-01 to a computer over a USB port.  On Linux, the port will show up as /dev/ttyUSB0 or similar.  
241
242
table{border-collapse;width:100%}.
243
|={font-size:120%;margin-bottom:15px;background-color:#fdd}.  TBD - instructions for flashing |
244
245 38 Hammel
h3. Power On
246
247 37 Hammel
An IoT sensors must be configured to operate on the same network as the Monitor's Sensor Network.  Once this has been done the IoT sensor and the Monitor can be paired.  An IoT device can only be paired with a single Monitor.
248 14 Hammel
249
h4. Configuring an IoT Device Network
250
251
* Set the Mode button to Config. 
252 1 Hammel
* Power on the IoT device.
253
* TBD
254
255 38 Hammel
h3. Pairing with a Monitor
256 14 Hammel
257 38 Hammel
* With the Monitor running, set the Monitor Mode switch to Pair.
258 14 Hammel
* Power on the IoT Sensor and wait for it to pair with the Monitor.  When it's done, the LED will light for 3 seconds.  
259
* Disable the Mode switch on the Monitor.
260
261 9 Hammel
table{border-collapse;width:100%}.
262
|={font-size:140%;margin-bottom:15px;background-color:#fdd}. *WARNING!* |
263 1 Hammel
|={font-size:120%;margin-bottom:15px;background-color:#fdd}.  Leaving the Mode switch turned to Pair will allow random devices to attempt to pair with the Monitor.  This is a security risk.  The Mode switch should only be set to Pair long enough to pair with an IoT device. |
264
265
h2. Jarvis
266
267
h3. Prerequisites
268
269
h3. Pairing with a Monitor
270 38 Hammel
271
* With the Monitor running, set the Monitor Mode switch to Pair.
272
* TBD
273 1 Hammel
274
h3. Supported Commands
275
276 35 Hammel
h2. Addendums
277
278 40 Hammel
h3. Ironman Packages
279 35 Hammel
280 40 Hammel
|_. Package |_. Repository |_.Contents |_. Description |
281
|imcore |monitor | |Package that updates a PiBox Development Platform for use with Ironman.  Includes network configuration updates and other config files. |
282
|imwww |www | |Contains two web servers |
283
| ||imwww |Provides network configuration interface for Monitor |
284
| ||imrest |Provides IoT/Jarvis REST API.  Updates /etc/ironman directories with registrations.|
285
|imgpio |gpio | |Command line tool for querying GPIO pins using syfs interface. |
286
|launcher |launcher | |Ironman specific launcher that adds clock interface to front panel. |
287
|pisensor |pisensor | |Provides UI for managing sensors.  Uses inotify to watch for changes to /etc/ironman/iot directory. |
288
|picam |picam | |Generic console camera interface (same as PiBox media systems) |
289
|Misc |appmgr, piboxd, omxplayer, pmsui, psplash, mjpg-streamer| |Same packages as in PiBox media system, unmodified|
290 1 Hammel
291
h3. Source Code Repositories
292
293
* PiBox
294 39 Hammel
** "Development Platform":https://gitlab.com/pibox/pibox
295
** "appmgr":https://gitlab.com/pibox/appmgr
296
** "mjpg-streamer":https://gitlab.com/pibox/mjpg-streamer
297
** "omxplayer":https://gitlab.com/pibox/omxplayer
298
** "piboxd":https://gitlab.com/pibox/piboxd
299
** "picam":https://gitlab.com/pibox/picam
300
** "pmsui":https://gitlab.com/pibox/pmsui
301
** "psplash":https://gitlab.com/pibox/psplash
302 1 Hammel
* Ironman
303 39 Hammel
** "gpio":https://gitlab.com/xironman/gpio
304
** "launcher":https://gitlab.com/xironman/launcher
305
** "monitor":https://gitlab.com/xironman/monitor
306
** "pisensor":https://gitlab.com/xironman/sensors
307
** "www":https://gitlab.com/xironman/www
308
** "meta build":https://gitlab.com/xironman/meta
309 1 Hammel
* Arduino
310 39 Hammel
** "Sensor Template (imlightsw)":https://gitlab.com/xarduino/lightsw
311
312 1 Hammel
h3. Fritzing Models
313
314 54 Hammel
* ESP-01 Flasher: attachment:imlightsw-flasher.fzz
315
* Light Switch: attachment:imlightsw-with-relay-2.fzz
316
** "ESP8266":https://github.com/ydonnelly/ESP8266_fritzing
317
** "Keyes_SRly":https://github.com/rwaldron/fritzing-components
318
** "Breadboard Power Supply":https://github.com/AchimPieters/Fritzing-Custom-Parts/blob/master/YwRobot%20Breadboard%20Power%20Supply.fzpz
319
** "Hilink HLK-PM01":http://forum.fritzing.org/t/hlk-pm01-ac-dc-220v-to-5v/381
320 35 Hammel
* Monitor Switch: attachment:IronmanMonitorSwitch.fzz
321 54 Hammel
322 35 Hammel
323
h3. Networking Internals
324
325
<pre>
326
wlan0
327
328
* This interface is used for configuration of the Monitor.
329
* Configured on the 192.168.36.0 subnet.
330
** See /etc/network/dhcpd.conf.aponly
331
332
uap0
333
334
* This interface is used as an access point for IoT devices.
335
* Configured on the 192.168.3.0 subnet.
336
** See /etc/network/dhcpd.conf.uap and dhcpd.conf.uap.tmpl
337
** The template is used to change the base subnet through the web interface.
338
** The SSID is _ironman_.
339
</pre>
340
341
h3. Pair Button Usage
342
343
<pre>
344
Pair/Config button is GPIO 4 (RPi pin 7)
345
Pair/Config LED is GPIO 7 (RPi pin 13)
346
	LED should only be lit on boot if button is enabled (in Config mode).
347
		In this case, we're in Config Mode to configure the networks.
348
		The web server (imwww) is on SSID _ironman_ at 192.168.36.1:1337.
349
	LED is off on boot if button is disabled (in Pair Mode).
350
	If in Pair Mode
351
		Start hostapd for aponly
352
		Start dhcpd for aponly on wlan0
353
		Start imrest web service on port 8165 for IoT devices and Jarvis interfaces.
354
	If in Config Mode
355
		Start wpa_supplicant on wlan0
356
		Create uap0 device as virtual device on wlan0
357
		Start dhcpd on uap0
358
		Start hostapd on uap0
359
		Start imwww for network configuration of the Monitor.
360
</pre>
361
362
h3. Monitor IoT Directories
363
364
<pre>
365
/etc/ironman/iot		Registration directory for IoT devices
366 1 Hammel
/etc/ironman/jarvis		Registration directgory for Jarvis interfaces
367
</pre>
368 41 Hammel
369 45 Hammel
h2. Privileged Apps
370
371
Some applications must be privileged in order to perform their functions, such as the camera.  The terminal application is not privileged by default.  It can be made privileged with the following steps.
372
373
# Power down the Monitor.
374
# Remove the SD card and mount it into your laptop or desktop computer.
375
# Edit this file on the SD card:  /etc/appmgr.priv
376
# Add this line:  /usr/bin/xterm
377
# Save the file and unmount the SD card.
378
# Remove the SD card from the laptop or desktop.
379
# Replace the SD card in the Monitor.
380
# Power up the Monitor.
381
382
The terminal application will now have privileged access on the monitor.
383
384 41 Hammel
h2. File Attachments