WindWiz

En GSM-uppkopplad vindmätare

Månadsarkiv: augusti 2011

Windspeak

Den upplästa utläsningen av vinddata via telefonsamtal är fortfarande den mest använda metoden för att kolla av vinden bland CPS medlemmar. Inte så konstigt, eftersom bara 1 av 4 mätare internetuppkopplad, och dessutom tror jag många föredrar att slippa trycka och navigera i menyer ute i starkt solljus. Ett samtal är en knapptryckning, tryck luren mot örat och vänta. Easy as dell!

Att ljudkvalitén sedan är såpass dåligt att man ibland tvingas ringa två gånger eller att informationen som ges är ytterst begränsad verkar få bry sig om. Men faktum är att det enda sätt att bilda sig en uppfattning om trender är att gång på gång ringa mätaren med nån halvtimmes mellanrum. Det skulle vara intressant att veta hur mycket pengar CPS medlemmar totalt lägger per månad i mobilsamtal till mätarna. Med en öppningsavgift på 79 öre och i snitt 30 sekunder samtal så hamnar vi på 1.1 kr/samtal (åtminstone med min leverantör). Jag gör säkert 10+ samtal till vindmätaren per flygdag om jag är i (eller avser att åka till) Ravlunda eller på västkusten (för Hammar använder jag givetvis webben!). Alltså rör det sig om ca 11 kr/dag och medlem. CPS har 200 medlemmar, varav säkert 50 är riktigt aktiva. You do the math!

Inte nog med att den uppringda funktionalitet fungerar dåligt i existerande mätare, den utgör också en stor tröskel för min egna implementation. Ett stort bekymmer är den icke-deterministiska strömförbrukningen som uppstår när X antal skärmflygare bestämmer sig för att ringa ner mätaren på en solig dag. Telefonsamtal över GSM-nätet är den i särklass dyraste funktionen i en vindmätare med avseende på strömförbrukning. Ett annat problem är att röstsyntetisering ökar krav på både processorkraft och lagringsyta. Därför har jag sedan dag #1 strykt denna funktion från mitt egna bygge.

Planen har istället varit att erbjuda samma funktionalitet via en landlina där man ej behöver tumma på ljudkvalité, inte har några begränsningar i lagringsutrymme och dit uppringningskostnaden potentiellt kan bli lägre. Jag ser bara fördelar!

I teorin behöver riggen inte vara mer avancerad än en telefonsvarare vars meddelande byts varje gång en vindmätare sänder en ny rapport. Inspelning av nytt svarsmeddelande sker automatiskt via mjukvara som hämtar vinddata från webben och spottar ur sig en ljudfil som sedan matas till telefonsvararen. Tack vare att större delen av telefonnätet numera digitaliserats och var och varannan kotte har tillgång till ”IP-telefoni” behöver man heller inte skaffa någon dyr analog telefonväxel eller annan utrustning, allt sköts av en vanlig dator. Inkommande samtal anländer via nätverket, behandlas av telefonsvararmjukvaran och svar skickas tillbaks — via nätverket.

