Abusing phones to make the internet of things - JSConf EU 2014
1. abusing phones
to make the internet of things
Jan Jongboom
JSConf EU 2014
2. @janjongboom
Jan, live in Amsterdam. Work for Telenor, LAAARGE telco. They pay me to work on Firefox OS.
3. @janjongboom
Jan, live in Amsterdam. Work for Telenor, LAAARGE telco. They pay me to work on Firefox OS.
4. Let me start w/ confession... Before this talk I never owned a screwdriver. That’s a dangerous road when doing a hardware talk.
5. First screwdriver ever!
Let me start w/ confession... Before this talk I never owned a screwdriver. That’s a dangerous road when doing a hardware talk.
6. Maker movement is
EVERYWHERE
(Kickstarter, spaces, fairs, Wired)
These days hardware is totally coming back. Maker movement is everywhere. Can buy all stuff on Kickstarter, iot, etc. Even on
cover of Wired.
7. Reason: Arduino & Raspberry boards that can connect ordinary stuff. Amazing for building new stuff. Phone sensors can be
attached, low cost because huge volume.
8. Now one big problem for people that hardware-challenged like me. I don’t wanna do stuff like this, but still want to make things.
9. € 34,99
Also: stuff is expensive. Get a TFT display for a Rasperry Pi for 35 euro
11. So let’s make some cool shit. This is the Geeksphone Peak. It just has normal phone features. Compared to 25$ it has 1 camera
more & 3G instead of 2g. It can run Firefox OS that’s nice.
12. Bluetooth, WiFi, 3G,
2 Cameras, GPS,
qHD touch screen
So let’s make some cool shit. This is the Geeksphone Peak. It just has normal phone features. Compared to 25$ it has 1 camera
more & 3G instead of 2g. It can run Firefox OS that’s nice.
13. Bluetooth, WiFi, 3G,
2 Cameras, GPS,
qHD touch screen
So let’s make some cool shit. This is the Geeksphone Peak. It just has normal phone features. Compared to 25$ it has 1 camera
more & 3G instead of 2g. It can run Firefox OS that’s nice.
14. From code perspective it looks like this: kernel, Gecko, UI. We don’t need a UI for IoT things. So let’s strip it off. What do we have:
phone chipset + JS bindings to everything (OMG AWESOME)
15. Linux
Kernel
From code perspective it looks like this: kernel, Gecko, UI. We don’t need a UI for IoT things. So let’s strip it off. What do we have:
phone chipset + JS bindings to everything (OMG AWESOME)
16. Linux
Kernel
Gecko
From code perspective it looks like this: kernel, Gecko, UI. We don’t need a UI for IoT things. So let’s strip it off. What do we have:
phone chipset + JS bindings to everything (OMG AWESOME)
17. Linux
Kernel
Gecko HTML5
UI
From code perspective it looks like this: kernel, Gecko, UI. We don’t need a UI for IoT things. So let’s strip it off. What do we have:
phone chipset + JS bindings to everything (OMG AWESOME)
18. Linux
Kernel
Gecko HTML5
UI
Has all phone APIs in JS
From code perspective it looks like this: kernel, Gecko, UI. We don’t need a UI for IoT things. So let’s strip it off. What do we have:
phone chipset + JS bindings to everything (OMG AWESOME)
19. Linux
Kernel
Gecko
Has all phone APIs in JS
From code perspective it looks like this: kernel, Gecko, UI. We don’t need a UI for IoT things. So let’s strip it off. What do we have:
phone chipset + JS bindings to everything (OMG AWESOME)
41. So now we have super cool system on a chip 3/4 of a creditcard.
42. Linux
Kernel
Gecko
Has all phone APIs in JS
Now we can run cooler shit on top of it. As I have a big ego I called it JanOS
43. Linux
Kernel
Gecko JanOS
Has all phone APIs in JS
Now we can run cooler shit on top of it. As I have a big ego I called it JanOS
44. Linux
Kernel
Gecko JanOS
Has all phone APIs in JS
Now we can run cooler shit on top of it. As I have a big ego I called it JanOS
45. JanOS
Alternative to Firefox OS
Some batteries included
Need rooted Firefox OS phone
with ADB enabled
So it runs on any Firefox OS enabled phone. It comes with some batteries, like autoconnecting 3G, APN detection, Wifi and
camera.
46. Booting / !ashing
$ make reset-phone && adb logcat
Keep ur casing intact, don’t need to press battery
47. 1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta name="viewport" content="width=device-5 initial-scale=1">
6 <meta charset="utf-8">
7
8 <script src="js/bootstrap.js"></script>
9 <script defer src="js/camera.js"></script>
10 <script defer src="js/security_cam.js"></script>
11 <script defer src="js/doorbell.js"></script>
12 <script defer src="js/bluetooth.js"></script>
13 <script defer src="js/tracker.js"></script>
14 </head>
16 <body>
17 <h1>OMG WELCOME TO JANOS 1.0!</h1>
18 </body>
19 </html>
So when we start Gecko we boot it into a webpage. Easy easy easy
49. Security camera
Every 5 seconds take photo
Save to storage (4GB!) or SD
Sync with cloud
So let’s look at some cool ways of using this thing. We can make a security cam, easy easy.
50. Taking picture to storage
1 window.camera.takePicture('front').then(function(blob) {
2 var storage = navigator.getDeviceStorage('pictures');
3 var req = storage.addNamed(blob,
'myawesomepicture.jpg');
4 req.onsuccess = function() {
5 console.log('Saved on internal storage!');
6 };
7 });
51. Taking picture to storage
1 window.camera.takePicture('front').then(function(blob) {
2 var storage = navigator.getDeviceStorage('pictures');
3 var req = storage.addNamed(blob,
'myawesomepicture.jpg');
4 req.onsuccess = function() {
5 console.log('Saved on internal storage!');
6 };
7 });
52. Taking picture to storage
1 window.camera.takePicture('front').then(function(blob) {
2 var storage = navigator.getDeviceStorage('pictures');
3 var req = storage.addNamed(blob,
'myawesomepicture.jpg');
4 req.onsuccess = function() {
5 console.log('Saved on internal storage!');
6 };
7 });
53. Taking picture to storage
1 window.camera.takePicture('front').then(function(blob) {
2 var storage = navigator.getDeviceStorage('pictures');
3 var req = storage.addNamed(blob,
'myawesomepicture.jpg');
4 req.onsuccess = function() {
5 console.log('Saved on internal storage!');
6 };
7 });
54. Doorbell
Proximity sensor
Ring over bluetooth
Live video stream
Or a doorbell over bluetooth. That’s rad.
55. Bluetooth doorbell
1 enableBluetoothAudio('00:0C:8A:75:EF:30').then(function() {
2 window.onuserproximity = function(e) {
3 if (e.near) {
4 var audio = new Audio('/sounds/doorbell.ogg');
5 audio.play();
6 }
7 };
8 });
Pair it, play a soud when user is close to proximity. Truly wireless.
56. Bluetooth doorbell
1 enableBluetoothAudio('00:0C:8A:75:EF:30').then(function() {
2 window.onuserproximity = function(e) {
3 if (e.near) {
4 var audio = new Audio('/sounds/doorbell.ogg');
5 audio.play();
6 }
7 };
8 });
Pair it, play a soud when user is close to proximity. Truly wireless.
57. Bluetooth doorbell
1 enableBluetoothAudio('00:0C:8A:75:EF:30').then(function() {
2 window.onuserproximity = function(e) {
3 if (e.near) {
4 var audio = new Audio('/sounds/doorbell.ogg');
5 audio.play();
6 }
7 };
8 });
Pair it, play a soud when user is close to proximity. Truly wireless.
58. Bluetooth doorbell
1 enableBluetoothAudio('00:0C:8A:75:EF:30').then(function() {
2 window.onuserproximity = function(e) {
3 if (e.near) {
4 var audio = new Audio('/sounds/doorbell.ogg');
5 audio.play();
6 }
7 };
8 });
Pair it, play a soud when user is close to proximity. Truly wireless.
59. Another real life usecase. This is Brian, as you can see Brian is quite the wild boy.
60. Brian
Another real life usecase. This is Brian, as you can see Brian is quite the wild boy.
61. Brian has this tendency to get lost VERY often. In Warsaw he had to sleep on a bench outside because he couldn’t find the
apartment. He also never has any power in his phone. Solution: the BrianTracker. No screen, so low battery consumption.
62. Brian has this tendency to get lost VERY often. In Warsaw he had to sleep on a bench outside because he couldn’t find the
apartment. He also never has any power in his phone. Solution: the BrianTracker. No screen, so low battery consumption.
63. BrianTracker™
2G connection
Connected to push server
Geolocation on request
Brian has this tendency to get lost VERY often. In Warsaw he had to sleep on a bench outside because he couldn’t find the
apartment. He also never has any power in his phone. Solution: the BrianTracker. No screen, so low battery consumption.
64. And I can press a button and track him down, just from this small device I put in his coat.
66. Get hacking
Alright, this is cool and low budget, but START HACKING. Only way to really feel the powerz of hardware. Write your own scripts
and make stuff. Yay. ZTE Open C is 69$ and can be rooted.
67. Get hacking
Grab a rootable FxOS phone
Crack it open
Write your own scripts
PROFIT!
Alright, this is cool and low budget, but START HACKING. Only way to really feel the powerz of hardware. Write your own scripts
and make stuff. Yay. ZTE Open C is 69$ and can be rooted.