ASE-2610

From Courses
Jump to: navigation, search

Contents

ASE-7110 Systeemitekniikan projektityö

Kandityöaiheita

  1. Z-Wave-asetuskäyttöliittymän rakentaminen Qt:lla
  2. Dynaamisen Z-Wave-verkon reititystaulun visualisointi
  3. Z-wave-laitteiden ohjausikkunan widgettien rakentaminen ja laitteiden tilan ilmaisu
  4. Google Mapsin liittäminen järjestelmään (gps-tiedot)
  5. Verkon alustuksen erottaminen käyttöliitymän säikeestä
  6. Projektityössä käytettyjen Z-Wave laitteiden ominaisuuksien ja mahdollisuuksien selvittäminen

Projektin aikataulu

Aikaväli Kuvaus
01.09.2010 - 31.09.2010 Työn alustavaa suunnittelua
01.10.2010 - 31.11.2011 Tarjouspyyntöjen lähettäminen ja kokoonpanon valinta
10.11.2010 Z-Wave -laitteiden tilaaminen
31.11.2010 Laitteet saapuvat
03.01.2011 Ensimmäinen ohjelmiston testiversio
06.01.2011 Git-versionhallinta luotu
10.01.2011 Laitteiden asennus koteloon
20.03.2011 Toimiva Qt SDK:lla rakennettu ohjelmisto
08.04.2011 Kokonaisjärjestelmän demotilaisuus
18.04.2011 Dokumentaatio valmis

Arvio kokonaistyömäärästä: 380 tuntia

Johdanto

Projektin tarkoituksena on toteuttaa harjoitustyö kurssille ASE-2610 Johdatus automaation tietotekniikkaan. Kurssin harjoitustyön tarkoituksena on luoda opiskelijoille kuva hajautetusta järjestelmästä yksinkertaisen esimerkin avulla.

Järjestelmäkuvaus

Toteutettava järjestelmä tulee koostumaan kolmesta erillisestä kokonaisuudesta, joita ovat:

  • systeemitekniikan laitoksen sääasema
  • Google Maps -karttasovellus
  • ja pienois taloautomaatiojärjestelmä.

Näistä kaksi ensimmäistä ovat jo olemassa olevia järjestelmiä ja kolmas tullaan toteuttamaan projektin aikana.

Sääasema

Hyödynnettävät tiedot:

  • lämpötila
  • sademäärä
  • GPS -sijaintitieto

Käytettävät palvelurajapinnat:

  • Sääaseman webservice

Google Maps

Sääasemalta saatavan sijaintitiedon avulla sääaseman sijainti nähdään Googlen karttakuvassa

Käytettävät palvelurajapinnat:

  • Google MAPS Web service

Järjestelmän toiminnot

Tavoite

Järjestelmän toiminnot voidaan jakaa kahteen kategoriaan, joita ovat säätilan perusteella suoritettavat automaattiset toiminnot ja käyttäjän manuaalisesti suorittamat toiminnot.

Suunnitellulla laitteistolla tulee olla mahdollista toteuttaa esimerkiksi seuraavat toiminnot:

  • Sääasemalta saatavan ulkolämpötilan perusteella tapahtuva huoneen sisälämpötilan säätö
  • Valojen ja kaihtimien ohjaus vallitsevan säätilan perusteella
  • Valojen ohjaus huoneen valoisuuden ja tilassa havaittavan liikkeen perusteella
  • Järjestelmän etäohjaus TCP/IP-reitittimen avulla

Toimivat ominaisuudet

  • HW asennukset valmiit ja toimivat
  • Z-Wave -verkko luotu
  • Kaikki hankitut laitteet toimivat Open Z-Wavella
  • Sääaseman "simulaattorilla" on mahdollista ohjata Z-Wave -verkon laitteita
  • Z-Wave-verkon laitteiden tietojen visualisointi käyttöliittymässä
  • Orjalaitteiden paritusten ja konfiguraation hallinta
  • Ohjaimen resetointi ja verkon konfiguraation haku
  • Z-Wave-verkon laitteiden lisäys ja poisto

Puutteita ja ongelmia

  • EZMotion anturin wakeup ei toimi oikealla tavalla, OpenZWave-kirjaston ongelma?
  • Verhomoottorin COMMAND_CLASS_SWITCH_ALL-toiminto ei toimi, vaikka laitteen manuaalin mukaan ko. ominaisuus on kyllä tuettu
  • GoogleMaps-toiminnallisuus puuttuu kokonaan
  • Käyttöliittymän liukukytkimet eivät toimi oletetulla tavalla. Laitteen tila tulisi nollata kun laite kytketään pois päältä, jolloin myös liukukytkimiin liittyvät ongelmat korjautuisivat
  • Ohjaimella talletetut käyttötapaukset eivät toimi odotetulla tavalla sovelluksen käynnistyksen jälkeen, OpenZWave-kirjastosta johtuva ongelma
  • Ohjaimen kova resetointi (engl. hard reset) ei aiheuta DriverReset-ilmoitusta OpenZWave-kirjastolta
  • Verkon konfiguraation haku ei toimi oikealla tavalla, OpenZWave-kirjaston ongelma?
  • Laitteiden tietojen haussa ongelmia verkon konfiguraation haun jälkeen, OpenZWave-kirjaston ongelma?

Toteutusvaihtoehdot

Projektin alussa ei ollut selvillä mitä tekniikkaa tullaan hyödyntämään pienoistaloautomaatiojärjestelmässä. Vaatimuksina järjestelmällä oli ainakin jonkinasteinen langattomuus. Pienen tutkimustyön perusteella päädyttiin tekemään tarjouspyynnöt sekä KNX/EnOcean- ja Z-Wave-taloautomaatiojärjestelmistä. KNX/EnOcean -järjestelmän rakenteena olisi ollut pääosin väyläpohjainen(KNX), mutta myöskin langattomia(EnOcean) osuuksia sisältävä järjestelmä. Z-Wave puolestaan on täysin langaton järjestelmä. Projektin laajuuden asettaessa aikarajansa, ei muita järjestelmävaihtoehtoja edes otettu huomioon. Alla esitetyissä taulukoissa on listattu laitteet molemmista järjestelmävaihtoehdoista, joilla vaaditut ominaisuudet olisi saatu toteutettua. Kuten taulukoista voidaan havaita, olisi KNX+EnOcean -järjestelmä ollut rakenteeltaan monimutkaisempi virtalähteineen ja väyläkaapeleineen.

Z-Wave

  • Ohjelmistokehitys: Open Z-Wave -lähdekoodi + Qt SDK Open Source C++ -ohjelmistokehitysympäristö
  • Z-Wave Protocol
Laite Malli Lisätietoa Open Z-Wave tuki
USB-PC-adapteri ViaSens 100 Lisätietoa(ZWave4U) X
Sensori (Liike, lämpötila, valoisuus) EZMotion Triple Sensor Manual *1
Seinäkytkin ACT Z-Wave ZDM230 Manual| Installation X
Pistorasia Z-Wave Power Meter Plus Switch Manual X
Lampun ohjain (himmennyksellä) Merten Connect Dimmer Insert Manual X
Kaihdinmoottorinohjausyksikkö Hunter Douglas Blind Control 24V DC Specs| AdvUserManual| QuickSetup|UserManual. *2
Internet Gateway Z-Wave Internet Gateway VERA 2 MiCasaVerde Wiki -

*1: Anturin wake-up-toiminto ei toimi oletetulla tavalla
*2: COMMAND_CLASS_SWITCH_ALL ei toimi oletetulla tavalla

KNX/EnOcean

KNX-järjestelmän rakenne

Laite Malli Muuta
Sähkökeskukseen
Virtalähde ABB SV/S 30.640.5, 640mA Lisätietoja
LAN Gateway TCP/IP ABB 6186-L Lisätietoja
Kytkinyksikkö ABB VI SA/S 2.16.5S Lisätietoja
Säädinyksikkö ABB 2 UD/S 2.300.2 Lisätietoja
Kaihdinmoottorin ohjausyksikkö ABB 24VD JA/S 4.24.1 Lisätietoja
Sähkökeskuksen ulkopuolelle
RF-Gateway ABB 6186/RF GATEWAY Lisätietoja
4-kanavainen RF painike ABB 1785RF-84 PAINIKE Lisätietoja
Liiketunnistin ABB 6122-84 LIIKETUNNISTIN 180 Lisätietoja
Väyläliitäntäyksikkö ABB 6120 U-102 Lisätietoja

Laitteistokokoonpano

Edellisessä luvussa esitellyistä järjestelmän toteutusvaihtoehdoista tähän projektiin valittiin Z-Wave-pohjainen toteutus. Valintaa puolsivat mm. huomattavasti halvemmat hankintakustannukset (1000 euroa vs. n.6000 euroa) sekä Z-Waven paremmat sovelluskehitysmahdollisuudet. KNX/EnOcean toteutusta varten olisi tarvinnut laitteistohankintojen lisäksi investoida vielä erilliseen sovelluskehitysympäristöön, mikä olisi nostanut kustannuksia entisestään. Z-Waven kehitystä varten on olemassa sekä suljettuun että avoimeen lähdekoodiin pohjautuvat sovelluskehitysmahdollisuudet. Suljetun lähdekoodin SDK(Software Development Kit) olisi kustantanut n. 100 euroa, kun avoimen lähdekoodin (Open Z-wave)kehitystyökalut ovat ilmaisia.

Seuraavissa luvuissa esitellään projektia varten hankitut komponentit sekä niiden käyttöön liittyvää perustietoa. Laitteiden tarkemmat tiedot löytyvät edellä esitetyssä taulukossa sijaitsevien linkkien takaa.

MiCasaVerde Vera 2

Kuva1: Vera 2 edestä
Kuva2: Vera 2 takaa
  • Internet yhdyskäytävä (Gateway)

MiCasaVerde Wiki

Ominaisuudet

  • Linux palvelin
  • Z-Wave, X10, Insteon -yhteensopivuus
  • CPU: Broadcom BCM5354 (Linux 2.4 BSP Ready)
  • Flash: 16 MB
  • SDRAM: 32 MB
  • LED-indikaattorit: Power, Portal link, Ethernet link
  • Painonapit: Sync, Reset, WPS

