EnglishSvenska

Windows Phone 7-gränssnitt och hemautomation

Inom programmering ska man som regel alltid välja den lösning som är enklast och utan onödig komplexitet. Kanske sa ingen det bättre än Albert Einstein: "Everything should be made as simple as possible, but no simpler". Jag gjorde nyligen om webb-gränssnittet för hemautomationen och försökte då använda mig av denna princip genom att ta många idéer från gränssnittet i Windows Phone 7 som är väldigt rent och minimalistiskt. Den hög med spaggetikod som jag hade tidigare blev snabbt riktigt vacker. Här är några skärmdumpar från det nya gränssnittet:

eventghost_webserver_optimization_3 eventghost_webserver_optimization_2

Och för att jämföra så såg den tidigare versionen ut såhär:

eventghost eventghost4

Vilken som är snyggast kan man givetvis argumentera om men jag lägger min röst på den översta.

Gå till Demo

Koden får du från https://bitbucket.org/sebnil/eventghost-web-gui/get/tip.zip.

Instruktioner för att sätta upp allt

Youtube-video:




Ny mycket renare version

eventghost_webserver_optimization_3

Tyckte att den tidigare versionen var för slö trots att jag gjort vad jag kunnat för att optimera koden. Gjorde ett försök med att slänga ut jQuery Mobile och då gick det genast mycket bättre. I den nya versionen har jag tagit inspiration från Windows Phone 7. Jag har dock skippat allt med Metro och kör bara på en svart bakgrund och knappar med vit ram. Jag tycker att det ser bättre ut när det är minimalistiskt men det viktigaste är endå att den nya versionen är sjukt mycket snabbare än den gamla.

Gå till Demo

Koden får du från https://bitbucket.org/sebnil/eventghost-web-gui/get/tip.zip.

Instruktioner för att sätta upp allt

Några förbättringar:

  1. Rensade bort all seg kod från jQuery Mobile. Less is more!
  2. Endast 4 http request per sidvisning. Toksnabba sidvisningar är resultatet.
  3. Ingen onödig javascript. Tog bort ganska mycket av min egen kod.
  4. Lättare html. jQuery Mobile gjorde många enkla saker svåra. I den nya versionen så borde en nybörjare inom html-programmering kunna lista ut hur man ska göra egna gränssnitt. Det är i alla fall min förhoppning.

Youtube-video:




Kan nu dammsuga när jag sitter på bussen

roomba_hacking_arduino_2Köpte nyligen en Arduino för att se vad den klarar av. Ett av de första projekten blev att plocka isär fjärrkontrollen till dammsugaren för att kunna styra den från datorn. I datorn har jag en webbserver som går att komma åt från mobiltelefon, tablet och det mesta som har en webbläsare. Läs mer om mitt projekt att fjärrstyra autonoma dammsugare.


Kontrollera Roomba från en webbplats med hjälp av Arduino

Vem har inte velat dammsuga när man inte är hemma? Den tekniken jag kommer använda är fulhack med att plocka isär fjärrkontrollen till Roomba och koppla in den på en Arduino UNO. För att styra Arduino från datorn via USB använder jag Messenger och låter Eventghost sköta all kommunikation med Serieport-pluginet.

Video:




Hur du gör

1. Skruva isär fjärrkontroll. Löd fast trådar på de knappar som du vill styra.
roomba_hacking_arduino_2

2. Jordad knapp betyder nedtryckt knapp. Jag kopplade ihop jord på Arduino och jord i fjärrkontrollen. Mellan utportarna på Arduino och knapparna satte jag transistorer. En 1:a (5 V) ut från Arduino sätter transistorn i till-läge. Transistorn sluter då mellan den sammankopplade jorden och knappen. Fjärrkontrollen kommer att uppfatta jord på en tryckknapp och luras att tro att det är en knapptryckning. [Uppdatering 2012-06-14] Skrev en förbättrad guide för hårdvara.
roomba_hacking_arduino_1

3. Ladda över kod. Allt är från Messenger till Arduino. Lägger upp en kopia här . Programmet jag kör är väldigt enkelt. Med serieporten skriver man vilken port man vill sätta hög exempelvis "w d 9 1" för write digital port 9 on.

4. Konfigurera Eventghost. Lägg till Serieport-plugin. Kommer inte gå igenom detta detaljerat men bilderna här nedan borde förklara tillräckligt:
serial_out_roomba_arduino
serial_out_roomba
serial_out_roomba_2

5. Förklarar inget om webbservern och gui heller eftersom jag gjort ett inlägg om det tidigare.

 

Taggad med: , ,

Roota Google Galaxy Nexus

Galexy-Nexus-Root-Tool1-398x460

[Uppdatering 2012-07-31] Bättre är kanske att följa denna guide. Den använder ett annat toolkit som jag anser fungerar bättre.

