0
Android as a Digital Signage platform
Barcelona Android User Group October 2013
Hello world
Clients
Orange
El Corte Inglés
Endesa
Sodexo
Ikea
Nespresso
Fira Barcelona
Ajuntament de Barcelona
ESADE
The P...
Hello world
Orestes Carracedo
8 years as a developer
4 years as an Android user
3,5 years at Focus On Emotions
Certified S...
What’s Digital Signage?
What’s Digital Signage?
What’s Digital Signage?
Challenge
Break out of the player app and you’ll
get a reward
● Try to guess the unlock gesture
● Try to guess the unlock ...
Start
Briefing
Make it on time
Code as less as possible
Be robust
Make use of existing OS tools
Make use of existing apps
Be fle...
System architecture
Apache Cordova
V
P
N
BusyBox
A
D
B
S
S
H
JavaScript player
SuperSU
scheduler
Prototype
http://vimeo.com/72032877
Quick ADB recap
$ adb devices
List of devices attached
4df144cb39376f2f device # Over USB
192.168.1.42:5555 device # Over ...
Quick ADB recap
Sending keys
$ adb shell input keyevent 3 # home
Starting activities
$ adb shell am start -n com.focusonem...
Features
Player
Cordova
Screen rotation
Read start URL
Provide OS access
JavaScript
Display content
Read content index file
Listen ...
Scheduler
Power management
$ reboot # (duh)
Screen state management
$ input keyevent 26 # power
$ input keyevent 82 # menu...
Restricted user access
● Kill UI process
● Custom launcher
AndroidManifest
<category android:name="android.intent.category...
Local configuration manager
Content Index file
Player configuration file
Configuration manager
Content player
Static IP address
https://play.google.com/store/apps/details?id=de.schaeuffelhut.android.openvpn.installer
https://play.go...
Remote shell
$ adb connect 192.168.1.42:5555
$ time adb connect 192.168.1.42:5555
unable to connect to 192.168.1.42:5555
r...
Screen capture
$ adb shell screencap /mnt/sdcard/focus/capture.png
$ adb pull /mnt/sdcard/focus/capture.png
$ ./capture.sh...
Wi-Fi management
$ echo "12345678" | wpa_passphrase "SSID"
# reading passphrase from stdin
network={
ssid="SSID"
#psk="123...
Content management
$ adb push /local/folder /remote/folder
PHP SFTP Wrapper
$ php load-device-content.php 300 7
Loading co...
Statistics & graphs
Statistics & graphs
Whisper database (updates to past data)
Carbon aggregation (Use an IP, not a hostname UDP is better th...
Platforming
1. Plug device in
2. Enable ADB over USB
3. Launch script
4. Enter ID
5. Done!
Check
● PING
● SFTP
● SSH
● ADB
Platforming
$ sftp root@192.168.1.42:mnt/sdcard/focus
bash: /usr/libexec/sftp-server: No such file or directory
$ sftp -s /system/xbin...
Ha ha!
Monitoring with Nagios
Monitoring with Nagios
$ php check-device-content.php 192.168.1.42
Up-to-date
$ php check-device-content.php 192.168.1.42
...
Monitoring with Nagios
<?xml version="1.0" encoding="UTF-8"?>
<nagios_status>
<hosts>
<host name="dev-001">
<status last_c...
Questions?
www.focusonemotions.com
dev@focusonemotions
Thank you!
Feedback
orestes.ca@gmail.com
Team
Juanra Posada
Orestes Carracedo
...
Android as a digital signage platform
Android as a digital signage platform
Upcoming SlideShare
Loading in...5
×

Android as a digital signage platform

1,633

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,633
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Android as a digital signage platform"

  1. 1. Android as a Digital Signage platform Barcelona Android User Group October 2013
  2. 2. Hello world Clients Orange El Corte Inglés Endesa Sodexo Ikea Nespresso Fira Barcelona Ajuntament de Barcelona ESADE The Phone House The company 20 people Digital Signage User Interactivity Projects Spain United Kingdom Germany Netherlands Finland www.focusonemotions.com @focusonemotions
  3. 3. Hello world Orestes Carracedo 8 years as a developer 4 years as an Android user 3,5 years at Focus On Emotions Certified SCRUM Master PHP 5.3 Zend Certified Engineer Read about me http://blog.orestes.io Follow me @orestesCA
  4. 4. What’s Digital Signage?
  5. 5. What’s Digital Signage?
  6. 6. What’s Digital Signage?
  7. 7. Challenge Break out of the player app and you’ll get a reward ● Try to guess the unlock gesture ● Try to guess the unlock code ● No buttons ● No fastboot
  8. 8. Start
  9. 9. Briefing Make it on time Code as less as possible Be robust Make use of existing OS tools Make use of existing apps Be flexible Create multiple decoupled tools that work together
  10. 10. System architecture Apache Cordova V P N BusyBox A D B S S H JavaScript player SuperSU scheduler
  11. 11. Prototype http://vimeo.com/72032877
  12. 12. Quick ADB recap $ adb devices List of devices attached 4df144cb39376f2f device # Over USB 192.168.1.42:5555 device # Over NET $ adb shell echo “Hello world” Hello world $ adb -d shell ls /mnt/sdcard $ adb -s 192.168.1.42:5555 shell ls /mnt/sdcard Enable ADB over Wi-Fi $ adb shell setprop service.adb.tcp.port 5555 $ adb shell stop adbd && start adbd # or you’ll be locked out $ adb connect 192.168.1.42:5555
  13. 13. Quick ADB recap Sending keys $ adb shell input keyevent 3 # home Starting activities $ adb shell am start -n com.focusonemotions.android.player./Wrapper Killing a process $ adb shell killall com.focusonemotions.android.player Installing apps $ adb install foe-player-v1.1.apk $ adb push foe-player-v1.1.apk /system/app Android Monitor <android-sdk>/tools/monitor http://developer.android.com/reference/android/view/KeyEvent.html
  14. 14. Features
  15. 15. Player Cordova Screen rotation Read start URL Provide OS access JavaScript Display content Read content index file Listen for gesture Ask for code Show config manager
  16. 16. Scheduler Power management $ reboot # (duh) Screen state management $ input keyevent 26 # power $ input keyevent 82 # menu Player state management $ killall com.focusonemotions.android.player $ am start -n com.[...].player/.Wrapper http://developer.android.com/reference/android/view/KeyEvent.html
  17. 17. Restricted user access ● Kill UI process ● Custom launcher AndroidManifest <category android:name="android.intent.category.HOME" /> /system/build.prop qemu.hw.mainkeys=1 ● Custom ROM http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/
  18. 18. Local configuration manager Content Index file Player configuration file Configuration manager Content player
  19. 19. Static IP address https://play.google.com/store/apps/details?id=de.schaeuffelhut.android.openvpn.installer https://play.google.com/store/apps/details?id=de.blinkt.openvpn $ openvpn --config /mnt/sdcard/focus/openvpn/conn.conf > /mnt/sdcard/focus/openvpn/run.log & $ cat /mnt/sdcard/focus/openvpn/conn.conf | grep resolv resolv-retry infinite
  20. 20. Remote shell $ adb connect 192.168.1.42:5555 $ time adb connect 192.168.1.42:5555 unable to connect to 192.168.1.42:5555 real 1m3.163s user 0m0.000s sys 0m0.020s . . $ time timeout 9s adb connect 192.168.1.42 real 0m9.003s user 0m0.000s sys 0m0.020s
  21. 21. Screen capture $ adb shell screencap /mnt/sdcard/focus/capture.png $ adb pull /mnt/sdcard/focus/capture.png $ ./capture.sh oratab-030-01 Getting screencap from oratab-030-01 ... done.
  22. 22. Wi-Fi management $ echo "12345678" | wpa_passphrase "SSID" # reading passphrase from stdin network={ ssid="SSID" #psk="12345678" psk=34b59e6b0182725d42460 [...] } $ wpa_passphrase "SSID" "12345678" # may malfunction $ wpa_passphrase "SSID" # may malfunction # reading passphrase from stdin Android Wi-fi/WPA settings /data/misc/wifi/wpa_supplicant.conf
  23. 23. Content management $ adb push /local/folder /remote/folder PHP SFTP Wrapper $ php load-device-content.php 300 7 Loading content … 50 % 20/40 KB 100 % 40/40 KB Done. /mnt/sdcard/focus + openvpn + player + scheduler + upload - content - october_2013 + media
  24. 24. Statistics & graphs
  25. 25. Statistics & graphs Whisper database (updates to past data) Carbon aggregation (Use an IP, not a hostname UDP is better than TCP, is off by default) Graphite for rendering $ /opt/graphite/bin/carbon-cache.py start --debug $ echo ‘value.received’ `date +%s` | nc -w 1 127.0.0.1 2003 StatsD/statsite as aggregator/proxy (v8 nodejs vs C) <?php StatsD::increment(‘com.focusonemotions.app.pushing’); http://graphite.readthedocs.org/en/latest/ https://github.com/etsy/statsd/ https://github.com/armon/statsite
  26. 26. Platforming
  27. 27. 1. Plug device in 2. Enable ADB over USB 3. Launch script 4. Enter ID 5. Done! Check ● PING ● SFTP ● SSH ● ADB Platforming
  28. 28. $ sftp root@192.168.1.42:mnt/sdcard/focus bash: /usr/libexec/sftp-server: No such file or directory $ sftp -s /system/xbin/sftp-server root@192.168.1.42:mnt/sdcard/focus sftp> # quick fix [adb] $ ln -s /system/xbin/sftp-server /usr/libexec/sftp-server Install SuperSU + settings Install BusyBox Install DropBearSSH Fix SFTP subsystem Install player Install scheduler Install OpenVPN certificates from ID Reboot Platforming http://www.chainfire.eu/projects/52/SuperSU/ https://play.google.com/store/apps/details?id=stericson.busybox https://github.com/yath/android_external_dropbear
  29. 29. Ha ha!
  30. 30. Monitoring with Nagios
  31. 31. Monitoring with Nagios $ php check-device-content.php 192.168.1.42 Up-to-date $ php check-device-content.php 192.168.1.42 Out of date http://nagios.sourceforge.net/docs/3_0/quickstart.html
  32. 32. Monitoring with Nagios <?xml version="1.0" encoding="UTF-8"?> <nagios_status> <hosts> <host name="dev-001"> <status last_change="2013-10-08T16:27:37+02:00">0</status> <connectivity last_change="2013-10-08T16:27:37+02:00">0</connectivity> <content last_change="2013-10-08T16:27:37+02:00">0</content> <sftp last_change="2013-10-08T16:27:37+02:00">0</sftp> </host> [...]
  33. 33. Questions?
  34. 34. www.focusonemotions.com dev@focusonemotions Thank you! Feedback orestes.ca@gmail.com Team Juanra Posada Orestes Carracedo Javier Morales Dimas López Raúl Jiménez Javier Domingo Gonzalo Rodríguez Project Manager Lead Developer Developers JavaScript Ninja Sistemas
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×