Liitännät

  • ETH 1 (LAN 10/100 Mbit/s) (lähiverkko)
  • ETH 2 (PC, IP-kamera tms.)
  • USB 1 & USB 2 (katso: Tuetut laitteet)

Käyttöönotto

  1. Kytke VERA 2 olemassa olevaan lähiverkkoon ETH 1-liitännän kautta, standardilla verkkokaapelilla
  2. Kytke virta VERAan ja odota kunnes etupaneelin Z-Wave -indikaattori syttyy (käynnistyminen kestää n. 2 minuuttia)
  • ETH 1 -indikaattori palaa, VERA on kytketty internetiin
  • ETH 1 -indikaaattori vilkkuu, verkkokaapeli on kytketty, mutta VERAlla ei ole internet-yhteyttä
  • ETH 1 -indikaattori ei pala, verkkokaapelia ei ole kytketty

Yhteys lähiverkon kautta

  1. Mene saman lähiverkon tietokoneen internet-selaimella osoitteeseen: http://findvera.com

Suora Ethernet-yhteys PC:llä

  1. Kytke PC standardilla verkkokaapelilla porttiin ETH 2
  2. Mene internet-selaimella osoitteeseen: http://192.168.81.1

Yhteys lähiverkon ulkopuolelta

  • Yhteyttä lähiverkon ulkopuolelta ei ole kokeiltu, mutta sen pitäisi olla mahdollinen
Kuva3: Vera 2 Oletusverkkoasetukset

Wlan-yhteys PC:llä

  1. Etsi wlan-verkko (Oletus: vera_15801)
  2. Yhdistä verkkoon käyttäen VERAn pohjatarrassa olevaa salausavainta (Wifi Pass)
  3. Mene internet-selaimella osoitteeseen: http://192.168.81.1

Toiminnot

Z-Wave -laiteryhmät(groups)

  • Kaikki Z-Wave-laitteet voidaan asettaa toimimaan halutussa ryhmässä, jolloin laitteita voidaan ohjata yksittäin tai ryhmissä samanaikaisesti.
  • Ryhmien luominen, laitteiden liittäminen tiettyyn ryhmään ja laitteiden välisten yhteyksien asettaminen tapahtuu samalla tavalla riippumatta laitteesta.
  • HUOM! Ryhmäasetukset tulee tehdä kaikille laitteille erikseen!
  • Ryhmäasetukset voidaan tehdä VERAn ohjelmiston avulla seuraavasti:
  1. Klikkaa työkalun kuvaketta laitteen lohkossa
  2. Settings -> Automatically configure -> yes
  3. Device Options -> Associations ->
    1. Aseta olemassa olevan tai uuden ryhmän numero -> Add group
    2. Set to -> Set -> Valitse haluamasi laite luettelosta
    3. Back to ZWave options -> Sulje ikkuna ylänurkan rastista
    4. Tallenna muutokset (Punaisena hehkuva SAVE-painike)

Tietoa laitteiden lisäämisestä

Kuva1: VERA ZWave-verkon primääriohjaimena

Z-Wave-verkkoon liitettyjen laitteiden ohjaamista varten verkossa tulee olla ainakin yksi laiteohjain (engl. controller). Todellisuudessa laitteiden lisääminen ei ole edes mahdollista, jos verkossa ei ole laiteohjainta. Z-Wave-standardi mahdollistaa useiden laiteohjaimien liittämisen samaan verkkoon, kuitenkin sillä rajoituksella, että verkossa saa olla vain yksi isäntäohjain (engl. master controller). Ensimmäisestä tyhjään verkkoon liitetystä laiteohjaimesta tulee automaattisesti isäntäohjain. Ainoastaan isäntäohjaimen avulla on mahdollista suorittaa laitteiden lisäys- ja poistotoimenpiteitä Z-Wave-verkossa.

Laitteiden lisääminen ja poistaminen on yksinkertaisinta suorittaa Veran avulla. Tätä varten Veran tulee kuitenkin olla verkon isäntäohjain. Jos laitteiden lisäämisessä tai poistamisessa esiintyy ongelmia, tarkasta onko Vera isäntäohjain. Tämä on mahdollista suorittaa valitsemalla Veran käyttöliittymästä:

  • Z-Wave device ---> Options ---> Role

Jos kohdassa "Role" lukee:

Suc SIS:YES PRI:YES

Vera on isäntäohjain ja laitteita on mahdollista lisätä ja poistaa Veran avulla. Jos kohdassa "Role" puolestaa lukee:

Suc SIS:NO PRI:NO

,laitteita ei ole mahdollista lisätä ja poistaa Veran avulla ennen kuin isäntäohjaimen rooli on siirretty takaisin Veralle. Kuvassa 4 on havainnollistetty tilannetta, jossa Vera 2 on isäntäohjain.

HUOM! Jos isäntänohjaimen rooli on siirretty jollekin toiselle laiteohjaimelle, roolia ei ole mahdollista ottaa takaisin Veran kautta vaan ko. toiminnallisuus tulee suorittaa uuden isäntäohjaimen kautta.

VERAn tehdasasetusten palautus

  • Mikäli ongelmia VERAn kanssa ilmenee, ohjeet tehdasasetusten palautukseen löytyvät täältä.

USB-PC -sovitin (Seluxit ViaSens 100)

Kuva 1: ViaSens100
  • Tuetut käyttöjärjestelmät: Windows: XP, Vista. Linux: Ubuntu, Debian, RedHat, Suse
  • USB (CDC Communications Device Class)
  • Z-Wave automaatio-ohjelmisto tunnistaa laitteen virtuaalisen sarjaportin laitteeksi ja kommunikoi käyttäen Z-Wave API-protokollaa, mikä on kuvattu oppaassa: "Z-Wave Application Programmers Guide, INS10247". Tätä standardiprotokollaa hyödyntävät esimerkiksi seuraavat ohjelmistot: ControlThink, IP Symcon, Homeseer, Embedded Automation, 4HomeMedia.
  • Kaikki ohjelmistot, jotka hyödyntävät Zensysin dynaamista linkkikirjastoa (.dll) ovat yhteensopivia tämän adapterin kanssa. Linkkikirjasto tulee esimerkiksi ControlThink Z-Wave® PC SDK -ohjelmistokehityspaketin mukana.
  • HUOM! Vaikka kaikki .dll kirjastoa hyödyntävät ohjelmistot ovat tuettuja, jotkin ohjelmistopaketit vaativat tietyn PC-adapterin käyttöä lisensointisyistä. Näissä tapauksissa tämä sovitin ei välttämättä ole yhteensopiva.

Tekniset tiedot:

  • Lähetin ja vastaanotin (riippuu käytettävästä ohjelmistosta)
  • Kantama: jopa 50 m
  • LED-merkkivalo
  • Käyttöjännite USB:n kautta

Liittäminen (Inclusion)

HUOM! Ohjeiden mukainen liitos lisää Viasen USB-sovittimen Veran avulla luotuun ZWave-verkkoon, toissijaiseksi ohjaimeksi (engl. secondary controller).

  • Valitse Veran pääikkunasta Add Zwave Device --> kohdasta Zwave Add one --> Scene controller
  • Valitse ohjainwidgetin Network-välilehdestä Receive Configuration-painike

Liitoksen poisto (Exclusion)

  • Valitse ohjainwidgetin Network-välilehdessä Hard Reset ja paina valinnan jälkeen Reset-painiketta
  • Varmista muodostuneesta xml-konfiguraatiotiedostosta, että laitteet ovat todella poistuneet konfiguraatiosta. Hard resetin jälkeen xml-konfiguraatiotiedostossa tulisi näkyä vain Viasens100-sovitin.

Pistorasiaohjain (Everspring AN1582)

Kuva1: Pistorasiaohjain
  • Laitetyyppi: SLAVE
  • Lähetin/vastaanotin
  • Maksimikuorma 3000 W
  • Kun LED vilkkuu 2 sekunnin sykleissä, laitetta ei ole liitetty Z-Wave-verkkoon
  • Laitetta voi käyttää paikallisesti on/off-painikkeen avulla
  • Ylikuormitustilanteessa laite ja on/off-painike muuttuu toimimattomaksi ja LED vilkkuu tiheästi 30 sekuntia. Toimintaan palautus tapahtuu irroittamalla laite pistorasiasta ja kytkemällä uudelleen sekä yhdistämällä uudelleen Z-Wave-verkkoon.

Liittäminen (Inclusion)

  1. Z-Wave-ohjain liittämistilaan
  2. 3 on/off-painikkeen painallusta 1,5 sekunnin aikana

Liitoksen poisto (Exclusion)

  1. Z-Wave-ohjain liitoksen poistotilaan
  2. 3 on/off-painikkeen painallusta 1,5 sekunnin aikana

Tehdasasetusten palautus (Reset)

  1. 3 on/off-painikkeen painallusta 1,5 sekunnin aikana -> Liittämistila
  2. 1 sekunnin kuluessa paina on/off-painiketta 5 sekunnin ajan, kunnes LED sammuu

Paritus (Association)

  • Tapahtuu Z-Wave-ohjaimen kautta (VERA)
  • Laitteen Z-Wave-verkkoon liittämisen (inclusion) jälkeen on määritettävä laitteiden väliset suhteet eli mikä laitteista on MASTER ja mikä SLAVE. Lisäksi on määritettävä mikä master ohjaa mitä slavea.
  1. Z-Wave-ohjain paritustilaan TAI 3 on/off-painikkeen painallusta 1,5 sekunnin aikana

Seinäkytkin (HomePro ZDM230)

Kuva 1: HomePro ZDM230
  • Vasen kytkin kuorman (lampun) ohjaukseen. HUOM! Vain hehkulampuille!
  • Oikea kytkin minkä tahansa Z-Wave-laitteen ohjaukseen (ei vaikuta kytkimeen kytketyn kuorman ohjaukseen)

Liittäminen (Inclusion)

  1. Z-Wave-ohjain liittämistilaan
  2. Paina 1 kerran vasenta kytkintä ylös tai alas

