Paddbacken

Styrning av starkströmsreläer via HTTP-webbtjänster med Raspberry Pi

Här är en beskrivning på hur du kan styra starkström (10A över 230V) av/på med enkortsdatorn Raspberry Pi via ditt vanliga ethernetnätverk utan att ta omvägen via 433MHz RF eller 900MHz Z-Wave. Kommunikationen görs med enkla HTTP-webbtjänster vilket gör att man enkelt kan lägga på ett användargränssnitt. Källkoden (Java), inklusive ett exempelanvändargränssnitt kan du ladda ner här.

Detta behöver du:

För varje kanal/reläenhet: Utöver detta behövs, beroende på hur man sätter ihop det, sladdar, lödutrustning, kontaktdon och apparatdosor.

Varför inte 433MHz?

Hemautomationskomponenter i 433MHz-bandet har funnits ganska länge på marknaden och det finns en uppsjö av exempelvis starkströmsbrytare. Nackdelen med dessa är att de endast fungerar som radiomottagare och således inte kan skicka tillbaka en bekräftelse på att ett kommando faktiskt nått fram eller ge information om brytarens tillstånd. Om man redan har ett vanligt trådlöst datornätverk hemma så kan man tycka att det är onödigt att introducera ytterligare en kommunikationsfrekvens där man dessutom har betydligt sämre möjligheter att gå in och bygga egna tjänster.

Varför inte Z-Wave?

Z-Wave är en nyare standard som även kan sända tillbaka information till kontrollern/servern samt agera slavsändare för andra enheter. Problemet här, förutom de som finns med 433MHz är de servrar (åtminstone alla de jag hittade) som finns att köpa, trots höga priser, är skräp. Jag köpte först en Zipato men övergav den ganska snabbt då kommunikationen sker via Zipatos molntjänst (där jag även kan köpa tilläggstjänster osv). På internet. Detta innebär alltså att jag måste ha en fungerande internetuppkoppling samt att Zipatos sajt ska samarbeta för att jag ska kunna tända en lampa. Lite som en karikatyr av Apple/iTunes.

Varför inte ett halvledarrelä?

Det finns beskrivningar på internet där man använt ett halvledarrelä (solid-state). Exempelvis http://www.susa.net/wordpress/2012/06/raspberry-pi-relay-using-gpio/ visar hur man kan använda Raspberry Pis egna 5V-brygga och på så sätt eliminera behovet av extern lågspänningskälla. Problemet här är till att börja med att hitta ett halvledarrelä med exceptionellt låg aktiveringsström och även om man gör det som kommer man bara ha kapacitet nog att koppla in ett eller möjligen två relän per Raspberry Pi. Utöver detta så är mekaniska relän mer brandsäkra samt snyggare.

Dimensionering av transistor och motstånd

En enkel likströmsväxel enligt nedan gör att vi kan få rätt spänning och strömkapacitet för att driva reläet.

Kopplingsschema

Maximal ström man kan ta ut från signalpinnarna på Raspberry Pi (GPIO) ligger runt 50mA. Det är totalt för alla pinnar så man måste alltså ta ut betydligt mindre än så per pinne om man vill kunna köra fler relän samtidigt. Ett motstånd på 2,2kΩ ger en ström vid påslag på 3,3/2200=1,5mA vilket ger god marginal att utöka med fler reläenheter.

Det mekaniska relä jag valt drar enligt specifikation 900mW över spolen. Detta ger en ström på 0,9/12=75mA och en förstärkning/hFE över transistorn på 75/1,5=50 gånger. En koll mot specifikationen för BC547B ger då:

Mått BC547B max Denna krets Inom gräns
Vcb (V) 50 12 Ja
Veb (V) 5 3,3 Ja
Vce (V) 45 12 Ja
Ic (A) 0,2 0,0765 Ja
hFE 200 50 Ja

Jag monterade min växel-/förstärkardel med skruvplintsanslutningar, äks sockerbitar, på en bit plexiglas för att det skulle bli lättöverskådligt (se nedan).

