NexaHome - Presentation

Transcription

NexaHome - Presentation
Life Made Easy With Home Automation
For Me and a Smarter Planet
www.nexahome.se
2011-05-16
Vad är NexaHome?
 Programvara för styrning av fjärrströmbrytare.
 Kompatibla fabrikat: Nexa, Proove, Sartano, Waveman
www.nexa.se
www.jula.se
Vilken hårdvara behövs i datorn?
 USB ansluten radiosändare, 433.92 MHz.
www.telldus.se
www.kjell.com
Vad är fördelen med en datorlösning
jämfört med vanliga tidur i vägguttagen?
 Slipper gå runt och justera tiduren beroende på
årstidernas växlingar.
 Bekvämt med överskådlig central administration av
belysningsschemat.
 Brottsförebyggande:
 huset ser bebott ut
 kan koppla in webkameror och med hjälp av dessa
hålla koll på besökande
 Kunna sätta på motorvärmaren redan då man är påväg
hem efter jobbet och ska ut på en åktur med bilen.
Programfunktioner
1(2)
 Schemaläggning, på/av för enheter som har definierats med





hjälp av programvaran TelldusCenter™.
Kan köras under olika moder (Hemma, Party, Borta osv).
Slumpmässig justering av angivna tider.
Klockslag kan anges i förhållande till solens upp & nedgång.
Yttre sensorer kan användas för att bestämma när det är dags att
slå på/av enheter (temperatur, solinstrålning W/m²).
Möjligt att skapa sin egen hemsida med egendefinierad
navigering och valfri bakgrund samt klickbara bilder.
Programfunktioner
2(2)
 Manuell styrning via internet med hjälp av webläsare i dator
eller mobiltelefon (WAP/HTML, Android).
 Två applikationer på Android Market kopplar upp sig mot den
inbyggda webservern:
 NexaHome - Web Browser
 NexaHome - Big Brother
 TvGuide är ytterligare en applikation som kan använda sig av
NexaHome för att tända/släcka lampor. På så sätt kan man
uppmärksammas på att ett sevärt tv-program snart börjar.
http://skapandedata.se/tvguide/
Hur ser programmet ut när det
körs?
Default websida:
 WAP/HTML
Egendefinierad websida
Programutveckling pågår...
Android apps:
 Web Browser
 styr fjärrmottagare
 Big Brother
 närvarokontroll
FAQ (frequently Asked Questions)
1(2)
FAQ (frequently Asked Questions)
2(2)
Motorvärmarfunktion
1(3)
 Tanken med motorvärmarfunktionen är att man ska slippa fundera på
hur lång tid i förväg motorvärmaren ska slås på. Programmet använder
sig av yttertemperaturen samt en formel för att beräkna rätt tidpunkt.
 Användaren talar bara om när han har tänkt att åka iväg och hur länge
bilen ska hållas varm.
Motorvärmarfunktion
2(3)
Devices/Groups
Function
sensor -
Max HH
03
Max MM
00
Sensor Default
-5
ON Sensor Formula
< -20 # 02:00, < -15 # 01:30, < -10 # 01:20, < -5 # 01:10,
< 0 # 01:00, < 5 # 00:45, < 10 # 00:20, >= 10 # 00:00
Sensor Path
C:\apps\nexahome\weather_msn.bat
http://nexahome.se/weather_msn.bat
http://nexahome.se/WeatherDataMsn.class
http://nexahome.se/WeatherDataMsn.java
Motorvärmarfunktion
3(3)
Bor man i Stockholm så är weather_msn.bat som finns på programmets hemsida redan
färdig att användas.
Om man bor på någon annan ort så är det enklaste sättet att ta reda på just "din" parameter
att utföra följande:
1) klistra in parametern för Stockholm i din webläsare
http://vader.se.msn.com/local.aspx?wealocations=wc:SWXX0031&q=Stockholm
2) sök på websidan efter din egen ort
3) kopiera den uppdaterade länken från websidan
4) lägg in den nya parametern i bat filen (mellan dubbelfnuttarna)
Exempel, om man bor i Lund ska följande parameter användas:
http://vader.se.msn.com/local.aspx?wealocations=wc:19469&q=Lund%2c+Sk%c3%a5ne
Om inte programmet lyckas gå ut på Internet och hämta den aktuella temperaturen så
används ett fördefinierat temperaturvärde som användaren själv har angivit.
Man bör även ange en maximal inkopplingstid.
Under vilka operativsystem kan
NexaHome köras?
 Java applications are typically compiled to bytecode (class file)