Liitoksen poisto (Exclusion)

  1. Z-Wave-ohjain liitoksen poistotilaan
  2. Paina 1 kerran vasenta kytkintä ylös tai alas

Tehdasasetusten palautus (Reset)

  • Tehdasasetusten palautus tapahtuu Z-Wave-ohjaimen kautta

Paritus (Association)

  • Tapahtuu Z-Wave-ohjaimen kautta (VERA)
  • Laite mahdollistaa neljän(4) ryhmän laitteiden hallinnan siten, että ryhmä 1:stä ohjataan vasemman kytkimen kautta ja ryhmiä 2, 3 ja 4 ohjataan oikean puoleisen kytkimen kautta.
  • Kukin ryhmä voi sisältää 5 kpl Z-Wave-laitteita

HUOM! Himmennettävät laitteet omaan ryhmäänsä, jotta ne toimivat oikein!

Ryhmä Kytkin ON/OFF Himmennys
HW -kuorma Vasen 1 painallus ylös tai alas Kytkimen pito ylös tai alas
1 Vasen 1 painallus ylös tai alas HUOM! Kuorma ja ryhmä 1 ohjautuvat yhtäaikaisesti! Kytkimen pito ylös tai alas
2 Oikea 1 painallus ylös tai alas Kytkimen pito ylös tai alas
3 Oikea 2 painallusta ylös tai alas 1 painallus + kytkimen pito ylös tai alas
4 - HUOM! Ryhmä 4 vain vastaanottimille ja lähettimille tilatietoa varten -

Himmennin (Merten 507900)

Kuva 1: Dimmer Insert
  • Laitetyyppi: SLAVE

Huom! Kuorma 25-250W! Vain hehkulampuille!

  • Ensimmäisen kytkennän jälkeen lamppu vilkkuu ja lopulta sammuu
  • Himmentimeen kytketyllä kytkimellä voidaan ohjata lamppu päälle/pois nopeasti nappia painamalla tai tiettyyn kirkkauteen pitämällä kytkin pohjassa tietyn ajan.

Liittäminen (Inclusion)

  1. Z-Wave-ohjain liittämistilaan
  2. 3 painikkeen painallusta 1,5 sekunnin aikana -> Liittämistila

Liitoksen poisto (Exclusion)

  1. Ks. “Tehdasasetusten palautus”

Tehdasasetusten palautus (Reset)

  1. 3 laitteen napin painallusta 1,5 sekunnin aikana (eristetyllä työkalulla) -> LED vilkkuu
  2. Napin pito painettuna n. 5 sekunnin ajan, kunnes LED sammuu.

Paritus (Association)

  • Tapahtuu Z-Wave-ohjaimen kautta (VERA)

Sensori (EZMotion Triple Sensor EXP)

Kuva1: EZMotion kolmoisanturi
  • 150 m kantama
  • Jopa 4 linkkiä muihin Z-Wave-laitteisiin
  • Painikkeen painaminen asettaa laitteen testitilaan 10 minuutin ajaksi (wakeup)

Liiketunnistus (pääominaisuus)

  • HUOM! Tunnistaa liikkeen, ei esim. liikkumatonta ihmistä
  • Passiivinen IR -tekniikka
  • Liikkeentunnistus jopa 9m etäisyydeltä
  • 90 asteen liikkeentunnistuskulma
  • Säädettävä herkkyys
  • Liikkeentunnistuksen LED-indikaattori

Lämpötilan mittaus

  • Mittausalue: 20 – 150 °F
  • Mittaustarkkuus: 0,2 °F

Valoisuuden mittaus

  • Havaitsee huoneessa vallitsevan valon voimakkuuden

Liittäminen (Inclusion)

  • Tapahtuu Z-Wave-ohjaimen kautta (VERA)

Liitoksen poisto (Exclusion)

  1. Ks. “Tehdasasetusten palautus”

Tehdasasetusten palautus (Reset)

  1. Z-Wave-ohjain liitoksen poistotilaan
  2. Painikkeen painaminen ja painettuna pitäminen
  3. Ohjaimen ohjelmisto ilmoittaa poiston onnistumisesta ja LED alkaa vilkkua

Paritus (Association)

  • Tapahtuu Z-Wave-ohjaimen kautta (VERA)

Kaihdinmoottorin ohjain (Hunter Douglas HUN_DBMZ Version 2+1 EU)

Kuva 1: Blind Controller
  • Laitetyyppi: SLAVE
  • Käyttöjännite: 8-30 Vdc
  • Ulostulojännite: Sama kuin käyttöjännite
  • Maksimikuorma: 3,0 A

Liittäminen (Inclusion)

  1. Z-Wave ohjain liittämistilaan
  2. Paina LEARN painiketta lyhyesti

Liitoksen poisto (Exclusion)

  1. Z-Wave ohjain liitoksen poistotilaa
  2. Paina LEARN painiketta lyhyesti

Tehdasasetusten palautus (Reset)

Paritus (Association)

  • Tapahtuu Z-Wave ohjaimen kautta (VERA)

Laitteistokokoonpano ja kytkennät

Nykyisessä kokoonpanossa (7.3.2011) Z-Wave laitteet on asennettu muoviseen, läpinäkyvällä kannella varustettuun laitekoteloon. Seuraavat kuvat 1 - 5 havainnollistavat kokoonpanoa.

  • Kaihdinmoottorin ohjaimen jännitelähteenä toimii 12 Vdc 1A muuntaja
  • Kaihdinmoottorina puolestaan toimii Bebek Electronicsin tuotevalikoimasta löytyvä DGO-3512ADA 5-12 Vdc 27-33 rpm vaihteistomoottori
  • Pienoiskaihdin on mallia DIY ja varustettu kahdella rajakytkimellä sekä diodeilla

Normaalin käytön kannalta tärkeimmät kytkimet löytyvät kotelon sivuista:

  • oikea takakulma: päävirtakytkin
  • vasemman kyljen punainen painike: hehkulampun himmentimen ohjauspainike
  • vasemman kyljen musta kytkin: katkaisee rullaverhon moottorin virtapiirin

Alla olevat kaaviot havainnollistavat laitteistokokoonpanon johdotuksia ja Z-Wave -laitteiden keskinäisiä langattomia yhteyksiä. Kytkentäkaavion kytkennät vastaavat todellisuutta, mutta langattomia yhteyksiä esittävästä kuvasta puuttuu osa mahdollisista yhteyksistä(MESH), kuvan selkeyden säilyttämiseksi.

Kuva 4: Zwave wiring diagram Kuva 5: ZWave network diagram

Z-Wave -verkko

Yleistä

Z-Wave on langaton kommunikaatioprotokolla, joka on suunniteltu ensisijaisesti taloautomaatiojärjestelmille ohjaamaan valaistusta ja muita kiinteistön laitteita, kuten hälytysjärjestelmiä, ilmastointia tai viihde-elektorniikkaa. Teknologia toimii noin 900 MHz taajuusalueella, joten se ei häiritse tai ota itse häiriöitä muista langattomista tekniikoista, kuten WLAN:sta tai Bluetooth:sta. Z-Wave-standardi ei itsessään ole avoin ja sen omistaa yritys nimeltä Zensys. Oman ohjelmiston luomiseen Windowsille tarvitaan dynaaminen linkkikirjasto (.dll). Harrastelijat ovat kehittäneet jo jonkin aikaa avointa Z-Wave-lähdekoodia Open Z-Wave. Lähdekoodin kehitys on tämän projektityön aikana ollut erittäin nopeaa, mikä lopulta mahdollisti kaikkien hankittujen laitteiden ohjaamisen.

Z-Wave hyödyntää reaaliaikaista mesh-verkkotopologiaa eli kaikki verkon laitteet toimivat itsenäisinä verkon tietoliikenteen reitittäjinä. Jokainen solmu(node)/laite(device) vastaanottaa ja lähettää toisilta laitteilta saamansa käskyt, koskivat ne sitä itseään tai eivät. Mesh-verkkotopologia mahdollistaa täten myös rakennusten eri tilojen katvealueiden kattamisen, mikä on lähes aina ongelma muilla langattomilla teknologioilla.

Verkon luominen

Laitteiden yhdistäminen

Z-Wave -verkon vähimmäisvaatimus on yksi ohjattava Z-Wave -laite ja yksi Z-Wave -ohjain (MiCasaVerde VERA, USB-dongle tms.). Muita laitteita voidaan lisätä verkkoon tai poistaa verkosta milloin tahansa. Ennen kuin Z-Wave -verkkoa voidaan käyttää, tulee jokainen laite yhdistää(include) verkkoon edellä kuvattujen ohjeiden mukaisesti. Verkon luomishetkellä Z-Wave -laitteiden on hyvä olla lopullisessa sijainnissaan, sillä Z-Wave -ohjain mittaa laitteiden välisiä signaalinvoimakkuuksia asennuksen aikana ja tekee jonkinlaisia päätelmiä tämän perusteella. Verkon luomisen ja konfiguroinnin jälkeen verkon ohjainta (MiCasaVerde VERA, USB-dongle tms.)ei välttämättä tarvita, mikäli monimutkaisia tiloja(scenes) tai muita ohjelmoituja komentoja ei ole tarkoitus käyttää. Ohjaimen poistamisen jälkeen mesh-verkko jää edelleen toimivaksi ja paritetut(association)laitteet kykenevät kommunikoimaan keskenään.

Laitteiden konfigurointi

Z-wave -laitteiden ominaisuudet ja keskinäiset suhteet konfiguroidaan kontrollerin ja sopivan ohjelmiston avulla. Kontrollereita löytyy useilta valmistajilta ja ne kytketään tietokoneeseen joko USB- tai RS-232-portin kautta. Yksi vaihtoehto on käyttää MiCasaVerde VERA 2 -internet gatewayta Z-Wave -verkon konfigurointiin. VERAn ohjelmisto sisältää kattavat työkalut verkon luomiseen ja konfigurointiin sekä mahdollistaa Z-Wave -taloautomaatioverkon ohjaamisen lähes mistä sijainnista tahansa.

Tämän hetkinen verkon konfiguraatio

