Bilen står i ett garage med el 100m bort. Timern från Classe funkar fint för motor och kupevärmare, men ibland vill man hämta tidigare, eller så får någon i familjen skjuts hem - ja som du säkert förstår, det är inte smidigt.
Wifi/ZigBee (Trådfri/Aqara) fungerar inte så långt, så vad göra? Jo lösningen heter LoRaWAN: Long Range Wide Area Network. Vi pratar galna avstånd - med rätt antenn når man flera hundra kilometer!. Men det kostar i överföringskapacitet, vi skickar max 222 bytes (i praktiken är gränsen 51) med <27 kbps. Kommunikationen sker på 868 MHz i Europa, en öppen frekvens.
Lora är själva överföringsmediet, medans LoRaWAN är de övre lagren. Det finns fjärrströmbrytare som enbart är Lora, de är i princip två vanliga radiosänd/mottagare inställda på samma frekvens. Inte HomeKit-kompatibla alltså
LoRaWAN är ett eget moln:
längst till vänster sensorer (noder) som pratar över radio med en gateway (basstation) som i sin tur är kopplat till en nätverksserver, därefter mot en applikationsserver och sist ut på själva internet.
Från RAKwireless i Kina beställde jag en RAK2245 som man sätter fast på en Raspberry 3/4 via 40pin headern.
Svarta svansen är 868 MHz antennen, fyrkantiga klumpen är GPS-antenn.
Denna agerar gateway, nätverksserver och applikationsserver. Kör en egen variant av Rasbian.
Därefter står valet mellan två mjukvaru lösningar: Chirpstack, opensource som körs lokalt eller the Things Network (TTN), även den opensource men en communitylösning i molnet. Idag finns +17000 gateways tillgängliga, dock ingen där jag bor. (Kolla kartan!) Isåfall hade jag kunnat spara 1500pix...
Jag valde den första. Men hur kul är det med EN radioapparat???
På interwebben införskaffade jag mig min första Arduino:
Adafruit Feather 32u4 LoRa Radio 8Mhz 2K RAM, drivs via USB eller batteri.
Till denna en Adafruit Power Relay FeatherWing:
Denna monterade jag ovanpå med hjälp av stift på en breadboard. Inte mycket dokumentation, men snodde kod från höger och vänster utan att göra några direkta framsteg. C är... ja låt oss säga ett intressant språk att koda i.
LoRaWAN skiljer sig från Lora genom att det är ett nätverk, med autentisering.
Två varianter finns: ABP: Aktivering från fabrik (Activation by personalisation) och OTAA: Aktivering över luften (Over-the-air activation).
Jag valde ABP där man förprogrammerar varje enhet med nycklar.
Till Arduinon nyttjade jag LMIC library, och fick den att sända på 415Mhz, den amerikanska frekvensen. Till sist fann jag ../Arduino/libraries/MCCI_LoRaWAN_LMIC_library/project_config/lmic_project_config.h
som tydligen innehöll en intressant rad: //#define CFG_eu868 1
Bort med kommentaren på den alltså!
Den tisdagskvällen hördes en djuriskt vrål från kontoret. Jag hade lyckats tända en lysdiod. Blink blink. Gick ut i garaget och provkörde, japp 100m in i ett stängt garage fungerade.
Men styrning av reläet fick jag inte till, kunde inte hitta någon online som satt ihop en 32u4 Lora med Relä-Wing från Adafruit. Flera sena kvällar senare började jag ana vad som var fel, lösa stift är allt annat än kontakt. Fram med lödkolven och vips, allt fungerade.
"Kopplingsschema"
Prototyp 1, väderskyddad och batteridriven. Visade sig vara en dålig ide, då batteriet inte kände av den lilla förbrukaren på 0.3mA.
Chirpstack spottar ur sig MQTT-meddelanden så det är enkelt att "lyssna" på aktiviteten:
mosquitto_sub -h 192.168.0.19 -v -t "gateway/#"
Uppe till höger en USB-laddare.
Färdig lösning.
Chirpstack skapar API-nycklar, och med anropet:
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Grpc-Metadata-Authorization: Bearer galet_lång_API_nyckel' -d '{ "deviceQueueItem": {"confirmed": true, "data": "'b24u'", "fPort": 10 } }' 'http://192.168.0.19:8080/api/devices/c55f2c9b34245e42/queue'
så får jag kommunicerat tre bytes(!) till mottagaren: "on." Hex-kodat blir det 6F6E2E och det vill överföras Base64-kodat i Chirpstack, och då får man b24u.
"off" blir 6F66666/b2Zm.
Mottagaren loopar konstant och kodar av mottagna meddelanden, är andra byten 6E så slår reläet till och är det 66 så stänger den av.
./lw32.sh on | off
Min underbara fru ser inte nyttan med att styra motorvärmaren från terminalen, så det fick bli HOOBS, en vidareutveckling av Homebridge.
Pluginet Script2
nyttjades med följande:
{ "accessory": "Script2", "name": "Motorvärmare", "on": "/hoobs/lw32on.sh", "off": "/hoobs/lw32off.sh", "unique_serial": "1234567" }
Här fick jag köra wget
då jag inte orkade lägga in curl
i HOOBS…
In i Hem-appen på mobilen, lägg till tillbehör och scanna koden.
Lägg till "tillbehöret", ändra Visa som till Reglage.
-Hey Siri, sätt på motorvärmare.
Att göra:
- Skapa ett anrop som efterfrågar aktuell status
- Skapa en automation i HOOBS som startar värmaren om det finns en kalenderevent, och baserat på lokal temperatur dra igång i X antal minuter
*Nästa projekt blir en temperatursensor för jaquzzin
Pris: ~2500kr, där själva basstationen går loss på 1500kr. Idag ligger antennen inomhus och når några hundra meter, med rätt antenn har jag ett nätverk som sträcker sig ett par mil. Helt klart oekonomiskt - elen i garaget står inte jag för... men billigare än att golfa