Jag köpte mig en Samsung Galaxy Nexus och har haft den ungefär en vecka nu. Bestämde mig ganska snart för att roota den när jag upptäckte att vissa inställningar från appar inte följde med från min HTC Desire. Proceduren för att roota är i sak ganska enkel:

  1. Backa upp allt. Telefonen kommer att återställas till fabriksinställning. Min favorit för backup är Titanium.
  2. Se till att du har senaste drivers. Gå in under enhetshanteraren i Windows och se att android-enheten inte är "Okänd".
  3. Installera Wugfresh Galaxy Nexus Toolkit.
  4. Kör som administrator.
  5. Sätt din Nexus i usb debugging enabled.
  6. I programet markerar du LTE eller GSM. Ta reda på vad du har!
  7. Initial Setup->Drivers. (Koppla ur telefonen)
  8. När drivrutinerna är på plats klicka på Unlock. Ett kommandofönster ska öppnas. Om din enhet listas med ett serienummer så är allt ok.
  9. På telefonen använder du volumknapparna för att navigera och strömknapp för att välja. Välj Yes.
  10. När bootloadern är upplåst klicka på Root. Ett liknande kommandofönster kommer upp och din enhet måste synas för att du ska kunna fortsätta.

Stegen är i korta ord att:

  1. Ha rätt drivrutiner
  2. Lås upp bootloader.
  3. Roota och återställ telefonen till fabriksinställning.

Jag hade en del problem med sista steget för att jag inte hade rätt drivrutiner för bootloadern. Efter rootningen återställde jag appar med Titanium.

Länk till guide på engelska:
http://theunlockr.com/2012/01/26/how-to-root-the-samsung-galaxy-nexus-one-click-method-lte-and-gsm-versions/

Om du vill lägga in en annan ROM:
http://theunlockr.com/2011/12/14/how-to-load-a-custom-rom-on-the-samsung-galaxy-nexus/

Taggad med:

433 Mhz RF Nexa. Sändare och mottagare med Arduino.

Arduino-projekt för att skicka och ta emot RF signaler på 433 Mhz. Avkodar samma protokoll som Nexa använder.

Komponenter:
Arduino UNO
Velleman TX433N https://www.electrokit.com/rx433n-mottagarmodul-433-9-mhz.45095
velleman RX433N https://www.electrokit.com/tx433n-sandarmodul-433-9-mhz.45094
Går också att använda 433MHz RF transmitter and receiver link kit från mät.se vilka är billigare.

Styr en Nexa PB-3.

Kod för att läsa fjärkontrollen från Nexa:
http://arduino.cc/playground/Code/HomeEasy
(AM-HRR3 receiver test)

För att skicka till Nexa-brytare:
https://code.google.com/p/homeeasyhacking/source/browse/#svn/trunk/Arduino

Lägger också koden här ifall de andra länkarna slutar fungera:




Kod för hemautomation förbättrad

eventghost_web_gui_html5Till förbättringarna hör:

  • Lättare att installera. Kräver bara en fungerande webbserver.
  • Html5 på sliders. Ger något bättre prestanda.
  • Nya jQuery Mobile.

Uppdaterade också instruktionerna för hur man installerar här.

Berätta gärna vad ni tycker om den nya versionen.

Exposé till Windows 7

expose_till_windows_1_MediumMac OSX har vissa fördelar jämfört med Windows och en av dem är Exposé. Väldigt enkelt så är det en vidareutveckling av Alt+Tab där man ser alla öppna fönster bredvid varandra för att snabbt kunna hoppa från ett fönster till ett annat. Mer att läsa på wikipedia.

Men för oss som gärna kör Windows men ändå vill ha funktionen finns Switcher att ladda ner från http://insentient.net/

[EDIT] Ett annat alternativ är DeskPose 2D (som i och för sig kostar pengar).

Instruktioner för hemmaserver, tellstick, nexa och ir-sändare

[Uppdaterad 2012-02-13. Ny version som är mycket enklare att konfigurera]
[Uppdaterad 2012-04-01. Nytt gränssnitt är snabbare.]

Klicka här för att gå till en demo.

eventghost_webserver_optimization_2 eventghost_webserver_optimization_3

Många har bett mig göra en mer detailjerad beskrivning av hur jag satt upp min hemautomation så här kommer den.

Materiel:

Installation

  • Koppla upp dator
  • Koppla in tellstick och installera tillsammans med Telldust mjukvara
  • Installera alla nexa-brytare du vill använda
  • Sätt ir-sändaren så att den når det du vill styra. Lägg dit ir-repeterare om signalen inte når hela hemmet.

Testa tellstick

  1. Öppna Telldus Center
  2. Lägg till en enhet genom att klicka på Ny.
  3. Välj enhet.
  4. Lär upp.
  5. Det fungerar när du kan släcka och tända lampor genom att klicka på de små ikonerna.