Seuraavassa taulukossa on esitetty tämän hetkisen verkon laitteiden ID-tunnukset ja ryhmät, joihin laitteet on liitetty. Laitteiden ID-tunnukset määräytyvät verkkoon liittämisjärjestyksessä, joten mahdollinen Z-Wave-verkon nollaaminen ja uudelleen asentaminen aiheuttaa ID-tunnusten vaihtumisen, ellei liittämistä tehdä samassa järjestyksessa kuin taulukossa. Laitteiden nimet ovat myöskin itse VERA:lle asetettuja ja näkyvät taulukossa esitetyssä muodossa vain VERAn käyttöliittymässä.

Nimi Node ID Ryhmä Toiminto
Vera 1 ZWave-verkon pääohjain (engl. main controller)
Viasens 100 10 1 ZWave-verkon toissijainen ohjain (engl. secondary controller)
Dimmable_Light 7
PlugController_1 38 1
PlugController_2 84 1
Sensor_3in1 6
WallSwitch 4 2
WindowCovering 9 2

Ohjelmistot

Versionhallinta

Projektin versionhallinta hyödyntää git-versionhallintajärjestelmää. Projektin lähdekoodit on mahdollista noutaa versionhallinnasta oheista ohjeistusta noudattamalla. Ohjeistus on kirjoitettu Windows-käyttöjärjestelmän näkökulmasta, mutta pienillä muutoksilla sitä on mahdollista hyödyntää myös Linux- ja Mac-käyttöjärjestelmillä. Git itsessään on alustariippumaton ja sen eri versiot on mahdollista ladata osoiteesta: http://git-scm.com/

Esivalmistelut

Lataa ja asenna Git osoitteesta: http://code.google.com/p/msysgit/downloads/list versio 1.7.4 Huom! version 1.7.3 toimivuudessa on ongelmia.

Git käyttöliittymävaihtoehdot

Git-versionhallinnan työkaluja voi käyttää kahdella eri käyttöliittymällä: komentorivipohjaisella(Git Bash) ja graafisella(Git GUI). Seuraavassa on esitetty Git:in tärkeimpien ominaisuuksien käyttäminen kummallakin käyttöliittymällä.

Git Bash (komentorivipohjainen)

Esivalmistelut

1. Luo asetustiedosto ~/_netrc, missä ~ tarkoittaa käyttäjän kotihakemistoa, joka voi olla esimerkiksi:

/c/Users/<käyttäjätunnus>/_netrc

missä <käyttäjätunnus> on Windows:n käyttäjätunnus. Jos käyttäjätunnus olisi esimerkiksi Red_Label, _netrc-tiedosto luotaisiin hakemistoon:

/c/Users/Red_Label/

2. Tallenna tiedostoon ~/_netrc sisältö

machine wiki.ase.tut.fi
login <git_käyttäjätunnus>
password <git_salasana>

HUOM! Git käyttäjätunnuksen ja salasanan saa versionhallinnan ylläpitäjältä.

Lähdekoodien noutaminen komentoriviltä (git bash)

$ git clone https://wiki.ase.tut.fi/git/ASE-2610.git/ <kohdehakemisto>

missä

  • <kohdehakemisto> on hakemisto / polku, johon versionhallinan sisältö noudetaan
  • $ viittaa komentokehotteeseen

Uusien tiedostojen lisääminen versionhallintaan komentoriviltä (git bash)

$ cd <kohdehakemisto>
$ git add <lisättävä_tiedosto>
$ git commit -am "<lokiviestin_sisältö>"
$ git push origin master

missä

  • <kohdehakemisto> on hakemisto / polku, johon versionhallinnan sisältö on noudettu
  • <lisättävä_tiedosto> on lisättävän tiedoston nimi tai polku lisättävään tiedostoon
  • <lokiviestin_sisältö> on versionhallintaan kirjoitettava tiedostoa koskeva lokiviesti
  • $ viittaa komentokehotteeseen

Huom! origin master tarvitaan vain ensimmäisellä lisäyskerralla. Toisella lisäys kerralla riitää siis pelkän git push komennon käyttäminen

Huom! Tiedostoja lisättäessä on mahdollista hyödyntää myös jokerimerkkejä kuten esimerkiksi *. Jos lisättävä kansio sisältää sellaisia tiedostoja, joita ei ole tarkoitus lisätä versionhallintaan, hakemistoon on mahdollista luoda .gitignore-tiedosto, johon on mahdollista määritellä niiden tiedostojen nimet, joita ei haluta lisätä versionhallintaan. .gitignore.tiedosto voisi sisältää esimerkiksi:

*.user
tiedoston_yksi_nimi.tiedoston_pääte

Muutosten noutaminen versionhallinnasta (git bash)

$ cd <kohdehakemisto>
$ git pull

missä

  • <kohdehakemisto> on hakemisto / polku, johon versionhalinnan sisältö on noudettu
  • $ viittaa komentokehotteeseen

Git GUI (graafinen)

  1. Lataa tästä asetustiedoston sisältävä .zip tiedosto ja tallenna sen sisältö käyttäjän kotihakemistoon, joka on esimerkiksi C:\Users\<käyttäjätunnus>\
  2. Muokkaa asetustiedostoa esimerkiksi WordPadillä tms. siten, että kohtaan <user> kirjoitat ylläpidolta saadun käyttäjätunnuksen ja kohtaan <password> kirjoitat tunnusta vastaavan salasanan
  3. Suorita sovellus Git GUI
  4. Klikkaa "Clone Existing Repository"
  5. Syötä kohtaan "Source Location" hakemisto: https://wiki.ase.tut.fi/git/ASE-2610.git/
  6. Syötä haluamasi lähdekoodin kohdehakemisto kohtaan "Target Directory"
  7. Klikkaa "Clone"
  8. Ohjelma kysyy haluatko pakata tiedostoja, klikkaa "No"
  • Mikäli kaikki meni oikein, valitsemaasi kohdehakemistoon pitäisi ilmestyä projektin lähdekoodi

Ajantasaisten lähdekoodien noutaminen (Git GUI)

  1. Git GUI ylävalikosta: Remote->Fetch from -> origin
  2. Ylävalikosta: Merge->Local merge->Merge

Ympäristömuuttujat

Ennen sovelluksen kääntämistä käyttäjän tarvitsee luoda ympäristömuuttuja HACROOT, jonka tulee osoittaa edellisessä kohdassa määritettyyn hakemistoon <kohdehakemisto>. Jos esimerkiksi <kohdehakemisto> osoitttaa hakemistoon C:\temp, tulee ympäristömuuttujan HACROOT sisällöksi määrittää C:\temp. Muuttujan määrittämää polkua hyödynnetään esimerkiksi Qt:n projektiasetuksissa. Ohje Win7

Qt mahdollistaa ympäristömuuttujaan viittamiseen sekä Windows että Linux spesifisillä notaatioilla. HUOM! toisin kuin Qt:n dokumentaatio väittää ympäristömuuttujat toimivat vasta Qt Creatorin versiosta 2.1 eteenpäin.

WeatherService

WeatherService tuottaa pienostaloautomaatio sovellukselle sen tarvitseman sääinformaation, jota sovelluksessa hyödynnetään esimerkiksi pistorasioiden ohjaamiseen. Sääasema tallentaa mitatut säätiedot sql-tietokantaan, josta ne voidaan hakea alusta ja käyttöjärjestelmä riippumatonta webservice-palvelua hyödyntämällä. Samaa webservice-palvelua hyödynnetään myös muissa Systeemitekniikan laitoksen kursseissa, kuten esimerkiksi kurssilla ASE-6060: Tietoverkkopohjainen automaatio. Fyysisesti sääasema sijaitsee Systeemitekniikan laitoksen katolla.

gSOAP

gSOAP on avoimen lähdekoodin käyttöjärjestelmä riippumaton työkalu, jonka avulla on mahdollista automaattisesti generoida WSDL-palvelukuvauksesta C++-kirjasto stubit. Generoituja tiedostoja on mahdollista hyödyntää sellaisenaan WebService-palvelua hyödyntävässä sovelluksessa.

Työkalun versio 2.8.8 on saatavilla projektihakemiston alihakemistossa zip. Tarvittaessa työkalu on ladattavissa myös gSOAP-projektin kotisivulta.

HUOM! Työkalun versiota 2.8.0 aikaisempien versioiden toiminnassa esiintyi projektityön aikana ongelmia.

Esivalmistelut

Lataa sääaseman palvelukuvaus osoitteesta: http://130.230.141.73:8080/TVPAWS/services/WeatherService?wsdl. Vaihtoehtoisesti voit hyödyntää myös projektihakemiston alihakemistosta source/thirdparty/WeatherService löytyvää tiedostoa: WeatherService.xml

Korvaa WeatherService.xml tiedossa rivi:

<element maxOccurs="unbounded" minOccurs="0" name="item" type="tns1:WSMeasurement"/>

rivillä:

<element maxOccurs="unbounded" minOccurs="0" name="measurement" type="tns1:WSMeasurement"/>

HUOM! Versionhallintaan tallennettu WeatherService.xml sisältää jo edellä esitetyn korjauksen.

Stubien generointi

Pura projektihakemiston alihakemistosta zip löytyvä (tai gSOAP-projektin kotisivuilta ladattu) paketti: gsoap_2.8.8.zip haluamaasi paikkaan. Oheinen esimerkki olettaa, että paketti on purettu projektihakemiston alihakemistoon source/thirdparty/WeatherService/gsoap. Jatkossa hakemistoon source/thirdparty/WeatherService/gsoap viitataan nimellä gsoap-hakemisto.

Avaa gsoap:n alihakemistosta gsoap/bin, joka sisältää valmiiksi käännetyt binäärit stubien generointiin käytettävistä wsdl2h- sekä soapcpp2-sovelluksista Windows-, Linux- sekä Mac-käyttöjärjestelmille. Kopioi käyttämäsi käyttöjärjestelmän vaatimat binäärit wsdl2h- sekä soapcpp2-sovelluksista projektihakemiston alihakemistoon source/thirdparty/WeatherService. Kopioi gsoap:n alihakemistosta gsoap tiedostot: typemap.dat, stdsoap2.cpp sekä stdsoap2.h projektihakemiston alihakemistoon source/thirdparty/WeatherService. Tämän jälkeen stubien generointi voidaan suorittaa alla olevien komentojen avulla. Komennot olettavat, että niiden vaatimat tiedostot, kuten esimerkiksi WeatherService.xml ja TARGET_FILE.h (selitys alla) löytyvät samasta hakemistosta kuin komentojen käynnistämät sovellukset.