Asterisk är en sådan ”telefonsvararmjukvara**” för Linux. Förutsatt att du har ett IP-telefoniabb. hos en operatör som tillåter inkoppling av annan utrustning än deras egen är det bara att tuta och köra. Det råkar falla sig så väl att min bredbandsleverantör T3 just lanserat ett nytt IP-telefoniabbonemang som lämpar sig ypperligt för detta syfte — T3 Zero. Månadskostnad 0 kr. Kostnad att ta emot samtal 0 kr. Ni förstår! Givetvis har de gjort ordentliga påslag på utgående samtal, men eftersom min telefonsvarare aldrig någonsin skulle få för sig att ringa ut på egen hand kan detta aldrig kosta mig mer än 0 kr. (Ska bara läsa det finstilta också 😉

Idag har det ösregnat utanför och jag hittade tid till att snickra ihop ett testprogram för att generera ljudfiler från aktuell vinddata. Detta är den komponent som skapar det nya svarsmeddelandet som sedan matas till Asterisk, telefonsvararen. Program, döpt Windspeak, jobbar mot WindWiz API och fungerar som vilket tredjepartsprogram som helst. Röstsyntetiseringen är väldigt enkel och består av ett större antal ljudklipp som fogas samman till ett meddelanden. Just nu är slutresultatet i allra högsta grad opolerat, men duger väl som ett ”proof-of-concept”.

Programmet körs via en terminal och har relativt få växlar.

$ windspeak.py -s Svetlana -o test.wav 

Denna rad beordrar Windspeak att hämta ner senaste mätdatan via API, syntetisera ett meddelande med rådande vindriktning och vindhastighet för att slutligen spara resultatet i test.wav. Som en liten bonus kan man även välja syntetiseringsröst med växeln -v. För tillfället kan man lyssna på min eller min flickväns ljuva stämma 😉 Den lilla källkod som utgör Windspeak v 0.1 Alpha finns redan för beskådning på GitHub bland WindWiz källkodsförråd.

Avslutar med ett litet demo!

** Att kalla Asterisk för en telefonsvararmjukvara är kanske årets understatement. Asterisk är allt du någonsin önskat inom telefoni och kan konfigureras för oändligt många fler användningsområden.

CPS vindwebb goes mobile

Det tog sin tid, men nu är den äntligen klar. Den upphottade och ombyggda vindwebben för skärmklubben. Jag har i tidigare inlägg hintat om mitt missnöje med vindwebben i mobilen och hur jag experimenterat med jQuery Mobile. Idag rullar jag ut en ny version av vindwebben. Nytt i denna upplaga är stöd för smartphones (iPhone & Android etc) och utökad stöd för äldre mobiltelefoner. Genom att surfa till http://vind.minimum.se/ kommer du numera automatiskt slussas vidare till en lämplig sida för din telefon, surfplatta eller dator.
Eftersom det inte är helt trivialt att kategorisera besökare på detta vis kan man även växla manuellt mellan sidorna med länkar. Jag ser automatslussningen som en grovsållning. Den fixar de flesta ”stora” mobilgrupper inom smartphones, t.ex. iPhone, iPod, iPad, alla Android-lurar, Windows Phone och Blackberry. En mycket svårare uppgift är att skilja på vanliga webbläsare och äldre mobiltelefoner, här finns inte lika tydliga avgränsningar. Strategin jag använder för tillfället är att försöka matcha vanliga nyckelord och leta efter särskilda HTTP-fält som WAP-telefoner har en tends att använda.

Huvudsidan är även ”plussad” med ändringar som CPS-medlemmar önskat:

  • Vindriktning över tid som linjegraf. Även om ”radarbilden” med fördelningen av vindriktning är användbar och lätt att förstå brister den när man försöker få en uppfattning om vindriktningens trend. Vindradarn kommer numera representera de 2 senaste timmarna. För vindriktning på längre sikt fungerar den nya linjegrafen mycket bättre och täcker ett par timmar bakåt i tiden.
  • Automatisk uppdatering. Sajten läser ut vald vindmätares uppdateringsfrekvens och sköter uppdatering under huven utan att hela sidan laddas om. Detta sätter givetvis lite högre last på webbservern, men i och med att alla grafer är cachade och datamängden som utläses via API är minimal blir trafikmängden och systemlast i princip försumbar (don’t quote me on that..).
  • Högerjusterad Y-axel i diagram, för lättare utläsning av nya mätpunkter. En rätt given uppdatering, då jag själv suttit många gånger och manuellt försökt följa liner från högerkanten till Y-axeln på vänsterkant.

En annan fundamental förändring är att alla tre versioner av sajten numera jobbar helt och hållet mot API:t. Detta innebär att sajten lika gärna skulle kunna köra på en annan server, detta till skillnad från den gamla sajten som använde en SQL-koppling mot databasen med mätpunkter. Utöver vinsten med ett mer modulärt system är det också ett bevis på att API:t är tillräckligt användbart för att användas i ”produktionsmiljö”. I och med att sajten jobbar med API:t kan den också ansluta till andra vindmätare som är kopplade på systemet i framtiden utan ändring. För tillfället finns bara 2 (Svetlana och Teststationen), men jag hoppas på att mitt eget bygge snart skall gå att prototypköra via samma system snart.

Avslutar med lite bilder som visar de tre olika sidorna ”in action” (klicka för större bild):

Smartphone-anpassad sidaDumbphone-anpassad sidaPC-anpassad sida