that can run on any Java Virtual Machine (JVM) regardless of
computer architecture.
http://en.wikipedia.org/wiki/Java_(programming_language)
http://java.com
Installationsanvisning
http://nexahome.se/manual/
Teknikfrågor
 Vilka programpaket (lib) används förutom det som medföljer i
standard java, samt av vilken anledning:
 Java Native Access (JNA)
http://jna.java.net
 BeanShell - Lightweight Scripting for Java
http://www.beanshell.org
What is JNA?
 JNA provides Java programs easy access to native shared libraries (DLLs on Windows)
without writing anything but Java code—no JNI or native code is required. This
functionality is comparable to Windows' Platform/Invoke and Python's ctypes. Access is
dynamic at runtime without code generation.
 JNA allows you to call directly into native functions using natural Java method
invocation. The Java call looks just like it does in native code. Most calls require no
special handling or configuration; no boilerplate or generated code is required.
 The JNA library uses a small native library stub to dynamically invoke native code. The
developer uses a Java interface to describe functions and structures in the target native
library. This makes it quite easy to take advantage of native platform features without
incurring the high overhead of configuring and building JNI code for multiple platforms.
 While some attention is paid to performance, correctness and ease of use take priority.
 JNA includes a platform library with many native functions already mapped as well as a
set of utility interfaces that simplify native access.
import com.sun.jna.Library;
import com.sun.jna.Native;
public class JnaDemo {
public static String library = null;
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)Native.loadLibrary((library), CLibrary.class);
boolean devTurnOn(int intDeviceId);
boolean devTurnOff(int intDeviceId);
}
public static void main(String[] args) {
System.setProperty("jna.library.path", args[0]);
String dll = args[1];
if (dll.toLowerCase().endsWith(".dll")) {
dll = dll.substring(0, dll.length() - 4);
}
JnaDemo.library = dll;
boolean cmdOn = args[2].equalsIgnoreCase("-on");
int id = Integer.parseInt(args[3]);
boolean result = false;
if (cmdOn) {
System.out.print("Turning on device: ");
result = CLibrary.INSTANCE.devTurnOn(id);
} else {
System.out.print("Turning off device: ");
result = CLibrary.INSTANCE.devTurnOff(id);
}
System.out.println(id + " - " + (result ? "ok" : "failed"));
}
}
What is BeanShell?
 BeanShell is a small, free, embeddable Java source interpreter with object scripting
language features, written in Java. BeanShell dynamically executes standard Java syntax
and extends it with common scripting conveniences such as loose types, commands, and
method closures like those in Perl and JavaScript.
 You can use BeanShell interactively for Java experimentation and debugging as well as to
extend your applications in new ways. Scripting Java lends itself to a wide variety of
applications including rapid prototyping, user scripting extension, rules engines,
configuration, testing, dynamic deployment, embedded systems, and even Java
education.
 BeanShell is small and embeddable, so you can call BeanShell from your Java applications
to execute Java code dynamically at run-time or to provide extensibility in your
applications. Alternatively, you can use standalone BeanShell scripts to manipulate Java
applications; working with Java objects and APIs dynamically. Since BeanShell is written
in Java and runs in the same VM as your application, you can freely pass references to
"live" objects into scripts and return them as results.
 In short, BeanShell is dynamically interpreted Java, plus a scripting language and flexible
environment all rolled into one clean package.
usr = ”put userid here";
psw = ”put password here";
timeout = 4 * 60; // 4 minutes
addClassPath("C:/apps/nexahome/BshAddOn.jar"); // set location for the BshAddOn code
page = BshAddOn.fetchWebContent("https://mail.google.com/mail/feed/atom", usr, psw);
if (page != null && page.indexOf("<fullcount>") != -1) {
if (page.indexOf("<fullcount>0</fullcount>") != -1) {
echo("Sorry, no unread mail found...");
hideOutput(); // prevent output to be visible on console
if (deviceIsOn("5")) {
deviceOff("5");
}
} else {
echo("You've got mail!");
if (!deviceIsOn("5")) {
deviceOn("5");
} else {
timeout *= 3; // 12 minutes
}
}
} else {
echo("Unable to check the gmail account!");
}
startTimer("gmail", timeout);
Programutveckling
 Download the Android SDK
http://developer.android.com/sdk/index.html
 Android Development Tools is a plugin for the Eclipse IDE
