2016. április 14., csütörtök

Mesék a házautomatizálásról - ModulMánia

Ahogy tovább gondolkodtam, egyértelművé vált, hogy egy moduláris rendszert akarok csinálni. Valami hátlap egyenméretű modulokkal, a szenzorok, beavatkozó szervek, mikrovezérlő és a tápellátás különálló modulokon lesz.

Ennél még tovább mentem. Megterveztem a dobozt, a hátlapot és a modul méreteit. A modulok 5x5cm-es panelen kerülnek megvalósításra. Miért? Mert ez a méret olcsón (10$/10db) rendelhető a Kínai NYÁK üzemekből.



A tervezett modul csatlakozó tartalmaz egy SPI-t, egy I2C-t és nyolc GPIO-t. Ez 17 érintkező együtt a két tápsínnel (3.3V és 5V). A 17 érintkezős 0.1" osztású egysoros tüskesor elfér a panel 5cm-es élén.

A rendszerhez kitaláltam jó néhány modult, amiket meg akarok valósítani. A lista nem teljes és a modulok még változhatnak:
  • Relé - Egy csatornás relé modul
  • RCR - Az ugrókódos távirányító vevőjének a modulja
  • Hálózati érzékelő - A hálózati feszültség meglétének ellenőrzése, ezt terveztem a kapcsolókhoz
  • Hőmérséklet/páratartalom - AM2302 alapú modul (a szenzor maga, kívül is, belül is elhelyezhető)
  • Esp01 - ESP-01 alapú "agy" a modul kapcsolható két GPIO és egy I2C között
  • Esp07/12 + pcf8574 - ESP-07 vagy ESP-12 alapú modul I2C bővítővel
  • Esp12e/f - Kérdőjeles. Ez akkor hozható létre, ha a belső flash memória SPI portja könnyedén megosztható külső SPI eszközökkel - tesztelés szükséges
  • Arduino + nrl24l01+ - MySensors.org szenzor "agy"
  • Tápegység - 5V/3.3V képes táp, egy HLK-PM01 és egy 3.3V LDO vagy buck konverter alapon
  • Nrl24l01+ - Nordic kommunikációs modul - elsősorban a Beaglebone-hoz készül, hogy MySensors.org átjátszó lehessen belőle
  • Barométer
  • Busz bővítő
  • Teljesítmény mérő - Áramváltó alapú
  • Teljesítmény mérő - Hall elemes
  • Teljesítmény mérő - Digitális mérőóra impulzus számláló
  • Gázóra Hall szenzor
  • SSR Modul
  • GPIO Modul - Izolált I/O Modul, esetleg DC/DC konverterrel együtt.
Továbbá készül 4, 6, és 8 modulos hátlap. A hátlaphoz lesz egy plusz csatlakozó ami lehetővé teszi, hogy az egészet egy BeagleBone CAPE-hez csatlakoztassuk. Ez azt jelenti, hogy a moduláris rendszert a BBG alapú OpenHAB központhoz is fogom tudni használni.

Egy 3D nyomtatható, parametrikus doboz is készül.

Néhány panel terve már elkészült. Ugyan meg lehet rendelni a Kínai gyártótól, ugyanakkor minden terv idáig egyoldalas, ami lehetővé teszi, a könnyű házi gyártást.
A tervek nagyja (nem mind) kizárólag furatszerelt alkatrészeket használ, ami könnyebbé teszi az életet.

És így fog kinézni a modul és doboza. Első OpenSCAD-es animációm!


2016. április 12., kedd

Mesék a házautomatizálásról - Hálózati feszültség érzékelő

Nem, nem akarom a hálózati feszültséget mérni (még).
A garázsvilágítást akarom átalakítani, a lehető legkisebb átalakítással.
Mit jelent ez?
A lámpát két kapcsoló kapcsolja (egy a garázsban, egy a házban a garázs ajtaja mellett) van, alternatív konfigurációban. Meg akarom tartani annak a lehetőségét, hogy a lámpa változatlanul kapcsolható legyen a kapcsolókról. Nem vagyok villanyszerelő, nem igazán akarok hozzányúlni a kapcsolókhoz és a falban menő kábelekhez (amúgy is sok piszokkal járó munka). Szerencsére a lámpa mellett van folyamatos tápellátás is (nem csak ami a kapcsolókról jön)
A terv az, hogy a beavatkozó szervet rákötöm a folyamatos tápforrásra és érzékelem, hogy a kapcsolók be, vagy ki vannak kapcsolva. Ezt a jelet arra használom, hogy átkapcsoljam a lámpát és nem az aktuális státusza határozza meg a lámpa állapotát. Amikor átkapcsolom valamelyik kapcsolót (be -> ki, ki-> be), változik a lámpa státusza.
Az érzékeléshez szükségem van valami elektronikára. A hálózat, nem gyerekjáték, a megfelelő leválasztás kritikus.
A lehető legegyszerűbb áramkört szeretném megvalósítani:
Egy kapacitív tápegység (két kondi, két ellenállás, egy dióda és egy zener), ehhez jön még egy optocsatoló. Az egész lehet, vagy 300Ft.
It a rajz:

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

Javítás: HP 3478A

A fóliakondenzátorok öngyógyulnak, mint tudjuk:
Igen, látom:

A HP 3478A multiméter RIFA hálózati szűrőkondenzátora

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.

2016. április 5., kedd

Postás

A postásunk a cégnél egy idióta.
 Ezt eddig is tudtam, de ma kiverte a biztosítékot.
Az egy dolog, hogy rugalmatlan. Az egy másik, hogy ha van egy csomag amit nem kell aláírni (ne tévedjünk, Kínai e-bay-es pár grammos cuccról beszélek), és van egy másik amit alá kell írni, akkor lazán lenn hagyja a portán a nem aláírós darabot és feljön az emeletre az aláíróssal.
A kommunikációja katasztrófa.
Ember!!! Én az ügyfél vagyok, te meg a szolgáltató. Az, hogy te a hivatal vagy én meg az alatvaló, 27 éve elmúlt!!! Ha én (általános alany, a polgárt értsd rajta) nem rendelek vackokat Kínából, nem adok fel levelet, nem veszek igénybe postai szolgáltatásokat akkor neked nem lesz munkád, pénzed. Fogd már fel!!!
Na szóval. Ma fel jött az emeletre (tudom mert rálátok a folyosóra), itt kószált, be nem csöngetett. Azt hittem nem hozzánk jött. Majd távozott.
Már rutinos vagyok, gondoltam valamit lerakott a portán. Hát le...
Csomagot is, meg CSOMAG ÉRTESÍTŐT.
Hát, hogy az a jó büdös...
Azért mert képtelen becsöngetni, kopogni, füstjeleket eresztgetni, vagy mit tudom én, holnap mehetek be a "nyolcablakvandeörüljhaegyetkinyitunk" postára.
Ha szólok, akkor most kirugják, vagy valaki elmagyarázza neki, hogy mi a dolga?
Kicseszni nem akarok vele, csak megkapni a cuccaim. Kézbe. LEGALÁBB AKKOR AMIKOR ITT VAGYOK!!!

2016. április 4., hétfő

Összevissza gondolatok - Akku monitor

Jött ma egy hírlevél a Maximtól.
Benne ez az új termék:
https://www.maximintegrated.com/en/products/power/battery-management/MAX17201.html

MAX17201, MAX17205, MAX17211, MAX17215: Functional Diagram

Akku monitor SHA-256-al. Lehetővé teszi a gyártóknak, hogy kizárják az utángyártott akkumulátorokat.
Ok, ezt a gyártók szeretik, mert szerintük:
- Biztosítani tudjuk, hogy a termék a gyártói specifikáció szerint működjön, hosszú távon.
Szerintem:
- Biztosítani tudjuk, az alapító tengerparti házát, a Ferrari-ját, a marketing/management vízfej költségeit.

Ez részemről eléggé ellenséges hozzáállás, de nézzünk egy példát:
Vettem egy Fluke PM6685-ös frekvenciamérőt. A szerkezet 1998-ban volt új. Az új ára sok ezer dollár lehetett (sajnos nem találtam meg az eredeti MSRP-t). Így 18 év után biztonsággal lejárt minden gyártói támogatás. A szerkezet akkumulátorról is működőképes. Az akku természetesen döglött benne (miután fel is puffadt, a műanyag tartóját is eltörte).
Volt benne két 6V/3Ah zselés aksi. Elmentem a Lomex-be vettem két újat, megragasztottam a tartót és működik.

Ugyanilyen kvalitású műszer ma:
A fenti chip az akkumulátorpackban.
Tíz évvel később (nem 18-cal): A műszert még az használja aki eredetileg megvette. Ilyesminek nem 3 év az elévülése mint egy notebooknak. Aksi döglött, támogatás lejárt, a tulaj kénytelen az egészet kidobni, mert még eladni sem tudja.