1) wsdl2h -n ws -o TARGET_FILE.h WeatherService.xml

2) soapcpp2 -1 -C -d TARGET_DIRECTORY -i -I PATH_TO_GSOAP_IMPORT TARGET_FILE.h
  • muuttujien selitykset
    • TARGET_FILE: tiedosto, jota wsdl2h-työkalu käyttää tuottamansa tiedon tallentamiseen
    • TARGET_DIRECTORY: polku ja hakemisto, johon soapcpp2-työkalu generoi tarvittavat tiedostot
    • PATH_TP_GSOAP_IMPORT: polku gsoap:n import-kansioon. Tarvitaan vain jos generoinnissa hyödynnetään STL:n ominaisuuksia (oletus)

HUOM! Versionhallinnan polku source/thirdparty/WeatherService sisältää WeatherService.xml-tiedostosta valmiiksi generoidut stubit

Kääntäminen

  • Avaa projektihakemiston alihakemistosta source/WeatherService Qt-projekti WeatherService.pro
  • Valitse Qt Creatorin valikosta Build --> Build Project WeatherService
  • Onnistuneen käännösprosessin seurauksena projektihakemiston alihakemistoon lib ilmestyy kirjasto libWeatherService.a

HUOM! Windows-ympäristössä kirjasto tulee linkittää libws2_32.a-kirjaston kanssa

FAQ

  • Käännettäessä tulee virhe
undefined reference to 'namespaces' in file: stdsoap2.cpp line: 8470

Tarkasta muistitko ottaa mukaan *.nsmap tiedoston eli löytyykö käännettävästä lähdekooditiedostosta oheisen kaltainen rivi:

#include *.nsmap

HUOM! *.nsmap tarvitsee luonnollisesti korvata oikealla nsmap-tiedostolla.

OpenZWave

Seuraavissa kappaleissa kuvatut ongelmat johtuvat pitkälti OpenZWave-kirjaston ongelmasta (engl. issue) nro 26. Jatkossa esitettyjä korjauksia ei siis välttämättä tarvita, jos ko. ongelma on korjattu. Projektityön valmistuessa ko. ongelman tila oli vielä avoin.

Esivalmistelut Windows-ympäristössä

  • Tiedosto: cpp/src/platform/windows/SerialControllerImpl.cpp

muuta rivi:

m_hSerialController = CreateFile( _SerialControllerName.c_str(),

muotoon

m_hSerialController = CreateFileA( _SerialControllerName.c_str(),
  • Tiedostot: cpp/src/platform/windows/LogImpl.h sekä cpp/src/platform/windows/LogImpl.cpp

linkitä projekti tiedostojen:

cpp/src/platform/windows/LogImpl.cpp
cpp/src/platform/windows/LogImpl.h

sijasta tiedostoihin:

cpp/src/platform/qt/LogImpl.cpp
cpp/src/platform/qt/LogImpl.h

HUOM! Open-zwave-kirjaston Windows-loki-toteutuksessa hyödynnetään Microsoftin tietoturvallisia tiedoston käsittely metodeja fopen_s-, sprintf_s-, vprintf_s- sekä strcpy_s metodeja, joille ei löydy suoria vastineita Qt-kehitysympäristön kirjastoista. cpp/src/platform/qt-kansiossa sijaitsevia LogImpl.*-tiedostoja on muokattu siten, että niissä hyödynnetään edellä listatuiden metodien sijaan fopen-, sprintf-, vprintf- sekä strcpy-metodeja, joille löytyy vastineet Qt-kehitysympäristöstä. Käytännössä tämä tarkoittaa sitä, että open-zwave-kirjaston lokimetodien päivittyessä (cpp/src/platform/windows-kansion sisältämät LogImpl.*-tiedostot) myös cpp/src/platform/qt-kansion sisältämät LogImpl.*-tiedostot tarvitsee päivittää. Suoria korjausohjeita on mahdonta kirjoittaa, sillä muutettavat kohdat riippuvat täysin open-zwave-kirjastossa tapahtuvissa muutoksista. Ohessa on kuitenkin muutamia ohjeita korjauksia helpottamaan:

1) tiedoston: cpp/src/platform/qt/LogImpl.cpp alkuun tarvitsee usein lisätä seuraavat include-lauseet:

   #include <string>
   #include <stdio.h>

2) fopen_s-metodi:

   - metodikutsu tarvitsee muuttaa muotoon: fopen
   - metodikutsun ensimmäinen parametri (muotoa: FILE** pFile) tarvitsee poistaa
   - fopen_s palauttaa kokonaisluvun, kun taas fopen palauttaa osoittimen (engl. handle) avattuun tiedostoon. Tämä tarvitsee otta huomioon virhetarkastelussa.

3) sprintf_s-metodi:
   - metodikutsu tarvitsee muuttaa muotoon: sprintf
   - metodikutsun toinen parametri (muotoa: size_t sizeOfBuffer) tarvitsee poistaa

4) vprintf_s-metodi:
   - metodikutsu tarvitsee muuttaa muotoon: vprintf
   - metodikutsun toinen parametri (muotoa: size_t numberOfElements) tarvitsee poistaa

5) strcpy_s-metodi:
   - metodikutsu tarvitsee muuttaa muotoon: strcpy
   - metodikutsun toinen parametri (muotoa: size_t numberOfElements) tarvitsee poistaa
  • Tiedostot: cpp/src/platform/windows/TimeStampImpl.h sekä cpp/src/platform/windows/TimeStampImpl.cpp

linkitä projekti tiedostojen:

cpp/src/platform/windows/TimeStampImpl.cpp
cpp/src/platform/windows/TimeStampImpl.h

sijasta tiedostoihin:

cpp/src/platform/qt/TimeStampImpl.cpp
cpp/src/platform/qt/TimeStampImpl.h

HUOM! Open-zwave-kirjaston aikaleiman toteutuksessa hyödynnetään Visual Studio sidonnaista syntaksia lukutarkkuuden ilmaisemiseen. cpp/src/platform/qt-kansiossa sijaitsevia TimeStampImpl.*-tiedostoja on muokattu siten, että niissä lukutarkkuus ilmaistaan eksplisiittisen tyyppimuunnoksen avulla. Käytännössä tämä tarkoittaa sitä, että open-zwave-kirjaston aikaleimametodien päivittyessä (cpp/src/platform/windows-kansion sisältämät TimeStampImpl.*-tiedostot) myös cpp/src/platform/qt-kansion sisältämät TimeStampImpl.*-tiedostot tarvitsee päivittää. Suoria korjausohjeita on mahdonta kirjoittaa, sillä muutettavat kohdat riippuvat täysin open-zwave-kirjastossa tapahtuvissa muutoksista. Ohessa on kuitenkin muutamia ohjeita korjauksia helpottamaan:

- Visual Studiossa luvun tarkkuus voidaan ilmaista lukuun liitettävän suffiksin avulla. Esimerkiksi 10000i64 tarkoittaa, että luku 10000 halutaan ilmaista 64-bittisenä kokonaislukuna.
- Qt-kehitysympäristössä vastaava saadaan aikaiseksi syntaksilla: (int64)10000
  • HID-ajuri

HID-ajurin kääntäminen edellyttää, että sovellus voidaan linkittää staattisesti Microsoftin laitehallinta kirjastoon setupapi.lib. Vaatimus staattisesta linkityksestä on seurausta HAC-sovelluksen (huonosta :) suunnittelusta. Setupapi.lib kirjasto toimitetaan Visual Studion mukana. Jos käytössäsi on Visual Studio kehitysympäristö, kopioi tiedosto setupapi.lib projektihakemiston kansioon lib. Jos käytössäsi ei ole Visual Studio kehitysympäristöä setupapi.lib on epävirallisesti ladattavissa täältä.

Kääntäminen

  • Avaa projektihakemiston alihakemistosta source/OpenZWave_updated Qt-projekti OpenZWave.pro
  • Valitse Qt Creatorin valikosta Build --> Build Project OpenZWave
  • Onnistuneen käännösprosessin seurauksena projektihakemiston alihakemistoon lib ilmestyy Windows-ympäristössä kirjasto libOpenZWaveWin.a ja Linux-ympäristössä kirjasto libOpenZWaveUnix.a

Kirjaston dokumentaatio

OpenZWave-kirjaston lähdekoodin dokumentaatio on muotoiltu siten, että kirjaston metodeista on mahdollista generoida Doxygen-työkalun avulla HTML-, Latex- sekä xml-pohjaiset esitysmuodot. Doxygen-työkalun Windows-versio on saatavissa projektihakemiston alihakemistosta zip. Muille käyttöjärjestelmille soveltuvat versiot sekä mahdolliset päivitykset voi ladata Doxygen-projektin kotisivulta.

HUOM! Generoinnin tulokset ovat revisiokohtaisia, jolloin OpenZWave-kirjaston päivittyessä dokumentaation generointi tulee suorittaa uudelleen.

Kirjaston konfigurointi

OpenZWave-kirjaston ajonaikaisia asetuksia on mahdollista muuttaa muokkaamalla projektihakemiston alihakemistosta source/thirdparty/OpenZWave-updated/config/ löytyvää tiedostoa: options.xml. Muutokset tähän tiedostoon eivät edellytä kirjaston kääntämistä uudelleen. Options.xml sisältää esimerkiksi seuraavat asetukset:

<Options>
  <Option name="logging" value="true" />
  <Option name="Associate" value="true" />
  <Option name="NotifyTransactions" value="false" />
  <Option name="DriverMaxAttempts" value="5" />
  <Option name="SaveConfiguration" value="true" />
</Options>

HUOM! Asettamalla kohdan: DriverMaxAttempts arvoksi (engl. value) 0 (nolla) OpenZWave-kirjaston ajurinhallinta yrittää alustaa sarja-/HID-ajuria ikuisesti, joten arvoa nolla tulee käyttää varoen.

