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

tiistai 12. marraskuuta 2019

Home Assistant - Open source automaatio - Osa 2

Olin jo muutama vuosi sitten (https://omakotikotitalomme.blogspot.com/2017/03/sonoff-tasmota-paivitysta.html) pistänyt lasten leikkihuoneen Ikean pilvivalon Sonoff kytkimen ja Tasmota firmiksen avulla MQTT pilveen. Ja tällä kertaa katsoin miten iso työ on saada saman lampun ohjaus näkymään Home Assistant käyttöliittymässä.

Tasmotan sivuilta löytyi helppo rautalanka ohje: https://github.com/arendst/Tasmota/wiki/Home-Assistant

Kaikessa lyhykäisyydessään pitää vain Tasmotan Consoleen kirjoittaa "SetOption19 1" ja painaa Restart. Tämä aktivoi MQTT Home Assistant Discovery moden.

Kun Tasmota oli käynnistynyt uudestaan, niin valaisin ilmestyi automaattisesti laitteeksi Home Assistenttiin. Kivasti näkyy firmiksen versiotkin yms tietoja.

Näiden Tasmota firmiksellä olevien laitteiden lisäys olikin yllättävän vaivaton operaatio. Seuraavassa osassa onkin sitten vuorossa Zigbee laitteet.

sunnuntai 26. maaliskuuta 2017

Sonoff-Tasmota päivitystä

Tässä olen viimeaikoina muutaman blogipostauksen tehnyt Sonoff wlan kytkimistä, ja tässä hieman jatkoa aiheeseen.

Loysin netistä projektin noihin Sonoffeihin, jossa noihin on mqtt:n lisksi lisätty pieni webbiserveri, jolla voi tehdä OTA päivityksen wlanin yli ja ohjata relettä myös http:n yli. Ja samoin se lisää Domoticz tuen. Ja kaikki tämä toimii jopa tuolla normaalilla yhden megan Sonoffilla.

https://github.com/arendst/Sonoff-Tasmota

Tuohon voi nätisti conffata primaarin ja secundaarin SSID:n, jolloin laite liittyy kotiverkkoon automaattisesti ekalla bootilla. Jonka jälkeen webbiserverin kautta voi kätevästi käydä uudelleennimeämässä laitteen haluamakseen. Samoin webbiserveri tarjoaa konsoliyhteyden.

Kehitys ympäristön asennus oli helppoa, systeemi tukee Arduino IDE:ä tai PlatformIO:ta, joka asentuu Atomin päälle: https://github.com/arendst/Sonoff-Tasmota/wiki/Prerequisite

Itse latasion PlatformIO:n Atomin sisään, niin kaikki asentui automaattisesti ilman, että tarvi käsin asennella mitään lisäpalikoita. Ja megan ja neljänmegan palikan vaihtaminen käy ihan buildilipulla kuten oheisessa screencapturessa näkyy:

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 7. syyskuuta 2015

Valoautomaatio - valmistelut ja rautapuoli

Muutamassa edellisessä blogipostauksessa olinkin jo maininnut, että jossain vaiheessa ryhdyn valoautomaationkin kimppuun. Ja lomaviikoilla ehdin pikkuisen taas projektiin antaa vapaa-aikaani. Talvella jo koitin yleismittarilla ihmetellä, että miten teknisessä tilassa oleva matalasähköimpulsseilla toimiva valojen kytkentätaulu toimii. Mutta tulokset olivat laihoja kun en saanut kunnollisia arvoja mitattua. Mutta sitten tajusin, että hetkinen kokoajan olen yrittänyt tasavirtaa mitata, mutta noi valokatkaisijat voivat myös toimia vaihtovirralla. Joten yleismittarin vipu vaihtovirralle ja uusi mittaus, ja johan alkoi lyyti kirjoittamaan. Muutama ärräpää pääsi, kun AC:n ohjaus on pikkuisen kinkkisempää kuin DC:n (mutta enpä speksausvaiheessa tajunnut sähkärille sanoa, että tasavirtaa haluaisin ohjausimpulssien olevan).

40 kaksikärkistä relettä siis hoitaa teknisessä tilassa valojen ohjausta. Huoneissa on Schneiderin Exxact-sarjan impulssikytkimet, joilla voi valoja ohjata normaalisti. Sen lisäksi nyt on siis tarkoitus lisätä automaatio, että pystyn katsomaan ja ohjaamaan valojen tiloja tietokoneelta. Vaihtovirran seuraamiseen tilasin sitten kymmenen 16-pinnistä (4-kanavaa) octocoupleria. Neljä euroa ei ole paha hinta näille (ebay URL). Näillä siis olisi tarkoitus lukea noita kaikkien releiden mahdollista 24V AC virtaa ja generoida siitä 3.3V DC signaali BeagleBone Blackin GPIO:lle. Nämä osat ovat vielä tilauksessa, joten siitä erillinen blogipostaus myöhemmin.

Signaalin ohjauspuolella minulla oli osat hankittuna jo ennestään, ja olinkin maininnut niistä edellisissä blogipostauksissa (http://omakotikotitalomme.blogspot.fi/2015/01/internet-shoppailua-tekniikkaharpakkeita.html#mcp23017 ja kolme http://omakotikotitalomme.blogspot.fi/2013/12/tekniikkaa.html#relelevy).


Nyt kun tässä on jonkin aikaa ollut mietintämyssy päässä, että miten automaation toteuttaisin. Joten eikun pistetään kolvi tulille ja katsotaan mitä saadaan aikaiseksi. I2C:n yli olisi tarkoitus 3.3V signaaleilla ohjata noita relelevyjä MCP23017:aa apuna käyttäen. Olin jo aikaisemmin testaillut tuota yhdistelmää, joten periaatteessa systeemin pitäisi toimia. Joten koputetaan puuta ja toivotaan parasta.

Aika siistin näköisen tuloksen sain kolvaillulla aikaan. 5x7cm levylle mahtui nätisti kolme MCP23017 mikrokontrolleria, jossa on yhteensä 48 GPIO:ta. Talossamme kun on tällähetkellä vain 40 kaksikärkistä relettä, niin toi riittää vallan hyvin ja on laajennusvaraakin. Nurkkaan pistin kaksi pinniä, johon voi raspberrystä pistää 3.3V ja GND. Ja I2C pinnit pistin kahteen paikkaan, jolloin voi tarvittaessa I2C läpiviennin jatkaa muihinkin laitteisiin. Levyn takapuoli ei olekaan niin valokuvauksellinen (ja mulla ei ollut SMD vastuksia hyllyssä) kun kolvikäsi vapisee ja kuumaliimalla varmistettiin kolvausvetojen toimivuus. Mutta siis pistin jokaisen GPIO pinnin perään pistin 2.2kΩ vastuksen, niin ei ole vaaraa, että Raspberrystä otettaisiin liikaa virtaa, ja relelevyt toimivat silläkin virralla. Tämän levyn osien hinnaksi tuli alle 5 euroa, ei ole kovin paha jos vertaa kaupallisiin KNX automaatiojärjestelmien tuhansien eurojen hintalappuun.

Tietenkään omalle työlle ei laske hintaa, ja vaikka laskisikin, niin paljon halvemmaksi tulee tehdä itse. Jos koko talon olisi tehnyt KNX-tekniikalla, niin sähkötöiden kokonaiskustannukset olisi olleet 10000-20000e kalliimpi kuin perinteisellä tekniikalla toteutettuna (kuten minun kaksikärkisillä releillä). Ja itse tehtynä kaikkien ohjauslaitteiden (kuten Raspberryt, Beaglebonet, äänen vahvistimet, Android tabletit yms.) yhteishinta on edelleen alle 1000e. Eli tavoitteena on saada yli 10-20ke säästöt tekemällä koko valoautomaatio itse.

Nopeasti testailin tuota ekana työhuoneen Raspberryllä ja hyvin tuntui toimivan. Seuraavaksi pitäisi sitten testata itse teknisessä tilassa oikeaa systeemiä. Jotenkin kiehtoo, että automaatio olisi myös näkyvillä, joten ajattelin, että laitteet voisi kiinnittää sähkökaappia suojaavaan muovikanteen (ja mahdollisesti suojata se sitten läpinäkyvällä muoviplexillä). Jolloin sitä voi ihailla ulkoapäin ja sitä on helppo laajentaa. Sitten olisi hyvä että sen kannen saisi myös irti, joten ajattelin että sähkökaapin liittimien läpiviennit toteutettaisiin vaikka vanhoilla kovalevykaapeleilla, kun lättäkaapeleissa on 40 pinniä ja semmoisten liittimien läpivienti kannen läpi ei ole vaikeaa ja semmoisen kaapelin kiinnitys/irroitus on helppoa.

Yllä on tilannekuva kun kolvailin 20-pinnistä rimaa signaalikaapeleille, kahdella tuommoisella saa 2x20 pinnirivin johon voi kovalevykaapelin pistää kiinni. Ja seuraavassa kuvassa sitten itse kaapeli on kiinnitetty teknisessä tilassa olevaan matalajänniteohjaustauluun. Nyt kun se on kiinnitetty, niin pitäisi olla talon jokaisen kaksikärkisen releen ohjaus mahdollista.

Ohjauksen lisäksi olisi kiva tietokoneen aina tietää, että on valo päällä tai ei. Sitä varten on kaksikärkiset releet, eli toisessa kärjessä menee 220V ja toisessa 24V AC vaihtovirta (jolla normaalisti ohjataan seinäkatkaisijan lediä). Tämän ledisignaalinen väliin olisi tarkoitus päästä ilman että ledit lakkaisivat toimimasta. Tämän ongelman ajattelin ratkaista octocouplereilla, jolloin 24V AC vaain triggeröi Raspberryn 3.3V signaalin, eikä tuhoa koko tietokonetta :-)

Eli hankin ebaysta kasan TLP521-4GB octocoupleita (ebay link). Neljällä eurolla pystyy lukemaan ja generoimaan 40 signaalia, eli aika edullinen ratkaisu. Kolvailin kasaan tommosia pikku emolevyjä, jotka voivat lukea 8 kaapelia kerralla. Viidellä tuommoisella lukee kaikki 40. Noiden viiden levyn GPIO pinnit on tarkoitus kiinnittää 40-pinniseen lattakaapeliin, jolla tehdään läpivienti sähkökaapista Raspberryn puolelle.

Kaikki ei mennyt kuin Strömsössä, kun oli postissa joku astunut optocoupler lähetyksen päälle, ja kaikki pinnit olivat vääntyneet. Vääntelin niitä suoriksi, mutta lopulta kuitenkin suurimmassa osassa oli joku pinni sisäisesti katkennut. Joten kolvailuja pitänee vielä korjailla jälkeenpäin. Kun nyt taitaa vain 30 signaalia toimia. Joten sitä joutuu odottelemaan hetken, että varaosat saapuu... Ja lopulta osat saapuivatkin, niin pääsi jatkamaan tämän postauksen kanssa näpertelyä.

Sitten itse sähkökaapin kanteen, jonne kasasin automaation, niin että koko komeutta voi ihailla ulkoapäin. Yläosaan kuumaliimasin kuusipaikkaisen jatkojohdon. Alanurkkaan liimasin 40-pinnisen kovalevykaapelin liittimen, josta menee sitten piuhoitus kolmeen 16-releen levyyn. Näillä levyillä voi lähettää valoille 24V AC ohjaussignaaleja. Relelevyjen yläpuolelle sitten MCP23017 GPIO levy, jonka vieressä on kaiken ohjauksen sydän eli Raspberry Pi 2-minitietokone. Samoin väkersin toisen MCP23017 GPIO levyn (ja 40-pinnisen liittimen), jolla voi sitten lukea kaksikärkisten releiden tilaa. Kannen sisäpuolelle pistin viisi tuommoista 8-kanavan optocoupler levyä, joilla 24V AC vaihtovirtasignaali tunnistetaan, ja josta generoidaan 3.3V DC tasavirtasignaali edellä mainitulle GPIO levylle. Tällä tavalla Raspberryllä voi ohjata 96:tta GPIO:ta, joka riitää talon jokaisen valon ohjaus- ja tilasignaalille.

Edellisillä optocoupler levyillä saa heittää vesilintua, kun Internetin ihmeellisestä maailmasta luin kolvailua seuraavana päivänä, että optocouplerit saattaa kärvähtää yli 5V signaalista (joten taittuneiten pinnien lisäksi saatoin itse kärventää muutaman piirin). Muutaman illan kolvaukset meni hukkaan, mutta aina oppii jotain uutta. Siispä avasin virtapiiri simulaattorin ja piirsin itselleni 24V AC -> 3.3V DC muuntajan, jolla pitäisi optocouplereitten toimia ilman ilman savua. Tässä suunnitelma piirrettynä ja oscillaattorin laskelma, että voltit olisi raja-arvojen sisällä ja tilavaihtumat tunnistettaisiin 4ms:n viivellä kun käyttää 100uF:n capaa.

Selitän vielä ton suunnitelman aukikin, eli neljällä 1N4001 diodilla (diodi-silta) ekana muutetaan tuo +-24V sinikäyrä niin, että negatiiviset arvot katoaa. Jolloin AC muuttuu DC muotoon, mutta GPIO:n kannalta tämä olisi hieman huonoa kun silloin arvot muuttuisivat päälle (sininen huippu alla olevassa kuvassa) ja pois (sininen nollatasossa eli vastaa sitä punaisen negatiivista virtaa jonka diodi leikkasi pois) 60 kertaa sekunnissa. Sitten laskemme 100kOhm resistansilla ekana virran minimiiin kun GPIO ei tarvitse mA:ta enempää ja 10kOhm resistanssilla (hiilikalvovastus) laskemme voltit 3.3V-2.0V:n välille, jota Rasperryn GPIO syö sisäänsä. Ja sitten ekan resistanssin jälkeen pistämme vielä 100uF:n capan maahan, jolla sitten saamme yllä olevan kuvan mukaisen sahalaitakuvioinnin. Eli kondensaattori (capasitor) tasoittaa tuon siniaaltoisen DC virran siten, että varaus ei pääse laskemaan nollaan saakka. Tästä tietenkin seuraa muutaman millisekunnin viive tunnistukseen, mutta samalla se poistaa ton on/off hyppimisongelman tunnistuksessa. Teoriassa 15kOhm:lla päästään lähemmäksi 3.3V:tä, valitsin 12kOhm, että mennään lähemmäksi 2.5V:tä, jolloin AC piiristä saa tulla isompia peak arvojakin ilman savupilveä. Tämä siksi että 24VAC joten peak-arvo DC volteille on itseasiassa 24 *  2  = 34V, jolloin 100kOhm ja 12kOhm kombinaatiolla peak arvoksi tulee 3.6V. Lisätietoa tälläisen diodisillan (aka. rectifier) toiminnasta voi lukea esim täältä: http://electronicsclub.info/powersupplies.htm#rectifier

Aika monen yrityksen ja erehdyksen kautta sain testiympäristossäni AC tunnistuksen toimimaan yhdellä lampulla. Muutamassa prototyypissä tuli savut pihalle, ihan omien lukihäiriöiden takia, mutta lopulta tuli toimiva diodisilta design valmiiksi. Nyt pitää vaan odotella, että hong kongista tulee sopivasti osia joilla voi kolvata kaikkien 40 releen AC-tilatunnistuksen.

Tässä valmistelu postauksessa valojen tilan lukeminen ja ohjaus on vielä aika komentorivipohjaista, kun käyttöliittymän koodaus on vielä vaiheessa. Mutta kunhan koodaus etenee, niin lupaan tehdä jatkopostauksen, jossa esitellään automaation integrointi käyttöliittymään, jota voi ohjata tietokoneella, kännykällä ja tabletista.

Tässä sitten 'valmis' ohjauslogiikka kuumaliimattuna sähkökaapin kanteen (vasemmalla puolella 48 relettä ja oikealla puolella diodisiltalevyt valojen tilojen lukemiseen). Aikamoinen johtoviidakko siitä tuli, mutta toimii, joten riittää minulle. Diodisiltoina käytin KBP206:sia, jotka hankin ebaystä.

Tässä on pieni demovideo jossa Raspberryllä ohjataan 48 relettä päälle ja pois i2c:n yli. Tuommoinen pulssin pitäisi riittää ohjaamaan kaksikärkisiä releita (eli talon kaikkia valoja).

keskiviikko 28. elokuuta 2013

Raspberry Pi ja sähköjen langaton ohjaus

Tässä on vähän aikaa ollut taukoa oikeista tekniikkapostauksista, joten tässä nyt vähän paivitystä.

Tein vähän proof of concept kokeiluja Raspberry Pi:llä W-waven ohjailuun Aeon Z-Stick USB -palikalla, ihan vaan varmistaakseeni, että voin ohjelmallisesti ohjata langattomia laitteita. Sen lisäksi olen hommannut Telldusin TellStickDuo USB-palikan, joilla voi ohjailla valtaosaa noista halvemmista 433.92MHz laitteista esim. Ikea kaukosäädin pistokkeita.

Tähän vähän linkkejä taustamateriaaleihin, jos ihmisiä kiinnostaa:

http://www.telldus.se/products/tellstick_duo
http://elinux.org/R-Pi_Tellstick_core
http://thomasloughlin.com/z-wave-controller-setup-on-my-raspberry-pi

Opensource automaatioprojekteja, näihin tutustaan paremmin kun talo on valmis ja ruvetaan lisäämään logiikkaa talon sähköihin: http://www.agocontrol.com/ vs http://majordomohome.com/ vs koodaan ihan itse oman ratkaisuni.

Ebaystä on tipahdellut kaikenlaisia hilavitkuttimia, poimittakoon tässä vaikka maininnan arvoiseksi, neljän euron dc stepdown levy, jossa on volttimittari sisään ja ulospäin. Sata painonappia 1.9e, joten 0.02e kappale, halpaa on.

Tässä vähän väliaika spoilerikuvia kolvaus-sessiostani (jossa onnistuin 340'C kolvilla polttamaan pari sormeanikin lahjakkaasti kun keskittyminen sattui hetkeksi herpaantumaan :-D). Kuvassa 14 kipaletta DC stepdown moduulia, jolla voi päätellä talon valojen tilat ja myös saada tieto valopistokkeiden nappien painamisesta. Tolla pääsee alkuun ja lopullisessa härpättimessä noita on noin 60 kipaletta vieri vieren. Läpinäkyvästä plexilasista (Englannin ebaysta) köyhdyin 5e/kpl.

Samoin olen tässä koodaillut GPIO tilakonetta BeagleBone Blackiin, nyt alkaa koodi olla siinä mallilla, että se osaa lukea valojen/nappien tilan 59:stä eri lähteestä. Joten hyvin riitää yksi laite lukemaan valojen tilat. Toisen laitteen joutuu tilaamaan vielä valojen ohjaamiseen. Mutta siltikin on kohtuu halpaa kun tommosen tietokoneen saa postitettuna suomeen alle viidelläkympillä.

Jossain vaiheessa on luvassa video-demo-postausta aiheessa, kunhan saan eri palikat juttelemaan lähiverkon yli toisilleen.