Eventghost

  1. Installera http://www.eventghost.org/
  2. Jag har för mig att du inte behöver ett plugin för att köra tellstick och usb-uirt. Det ska bara fungera.
  3. Testa dig fram till hur eventghost fungerar. Jag tänker inte förklara det i detalj men mekron är en kombination av händelser. I varje makro behöver man ha actions vilka bestämmer när ett makro ska köras. Exempelvis kanske man vill köra ett visst makro som tänder en lampa när en knapp på fjärrkontrollen trycks (läses från ir-mottagaren). Makron kan placeras i mappar.

Webbservrar

Nu till det lite svårare nämligen webbserver. Jag rekommenderade tidigare "dynamic web server" men denna har blivit gammal och fungerar inte lika bra som den vanliga webbservern i Eventghost. Se till att du har senaste versionen av Eventghost för att också ha den senaste versionen av webbserver-plugin.

  1. Du lägger till webbservern som en plugin i Eventghost. Autostart->Lägg till plugin->Webserver,
  2. Ställ in en port och en dokumentrot. Porten valde jag till 8080. Dokumentroten "C:UsersSebastianDocumentsEventghost webserver" men båda dessa kan givetvis vara annorlunda.
  3. Lägg all min kod i dokumentroten ( "C:UsersSebastianDocumentsEventghost webserver" i mitt fall). Koden får du från https://bitbucket.org/sebnil/eventghost-web-gui/get/tip.zip.
  4. Navigera till http://localhost:8080/index.html för att se att det fungerar. Om det fungerar så ser du gränssnittet. Testa i olika webbläsare eftersom det finns risk för att det ser lite dåligt ut i Internet Explorer. Om du inte får igång webbservern så börja felsök i Eventghost. Testa annan port och annan dokumentrot. Skype ligger på port 80 vilket kan ge problem om du valde den porten.
  5. Testa att du kan skicka kommandon till eventghost genom att skriva localhost:8080/?foo=bar. Om det syns till vänster i Log i Eventghost så är det ok.
  6. Testa att klicka på knappar i gränssnittet på http://localhost:8080 får att se om de registrerar i Eventghost. Om du kör Chrome kan du högerklicka och trycka Granska komponent, välja Nätverk och se om det skickas några kommandon till eventghosts webbserver.

Den stora förändringen med den nya versionen är att man inte behöver ställa in lika mycket för att få servern att fungera. Om du har senaste versionen av Eventghost och senaste versionen av min kod ska det räcka med att köra webbserver i Eventghost (och inte som det var tidigare då man även behövde köra en php-server i Wamp).

Gör gränssnittet personligt

Jag antar nu att du fått igång mitt gränssnitt och att det ligger uppe på din webbserver. Konfigurationen jag gjort ligger i /js/script-and-config.js. Ändra i denna endast om du känner att du vill fixa något i bakomliggande teknik.

/index.html är huvudsidan. De andra sidorna ligger under i samma dokumentrot. Grundläggande kunskap i html är nödvändig men du kanske klarar dig på att redigera filerna och testa dig fram. Den action som skickas till Eventghost bestäms av data-action=x. Det borde vara allt. Som sagt, testa dig fram och se vad som fungerar och blir bra. Det är så jag gjorde.

Komma åt hemautomation utifrån (över internet)

Om du gjort alla steg innan detta så är du egentligen klar men det kan finnas vissa saker kvar att göra om du vill komma åt webbservern utifrån (alltså att styra hemautomationen när du inte är hemma). Jag går inte igenom detta detaljerat eftersom det skiljer sig från system till system. Några saker att komma ihåg är dock:

  1. Ta reda på extern ip från exempelvis mittip.nu
  2. [Frivilligt] Fixa ett domännamn kopplat till ditt ipnummer. De flesta har dynamiskt ip som byter och därför behöver man en tjänst som uppdaterar regelbundet exempelvis http://www.no-ip.com/. Istället för att koppla upp sig mot något som http://213.100.33.42 så får du http://hem.zapto.org eller http://hem.servehttp.com. Lättare att komma ihåg helt enkelt.
  3. Gör en port forward i routern.
  4. Öppna brandväggen i operativet + eventuella övriga brandväggar.
  5. Glöm inte bort att lägga in skydd från att andra kommer åt din hemautomation!

Det vore kul att se vad ni lyckas göra med min mjukvara och hur den modifieras så lägg gärna en kommentar och berätta vad du gjort. Projektet ligger som öppen källkod på https://bitbucket.org/sebnil/eventghost-web-gui/overview. Lycka till!

Chalmers Courses 2012

  • Modelling and simulation
  • Discrete event systems
  • Nonlinear and adaptive control
  • Linear control system design,
  • Applied signal processing