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.