Näytetään tekstit, joissa on tunniste etäohjaus. Näytä kaikki tekstit
Näytetään tekstit, joissa on tunniste etäohjaus. Näytä kaikki tekstit

tiistai 3. syyskuuta 2019

Glue älylukon rajapintojen tutkimista

Tuossa aikaisemmassa postauksessa https://omakotikotitalomme.blogspot.com/2019/09/etaohjattava-glue-alylukko-wifi.html asensimme älylukon varaston oveen. Ja siinä vähän harmittelin, ettei valmistaja ole virallisesti julkaissut avointa REST API:a, että voisin itse ohjelmallisesti lukkoa ohjata.

Ekana tiputamme Glue lukon Android paketin https://www.apkdecompilers.com/-sivustolle, ja katsomme löytyykö paketin sisältä jotain mielenkiintoista, jolla voisimme saavuttaa yhteensopivuuden curl ohjelman kanssa.
root@jonni-ThinkPad-W520:~/gluehome# grep https.*api apk/*
Binääritiedosto apk/resources\classes.dex täsmää hakuun
apk/sources\com\gluehome\gluecontrol\h.java:        aVar.a("https://api.gluehome.com/api/");
apk/sources\com\gluehome\gluecontrol\h.java:        return new g.s.a().a("https").d(str.equals("dev") ? "gluebackend-tc-api.azurewebsites.net" : "api.gluehome.com").e("api").e(CoreConstants.EMPTY_STRING).c();
apk/sources\com\google\android\gms\b\ix.java:        return new Builder().scheme("https").path("//pagead2.googlesyndication.com/pagead/gen_204").appendQueryParameter("id", "gmob-apps-report-exception").appendQueryParameter("os", VERSION.RELEASE).appendQueryParameter("api", String.valueOf(VERSION.SDK_INT)).appendQueryParameter("device", u.e().e()).appendQueryParameter("js", this.f8897e.f7780b).appendQueryParameter("appid", this.f8896d).appendQueryParameter("exceptiontype", cls.getName()).appendQueryParameter("stacktrace", stringWriter.toString()).appendQueryParameter("eids", TextUtils.join(",", df.a())).appendQueryParameter("exceptionkey", str).appendQueryParameter("cl", "135396225").appendQueryParameter("rc", "dev").toString();

Bingo, tuolta löytyi, että Android applikaatio käyttää API rajapintanaan "https://api.gluehome.com/api/", ja näyttääpä heillä jääneen kehitysympäristön azure sitekin koodiin mukaan, mutta sen voimme ignoroida. Joten keskitymme tuon api urlin service rajapinnan tutkimiseen. Ja sitten seuraava luova greppi:
root@jonni-ThinkPad-W520:~/gluehome# grep "o(a = \"" apk/*Service*
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "UserRegistrations/{id}/Activate")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "AutoUnlocks")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "AutoUnlocks")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Invites")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Hubs/{id}/Commands")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Accesses")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Accesses")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "AccessSchedules/")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "AccessSchedules/")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Locations/{id}/Images")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Locations/{id}/Images")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Locations")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Locations")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "LockEvents")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "LockEvents")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Locks")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Locks")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Hubs/{id}/PairLocks")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Hubs")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "RegisterPushNotifications")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "RegisterPushNotifications")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "UserRegistrations")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "UserRegistrations")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "SecurityQuestions")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "SecurityQuestions")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Users/{id}/Icons")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Users/{id}/Icons")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Users/{id}/modifications")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Users/{id}/modifications")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "ResetPassword")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "ResetPassword")
apk/sources\com\gluehome\backend\glue\GlueHomeService.java:    @o(a = "Validate")

Ja tuossahan lista sitten majaileekin, ja sorsaa tutkimalla näkee syökö se sisäänsä GET, PUT tai DELETE metodia. Ja tavoitteenahan meillä on curlilla päästä ovea lukitsemaan ja avaamaan. Sitten luomme loginpass-tiedoston:
machine api.gluehome.com login <email> password <password>

