abusing phones to make the internet of things - jsconf eu 2014
DESCRIPTION
My talk from JSConf EU 2014 about abusing Firefox OS to make Internet of Things appliances.TRANSCRIPT
abusing phonesto make the internet of things
Jan JongboomJSConf EU 2014
@janjongboomJan, live in Amsterdam. Work for Telenor, LAAARGE telco. They pay me to work on Firefox OS.
@janjongboomJan, live in Amsterdam. Work for Telenor, LAAARGE telco. They pay me to work on Firefox OS.
Let me start w/ confession... Before this talk I never owned a screwdriver. That’s a dangerous road when doing a hardware talk.
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.
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.
Reason: Arduino & Raspberry boards that can connect ordinary stuff. Amazing for building new stuff. Phone sensors can be attached, low cost because huge volume.
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.
€ 34,99Also: stuff is expensive. Get a TFT display for a Rasperry Pi for 35 euro
€ 25,-
While you can get a FULL phone for 25?!
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.
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.
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.
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)
LinuxKernel
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)
LinuxKernel
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)
LinuxKernel
Gecko HTML5UI
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)
LinuxKernel
Gecko HTML5UI
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)
LinuxKernel
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)
That is awesome.
Only thing is that we still have a body around the phone. Let’s remove that.
Remove screws and open le phone.
We have SIM card, SD card, screen connector, back camera, flash, touchscreen connector
We have SIM card, SD card, screen connector, back camera, flash, touchscreen connector
We have SIM card, SD card, screen connector, back camera, flash, touchscreen connector
We have SIM card, SD card, screen connector, back camera, flash, touchscreen connector
We have SIM card, SD card, screen connector, back camera, flash, touchscreen connector
We have SIM card, SD card, screen connector, back camera, flash, touchscreen connector
We have SIM card, SD card, screen connector, back camera, flash, touchscreen connector
Camera can click it out. Have standard connectors. Very awesome
Camera can click it out. Have standard connectors. Very awesome
There is also this thing. It does radio communication. Also need it. I don’t what this is, I just ripped it off and it still works.
So we are left with this. Printboard, radio and camera.
I also wanted to reuse the touchscreen.
So i started fiddling with screwdriver as these things are glued together
Didnt end so well
So I figured just detach the touchscreen connector.
Didnt work out that well either.
Problem: no Wifi... These paper thingies are apparently antenna’s OMG
So some tape and all is well.
So now we have super cool system on a chip 3/4 of a creditcard.
LinuxKernel
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
LinuxKernel
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
LinuxKernel
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
JanOSAlternative 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.
Booting / !ashing
$ make reset-phone && adb logcatKeep ur casing intact, don’t need to press battery
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta name="viewport" content="width=device-width, user-scalable=no, 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
about:app-manager
We can now connect the app manager and execute JS and debug shit. Very cool.
Security cameraEvery 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.
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 });
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 });
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 });
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 });
DoorbellProximity sensor
Ring over bluetooth
Live video streamOr a doorbell over bluetooth. That’s rad.
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.
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.
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.
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.
Another real life usecase. This is Brian, as you can see Brian is quite the wild boy.
Brian
Another real life usecase. This is Brian, as you can see Brian is quite the wild boy.
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.
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.
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.
And I can press a button and track him down, just from this small device I put in his coat.
OK. DEMO TIME!!111
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.
Get hackingGrab 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.
Thank you!http://janjongboom.com
THANKS!