Växel-/förstärkardel

Montage av svagströmsdelen

Eftersom vi har två reläer behövs två försärkarenheter. Om de monteras spegelvänt bredvid varandra så sparar man några anslutningar. På bilden nedan syns hela svagströmsdelen med sladdar för mus, tangentbord, bildskärm, ethernetnätverk, 5V och 12V strömförsörjning inkopplade. I driftläge så är normalt ingen mus, tangentbord eller bildskärm ansluten. Det går dock bra att att koppa in dem vid exempelvis felsökning eller om man vill köra användargränsnittet via webbläsaren på själva Raspberry Pi.

Svagströmsdel utan lock

Montage av starkströmsdelen

Jag valde att använda en normkapsling med DIN-skena med plats för två reläer (se nedan). Dessa reläer är tvåpoliga vilket gör att man endast bryter fasen och inte nollan. För att lätt kunna koppla loss svagströmsdelarna så borrade jag två hål och satte dit vanliga DC-kontakter.

Starkströmsdel utan lock

Jag väljer att koppla på starkströmmen i normalt slutet läge (NC). Detta gör att alla mina lampor och uttag kommer att fungera när man exempelvis tar ner Raspberry Pi för underhåll. Observera att även om det inte finns plats för fler reläer i denna normkapsling så finns det inget som hindrar att man utökar med fler lådor. För att denna typ av starkströmsinstallation ska vara godkänd (laglig?), så måste den egentligen godkännas av, eller utföras av, en elektriker.

Programmering av webbtjäster och grafiskt gränssnitt

Operativsystemet Raspbian kommer förinstallerat med Java 8. Följande ramverk används:

Bygge och paketering görs med Maven till en körbar jar-fil som har alla sina beroenden inbakade i sig. Maven är också konfigurerat till att köra ett antal kodkvalitetsinsticksmoduler såsom JUnit och FindBugs. Webbtjänsterna är i dagsläget hårdkodade till att använda två reläer kontrollerade med GPIO0 och GPIO2 (generic, dvs pinne 11 och 13). Koden finns att ladda ner här. Exempelgränssnittet (nedan) har en enkel knapp för att tända och släcka lamporna på respektive sida om huset. Exempelgänssnittet

Installera och köra servern

För att köra servern, lägg bara jar-filen i förslagsvis hemkatalogen och starta genom att ge kommandot:

sudo java -jar relayservice-1.0-SNAPSHOT.jar server

Programmet behöver köras i administratörsläge för att kunna använda GPIO. Det kan vara mycket praktiskt att se till att servern startas automatiskt vi uppstart av Raspberry Pi eftersom man kanske inte ens har tangentbord och skärm tillgängliga där den står. Detta kan göras på lite olika sätt. Jag gjorde det genom att lägga till följande rad i filen .bashrc:

ps -ef | grep [r]elayservice || sudo java -jar relayservice-1.0-SNAPSHOT.jar server sudo java -jar relayservice-1.0-SNAPSHOT.jar server

Kommandot i början av raden gör att fler instanser inte startas upp om en instans redan körs.

Framtida förbättringar

Vad vi har nu är en kanske något överelaborerad strömbrytarmodul. Poängen är dock att vi har skapat en infrastruktur där vi enkelt kan lägga till ny funktionalitet som antingen kan köras direkt på Raspberry Pi eller från en annan dator eftersom vi exponerat grundfunktionaliteten som HTTP-webbtjänster. Exempel på förbättringar:

Slutresultat

Bilderna nedan visar den uppmonterade stark- och svagströmsdelen i drift med ett relä utan respektive med skyddslock/lucka. Den stora mängden sladdar till svagströmsdelen beror delvis på inkopplad mus, tangentbord och bildskärm.

Hela systemet utan lock Hela systemet med lock

Frågor och kommentarer skickas med fördel till kalle[snabel-a]paddbacken.se.