Qt

HUOM! Käytä Qt Creatorin versiota 2.1 tai uudempi. Vanhempien versioiden kanssa ympäristömuuttujat eivät toimi oikealla tavalla.

Esimerkki makefile

QT       += core gui

TARGET = HAC
TEMPLATE = app

INCLUDEPATH += \
    ../../thirdparty/OpenZWave/cpp/src

win32 {
    LIBS += \
        ../../../lib/libws2_32.a

    INCLUDEPATH += \
        ../../thirdparty/OpenZWave/cpp/src/platform/qt

    SOURCES += \
        ../../thirdparty/OpenZWave/cpp/src/platform/windows/EventImpl.cpp

    HEADERS += \
        ../../thirdparty/OpenZWave/cpp/src/platform/windows/EventImpl.h
else {
    # ADD LINUX / MAC DEPENDENCIES ETC HERE
}

OTHER_FILES += \
    ../../thirdparty/WeatherService/WeatherServiceSoapBinding.nsmap

SOURCES += \
    main.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

RESOURCES += \
    ../../../resources.qrc

HAC - Home Automation Client

Home Automation Client on projektityön aikana toteutettu ohjelmisto, joka kokoaa yhteen sääpalvelun ja OpenZWave-kirjaston ominaisuuksia. Home Automation Client sisältää graafisen käyttöliittymän, jonka avulla on mahdollista esimerkiksi testata sääpalvelun ja ZWave-verkon toimintaa sekä ohjata projektityössä käytettyjä ZWave-laitteita.

Sovelluksen rakenne

Kuva1: Järjestelmän yleiskuva

Tämän luvun tarkoituksena on havainnollistaa projektityön aikana kehitetyn HAC - Home Automation Client sovelluksen rakennetta. Sovellus on ohjelmoitu kokonaisuudessaan C++-ohjelmointikielellä, alusta- ja käyttöjärjestelmä riippumatonta Qt-sovelluskehitysympäristöä hyväksi käyttäen. ZWave-toiminnallisuus on toteutettu kolmannen osapuolen kehittämää OpenZWave-cross-platfrom-kirjastoa (revisio 487) hyväksi käyttäen.

Yleiskuva järjestelmän rakenteesta on esitetty kuvassa 1, jossa on esitetty ainoastaan järjestelmän peruskomponentit ja niiden väliset riippuvuudet. Komponenteista WeatherService kapseloi sääaseman SOAP-palvelurajapinnan. Itse sääaseman toteutus ja siihen liittyvä tekniikka on toteutettu omana eriskoistyönään, eikä se siis ole ollut varsinaisesti tämän projektityön kohteena. ZWaveClient puolestaan kapseloi projektityössä käytettävän OpenZWave-kirjaston toiminnallisuuden. Sovellustasolla Home Automation Clientin tehtävänä on hallita eri järjestelmien välistä yhteistyötä. Laitewidgetin ( engl. NodeWidget ) ja Ohjainwidgetin ( engl. ControllerWidget ) toimintaa on kuvattu tarkemmin seuraavissa alikappaleissa. Kuvassa 1 esitettyjen käyttöliittymäkomponenttien tarkoituksena on havainnollistaa mihin kaikkiin toiminnallisuuksiin sovelluksista löytyy oma hallintaikkunansa.

Kuva2: HAC luokkakaavio

Yksityiskohtaisempi rakennekuva sovelluksesta on esitetty kuvassa 2, josta on mahdollista havaita esimerkiksi itse toteutettujen komponenttien riippuvuudet Qt:n kirjastoista. Erityistä huomiota kannattaa kiinnittää WeatherClient- ja HAC-luokkiin. Kuten kuvasta 2 voidaan havaita ko. luokat on periytetty Qt:n QThread-kirjastosta. Lisäksi ZWaveDiagnosticWindow-luokan alustustoiminnossa käytetään erillistä säiettä. Toiminnallisella tasolla tämä tarkoittaa sitä, että osa luokkien toiminnallisuudesta suoritetaan omissa säikeissään, joka mahdollistaa tapahtumien suorittamisen rinnakkain. Tällöin esimerkiksi käyttöliittymä ei lukitu sääpalvelun toimintoja käsiteltäessä.

Kuva3: Sekvenssikaavio ZWave-verkon alustamisesta

Käyttöliittymästä tapahtuvaa Z-Wave-verkon alustamista on havainnollistettu kuvassa 3. Erityistä huomiota kannattaa kiinnittää InitZwave-säikeen käyttöön. Kaikissa tilanteissa verkon alustaminen ei välttämättä onnistu. Tälläinen tulee kysymykseen esimerkiksi silloin, kun Z-Wave-USB-adapteri ei ole liitettynä tietokoneeseen. Tällaisien tilanteiden havainnointia varten verkon alustamiseen on ohjelmoitu ajastin, jonka lauetessa sovellus keskeyttää verkon alustamisen. Käyttäjälle välitetään tieto verkon alustamisen onnistumisesta tai epäonnistumisesta käyttöliittymän Z-Wave-ikkunan avulla. Näitä toiminnallisuuksia on havainnollistettu käyttöliittymää käsittelevässä luvussa.

Kuva4: Sekvenssikaavio sääarvojen lukemisesta

Uusien sääarvojen lukemista sekä niiden päivittämistä käyttöliittymään on havainnollistettu kuvassa 4. Erityistä huomiota kannattaa kiinnittää siihen, että uusien sääarvojen lukeminen suoritetaan eri säikeessä käyttöliittymän kanssa. Tämä mahdollistaa sen, että käyttäjä voi suorittaa muita toimenpiteitä käyttöliittymän avulla samalla kun arvoja haetaan sääasemalta. Kuvassa 4 on esitetty sääarvojen lukemiseen käytettävän säikeen testaus, mutta vastaavaa toiminnallisuutta hyödynnetään myös todellisen simulaation yhteydessä.

Kuva5: Sekvenssikaavio laitteisto simulaation suorittamisesta

Laitteistosimulaation suorittamista on havainnollistettu kuvassa 5. Erityistä huomiota kuvassa kannattaa kiinnittää siihen, että sekä uusien sääarvojen lukeminen että mittaustietojen perusteella tapahtuva ZWave-laitteiden ohjaus tapahtuvat omissa säikeisään. Kuten pelkkien sääarvojen tapauksessa, myös tämän tarkoituksena on mahdollistaa muiden toimenpiteiden suorittaminen käyttöliittymästä simulaation ollessa käynnissä.

Ohjaimen toiminnot

Ohjaimella suoritettavat toiminnot ovat visualisoitu ohjainwidgetin käyttöliittymään. Ohjainwidget on toteutettu koneeseen liitettävälle Viasens 100-ohjaimelle. Ohjainwidgetin saa esiin käyttöliittymässä valitsemalla Z-Wave-pääikkunasta Viasens 100-ohjaimen ikonilla varustetun painikkeen. Seuraavissa alikappaleissa on kuvattu ohjainwidgetin kautta tapahtuvat toiminnot.

Laitteiden lisäys ja poisto

Jotta ohjainwidgetin kautta voidaan poistaa ja lisätä laitteita verkkoon, tulee liitetyn ohjaimen olla verkon isäntäohjain. Tämän voi tarkistaa ohjainwidgetin Perustiedot-välilehdestä (kuva 19), jossa kohdassa Role tulee lukea:

Role: Primary

Tämän jälkeen laitteita voi lisätä ja poistaa Verkko-välilehden (kuva 20) kautta valitsemalla toimintoja vastaavat painikkeet ja asettaa kohdelaite lähettämään NIF-kehyksensä. Laitteen lisäämisen sekvenssikaavio on esitelty kuvassa 6.

Kuva6: Laitteen lisäys

HUOM Jos käyttäjä haluaa lisätä verkkoon aiemmin poistetun laitteen, tulee hänen muokata zwaveclient.h-tiedostoa siten, että laitteen nimen kohdalle asetetaan uusi laitetunnus (ks. 7.4.3).

HUOM! Nähtävästi OpenZWave-kirjaston toteutuksesta johtuen liitetty ohjain näkyy aina isäntäohjaimena, vaikka ohjaimen tulisi olla toissijaisena haettuaan Veralta verkon konfiguraation. Tämän vuoksi poistaessa laitetta verkosta ohjainwidgetin kautta, poistuu se ainoastaan liitetyn ohjaimen verkon konfiguraatiosta. Tästä seuraa, ettei ohjainwidgetin kautta voi lisätä poistettua laitetta myöhemmin ennenkuin kyseinen laite on myös poistettu Veran ohjelmiston kautta.

Ohjaimen resetointi

Ohjaimen voi resetoida joko kovasti tai pehmeästi. Pehmeässä resetoinnissa verkon konfiguraatio ei häviä, kun taas kovassa resetoinnissa ohjaimen koko verkon konfiguraatio poistetaan. Kovan resetoinnin jälkeen liitetty ohjain on valmis luomaan uutta verkkoa eikä se ole enää osana toista verkkoa. Resetointi tapahtuu ohjainwidgetin Verkko-välilehdessä (kuva 20) valitsemalla haluttu resetointitapa ja painamalla lopuksi Reset-painiketta. Jos ohjain oli osana Veran verkkoa ennen kovaa resetointia, tulee käyttäjän poistaa ohjain Veran verkosta käyttämällä Veran ohjelmistoa resetoinnin jälkeen. Ohjaimen kova resetointia on esitely kuvassa 7.

Kuva7: Ohjaimen kova resetointi

HUOM! Koska OpenZWave-kirjastolta ei jostain syystä saada tarvittavaa DriverReset-ilmoitusta kovan resetoinnin onnistumisesta, resetoidaan toteutetussa sovelluksessa ohjaimen ajuri ja alustetaan verkko uusiksi, jolloin verkon konfiguraation tyhjentyminen taataan. Verkon alustaminen toteutetaan automaattisesti, mutta jos verkon alustus epäonnistuu, tulee käyttäjän käynnistää sovellus uudestaan.

Ohjaimen liittäminen verkkoon

Ohjaimen liittäminen Veran verkkoon etenee seuraavasti:

  • Aseta Vera lähettämään verkkonsa konfiguraatio (joko painamalla Z-Wave-nappia tai ohjelmallisesti)
  • Valitse ohjainwidgetin Verkko-välilehdessä Receive Configuration-painike

Jos käyttäjä asettaa Veran lähettämään konfiguraationsa painamalla Veran Z-Wave-nappia, tulee käyttäjän varmistaa että Veran edessä olevat ledit vilkkuvat.

  • Verkon konfiguraation haun jälkeen käyttäjän tulisi painaa uudelleen Veran Z-Wave-nappia, jos sen edessä olevat ledit vielä vilkkuvat. Tämä toimenpide siirtää

Veran takaisin normaaliin tilaan.

Verkon konfiguraation haun etenemistä on esitelty kuvassa 8.

Kuva8: Verkon konfiguraation haku

HUOM Verkon konfiguraation hakemisen jälkeen käyttäjän tulisi joko käynnistää sovellus uudestaan tai kova resetoida Viasens-ohjain. Tämä siksi, että ohjainten laitetunnukset määräytyisivät oikein. Kyseinen ongelma johtuu nähtävästi OpenZWave kirjaston toteutuksesta.

HUOM Verkon konfiguraation hakemisessa ilmeni ongelmia joidenkin laitteiden tietojen hakemisessa. Tämä tarkoittaa sitä, ettei kyseisiä laitteita pysty käyttämään sovelluksen kautta. Ongelmaa voi kokeilla ratkaista valitsemalla laitewidgetin Perustiedot-välilehdestä Query Node-painikkeen (kuva 28). Jos ongelma ei ratkea, tulee käyttäjän kova resetoida Viasens -ohjain ja kokeilla hakea verkon konfiguraatiota uudelleen.

Käyttötapausten hallinnointi

Käyttötapauksen vastaavat toiminnaltaan parituksia sillä erolla, että käyttötapaukset mahdollistavat eri komentojen lähettämisen yhtäaikaisesti kohdelaitteille. Lisäksi käyttötapauksissa voidaan käyttää mitä tahansa kohdelaitteen tukemaa komentoluokkaa, kun taas parituksessa yleensä käytetään Basic-komentoluokkaa. Käyttötapaukset ovat täten ryhmiä, joihin on mahdollista sisällyttää haluttu määrä laitteita ja antaa niille halutut arvot, jotka astuvat voimaan käyttötapauksen aktivoituessa. Käyttötapauksen aktivoi tapahtuma, joka tässä sovelluksessa on toteutettu käyttämällä ajastinta. Käyttötapauksen luonti tapahtuu ohjainwidgetin Käyttötapaukset-välilehdestä (kuva 23) valitsemalla Add Scene-painikkeen, jonka jälkeen käyttäjä nimeää käyttötapauksen (kuva 24). Tämän jälkeen käyttäjän on mahdollista asettaa haluamansa laitteet arvoineen valittuun käyttötapaukseen (kuva 25) valitsemalla 'Add Value to Scene'-painikkeen.

HUOM! Talletetut käyttötapaukset eivät toimi oikealla tavalla, joten ne poistetaan sovelluksen lopettamisen yhteydessä. OpenZWave-kirjaston ongelma.

Orjalaitteiden toiminnot

Orjalaitteiden tiedot ja toiminnot ovat visualisoitu laitewidgettien käyttöliittymään, jotka saadaan näkyviin valitsemalla halutun laitteen painike Z-Wave-pääikkunasta. Seuraavissa alikappaleissa on esitelty orjalaitteita koskevat toiminnot.

Konfiguraatioparametrien asetus

Jotkin orjalaitteet vaativat konfiguraatioparametrien asettamisen, jotta laite toimisi kunnolla. Kyseiset parametrit ovat nähtävissä ja asetettavissa laitewidgetin Konfiguraatio-välilehden (kuva 34) kautta. Parametrien nimet ja määrät on asetettu jokaisen laitteen manuaalin mukaisesti. Uuden arvon asettaminen tapahtuu yksinkertaisesti kirjoittamalla uusi arvo vanhan päälle ja painamalla Enter-näppäintä.

Paritusten hallinta

Laitewidgetin Paritukset-välilehdestä (kuva 32) on nähtävissä laitteen kaikki paritusryhmät, paritusryhmien koot sekä paritetut laitteet. Paritettavien laitteiden lisäys tapahtuu yksinkertaisesti valitsemalla Add Association-painike, jonka jälkeen käyttäjä valitsee pudotusvalikosta paritettavan laitteen (kuva 33). Poistaminen tapahtuu valitsemalla esitetystä taulukosta paritettu laite, joka halutaan poistaa, ja painamalla Remove Association-painiketta. Parituksen lisäämisen etenemistä on havainnollistettu kuvassa 9.


Kuva9: Parituksen lisäys

Konfigurointi

Sovelluksen nykyisessä versiossa sovelluksen kaikkia asetuksia ei ole mahdollista muuttaa dynaamisesti. Käytännössä tämä tarkoittaa siis sitä, että sovellus on käännettävä aina uudelleen kun asetustiedostoihin (constants.h sekä zwaveclient.h) on tehty muutoksia.

Käyttäjän on mahdollista säätää dynaamisesti mm. käytettävän portin, lokitiedoston ja konfiguraatiotiedoston polkua, alustamisessa käytettävän ajastimin aikakatkaisuaikaa sekä määrittää käytetäänkö sovellusta offline-tilassa, jolloin ohjainta ei käytetä lainkaan. Kaikki nämä asetukset ovat määriteltävissä sovelluksen ZWave-diagnostiikkaikkunan kautta (kuva 15).

Seuraavissa kappaleissa on käsitelty lyhyesti sovelluksen staattisten asetuksien muokkaaminen. Kappaleet eivät käsittele kaikkia mahdollisia asetuksia, mutta ne antavat hyvän yleiskuvan asetuksista. Sovelluksen vakiot on pyritty nimeämään siten, että niiden nimistä on mahdollista päätellä mihin parametriin ne vaikuttavat.

Sääpalvelun asetukset

Sääpalvelun asetuksia on mahdollista muokata muuttamalla rivejä:

const bool USE_DUMMY_VALUES = true;

const int WEATHER_VALUE_READ_INTERVAL = 1000;
const int WEATHER_LOOP_TEST_DURATION = 5000;

const std::string WEATHER_DATE_FORMAT = "dd-MM-yyyy";
const std::string WEATHER_TIME_FORMAT = "hh:mm:ss.z";

const double MAX_DUMMY_TEMPERATURE_VALUE = 40;
const double MIN_DUMMY_TEMPERATURE_VALUE = -40;

Ylläolevista riveistä rivit:

const bool USE_DUMMY_VALUES = true;

määrittävät käytetäänkö sovelluksessa todellisia vai generoituja säämittauksia. Asettamalla vakion arvoksi "true" sovellus generoi säämittauksia annetulla välillä. Vastaavasti asettamalla ko. vakion arvoksi "false" sovelluksessa käytetään todellisia säämittauksia, jotka luetaan Systeemitekniikan laitoksen katolla olevalta sääasemalta.

Muokkaamalla rivejä:

const int WEATHER_LOOP_TEST_DURATION = 5000;

const double MAX_DUMMY_TEMPERATURE_VALUE = 40;
const double MIN_DUMMY_TEMPERATURE_VALUE = -40;

on mahdollista määrittää generoitaviin säämittauksiin liittyviä parametreja, kuten esimerkiksi maksimi- ja minimilämpötilat, joiden välillä sovellus generoi lämpötilamittauksia. Vakion WEATHER_LOOP_TEST_DURATION avulla on mahdollista määrittää generointijakson pituus millisekuneissa.

Lopuksi muokkaamalla rivejä:

const int WEATHER_VALUE_READ_INTERVAL = 1000;

const std::string WEATHER_DATE_FORMAT = "dd-MM-yyyy";
const std::string WEATHER_TIME_FORMAT = "hh:mm:ss.z";

on mahdollista määrittää kuinka useasti uusia säämittauksia luetaan sekä käyttäjälle esitettävän päivämäärän ja aikaleiman esitysmuodot. Arvojen lukutiheys määritellään millisekunneissa. HUOM! Käytännössä todellisten arvojen lukutiheyttä rajoittaa esimerkiksi tietoliikenneyhteyden viive, jolloin esimerkiksi arvo 10 ei takaa sitä, että uusi arvo olisi käytettävissä 10 millisekunnin välein.


Poistetun laitteen lisääminen verkkoon

Kun käyttäjä haluaa lisätä aiemmin poistetun laitteen takaisin verkkoon, tulee hänen päivittää laitteen laitetunnus manuaalisesti, jotta laite toimisi sovelluksessa oikein. Laitetunnukset ovat esiteltyinä zwaveclient.h-tiedostossa muodossa laitenimi = laitetunnus. Alla on esitetty tämän hetkinen konfiguraatio:

    const uint8 VERA_CONTROLLER = 1;      
    const uint8 PLUG_CONTROLLER_1 = 38;      
    const uint8 PLUG_CONTROLLER_2 = 84;      
    const uint8 WALL_SWITCH = 4;             
    const uint8 SENSOR_3_IN_1 = 6;         
    const uint8 DIMMABLE_LIGHT = 7;
    const uint8 WINDOW_COVERING = 9;

Esimerkiksi, jos käyttäjä poistaa verkosta seinäkytkimen (engl. Wall switch) ja haluaa sen liittää takaisin verkkoon, etenevät toimenpiteet seuraavasti:

  • liitä seinäkytkin ohjaimella verkkoon, jolloin ohjain generoi seinäkytkimelle uuden laitetunnuksen
  • seinäkytkimestä muodostuu käyttöliittymään 'unknown'-painike, koska laitetta ei tunnisteta sovelluksen rakenteesta johtuen
  • valitse kyseinen painike, jolloin uuteen ikkunaan aukeaa laitewidget. Katso seinäkytkimen uusi laitetunnus (engl. Node ID)
  • avaa zwclient.h-tiedosto ja aseta kyseinen laitetunnus kohtaan WALL_SWITCH ja käynnistä sovellus uudestaan

Käyttöliittymä

Oheisessa kuvasarjassa on havainnollistettu sovelluksen käyttöliittymäikkunoita. Jokaisesta ikkunasta, sovelluksen pääikkunaa, ZWave-diagnostiikkaikkunaa ja versiotietoja esittävää ikkunaa lukuunottamatta, on esitetty kaksi kuvaa. Toinen ikkunoista esittää ikkunan tilaa heti sovelluksen käynnistyksen jälkeen ja toinen ikkunan tilaa sovelluksen suorituksen aikana. ZWave-diagnostiikkaikkunan tapauksessa kuvia on esitetty kolme, joista kaksi ensimmäistä kuvaavat tilaa heti käynnistyksen jälkeen. Toinen kyseisistä kuvista havainnollistaa mahdollisten asetuksien säätämistä. Tämän järjestelyn tarkoituksena on havainnollistaa käyttäjälle millaisia arvoja eri käyttöliittymäikkunoiden kentät voivat saada. Sovelluksen pää- ja versiotietoikkunat eivät sisällä muuttuvaa tietoa, mistä syystä niistä on vain yksi kuva. Ohjain- ja laitewidgetin käyttöliittymät ovat havainnollistettuna erillisissä alikappaleissa.

Ohjainlaitteen käyttöliittymä

Alla on esitetty ohjainwidgetin ikkunaa, jonka käyttäjä saa näkyviin valitsemalla ZWave-pääikkunasta Viasens-ohjaimen ikonilla varustetun painikkeen. Ohjainlaitteen käyttöliittymä rakentuu välilehdistä ja muutaman välilehden sisältö muuttuu käyttäjän syötteistä riippuen, mitä on pyritty kuvissa havainnollistaa.

Orjalaitteen käyttöliittymä

Alla on esitetty laitewidgettien käyttöliittymää, joka myös on jaoteltu välilehtiin. Laitewidget on toteutettu verkon orjalaitteille ja myös verkon toiselle ohjainlaitteelle, vaikkakin ohjaimen tiedot ovat rajallisemmat ja lisäksi ohjainlaite ei tue laitewidgetin toimintoja. Laitewidgetin saa esiin valitsemalla ZWave-pääikkunasta jonkin haluamansa orjalaitteen ikonilla varustetun painikkeen.

Laitewidgetin toiminnallisuus eroaa orjalaitteiden kesken kahdelta osalta:

  • arvojen näyttäminen
  • arvojen asetus

Sensorin tapauksessa arvoja näytetään neljä ( patterin tila,lämpötila,liike, valoisuus ). Loput orjalaitteet ovat toimilaitteita ja näyttävät vain yhden arvon, jonka yksikkö/laatu riippuu itse laitteen tarkemmasta toiminnallisuudesta ( esim. jännitearvo ). Arvoja voi asettaa vain toimilaitteille ja riippuen toimilaitteen toiminnallisuudesta, voi käyttäjä joko vain asettaa toimilaitteen päälle/pois päältä tai syöttää arvoja toimilaitteelle. Kyseiset muuttuvat ominaisuudet ovat kaikki nähtävissä laitewidgetin perustiedot-välilehden sivulta ja ne ovat havainnollistettu alla olevissa kuvissa. Näiden lisäksi kullakin laitteella on eriävä määrä paritusryhmiä sekä konfiguraatioparametreja.

Laitteen tietojen haku

Sekä ohjain- että laitewidgetissä on kyselytilakenttä (engl. Query status), joka ilmaisee onko laitteen tiedot saatu haettua onnistuneesti. Kyseinen kenttä sijaitsee perustiedot-välilehdessä ja se voi saada kolme eri arvoa:

  • Wait..Node isn't queried yet - laitteen tietoja ei vielä ole haettu
  • Query failed, requiry the node - laitteen tietojen haku epäonnistui
  • Node is queried - laitteen tiedot on haettu onnistuneesti

Jos laitteen tietojen haku epäonnistui, käyttäjä voi pyytää Open ZWave -kirjastoa hakemaan tiedot uudestaan valitsemalla Query Node-painikkeen.

FAQ

  • Q: Windows-ympäristössä käännettäessä tulee virhe
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x3161): undefined reference to `select@20'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x3250): undefined reference to `__WSAFDIsSet@8'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x3282): undefined reference to `__WSAFDIsSet@8'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x32bc): undefined reference to `__WSAFDIsSet@8'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x32ed): undefined reference to `WSAGetLastError@0'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x5c33): undefined reference to `WSAGetLastError@0'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x5ce6): undefined reference to `recv@16'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0xf630): undefined reference to `recvfrom@24'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0xf64c): undefined reference to `ntohl@4'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0xf660): undefined reference to `WSAGetLastError@0'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0xf6e1): undefined reference to `recv@16'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x10418): undefined reference to `recv@16'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x104ca): undefined reference to `send@16'

                                                .
                                                .
                                                .

../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x1721e): undefined reference to `setsockopt@20'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x1729a): undefined reference to `htons@4'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x172c8): undefined reference to `bind@12'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x172f9): undefined reference to `WSAGetLastError@0'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x17359): undefined reference to `setsockopt@20'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x17369): undefined reference to `WSAGetLastError@0'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x173ce): undefined reference to `WSAGetLastError@0'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x17415): undefined reference to `htonl@4'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x17436): undefined reference to `listen@8'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x17445): undefined reference to `WSAGetLastError@0'
../../../lib/libWeatherService.a(stdsoap2.o):stdsoap2.cpp:(.text+0x169e0): undefined reference to `WSACleanup@0'
  • A: Tarkasta onko projekti käännöksessä mukana linkki libws2_32.a kirjastoon (uusin versio wsock32-kirjastosta)
    • Qt:ssa linkittäminen tapahtuu lisäämällä Makefile-tiedostoon alla olevan esimerkin mukaiset rivit
    • esimerkissä:
      • win32-makron tarkoituksena on varmistaa, ettei ko. kirjastoa linkitetä sovellukseen Linux- ja Mac-käännöksissä
      • libws2_32.a löytyy projektihakemiston alikansiosta "lib", joten korjaa tarvittaessa yllä olevan esimerkin mukainen polku oikeaksi
win32 {
    LIBS += \
        ../../../lib/libws2_32.a
}


  • Q: Pistorasiaohjain (Everspring AN1582) ilmoittaa tehonkulutuksen toissijaiselle ohjaimelle (Viasens100), mutta ei Veralle
  • A: Pistorasiaohjain kykenee raportoimaan tehonkulutuksensa ainoastaan yhdelle laitteelle, joka määritetään parittamalla pistorasiaohjain halutun laitteen kanssa ryhmään (engl. group) 1. Pistorasiaohjaimen tarkempi toiminta on kuvattu ohjaimen käyttöohjeissa.


  • Q: Mistä tiedän mihin ryhmään laite on paritettu?
  • A: Laitteen tiedot ovat nähtävissä Veran käyttöliittymän kautta tai OpenZWave-kirjaston generoimasta asetustiedostosta, josta tulee etsiä oheisen kaltaisia rivejä:
<Group index="2" max_associations="5" label="Group 2" auto="false">
    <Node id="1" />
    <Node id="9" />
</Group>


  • Q: Käytössäni on Windows PC, johon USB-adapteri on liitetty, mutta OpenZWave-kirjaston loki-tiedostoon kirjautuu virheilmoitus:
2011-04-18 15:48:29:008 Opening controller \\.\COM13
2011-04-18 15:48:29:008 Open serial port \\.\COM13
2011-04-18 15:48:29:008 Cannot open serial port \\.\COM13. Error code 2
2011-04-18 15:48:29:008 Failed to open serial port \\.\COM13
2011-04-18 15:48:29:008 Failed to init the controller (attempt 1)
  • A: 1) Tarkasta oletko asentanut USB-adapterin vaatiman ajurin. Ajuri on asennettavissa versionhallinnan zip-kansiosta (ZWUSBSerial.zip) 2) Tarkasta sarjaportin asetukset constants.h-tiedostosta


  • Q: Käytössäni on Linux PC, johon USB-adapteri on liitetty, mutta OpenZWave-kirjaston loki-tiedostoon kirjautuu virheilmoitus:
2012-02-22 23:41:12:540 Added driver for controller /dev/ttyACM3
2012-02-22 23:41:12:540   Opening controller /dev/ttyACM3
2012-02-22 23:41:12:541 Trying to open serial port /dev/ttyACM3 (attempt 1)
2012-02-22 23:41:12:541 WARNING: Tried to write driver config with no home ID set
2012-02-22 23:41:12:541 ERROR: Cannot open serial port /dev/ttyACM3. Error code 2
  • A: 1) Tarkasta ovatko USB-portin oikeudet kunnossa 2) Tarkasta sarjaportin asetukset constants.h-tiedostosta


  • Q: Uusien Z-Wave-laitteiden lisääminen VERAn kautta epäonnistuu
  • A: Tarkasta onko VERA Z-Wave-verkon pääohjain (engl. primary controller). Varmista, että lisättävä laite on lisäystilassa.


  • Q: EZMotion 3in1 -anturin tiedot eivät päivity käyttöliittymään
  • A: Varmista, että laite on hereillä painamalla laitteen wake-up-painiketta

Linkkejä

Z-Wave

http://www.zwaveeurope.com/index.php
http://www.pcworld.com/article/123856/first_look_catch_the_home_automation_zwave.html
http://zwaveworld.com/forum/
http://zwaveworld.com/forum/index.php?showforum=12
http://zwaveworld.com/forum/index.php?showtopic=160
http://www.dvdplaza.fi/forums/showthread.php?t=60294

Z-Wave - Where to Buy

http://www.verkkokauppa.com/
http://www.zwave4u.com/
http://www.eurox10.com/Products/ZWave.htm
http://www.domoticaforum.eu/viewtopic.php?t=2294
http://www.mobileworld.fi/PublishedService?file=&pageID=3&action=view&groupID=434&OpenGroups=436

Created by Marko Seppälä and Mika Heikkilä, Copyright TTY / ASE

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox