A következő címkéjű bejegyzések mutatása: OpenHAB. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: OpenHAB. Összes bejegyzés megjelenítése

2016. április 11., hétfő

Mesék a házautomatizálásról - A fűtés csatlakoztatása

Ahogy korábban már említettem, van egy rakás Conrad (ELV) FHT80B termosztátom, rádióvezérelt radiátorszelepekkel, és van egy CUL v3.2-es eszközöm. Most megpróbálom ezeket az OpenHAB-hoz kötni.
Mielőtt nekiláttam ennek a projectnek felraktam azt a CUL firmware-t amit az OpenHAB-hoz javasoltak, innen:
http://culfw.de/culfw.html
Az összeköttetésről itt találhatók információk:
https://github.com/openhab/openhab/wiki/FS20-Binding
https://github.com/openhab/openhab/wiki/CUL-Binding

Rakjuk össze a "binding"-ot:
1. Másoljuk be a szükséges addon-okat a /opt/openhab/addons mappába:
org.openhab.io.transport.cul-1.8.1.jar
org.openhab.binding.fht-1.8.1.jar
Ha van más FS20-as eszközöd a fűtésvezérlésen felül akkor még erre is szükséged lehet:
org.openhab.binding.fs20-1.8.1.jar

2. Szerkeszd meg a konfigurációs állományt /opt/openhab/configurations/openhab.cfg. Add hozzá a végéhez ezeket:
fht:device=serial:/dev/ttyACM0
fht:baudrate=38400
fht:parity=0
fht:housecode=XXXX
A housecode szabadon választott. Egy négyjegyű hexadecimális szám. És feltétlenül szükséges. Ha nem adod meg, a kommunikáció nem fog elindulni, és erről egy büdös hangot sem szól, logol. Hibát csak akkor látsz a logban, ha debuc módba kapcsolod.
Ez a kód a CUL eszköz kódja lesz és semmi köze az FHT80b kódjaihoz. Továbbá, ha azt akarod, hogy a dolog működjön, bizonyosodj meg róla, hogy az FHT80b "CEnt" beállítása "nA"-ra van kapcsolva.

3. Akkor most létre kell hozni, néhány item-et az items fájlban az FHT80B-hez. Valahogy így:
Number fhtRoom1Desired "Desired-Temp. [%.1f °C]" { fht="housecode=552D;datapoint=DESIRED_TEMP" }
Number fhtRoom1Measured "Measured Temp. [%.1f °C]" { fht="housecode=552D;datapoint=MEASURED_TEMP" }
Number fhtRoom1Valve "Valve [%.1f %%]" { fht="housecode=552D;address=00;datapoint=VALVE" }
Switch fhtRoom1Battery "Battery [%s]" { fht="housecode=552D;datapoint=BATTERY" }
Contact fhtRoom1Window "Window [MAP(en.map):%s]" { fht="housecode=52FB;address=7B;datapoint=WINDOW" }
A housecode a fenti példában az FHT80B eszközé. Ki tudod olvasni az FHT80B-ből. A code1 az első, a code2 a második része. Az olvasott kódókat át kell alakítani hexára.

4. Most el kell helyezni az olvasott értékeket a sitemap-on:
Frame label="Heating"
{
 Setpoint item=fhtRoom1Desired minValue=6 maxValue=30 step=0.5 
 Text item=fhtRoom1Measured
 Text item=fhtRoom1Valve 
 Text item=fhtRoom1Battery
 Text item=fhtRoom1Window
}
Az eredmény valami ilyesmi:
Még egy megjegyzés: Légy türelmes. Az adatok begyűjtése lassú. Néhány adat, csak akkor fog megérkezni amikor változik. Tehát eltarthat jó néhány percig, akár órákig is amíg megkapod az adataid.

2016. április 10., vasárnap

Mesék a házautomatizálásról - Lámpakapcsolgatás

Menjünk tovább. Ez csak egy kis kopipaszta programozás.
A kódot innen szedtem:
http://iot-playground.com/blog/2-uncategorised/40-esp8266-wifi-relay-switch-arduino-ide

Lecseréltem az SSID-t és a jelszót, rákötöttem egy 150 ohmos ellenállást, meg az első LED-et amit az alkatrészes dobozban találtam az ESP8266 megfelelő lábára. Letöltöttem a kódot, elindítottam a soros monitort a Visual Studio-ban:

Ha kapcsolódom a webszerverhez egy böngészőből, be és ki tudom kapcsolni a LED-et.

Akkor most integráljuk az OpenHAB-ba.
Nem csináltam mást, mint módosítottam a korábbi rule-okat. Először, csak hozzáadtam a http hívásokat a korábbi szabályokhoz, de ez nem volt kielégítő. A távirányítóról tudtam vezérelni a LED-et, de a böngészőből nem. Tehát kicsit jobban hozzányúltam.

Íme az eredmény:
import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*

rule "GarageLightRemote"
when
    Item KeeLoq_Remote_B changed from CLOSED to OPEN
then
    if(Garage_Light.state == ON)
    {
        sendCommand(Garage_Light, OFF)
    }
    else
    {
        sendCommand(Garage_Light, ON)
    }
end

rule "GarageLightOffAction"
when
    Item Garage_Light changed from ON to OFF
then
        sendHttpGetRequest("http://10.1.2.129/gpio/0")
end

rule "GarageLightOffAction"
when
    Item Garage_Light changed from OFF to ON
then
        sendHttpGetRequest("http://10.1.2.129/gpio/1") 
end
És az áramkör:

2016. április 9., szombat

Mesék a házautomatizálásról - ESP8266, Arduino, Visual Studio

Nem vagyok nagy barátja az Arduino ökoszisztémának. A hulladék fejlesztőkörnyezet, a normális debugger hiánya távol tartott tőle.
A másik oldalon, be kell vallanom, sokat fejlődött az utolsó találkozásunk óta, és egyre megkerülhetetlenebbnek tűnik.
Az OpenHAB rendszeremhez szükségem van távoli szenzorokra, beavatkozó szervekre. Nagyrészüket építeni (és nem venni) akarom. Körülnézve két könnyen használható megoldást találtam:
  • ESP8266 alapú WiFi modulok
  • MySensors.org NRF24L01+ és Arduino alapú mesh hálózat
Mindkettőt ki akarom próbálni. Miután nem igazán van arduino-m (van pár a szekrényben, de különböző gyártóktól, különböző nyűgökkel, és nem igazán illenek ebbe a projectbe), tehát az ESP8266-tal akarok először játszani.
Azt olvastam, hogy a LUA értelmező nem igazán jó nagyobb projektekhez, így eleve az Arduino környezetet választottam. Egyenlőre csak tanulom, tehát nem tudom, hova vezet.
Az első célom, hogy képes legyek GPIO-t kapcsolgatni az ESP8266-on HTTP REST API-n keresztül.
Ahogy feljebb, már jeleztem, kellően útálom az Arduino IDE-t. Korábban különböző problémákba futottam vele amikor a 3D nyomtató Marlin firmware-ét próbáltam konfigurálni. Később megtaláltam, hogy a megbízható Visual Studio-t (amit napi szinten használok a munkámban, különböző projectekhez) is használhatom, ezzel a kiegészítéssel:
http://www.visualmicro.com/
a feladatra.
Rakjuk össze a környezetet:

1. Telepítsük fel az Arduino IDE-t. Innen tölthető le: https://www.arduino.cc/download_handler.php?f=/arduino-1.6.8-windows.exe

2. Telepítsük fel a Visual Studio 2015-öt. Én a Professional kivitelt használom, de az ingyenes is megfelel. Innen tölthető le: https://go.microsoft.com/fwlink/?LinkId=615448&clcid=0x409
Bizonyosodjunk meg róla, hgy a C++ komponens telepítésre került.

3. Indítsuk el a Visual Studio-t. Menjünk a Tools/Extensions and Updates menübe. Válasszuk ki az Online pontot a baloldali panelen. Keressünk rá az Arduino-ra
Töltsük le az Arduino IDE for Visual Studio komponenes-t


Telepítsük fel és az utasításoknak megfelelően, indítsuk újra a gépet.

4. Az újraindítás után megjelenik az Arduino konfigurációja. Be kell állítanunk az Arduino IDE elérési útját és a az ESP8266 Board Manager URL-t:
http://arduino.esp8266.com/stable/package_esp8266com_index.json


Nyomjuk meg az OK gombot.

5. A menüsoron az Arduino board választó mellett kattintsunk a nagyító ikonra. Válasszuk ki a Manage Boards fület.
Nyissuk ki az ESP8266 pontot és jelöljük meg a 2.1.0-ás verziót.
A felugró ablakban nyomjunk OK-t a telepítéshez



Ezen a ponton egy kenmény hibába futottam. A gépem tartományi tag. A dolgaimat mezei felhasználóként futtatom, ami csökkentett jogokat jelent (természetesen van admin felhasználóm, de csak akkor használom, ha szükség van rá). Úgy tűnik, hogy a telepítő hibás. A profilkönyvtáram nevében van egy pont. A telepítő ezt átkonvertálta aláhúzásra bizonyos helyeken, és egy Access Denied hibát dobott - mert ugye a könyvtár nem létezett és létre sem tudta hozni.

Tehát létrehoztam a könyvtárat adminként, és adtam magamnak jogot rá. Ezután a telepítő lefutott, de az első fordításnál hibát kaptam. A hibaüzenet teljesen használhatatlannak bizonyult. Jó néhány próbálkozás, Process Monitorozás (Micosoft, korábban Sysinternals eszköz), bemásoltam a helyükre az aláhúzásos profil temp könyvtárában felejtett dolgokat. Mostmár működik, sok óra elvesztegetve.

6. Próbáljuk ki
Gyors tesztet akartam, tehát, csak létrehoztam egy demo projectet, a blink-et a Visual Studio listájáról.



Miután kiválasztottam a megfelelő board-ot (esetemben a NodeMCU v0.9-et) és soros portot, feltöltöttem a kódot és elkezdett működni.

Úgy tűnik az ESP8266 környezet kész egy bonyolultabb feladatra.

2016. április 6., szerda

Mesék a házautomatizálásról - Távirányító integráció

Ahhoz, hogy az ugrókódos távirányító működni tudjon az OpenHAB-bal, az első dolog, hogy a GPIO binding-ot engedélyezni kell. Egy egészen használható dokumentációt találunk az OpenHAB wikiben:

https://github.com/openhab/openhab/wiki/GPIO-Binding

Nagyjából azt követtem el, amit a doksi írt, de némi módosítés szükséges volt.

1. Telepítsük fel a natív JNA library-t:
apt-get install libjna-java

2. Módosítsuk a /opt/openhab/start.sh-t
Adjuk hozzá a java parancssori paraméterek listájához:
-Djna.boot.library.path=/usr/lib/jni

3. Módosítsuk a /etc/init.d/openhab fájlt.

Adjuk hozzá a DAEMON_ARGS paraméterek listájához:
-Djna.boot.library.path=/usr/lib/jni

és adjuk hozzá a GPIO unexport parancsokat a daemon leállási feladatokhoz:



4. A korábban letöltött distribution-1.8.1-addons.zip-ből (része az OpenHAB letöltéseknek) csomagoljuk ki a következő fájlokat:
     org.openhab.io.gpio
     org.openhab.binding.gpio

A /opt/openhab/addons könyvtárba

5. Indítsuk újra az OpenHAB-ot:

/etc/init.d/openhab restart

Mostmár az OpenHAB kész a GPIO kezelésére. Kell némi konfiguráció módosítás, hogy használni tudjuk.

6. Addjuk hozzá a szükséges elemeket.

A GPIO bemenetek Contact-okkal reprezentálhatóak az OpenHAB-ban. Tehát adjuk hozzá a  /opt/openhab/configurations/items könyvtár valamelyik fájljához (Én itt már kidobtam a demo konfigurációt, tehát nálam ez a saját házam item listája) a következőket:

Contact KeeLoq_Remote_A "Remote A [MAP(en.map:%s]" (<ID of your Group>, Windows) { gpio="pin:66"}
Contact KeeLoq_Remote_B "Remote B [MAP(en.map:%s]" (<ID of your Group>, Windows) { gpio="pin:67"}
Contact KeeLoq_Remote_C "Remote C [MAP(en.map:%s]" (<ID of your Group>, Windows) { gpio="pin:69"}
Contact KeeLoq_Remote_D "Remote D [MAP(en.map:%s]" (<ID of your Group>, Windows) { gpio="pin:68"}

Ha minden rendben van a következőt fogjuk látni:



És, ha megnyomjuk a távirányító valamelyik gombját a, a closed felirat open-re vált, majd vissza, ha elengedjük a gombot.

7. A világításhoz, ez nem lesz elég
Arra van szükségünk, hogy megtartsuk a státuszt, ahogy az be és kikapcsol.
Tehát, hozzádunk még egy Switch-et az items fájlhoz:

Switch Garage_Light "Garage Light" (<ID of your Group>, Lights)

Ez csak egy egyszerű kapcsoló, tehát, ha távirányítóról akarjuk vezérelni, még egy szabályt is létre kell hozni. Ezt a /opt/openhab/configurations/rules mappában lévő rules fájl szerkesztésével oldhatjuk meg:

rule "GarageLightToggle"
    when
        Item KeeLoq_Remote_B changed from CLOSED to OPEN
    then
        if(Garage_Light.state == ON)
        {
            sendCommand(Garage_Light, OFF)
        }
        else
        {
            sendCommand(Garage_Light, ON)
        }
end

Ezek után, ha megnyomjuk a B gombot a távirányítón, be és ki fogja kapcsolni a fenti switch elemet.
Ez még nincs hatással a fizikai lámpára. Ahhoz még gyártanom/vennem kell valami beavatkozó szervet.