Ja yläpuolella olevaa apilistaa kun luemme, niin kaipaamme lukon tai hubin {id} arvoa aika monessa tapauksessa. Ja kaikki wifi hubissa olevat linkatut lukot saamme /Hubs-komennolla (GET).
root@jonni-ThinkPad-W520:~/gluehome# curl -k -H "Content-type: application/json" --netrc-file loginpass https://api.gluehome.com/api/Hubs/ | jq '.[].LockIds[], .[].Id'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   405  100   405    0     0    605      0 --:--:-- --:--:-- --:--:--   639
"11111111-1111-1111-1111-111111111111"
"22222222-2222-2222-2222-222222222222"

Ja sieltähän lukon id pullahti (lukko vaihdettu ykköseksi ja hubi id kakkoseksi ihan vaan blogin takia). Ja tuon tiedon perusteella voimme jo lukkoa ohjata "Hubs/{id}/Commands"-APIlla. Tai kaivetaan vielä tuosta rajapinnasta tiedot ulos.
root@jonni-ThinkPad-W520:~/gluehome# cat "apk/sources\com\gluehome\backend\glue\HubCommandRequest.java"
package com.gluehome.backend.glue;

import com.google.a.a.c;
import java.util.UUID;

public class HubCommandRequest {
    public static int COMMAND_HUB_FIRMWARE_UPDATE = 4;
    public static int COMMAND_LOCK = 1;
    public static int COMMAND_LOCK_FIRMWARE_UPDATE = 3;
    public static int COMMAND_UNLOCK = 0;
    public static int LOCK_COMMAND_LIST_UPDATE = 5;
    @c(a = "HubCommand")
    public int hubCommand;
    @c(a = "LockId")
    public UUID lockId;
}

Tuosta näkee, että kyseinen API haluaa POST komenossa formissa kaksi parametriä, toinen on "LockId", johon siis pistämme juuri kaivamamme lukon ID:n ja toisena parametrinä "HubCommand", joka on INT. Ja intin arvot onkin tuossa mukavasti listattuna samalla, eli nollalla unlock ja ykkösellä lukkoon. Ja isommat numerot on sitten firmiksen päivityksia yms(joita emme tarvitse).

Ja sitten onko lopullisen testin aika, syötämme curlille formin tuossa muodossa ja katsotaan mitä tapahtuu.

root@jonni-ThinkPad-W520:~/gluehome# curl -X POST -k -d "LockId=11111111-1111-1111-1111-111111111111&HubCommand=0" --netrc-file loginpass https://api.gluehome.com/api/Hubs/22222222-2222-2222-2222-222222222222/Commands | python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   112  100    56  100    56     80     80 --:--:-- --:--:-- --:--:--   160
{
    "Id": "6550eb7c-5fe6-4dc5-8f0d-2dccaa077777",
    "Status": 1
}
root@jonni-ThinkPad-W520:~/gluehome# curl -X POST -k -d "LockId=11111111-1111-1111-1111-111111111111&HubCommand=1" --netrc-file loginpass https://api.gluehome.com/api/Hubs/22222222-2222-2222-2222-222222222222/Commands | python -m json.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   112  100    56  100    56     98     98 --:--:-- --:--:-- --:--:--   197
{
    "Id": "a95c39ec-2c47-4a0c-bb7b-3f154a4e00000",
    "Status": 1
}

Ja siellähän se möllöttää, varaston ovi aukesi ja meni kiinni, ja Androidiin tuli notifikaatiot myös komentojen onnistumisesta.

Disclaimerina, että koska REST API ei ole virallisesti avoin, niin valmistaja voi softapäivitysten välillä vapaasti sitä muutella, mutta "works for me". Samalla tässä pitää painottaa sen tärkeyttä, kun rekisteröitte tuota lukkoa, niin keksikää mahdollisimman pitkä ja uniikki salasana käyttäjätunnukselle, sillä jos se vuotaa, niin kuka vaan saa ovesi auki tietämällä sähköpostin ja salasanan. Muuten tuolla ei nyt nopealla silmäyksellä mitään hälyttävää löytynyt, datakanava on https:n päällä, joten siltä osin turvallinen. Näytti tuolla olevan muutama google mainos ja statistiikka urli, joten softa saattaa kerätä statistiikka, mutta niinpä taitaa about kaikki applikaatiot tehdä.

Niin ja tässä postauksessa ei mitään maailmaa mullistavaa uutta tietoa. Näin jälkeenpäin kun googlettaa, niin Gluehomen gitistä löytyy samat tiedot sorsia lukemalla, josta näkee esim, että miten betterylevel lasketaan (https://github.com/GlueHome/homebridge-glue/blob/master/index.js) ja hyvää lisälukemista aiheesta: Security evaluation of smart door locks.

Nyt kun pystyn REST rajapintaa itse kutsumaan, niin saatan tulevaisuudessa hankkia toisenkin lukon talon puolelle.

EDIT: Vanha API lakkasi toimimasta, mutta tässä on uudempi blogipostaus jossa uutta API:a hyödynnetään: http://omakotikotitalomme.blogspot.com/2021/07/home-assistant-gluehome-lukkointegraatio.html

maanantai 2. syyskuuta 2019

Etäohjattava Glue älylukko wifi-keskittimellä

Tuossa kesällä oli Clasulla kivijalassa erikoistarjouksena Glue älylukot, jolloin opiskelijakortin vilauttamisen jälkeen taisi loppuhinnaksi muodostua noin 140e, niin oli pakko hankkia kun halvalla sai. Verkkokauppa.com:ssa sama on https://www.verkkokauppa.com/fi/product/14156/knckx/Glue-langaton-alylukko-wifi-keskittimella-hopea

Ja asennuskohteeksi valitsin varaston oven, sillä käyttöscenaariolla, jos tarvii esim. lähettifirmoille availla ovia jos tulee pakettia kun en ole kotona. Ja toinen syy varastoon pistämiseksi on se, että 'älylukoilla' on vielä hieman huono maine tietoturvan osalta. Joten tuota pitää tutkia hieman lähemmin, ennenkuin uskaltaa kotioveen pistää. Tästä onkin lupa odottaa jatkopostausta aiheesta, kun valmistaja ei ole public API:a toiminnallisuuteen julkaissut, niin taitaa edessä olla 'challenge accepted'-hetki, jos vaikka katsoo mitä vaatii oven avaaminen curlilla Linuxin konsolilla.

Lähtötilanteessa tuommoinen perus Abloyn lukkopesä, johon asennusta sitten ruvetaan suorittamaan.

Pyöritysnuppi ekana ruuvataan irti...

Jonka jälkeen ruuvataan Glue lukon aluslevy tilalle ja sovittemen kanssa sitten Glue laite paikoilleen.

Sitten vuorossa olikin Glue softan asennus Android puhelimeeni, jonka avulla lukko rekisteröidään ja calibroidaan. Jouduin tekemään calibroinnin pariin kertaan kun ekalla kerralla en osannut vääntää nuppia tarpeeksi auki. Ja wifi keskittimen kanssa hetken ihmettelin kunnes keksin, että varaston wlan ap:ssa oli dhcp:n dns asetukset vinossa. Lopulta kaikkiaan taisi vähän alle tunti mennä aloituksesta kun systeemi oli pystyssä.

Kun lopulta saa kaikki onnistuneesti conffattua, niin silloin näkyy puhelimesta iloisesti unlock ja lock napit, ja logitiedot historiasta.

Muutaman päivän testausten perusteella, unlock ja lock komennot joskus eivät mene täysin luotetusti läpi, vasta kun historia logissa näkyy eventti, niin silloin tietää menikö komento läpi. Mutta kun tuon tiedostaa, niin ei ole iso ongelma. Jossain vaiheessa on luvassa toinen postaus aiheesta, jossa koitetaan tutkia enemmän API ja/tai protokollatasoa toiminnallisuuden suhteen.

keskiviikko 14. kesäkuuta 2017

3D printteri Anet A8 DIY projekti - OSA 1

3D printterin kanssa puuhastelu on ollut viime aikoina mielenkiinnon kohteenani. Ja kun netistä lopulta löytyi suosittu 3D tulostin isolla communityllä sika edullisesti (175e kotiin toimitettuna Saksasta), niin päätin sitten semmoisen itselleni tilata. Anet A8



Tuollainen on siis mainoskuva, paketti tietenkin saapuu palasina, jonka saa itse koota. Eli hieno projekti tekniikkanörtille, kun kootessa oppii kuinka tekniikka toimii, jonka jälkeen tuota on helpompi korjata ja tunata.

Samantien tilasin tuohon lisäksi pari mosfettiä, virtanapin ja muutaman muunkin upgrade palikan.

Tässä hieman kuvia rakentelun vaiheista:

Ensimmäinen testiprintti oli ihan ok, kuution sivujen kirjaimetkin näkyi kivasti.

Oikein tyytyväinen olen toistaiseksi ollut tähän Prusa klooniin. Tulostusjälki on melkein samoissa kuin 700e:n Original Prusa I3ssa. Ja ilmeisti kunhan saan muutaman lisäosan postissa, niin tolla voi jopa saada alkuperästä parempaakin tulostusjälkeä aikaiseksi. Joten lisää postauksia aiheesta on luvassa kunhan upgrade osat saapuu postissa ja ehdin ne asentamaan paikoilleen...

lauantai 18. maaliskuuta 2017

Sonoff muistin laajennus

Edellisessä postauksessani hehkutin Sonoff wifi kytkimiä. Tällä kertaa postaus kyseisen laitteen pimppaamisesta. Normaalisti noissa on muistia 1MB, joka riittää perustoiminnallisuuteen ihan hyvin. Mutta jos haluaa isompia koodikokonaisuuksia ja OTA (Over The Air) päivitysmahdollisuuden, niin se vaatii isomman muistipiirin.

Maailmalla, jotkut ovatkin kolvailleet tuohon ESP8266 mokkulaan isommat muistit: http://www.andremiller.net/content/upgrading-sonoff-wireless-smart-switch-flash-memory-esp8266. Joten pitihän sitä itsekin kokeilla onnistunko perässä. Noi piirit on vähän pieniä minun amatööri kolvaustaidoilleni, mutta kun noi on niin halpoja, niin pitäähän sitä yrittää.

Aliexpressistä kymmenen kipaletta 4MB Winbond 25Q32FVSIG piiriä oli kotiin postitettuna 2.25e, joten 23 centtiä kipale ei ole kovin paha hinta muisteista.

Harjoittelin ekana euron ESP8266 piirillä, ja hetken kolvailun jälkeen näytti uusi muistipiiri menevän paikoilleen. Joten siitä rohkaistuneena otin sitten Sonoffin työn alle. Tässä hieman kuvia kolvauksesta, vaatii pikkuisen vakaata kättä kun pinnit on puolen millin päästä keskenään.

Kolvailun jälkeen laite takaisin tietokoneeseen kiinni, niin näkee, että tuliko total failure tai success. Ei ole niin nätti kuin robotin kolvaama, mutta pinnit osui kohdalleen ja esptool raportoi 32Mb(4MB), joten onnistunut projekti.

perjantai 10. helmikuuta 2017

Wifi langaton sähkökytkin

Taloautomaatioprojektiin pikkuista päivitystä. Edelleen on ikuisuusprojekti ohjata kaksikärkisiä releita vielä vaiheessa odottamassa kesän isyyslomia, mutta tässä hieman status päivitystä automaatioprojektin etenemiselle.

Muutaman lisäpalikan olen saanut pystyyn projektin edistämiseksi. Muutaman kappaleen olen tilannut Sonoffin ESP8266 pohjaisia langattomia kytkimiä, jotka maksaa 5-6e kappale kotiin toimitettuna (https://www.itead.cc/sonoff-wifi-wireless-switch.htm).

Noiden sisällä oleviin ESP8266 piireihin saa helposti flashattua oman custom firmwaren. Joten muokkasin custom NodeMCU palikan, jota voi ohjata ja kuunnella MQTT:n yli.


Ensimmäiseksi pystytin kotiverkkoon Docker swarm-verkon, jonka päälle sitten asensin clusteroidun Hight Availibility MQTT:n. Suomennettuna siis se tarkoittaa, että MQTT palvelu pysyy pystyssä vaikka yksittäinen kone sattuisi sammumaan tai reboottaamaan. HAProxyn avulla kolme nodea pystyy käsittelemään satoja tuhansia yhtäaikaisia yhteyksiä, joka on enemmän kuin tarpeeksi alle 100:n sähkölaitteen ohjailuun. Eli joo, vähän ammuin yli, kun HA:n ja Docker swarmin opiskelu sattui vain kiinnostamaan. Kotiautomaatioon riittäisi kyllä ihan yksittäinen mqtt serverikin. Mutta eipä tuosta haittaakaan ole :).

Julkaisin emqtt docker ja haproxy containerit githubissa ja docker hubissa, jos joku muukin sattuisi tarvitsemaan itselleen. https://github.com/rainisto/docker-emqtt ja https://github.com/rainisto/haproxy-emqtt
docker network create --driver overlay --subnet 10.0.1.0/24 mqtt
docker service create --constraint "node.hostname==node1.local" --name emqtt-master --network mqtt -e NODE_IP=emqtt-master rainisto/emqtt
docker service create --constraint "node.hostname==node2.local" --name emqtt-node1 --network mqtt -e NODE_IP=emqtt-node1 -e MASTER=emqtt-master rainisto/emqtt
docker service create --constraint "node.hostname==node3.local" --name emqtt-node2 --network mqtt -e NODE_IP=emqtt-node2 -e MASTER=emqtt-master rainisto/emqtt
docker service create --name haproxy-emqtt --network mqtt -p 1883:1883 -p 18083:18083 rainisto/haproxy-emqtt
docker service scale haproxy-emqtt=3
Releen tilaa voi ohjata ihan manuaalisesti Sonoff:ssa olevaa nappia painamalla, tai sitten mqtt publish/subscribe avainta muuttamalla. Esim:

# esimerkki kuunnella lastenhuoneen pilvilampun tilaa
mosquitto_sub -v -t "/home/leikkihuone/pilvi/state" -h 192.168.1.9
# lampun laitto päälle
mosquitto_pub -t "/home/leikkihuone/pilvi" -m "ON" -h 192.168.1.9
# lampun laitto pois
mosquitto_pub -t "/home/leikkihuone/pilvi" -m "OFF" -h 192.168.1.9
Esimerkissä käytetyt NodeMCU lua scriptit voi ladata täältä: https://github.com/rainisto/sonoff-nodemcu

Pikkuisen vielä muokkasin tuota, että kuumaliimasin nelireikäisen dupont liittimen tuohon kylkeen kiinni, niin on helppo tehdä mahdollisia softapäivityksiä jälkeenpäin ilman että tarvii koteloa avata.

maanantai 16. maaliskuuta 2015

Saunan audion etäohjaus, osa2

Saunan audion etäohjauksesta olinkin jo aikaisemmin tehnyt blogipostauksen. Muistia voi virkistää täältä: http://omakotikotitalomme.blogspot.fi/2014/05/saunan-audion-etaohjaus.html

Vaikkakin ratkaisu on toiminut hyvin, niin tuon vastaanottimen protolevy oli aika ruman näköinen häkkyrä. Joten päätin kolvata hieman kompaktimman ja paremman näköisen ratkaisun, jonka pitäisi toimia pitkälle tulevaisuuteen. Ebaysta olin keväällä huutanut itselleni neljäkanavaisina 5V<->3.3V bidirectional level shiftereitä, jotka maksoi alle euron kipale (ebay URL).

Kuumaliimasin signaalitasonmuuttajan nätisti kiinni vastaanottimen pohjaan. Kolvasin vastaanottimesta lyhyet kaapelit 5V nastoihin ja 3.3V nastoihin kolvasin kiinni dupont-kaapelit jotka menee Raspberryyn. 3.3V input kaapeliin pistin kutistussukan sisään vielä 470Ω vastuksenkin, niin ei ole vaaraa GPIO:n hajoamiselle vaikka kytkisi väärin. Kohtuullisen nätti lupputulos varsinkin jos vertaa sitä aikaisemman postauksen protolevyyn. Hyvin toimii kake tällä uudella versiolla vähän kauempaakin, testasin 15 metrin päästä kolmen seinän läpi.

sunnuntai 8. helmikuuta 2015

WIP: Raspberry Pi kosketusnäyttömodaus

WIP (Work In Progress) statuspäivitystä kotiautomaatioraudoistani. Tällä kertaa tunkkauksen alla on Raspberry Pi B model, eli hieman vanhempi malli kuin kaikkein uusimmat. Ajattelin pistää siihen kehitysympäristön yms. systeemit pystyyn ja samalla minulla oli hyllyssä jo aikaisemmin hankkimani 2.8 tuuman PiTFT kosketusnäyttöpaneeli (kasausohjeet: https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/assembly).

Minulla on myös läpinäkyvä kotelo RPi:lle, mutta siihen ei PiTFT mahdu sisälle. Joten sulatin kolvinpäällä sopivasti lisää aukkoja lattakaapelille ja PiTFT:n vaatimalle näytölle ja mattoveitsellä tasoittelin sulaneet pinnat. Vaikka Raspberry kosketusnäytöllä on jo pelkästään hyödyllinen, niin halusin, että minulla on ainakin yksi raspberry, jolla voi testailla erilaisia komponentteja ja automaatioprojektien protoja. Joten liitin lattakaapelin RPi-UEXT:in ja RPi:n väliin (sai mattoveitsellä vuolla kaapelin kiinnikettä hieman, että mahtui kotelon sisään hyvin).

Tässä kuva lopputuloksesta, jossa on PiTFT koteloituna ja lattakaapelin perässä protolevy jossa voi komponentteja tastailla. Extrakuvassa erinäisiä Raspberry kikkareita (näyttö, liikkeentunnistin yms protolevyjä), joita tulen keväällä testailemaan:

maanantai 26. tammikuuta 2015

Internet shoppailua... tekniikkahärpäkkeitä

Taas olen pikkuisen hankkinut tekniikkapuolen osasia netistä, joita on tarkoitus käyttää talon automaatioprojekteissa. Mitään en ole viimeaikoina ehtinyt koodaamaan, mutta talvilomalla ja viimeistään kesälomalla on tarkoitus laittaa toimintaan. Mutta tässäpä listaa ihmeteltäväksi blogin tekniikkapuolesta kiinnostuneille.

ESP8266 ESP-01

Sormenpään kokoinen wlan mikropiiri, jossa on kaksi GPIO:ta, ja joka maksaa vain 2.5e/kpl.


Esimerkkejä ESP8266:n (ebaystä) käytöstä:
http://vaasa.hacklab.fi/2015/01/12/esp8266-ds18b20-thingspeak-nodemcu/
https://importhack.wordpress.com/2014/11/22/how-to-use-ep8266-esp-01-as-a-sensor-web-client/

Tuon halvan hinnan ansiosta hankin ensiksi tuommoisen viiden kappaleen satsin, ja jos osottautuu toimivaksi, niin sitten pistän vielä lisää tilaukseen. Noita voi ripotella ympäri taloa esim.langattomien lämpömittarien, liikkeentunnistuksen, sähkökytkimen (kaupalliset wlan sähköpistokkeet maksavat yli 50e kappale, niin itse hackaamalla säästää aika paljon rahaa) yms merkeissä. Esimerkkejä tulen postaamaan tässä kevään kuluessa, kunhan pääsen noilla leikkimään.

DS18B20 Temperature Measurement Sensor New Module


DS18B20 (ebay) 1.3e lämpötilasensori, voi yhdistää tuohon edelliseen wlan palikkaan.

ESP8266 ESP-03

Samanlainen kuin ESP-01, mutta tässä versiossa on on 7 GPIO pinniä tuon ESP-01 mallin kahden pinnin sijasta. Hinta 2.7e/kpl, joten ei paha. ESP-03 (ebay)

Vertailu kaikkien ESP mallien välillä: http://l0l.org.uk/2014/12/esp8266-modules-hardware-guide-gotta-catch-em-all/

MCP23017-E/SP DIP28 16-Bit I/O Expander

Bongasin internettilästä, että miten I2C:n yli lisätä GPIO määrää 16:sta kerrannaisilla. 16:sta GPIO:ta maksaa 1.05e, jolloin yhden GPIO:n hinnaksi tulee 6 senttiä. Mikä deali, joten heti pistin tilaukseen 5 kappaletta. Katsotaan, jos näillä tekisi sitten valoreleitten ohjauksen halvalla. 5x MCP23017 (ebay)

Ohessa esimerkki miten ihmiset ovat tuota piiriä kytkeneet. Kolmella piirillä saa jo 48 GPIO:ta, joka riittäisi nykyiseen kytkentätauluuni.

ThermIQ

Tilasin myös piruuttain ThermIQ kortin, koska Danfossin lämpöpumppujen product manageri ei halunnut kertoa, miten heidän pumpuissaan nelipinninen liitin ulkoisille laitteille toimii. Ja sanoin mielessäni "challenge accepted", ja selvitän pinnien salat tässä tämän vuoden aikana kun automaatiota koodailen valmiiksi (http://www.thermiq.net/).

Danfossin oma ulkoinen online laite on törkeän hintainen (800+e) ja jonka webbisivuilla on vielä vuosimaksukin. Aika kusetusta, jos sarjaliittimen osat itse tehtynä on kymmenen euron pintaan. Mielummin rakennan kaapelin itse tai käytän ThermIQ moduulia, joka maksaa murto-osan Danfossiin omaan verrattuna.

lauantai 6. joulukuuta 2014

Tekniikkapäivitystä: koodaus etenee

Vähän aikaa on ollut hiljaiseloa tekniikkapostauksissa, se ei tarkoita, etteikö tekniikkaprojekti etenisi. Kokoajan tulee pientä edistystä talotekniikan suhteen, aikataulu valmistumisesta vaan hieman on venynyt. Mutta toivon, että valo-ohjaus yms automaation koodaus valmistuisi kesällä.

Tässä hieman päivitystä tekniikan suhteen. Siis tarkoituksena on, että talon kaikkia valoja voi ohjata puhelimilla, tableteilla, tietokoneilla yms teknisillä wimpaimilla. Samoin valoja voisi ajastaa, tietyt valot reagoisivat liikkeentunnistukseen, etäisyyteen ja ääneen. Samoin tietenkin käyttöliittymässä olisi saunan audion ohjaus, mielellään myös koko talon audion ohjaus (ja audion synkronointi niin, että kaikissa huoneissa soisi sama biisi tismalleen samaan aikaan). Ja lämpötila, kosteusmittari yms data olis myös saatavilla.

Koodauspuolella minulla on jo valmiina serveripuoli, eli puhelimet, tabletit ja tietokoneet voivat jo kommunikoida keskenään. Käyttöliittymä ei ole valmis, lähinnä olen viskonut laatikoita ruudulle, jotka kuvastaa eri valoja ja saunan kiukaan tilaa. Saunan spotify ohjain toimii puhelimesta (ruudulle tulee Spotifyn album artit ja biisin tiedot extra infona) ja rf-kaukosäätimellä.

Tekniikka ostoksiakin olen tehnyt pikkuisen. Raspberry Pi julkaisi A+ mallinsa edulliseen 20$ hintaan, joten pistin semmoisenkin tilaukseen, kun posteineen alle 30euron tietokone on mielestäni aika hyvä deal. Tietenkin riippuu mitä haluaa, Raspberry Pi B+-malli, jossa on myös ethernet ja tuplasti muistia on alle 40e kotiin postitettuna, mutta se on myös pikkuisen isompi.

Itse olen hankkinut jo värisuoran, joten minulta löytyy A, A+, B ja B+, noilla on tarkoitus hoitaa saunan rf kauko-ohjaimet, kosteus- ja liiketunnistimet. Samoin noilla voisi hoitaa valo-ohjauksen, mutta tällähetkellä olen suunnitellut, että valo-ohjauksen hoitaisivat 2x BeagleBone Blackia jotka olen hankkinut, koska niissä on tuplasti enemmän vapaita GPIO pinneja, jotka myöskin kotiin postitettuna maksaa vain 50e kipale, joten ovat halvempi kuin raspberryt per vapaa GPIO pinni.

Mutta tosissaan, nyt minulla on kuusi tuommoista pikkuista vähän luottokorttia isompaa tietokonetta, jolla automaatio olisi tarkoitus hoitaa. Noitten rinnalle on tullut tilattua kaikenlaisia halpoja lisähärpäkkeita, joita voi noihin kytkeä kiinni: raspberry pi hd-kamera moduuli 16e, USB nano wlan-moduuli 4e, USB nano Bluetooth-module 1e, USB RJ45 verkkokortteja 3e, liikkeentunnistajia 1e, kosteusmittareita 1e, hälytyssireenejä 3e/kpl ja rasperry kosketusnäyttömoduuli jne...

Nälkä kun kasvaa syödessä, saunan äänentoisto on toiminut varsin mallikkaasti, muta rupesin tutkimaan, että miten rakentaa äänentoisto niin, että sama musiikki voisi soida kaikissa huoneissa, ja vielä niin että ne olisivat synkassa keskenään. Muutaman hullunkalliin ratkaisun löysinkin netistä, mutta lopulta valinta päätyi Squeezeboxin suuntaan vaikka Logitech onkin tuoteperheen jo haudannut, niin siinä on laaja opensource community takana pitämässä sitä hengissä ja ovat myöskin tehneet playerit ja controllerit kaikille platformeille (esim Raspberry Pi voi olla Squeezebox server ja player). Tässä olen viikon aikana tehnyt nopeaa protoilua Logitech Media Serverin ja rpi:n kanssa, ja toi tuntuu varsin lupaavalta. Serveri osasi indexoida levyvarastoni, integroituu Spotifyhin yms nettiradioihin. Ja tosiaan Raspberryn hinnalla saa audion langattomasti laitteeseen kuin laitteeseen. Ja eipä siinä vielä kaikki, Logitechin Squeezebox rautojakin saa vielä edullisesti käytettynä. Itse juuri tilasin vielä joululahjaksi itselleni Squeezebox Boomin ja Squeezebox Duetin. Amazonissa näyttää noiden hinta uutena olla yhteensä $965 (780e plus verot), joten käytettynä posteineen kotiin tekemäni 140e deali on kohtuu hyvä.

Noilla kattaa jo kolme huonetta, joissa ei ole tietokonetta. Tietokoneellisiin huoneisiin voi asentaa playeri-softan suoraan koneeseen. Tai tarpeen vaatiessa voi hankkia/rakentaa vielä lisää playereita tai tuunata vanhoista puhelimista playeri. Itse asiassa juuri testasin, että mun vanhoista N900, N950 ja N9 puhelimista saa hyvin Squeezelite playerin. Aika täydellinen paketti jopa, hyvä wlan/usbnet ja audio-outputissa ei ole häiriötä (vastaavasti rpi:n joissakin malleissa on pientä säröä outputissa), kestää sähkökatkot sisäisen akun ansiosta jne. Ja bonuksena tietenkin vielä ilmaisia, kun ovat olleet kaapissa pölyttymässä :)

Tässä muutama kuvakaappaus UI protosta Nexus5:lla, tosiaan ei viimeisteltyjä grafiikkoja vaan sen sijaan laatikkoja, lähinnä vaan testaukseen, että data liikkuu tietokoneserverin ja puhelimen välillä oikein. Lista kaikista valoista, saunan Spotify soittimen tilanäkymä (jota voi myös radio kaukosäätimillä ohjata) ja scrollattava pohjapiirros jossa näkyy lamppujen statukset.

Tämmöistä tällä kertaa, lisää on tulossa kunhan projektit etenee... :)