http://developer.android.com/sdk/eclipse-adt.html
 Developing Android Applications, Workshop One
http://www.youtube.com/watch?v=m-C-QPGR2pM
 Learn how to develop for Android, Beyond HelloWorld
http://www.youtube.com/watch?v=rm-hNlTD1H0
Hur ser det ut på Android Market?
https://play.google.com
Vad kostar programmet?
 Gratis, dvs fritt nerladdningsbart från hemsidan!
http://nexahome.se
Extra slides...
 Ny hårdvara från Telldus
 Datoransluten nummerpresentatör
 Motion Detector
 TvGuide
Ny hårdvara, sommaren 2011
www.telldus.se
www.kjell.com
Produktjämförelse
TellStick
TellStick
Duo
TellStick
Net
Control almost any remote socket receiver



Control from anywhere in the world



Compatible with Android and Apple
smartphones



Schedule your appliances


Compatible with routers from Dovado



Compatible with any router

Receive signals
Works without a computer running

Possible to develop your own application





1(7)
Datoransluten nummerpresentatör
 Hårdvara:
 CallerID - NIM / Modem
 Display – Dator / Squeezebox / Roku SoundBridge
 Programvara:
 WhosCalling
 NexaHome
nim.se
http://www.conrad.se/?article=955662
www.hasselaar.nu/projects
2(7)
Datoransluten nummerpresentatör
 Squeezebox
http://en.wikipedia.org/wiki/Squeezebox_(network_music_player)
3(7)
Datoransluten nummerpresentatör
 Roku SoundBridge
http://en.wikipedia.org/wiki/SoundBridge
4(7)
Datoransluten nummerpresentatör
WhosCalling, lookup callers from the following sources:
 Looks up the number by searching web directories:
 hitta.se
 eniro.se
 Telemarketing - Uses missatsamtal.se to identify telemarketing calls
(which it can optionally block)
 File - Looks up phone numbers in a simple XML file
 Guessing (!) - For some numbers that originates from a company's
switchboard only the main switchboard number is listed in the
directories so if we don't get a match from Hitta or Eniro we'll keep
replacing digits in the phone number with zeroes from right to left
which often eventually yields the name of the company.
5(7)
Datoransluten nummerpresentatör
WhosCalling, plugins:
 TrayIconPlugin
 SqueezeboxPlugin
 RokuPlugin
 NexaHomePlugin
 Display caller ID information on a web page
 CallBlockerPlugin
 Uses a modem to automatically disconnect callers that have
been identified as telemarketing companies or configured
explicitly in the property file.
6(7)
Datoransluten nummerpresentatör
WhosCalling, nexahome.properties
enabled=true
# Where to store the caller ID information
fileName=C:/apps/nexahome/mywebserver/phone/data.html
# see http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html#SimpleDateFormat(java.lang.String) for details
dateFormat=EEE d HH:mm
messageLine=%TIMESTAMP% - %CALLER% %NUMBER% %BLOCKED%
# Welcome message
welcomeMsg=WhosCalling
7(7)
Datoransluten nummerpresentatör
NexaHome, C:/apps/nexahome/mywebserver/phone.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head><title>NexaHome - Life Made Easy With Home Automation</title>
<link rel="Shortcut Icon" href="http://hem.bredband.net/hekj/nexahome/favicon32x32.ico">
<meta http-equiv="refresh" content="300;#URL#?mypage=phone&psw=#PSW#">
</head>
<!-- dynamic="phone" url="file:///c:/apps/nexahome/mywebserver/phone/data.html" keep="60" -->
<body bgcolor="#ffffff" background="/nexahome/nexahome_bg.jpg">
<div style="position: absolute; top: 5px; left: 25px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="phone">
<input type=hidden name="return" value="phone">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=submit value="#TIMESTAMP#">
</form>
</div>
<div style="position: absolute; top: 5px; left: 195px;">
<form action="nexahome" method="get">
<input type=hidden name="mypage" value="#RETURN#">
<input type=hidden name="psw" value="#PSW#">
<input type=hidden name="rnd" value="#RND#">
<input type=submit value="Gå tillbaka">
</form>
</div>
<div style="position: absolute; top: 45px; left: 25px"><b>
#DYNAMIC#phone#
</b></div>
</body>
</html>
Motion Detector
 Principerna för hur man upptäcker rörelse i en video.
 Programutveckling pågår, ’Motion Detector’ funktioner kommer
att läggas in i NexaHome.