OpenHAB Beginner's Guide Bahagi 2: ZWave, MQTT, Mga Panuntunan at Charting

OpenHAB Beginner's Guide Bahagi 2: ZWave, MQTT, Mga Panuntunan at Charting

Libre ay hindi laging nangangahulugang 'hindi kasing ganda ng bayad', at ang OpenHAB ay walang kataliwasan. Ang open source software ng automation ng bahay ay higit na lumalagpas sa mga kakayahan ng anumang iba pang system ng automation sa bahay sa merkado - ngunit hindi madaling mag-set up. Sa katunayan, maaari itong maging ganap na nakakabigo.





Sa bahagi 1 ng gabay, pinagdaanan kita pag-install ng OpenHAB sa isang Raspberry Pi , ipinakilala ang pangunahing mga konsepto ng OpenHAB, at ipinakita sa iyo kung paano idagdag ang iyong mga unang item sa system. Ngayon ay lalayo pa tayo:





  • Pagdaragdag ng mga aparatong ZWave
  • Pagdaragdag ng isang Harmony Ultimate controller
  • Nagpapakilala ng mga panuntunan
  • Ipinakikilala ang MQTT, at pag-install ng isang MQTT broker sa iyong Pi, na may mga sensor sa isang Arduino
  • Pagrekord ng data at graphing ito

Panimula sa Z-Wave

Ang Z-Wave ay naging nangingibabaw na proteksyon sa automation ng bahay sa loob ng maraming taon: maaasahan ito, malawakan na binuo, at gumagana sa isang mas mahabang saklaw kaysa sa anumang iba pang mga produktong smart home. Mayroong daan-daang mga sensor ng Z-Wave na magagamit sa iyo na nagsasagawa ng malawak na hanay ng mga gawain. OpenHAB maaari magtrabaho kasama ang Z-Wave, ngunit isang abala upang mai-set up, at ang pagiging maaasahan ay hindi garantisado.





Kung isinasaalang-alang mo ang pagbili ng isang bahay na puno ng mga sensor ng Z-Wave na partikular na ginagamit para sa OpenHAB, hinihimok kita na muling isaalang-alang. Maaari itong gumana nang mahusay para sa iyo, o maaaring masalanta ng maliliit ngunit paulit-ulit na mga problema. Hindi bababa sa, huwag bumili ng isang bahay na puno ng mga sensor hanggang sa magkaroon ka ng pagkakataong subukan ang ilan. Ang tanging dahilan lamang upang pumili ng Z-Wave ay kung hindi ka 100% naayos sa OpenHAB, at nais na iwanang bukas ang iyong mga pagpipilian sa hinaharap: halimbawa ang Z-Wave ay gumagana sa Samsung SmartThings hub, pati na rin ang mga tukoy na hub na Z-Wave tulad ng Homeseer, at isang hanay ng iba pang mga pagpipilian sa software tulad ng domoticz .

Kahit na nagsasama ang OpenHAB ng isang nagbubuklod na Z-Wave, kailangan mo pa rin i-configure muna ang network ng Z-Wave , bago masimulan ng OpenHAB na magtanong ito para sa data. Kung mayroon kang isang board ng Rasberry controller, mayroon kang ilang software na ibinigay para sa pag-configure ng network, kaya hindi namin ito sasakupin dito. Kung bumili ka ng isang Aeotec USB Z-Stick controller o katulad, malamang na wala kang kasamang anumang software, kaya't basahin mo.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB upang Lumikha ng Gateway (Ordinaryong Puti) BUMILI NA NGAYON SA AMAZON

Kung mayroon ka nang pag-setup ng Z-Wave network , maaari mo lamang mai-plug ang iyong controller sa Pi at simulang i-configure ang pagbubuklod at mga item. Kung ito ang iyong unang pamamasyal sa Z-Wave, medyo mas kumplikado ito.

Una, sa panig ng hardware: ang bawat controller ay may sariling paraan ng pagpapares sa mga aparato (panteknikal na kilala bilang 'mode na pagsasama' kung saan nakatalaga ang isang node ID). Sa kaso ng Aotec Z-Stick, nangangahulugan ito na i-unplug ito mula sa USB port, at pinindot ang pindutan nang isang beses upang ilagay ito sa mode na pagsasama. Pagkatapos dalhin ito malapit sa aparato na iyong ipinapares, at pindutin din ang pindutan ng pagsasama doon (mag-iiba rin ito: ang aking socket ng Everspring ay nangangailangan ng pindutan upang pindutin ang 3 beses nang mabilis, kaya ang aralin dito ay basahin ang manu-manong para sa iyong aparato) .





Ang Z-Stick ay mabilis na kumikislap upang ipahiwatig ang tagumpay. Nagpapakita ito ng mga problema kapag isinaksak ito pabalik sa Pi, dahil nakatalaga ang isang bagong port. I-restart ang iyong Pi upang i-reset ito pabalik sa karaniwang port kung nalaman mong dinamika itong muling naitalaga sa iba. Mas mahusay pa rin: huwag isaksak ito sa Pi hanggang sa magawa mo muna ang lahat ng mga pares ng hardware.

Pag-install ng HABmin at Z-Wave Bindings

Dahil ang OpenHAB ay hindi talagang isang utility sa pagsasaayos para sa Z-Wave, mag-i-install kami ng isa pang tool sa pamamahala ng web na ginagawa - isang bagay na tinatawag na HABmin. Tumungo sa Repository ng HABmin Github i-download ang kasalukuyang paglabas. Kapag na-unzip mo ito, mahahanap mo ang 2 .jar mga file sa direktoryo ng addons - dapat ilagay ang mga ito sa kaukulang direktoryo ng addons sa iyong OpenHAB Home share (kung gumagamit ka rin ng Aotec gen5 Z-Stick, tiyaking nakakuha ka ng hindi bababa sa bersyon 1.8 ng Z-Wave binding) .





Susunod, lumikha ng isang bagong folder sa direktoryo ng webapps, at tinawag itong 'habmin' (mahalaga ang maliit na titik). Kopyahin ang natitirang mga nai-download na file doon.

Tandaan: Mayroon ding isang HABmin 2 sa ilalim ng aktibong pag-unlad. Ang pag-install ay pareho ngunit may isang karagdagang .jar addon. Maaaring suliting subukang pareho lamang upang makita kung alin ang gusto mo.

Kung hindi mo pa nagagawa, isaksak ang iyong controller sa iyong Pi. I-type ang sumusunod upang mahanap ang tamang port.

ls / dev / tty *

Naghahanap ka ng anumang may USB sa pangalan, o sa aking partikular na kaso, ipinakita ng Z-stick ang sarili nito bilang / dev / ttyACM0 (isang modem). Maaaring mas madaling gawin ang utos nang isang beses bago mo ito mai-plug in, at isang beses pagkatapos, upang makita mo kung anong mga pagbabago kung hindi ka sigurado.

Buksan ang OpenHAB config file at baguhin ang seksyon sa Z-Wave, na hindi pinapalagay ang parehong linya at inilalagay ang iyong aktwal na address ng aparato. Ang isang panghuling hakbang para sa akin ay payagan ang gumagamit ng OpenHAB na i-access ang modem.

sudo usermod -a -G dialout openhab

Ngayon, upang maaksiyon ang lahat, muling simulan ang OpenHAB

sudo serbisyo openhab restart

Inaasahan kong, kung susuriin mo ang log ng pag-debug, makakakita ka ng katulad nito. Binabati kita, nagsasalita ka na ngayon ng Z-Wave. Maaari mo ring makita ang debug log na binaha ng mga mensahe mula sa iba't ibang mga Z-Wave node. Magsimula tayo sa pamamagitan ng pag-check sa HABMIN upang makita kung ano ang nahanap: http: //openhab.local: 8080 / habmin / index.html (pinapalitan ang openhab.local sa iyong Raspberry Pi hostname o IP address).

Maraming makikita sa HABMIN, ngunit talagang nababahala lamang kami sa Configuration -> Bindings -> Z-Wave -> Mga Device tab, tulad ng nakikita mo sa ibaba. Palawakin ang node upang mai-edit ang lokasyon at label ng pangalan para sa iyong kadalian ng sanggunian.

Pag-configure ng Mga Item na Z-Wave

Ang bawat aparato ng Z-Wave ay magkakaroon ng isang tukoy na pagsasaayos para sa OpenHAB. Sa kabutihang palad, ang karamihan sa mga aparato ay na-explore na at magkakaroon ng mga halimbawa doon para sa iyo. Ang pag-configure ng mga pasadyang aparato na hindi kinikilala ay lampas sa saklaw ng gabay na ito, ngunit ipagpalagay nating sinusuportahan ito sa ngayon.

Una, Nakakuha ako ng pangunahing Everspring AN158 power switch at meter sa Node 3. Isang mabilis na Googling ang humantong sa akin sa isang post sa blog sa Wetwa.re, na may isang sample na pagsasaayos ng item. Inangkop ko ito tulad ng sumusunod:

Lumipat Dehumidifier_Switch 'Dehumidifier' {zwave = '3: command = switch_binary'}

Number Dehumidifier_Watts 'Dehumidifier pagkonsumo ng kuryente [% .1f W]' {zwave = '3: command = meter'}

Perpekto

Susunod ay isang Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) BUMILI NA NGAYON SA AMAZON

Para sa isang ito, nakakita ako ng isang sample na config sa iwasdot.com , at ang aking multisensor ay nasa Node 2.

Number Hallway_Temperature 'Hallway Temperature [% .1f ° C]' (Hallway, Temperature) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Number Hallway_Humidity 'Hallway Humidity [% .0f %%]' (Hallway, Humidity) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Number Hallway_Luminance 'Hallway Luminance [% .0f Lux]' (Hallway) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

Makipag-ugnay sa Hallway_Motion 'Hallway Motion [% s]' (Hallway, Motion) {zwave = '2: 0: command = sensor_binary, respond_to_basic = true'}

Numero ng sensor_1_battery 'Baterya [% s %%]' (Paggalaw) {zwave = '2: 0: command = baterya'}

Kung kakaiba sa iyo ang format na ito, mangyaring bumalik sa una gabay ng nagsisimula , partikular ang seksyong nagbubuklod ng Hue, kung saan ipinapaliwanag ko kung paano idinagdag ang mga item. Marahil ay kakailanganin mo lamang kopyahin ang mga halimbawa ng i-paste tulad nito, ngunit kung sakaling mayroon kang isang bagong aparato, ang mga nagbubuklod na dokumentasyon ay nagdedetalye ng lahat ng utos .

Ang Logitech Harmony Binding

Bago kami tumalon sa mga panuntunan, nais kong magdagdag ng isang mabilis na tala tungkol sa pagtatrabaho sa Harmony binding. Isa akong malaking tagahanga ng serye ng Harmony ng panghuli ng mga remote upang gawing simple ang karanasan sa home media center, ngunit madalas silang tumayo bilang isang hiwalay na sistema sa loob ng matalinong tahanan. Sa OpenHAB, ang mga aktibidad ng Logitech Harmony at ang buong kontrol ng aparato ay maaari na ngayong maging bahagi ng iyong sentralisadong system, at kasama pa sa mga patakaran sa awtomatiko.

Magsimula sa pamamagitan ng pag-install ng tatlong nagbubuklod na mga file na nakita mo sa pamamagitan ng paggamit ng apt-cache upang maghanap para sa 'pagkakaisa':

Huwag kalimutan na chown ang direktoryo ng bindings muli kapag tapos ka na:

sudo apt-get install openhab-addon-action-harmhub

sudo apt-get install openhab-addon-binding-harmhub

sudo apt-get install openhab-addon-io-harmhub

sudo chown -hR openhab: openhab / usr / share / openhab

Upang mai-configure ang pagbubuklod, buksan ang openhab.cfg file at magdagdag ng isang bagong seksyon tulad ng sumusunod:

### ----------------

pagkakaisa: host = 192.168.1.181 o ang iyong ip

harmonyhub: username = iyong-pagkakaisa-email-login

harmonyhub: password = ang iyong password

Ang IP address ay ang iyong Harmony hub. Gumamit ng isang scanner ng network upang malaman ito. Kakailanganin mo ring ipasok ang iyong mga detalye sa pag-login, ang mga ipinasok mo kapag inilunsad mo ang karaniwang utility ng Harmony config. Ayan yun. Sa pag-restart ng iyong Hue, ang iyong log ng pag-debug ay dapat magkaroon ng isang biglaang pagsabog ng output mula sa pagbubuklod.

Ito ay isang listahan ng na-format na JSON ng lahat ng iyong mga aktibidad, aparato, at utos na maaaring maipadala. Magandang ideya na kopyahin ito para sa sanggunian sa hinaharap. maaari mo itong gawing mas madaling basahin gamit ang mga nalalagyan ng mga node sa pamamagitan ng pag-paste sa isang online na JSON formatter tulad ng isang ito .

Pati na rin ang karaniwang aktibidad ng PowerOff na isang default, mahahanap mo ang iyong sariling tinukoy na mga aktibidad na nakalista dito ayon sa iyong pangalan. Ngayon ay lumikha tayo ng isang simpleng kontrol ng isang pindutan upang magsimula ng mga aktibidad. Una, sa file ng iyong mga item, idagdag ang sumusunod na linya. Baguhin ang pangkat at icon kung nais mo.

/ * Harmony Hub * /

String Harmony_Activity 'Harmony [% s]' (Living_Room) {harmhub = '* [kasalukuyangActivity]'}

Ito ay two-way String binding , na kung saan ay maaaring makuha ang parehong aktibidad, at utos sa kasalukuyang aktibidad na maging iba pa. Ngayon ay makakalikha kami ng isang pindutan para dito, sa file ng sitemap.

Lumipat ng item = Harmony_Activity mappings = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

kung paano magtanggal ng isang cash app account

Sa square bracket makikita mo ang bawat aktibidad kasama ang label. Pangkalahatan maaari kang direktang mag-refer sa mga aktibidad tulad ng pinangalanan mo ang mga ito sa iyong remote, ngunit ang pagbubukod sa nahanap kong ito, ay ang anumang bagay na may puwang sa pangalan ng aktibidad, tulad ng 'Watch TV'. Sa kasong ito, kakailanganin mong gamitin ang ID ng aktibidad. Muli, mahahanap mo ang ID sa output ng pag-debug ng JSON. I-save at i-refresh ang iyong interface, dapat mong makita ang isang bagay na katulad nito:

Maaari ka ring mag-refer sa mga aktibidad sa iyong mga panuntunan, tulad ng makikita natin sa susunod. Basahin ang pahina ng wiki para sa karagdagang impormasyon sa Pagbubuklod ng Harmony .

Isang Pangkalahatang Panimula sa Mga Panuntunan

Karamihan sa mga smart home hub ay may kasamang ilang uri ng paggawa ng mga panuntunan upang awtomatiko kang makapag-react sa data ng sensor at mga kaganapan sa bahay. Sa katunayan, magtatalo ako na ang isang tunay na matalinong bahay ay hindi isang kailangan mo upang gumastos ng oras sa pakikipag-ugnay sa mga mobile app - ito ay isa na hindi nakikita ng end user at ganap na awtomatiko. Sa pagtatapos na ito, nagsasama rin ang OpenHAB ng isang malakas na wika sa pag-script ng mga panuntunan na maaari mong mai-program, higit na lumalagpas sa pagiging kumplikado ng karamihan sa mga smart home hub o mga recipe ng IFTTT.

Ang mga patakaran sa pagprograma ay mas masahol pa kaysa sa ito. Magsimula tayo nang simple sa isang pares ng mga patakaran na buksan o i-off ang ilaw depende sa sensor ng presensya:

panuntunan ang ilaw ng Opisina kapag naroroon si James '

kailan

Ang item na JamesInOffice ay binago mula OFF hanggang ON

tapos

sendCommand (Office_Hue, ON)

magtapos

panuntunan ang ilaw ng Office kapag umalis si James '

kailan

Ang item na JamesInOffice ay binago mula ON hanggang OFF

tapos

sendCommand (Office_Hue, OFF)

magtapos

Una, pinangalanan namin ang panuntunan - maging mapaglarawan, upang malaman mo kung anong kaganapan ang pinaputok. Susunod, tinutukoy namin ang aming simpleng panuntunan sa pamamagitan ng pagsasabi kapag ang x ay totoo, pagkatapos ay gawin ang y . Ang pagtatapos ay nangangahulugan ng pagsasara ng partikular na panuntunang iyon. Mayroong isang bilang ng mga espesyal na salita na maaari mong gamitin sa mga panuntunan, ngunit sa ngayon nakikipag-usap kami sa dalawang simpleng piraso ng syntax - Item , na nagbibigay-daan sa iyo upang magtanong sa estado ng isang bagay; at ipadala ang utos , na kung saan ay eksakto kung ano ang sa tingin mo ito ay. Sinabi ko sa iyo na madali ito.

Marahil ay hindi kinakailangan na gumamit ng isang pares ng mga patakaran, ngunit dahil ang aking lohika ay nagiging mas kumplikado magiging kapaki-pakinabang na paghiwalayin sila para sa kung papasok ba ako o aalis sa lugar - at maaaring maging magandang ideya na magdagdag ng isang light sensor sa kung saan sa equation kaya't hindi kinakailangan na i-on namin ang mga ilaw.

Tingnan natin ang isa pang halimbawa upang lumikha ng isang naka-iskedyul na panuntunan.

mamuno sa 'Ehersisyo tuwing umaga'

kailan

Oras cron '0 0 8 1/1 *? * '

tapos

pagkakaisaStartActivity ('Ehersisyo')

magtapos

Muli, pinangalanan namin ang panuntunan, mga kundisyon ng estado kung kailan dapat itong sunugin, at ang mga pagkilos na dapat gawin. Ngunit sa kasong ito, tinutukoy namin ang isang pattern sa Oras. Ang nakakatawang code na nakikita mo sa mga quote ay isang expression ng CRON para sa Quartz scheduler (ang format ay bahagyang naiiba sa isang regular na CRONtab). Ginamit ko cronmaker.com upang makatulong na likhain ang expression, ngunit maaari mo ring basahin ang gabay sa format na [Wala nang Magagamit na] para sa isang detalyadong paliwanag at higit pang mga halimbawa.

Ginamit ng CronMaker.com upang makabuo ng wastong nai-format na ekspresyon ng Cron

Sinasabi lamang ng aking mga panuntunan na '8am tuwing umaga, araw-araw ng linggo, sabihin sa aking Harmony Ultimate system upang simulan ang aktibidad ng Exercise', na pinapagana ang TV, ang Xbox, ang amplifier, at pinindot ang pindutan A pagkatapos ng isang minuto upang ilunsad ang disk sa drive.

Nakalulungkot, hindi pa magagawa ng OpenHAB ang ehersisyo para sa akin.

Isa pang panuntunan na nais kong ipakita sa iyo ay isang bagay na ginagamit ko upang pamahalaan ang mga antas ng halumigmig sa aking tahanan. Mayroon akong isang solong dehumidifier kung saan kailangan kong lumipat saanman kinakailangan, kaya't nagpasya akong tingnan ang lahat ng aking mga sensor ng halumigmig, hanapin kung alin ang pinakamataas, at iimbak iyon sa isang variable. Kasalukuyan itong na-trigger bawat minuto, ngunit madali itong mapababa. Tingnan muna:

i-import ang org.openhab.core.library.types. *

import org.openhab.model.script.actions. *

import java.lang.String

mamuno sa 'Humidity Monitor'

kailan ang Time cron '0 * * * *?'

tapos

var prevHigh = 0

var highHum = '

Humidity? .Members.forEach [hum |

logDebug ('kahalumigmigan.rules', hum.name);

kung (hum.state bilang DecimalType> prevHigh) {

prevHigh = hum.state

highHum = hum.name + ':' + hum.state + '%'

}

kung paano ikonekta ang aking xbox controller sa aking pc

]

logDebug ('halumigmig.rules', highHum);

postUpdate (Dehumidifier_Needed, highHum);

magtapos

Ang core ng panuntunan ay nasa Kahalumigmigan? .Mga kasapi.achach linya Ang kahalumigmigan ay isang pangalan ng pangkat para sa aking mga sensor ng halumigmig; .mga kasapi Kinukuha ang lahat ng mga item sa pangkat na iyon; unahan umuulit sa kanila (na may isang kakaibang square bracket format na marahil ay hindi ka pamilyar). Ang syntax ng mga patakaran ay isang hango ng Xtend, upang mabasa mo ang Xtend dokumentasyon kung hindi ka makahanap ng isang halimbawa upang umangkop.

Marahil ay hindi mo kakailanganin - may daan-daang mga halimbawa ng mga panuntunan doon:

MQTT para sa OpenHAB at Internet of Things

Ang MQTT ay isang magaan na sistema ng pagmemensahe para sa komunikasyon sa machine-to-machine - isang uri ng Twitter para sa iyong Arduinos o Raspberry Pis upang makipag-usap sa bawat isa (kahit na syempre gumagana ito nang higit pa sa mga iyon). Mabilis na nakakakuha ito ng katanyagan at paghahanap ng sarili nitong bahay na may mga aparato ng Internet of Things, na karaniwang mababa ang mapagkukunan ng mga micro-control na nangangailangan ng maaasahang paraan upang maipadala ang data ng sensor pabalik sa iyong hub o makatanggap ng mga malalayong utos. Iyon mismo ang gagawin namin dito.

Ngunit bakit muling likhain ang gulong?

Ang MQ Telemetry Transport ay naimbento pabalik noong 1999 upang ikonekta ang mga pipeline ng langis sa pamamagitan ng mabagal na mga koneksyon sa satellite, partikular na idinisenyo upang mabawasan ang paggamit ng baterya at bandwidth, habang nagbibigay pa rin ng maaasahang paghahatid ng data. Sa paglipas ng mga taon ang mga prinsipyo ng disenyo ay nanatiling pareho, ngunit ang kaso ng paggamit ay lumipat mula sa dalubhasang naka-embed na mga sistema sa pangkalahatang mga aparato ng Internet ng Bagay. Noong 2010 ang protocol ay pinakawalan libre ng pagkahari, bukas para sa sinuman na magamit at maipatupad. Gusto namin ng libre.

Maaaring nagtataka ka kung bakit nag-aalala pa kami sa isa pang protokol - mayroon kaming HTTP pagkatapos ng lahat - na maaaring magamit upang magpadala ng mga mabilis na mensahe sa pagitan ng lahat ng uri ng mga sistemang konektado sa web (tulad ng OpenHAB at IFTTT, partikular sa bagong channel ng gumagawa ). At magiging tama ka. Gayunpaman, ang overhead ng pagproseso ng isang HTTP server ay malaki - kaya't hindi mo madaling patakbuhin ang isa sa isang naka-embed na microcontroller tulad ng Arduino (kahit papaano, maaari mo, ngunit wala kang masyadong natitirang memorya para sa anumang bagay. ). Ang MQTT ay ang kabilang banda ay magaan, kaya ang pagpapadala ng mga mensahe sa paligid ng iyong network ay hindi magbabara ng mga tubo, at madali itong magkakasya sa aming maliit na puwang sa memorya ng Arduino.

Paano gumagana ang MQTT?

Ang MQTT ay nangangailangan ng parehong server (tinatawag na 'broker') at isa o higit pang mga kliyente. Ang server ay kumikilos bilang isang middleman, tumatanggap ng mga mensahe at muling nai-broadcast ang mga ito sa anumang interesadong kliyente.

Ituloy natin ang Twitter-for-machine pagkakatulad bagaman. Tulad ng mga gumagamit ng Twitter ay maaaring mag-tweet ng kanilang sariling walang katuturang 140 mga character, at ang mga gumagamit ay maaaring 'sundin' ang iba pang mga gumagamit upang makita ang isang na-curate na stream ng mga post, ang mga kliyente ng MQTT ay maaaring mag-subscribe sa isang partikular na channel upang matanggap ang lahat ng mga mensahe mula doon, pati na rin mag-publish ng kanilang sariling mga mensahe sa channel na iyon. Ang pattern sa pag-publish at pag-subscribe ay tinukoy bilang pub / sub , taliwas sa tradisyon client / server modelo ng HTTP.

Hinihiling ng HTTP na maabot mo ang makina na iyong nakikipag-usap, sabihin ang Kumusta, pagkatapos ay magkaroon ng pabalik-balik na patuloy na pagkilala sa bawat isa habang nakakuha ka o naglalagay ng data. Sa pub / sub, ang kliyente na gumagawa ng pag-publish ay hindi kailangang malaman kung aling mga kliyente ang naka-subscribe: ipinapadala lamang nito ang mga mensahe, at ibinahagi ng broker ang mga ito sa anumang mga naka-subscribe na kliyente. Ang sinumang kliyente ay maaaring parehong mag-publish, at mag-subscribe sa mga paksa, tulad ng isang gumagamit ng Twitter.

Hindi tulad ng Twitter, ang MQTT ay hindi limitado sa 140 mga character. Ito ay data agnostic, kaya maaari kang magpadala ng maliliit na numero o malalaking mga bloke ng teksto, mga naka-format na JSON na datagram, o kahit na mga imahe at mga binary file.

Hindi ito MQTT ay mas mahusay kaysa sa HTTP para sa lahat - ngunit ito ay mas naaangkop kung magkakaroon kami ng maraming mga sensor sa buong bahay, patuloy na nag-uulat.

Mahalagang malaman din na ang OpenHAB ay hindi kikilos bilang iyong MQTT broker - tatalakayin natin iyon nang kaunti sa paglaon. Gayunpaman, ang OpenHAB ay kikilos bilang isang kliyente: maaari nitong parehong mai-publish ang iyong log ng aktibidad na OpenHAB, pati na rin magbigkis ng mga partikular na channel sa mga aparato, upang maaari kang magkaroon ng halimbawa na isang switch na kinokontrol ng mga mensahe ng MQTT sa isang partikular na channel. Mainam ito para sa paglikha ng isang bahay na puno ng mga sensor.

I-install ang Mosquitto sa Iyong Pi

Bagaman nagsasama ang OpenHAB ng isang MQTT client upang maaari kang mag-subscribe sa isang paksa at mag-publish din ng mga mensahe, hindi ito kikilos bilang server. Para doon, maaaring kailanganin mong gumamit ng web based MQTT broker (bayad o libre), o i-install ang libreng software sa iyong Pi. Nais kong itago ang lahat ng ito sa bahay, kaya na-install ko ang Mosquitto sa Pi.

Sa kasamaang palad, ang magagamit na bersyon sa pamamagitan ng karaniwang apt-get ay ganap na napapanahon. Sa halip, idagdag natin ang pinakabagong mga mapagkukunan.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key magdagdag ng mosquitto-repo.gpg.key

cd /etc/apt/source.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get install mosquitto

Iyon lang ang kailangan nating gawin upang magkaroon ng isang MQTT server na tumatakbo at tumatakbo sa lokal na network. Ang iyong broker ay tumatakbo sa port 1883 bilang default.

Suriin ang iyong MQTT server ay gumagana gamit ang libreng MQTT.fx, na kung saan ay cross-platform. I-click ang icon ng mga setting upang lumikha ng isang bagong profile, at ipasok ang IP address o pangalan ng iyong Raspberry Pi. I-save, at pindutin ang kumonekta. Kung ang maliit na ilaw ng trapiko sa kanang itaas ay naging berde, mahusay kang pumunta.

Para sa isang mabilis na pagsubok, mag-click sa tab na 'mag-subscribe', at i-type inTopic / sa text box, pagkatapos ay pindutin ang Mag-subscribe pindutan Naka-subscribe ka ngayon upang makatanggap ng mensahe sa paksang pinangalanan saTopic, kahit na magpapakita ito ng 0 mga mensahe. Bumalik sa tab na i-publish, i-type angTopiko sa maliit na kahon, at isang maikling mensahe sa malaking kahon ng teksto sa ibaba. Hit Ilathala ng ilang beses at tumingin muli sa tab na mag-subscribe. Dapat mong makita ang ilang mga mensahe na lumitaw sa paksang iyon.

Bago kami magdagdag ng ilang mga tunay na sensor sa aming network, kailangan naming malaman ang tungkol sa mga antas ng paksa, na nagbibigay-daan sa amin upang istraktura at salain ang MQTT network. Ang mga pangalan ng paksang sensitibo sa kaso, hindi dapat magsimula sa $, o magsama ng isang puwang, o di-ASCII na mga character - karaniwang mga kasanayan sa pagprograma para sa mga variable na pangalan, talaga.

Ang / separator ay nagpapahiwatig ng isang antas ng paksa, na kung saan ay hierarchical, halimbawa ang sumusunod ay lahat ng wastong antas ng paksa.

inTopic / maliitSubdivision / evenSmallerSubdivision

myHome / livingRoom / temperatura

myHome / livingRoom / halumigmig

myHome / kusina / temperatura

myHome / kusina / halumigmig

Mayroon na, dapat mong makita kung paano ang istraktura ng puno na ito ay perpekto para sa isang matalinong bahay na puno ng mga sensor at aparato. Ang pinakamahusay na kasanayan na magagamit sa maraming mga sensor sa isang solong silid ay upang mai-publish ang bawat variable ng sensor bilang sarili nitong antas ng paksa - sumasanga sa higit na pagiging tiyak (tulad ng mga halimbawa sa itaas) - sa halip na subukang mag-publish ng maraming uri ng sensor sa parehong channel .

Ang mga kliyente ay maaaring mag-publish o mag-subscribe sa anumang bilang ng mga indibidwal na antas ng paksa, o gumamit ng ilang mga espesyal na character ng wildcard upang mag-filter mula sa mas mataas sa puno.

Ang mga + wildcard na pamalit para sa anumang antas ng paksa. Halimbawa:

myHome / + / temperatura

ay mag-subscribe ang client sa pareho

myHome / livingRoom / temperatura

myHome / kusina / temperatura

... ngunit hindi ang mga antas ng kahalumigmigan.

Ang # ay isang multi-level wildcard, kaya maaari kang makakuha ng anumang mula sa array ng livingRoom sensor na may:

myHome / livingRoom / #

Sa teknikal na paraan, maaari ka ring mag-subscribe sa antas ng ugat # na kung saan makakakuha ka ng ganap sa lahat ng bagay na dumadaan sa broker, ngunit maaaring tulad ng pagdikit ng isang hose ng sunog sa iyong mukha: medyo napakatindi. Subukang kumonekta sa pampublikong MQTT broker mula sa HiveMQ at mag-subscribe sa #. Nakakuha ako ng halos 300 mga mensahe sa loob ng ilang segundo bago mag-crash ang aking kliyente.

Tip sa Nagsisimula ng MQTT: ' / myHome / ' ay isang iba't ibang mga paksa sa ' myHome / ' - kasama ang isang slash sa simula ay lumilikha ng isang blangko na antas ng paksa, na kung saan may wastong teknikal, ay hindi inirerekomenda dahil maaari itong maging nakalilito.

Ngayon alam na natin ang teorya, magsama tayo sa isang Arduino, Ethernet Shield, at isang sensor ng temperatura at halumigmig na DHT11 - malamang na mayroon ka sa iyong starter kit, ngunit kung hindi, palitan lamang ang sensor ng kapaligiran para sa isang paggalaw sensor (o kahit isang pindutan).

Pag-publish ng MQTT Mula sa isang Arduino Na May Koneksyon sa Ethernet

Kung mayroon kang isang aparato na tumutugma sa hybrid Arduino na may Wi-Fi o built-in na Ethernet, dapat din itong gumana. Sa kalaunan ay gugustuhin namin ang isang mas mahusay / murang paraan ng pakikipag-usap na kinakailangang gumamit ng isang koneksyon sa network sa bawat silid, ngunit nagsisilbi itong malaman ang mga pangunahing kaalaman.

Magsimula sa pamamagitan ng pag-download library ng pubsubclient mula sa Github . Kung ginamit mo ang pindutang 'I-download bilang ZIP', ang istraktura ay medyo mali. I-unzip, palitan ang pangalan ng folder na lang pubsubclient , pagkatapos ay kunin ang dalawang mga file mula sa src folder at ilipat ang mga ito sa isang antas sa root ng na-download na folder. Pagkatapos ilipat ang buong folder sa iyong Arduino / aklatan direktoryo

Narito ang aking sample code na maaari mong iakma : ang output ng signal ng DHT11 ay nasa pin 7. Baguhin ang server IP para sa iyong Pi sa sumusunod na linya:

client.setServer ('192.168.1.99', 1883);

Sa kasamaang palad, hindi namin maaaring gamitin ito pangalan na palakaibigan (OpenHAB.local sa aking kaso) dahil ang TCP / IP stack sa Arduino ay napakasimple at ang pagdaragdag ng code para sa pagbibigay ng pangalan ng Bonjour ay maraming memorya na hindi namin nais na sayangin. Upang baguhin ang mga paksang nai-broadcast ang data ng sensor, mag-scroll pababa sa mga linyang ito:

char buffer [10];

dtostrf (t, 0, 0, buffer);

client.publish ('openhab / himitsu / temperatura', buffer);

dtostrf (h, 0, 0, buffer);

client.publish ('openhab / himitsu / halumigmig', buffer);

Kasama rin sa code ang subscription sa isang command channel. Hanapin at ayusin ang sumusunod na linya:

client.subscribe ('openhab / himitsu / command');

Suriin ang code sa paligid doon at makikita mo na madali mong makontrol ang isang LED o relay halimbawa sa pamamagitan ng pagpapadala ng mga utos sa mga tukoy na channel. Sa halimbawang code, nagpapadala lamang ito ng isang mensahe pabalik na kinikilala ang pagtanggap ng utos.

I-upload ang iyong code, i-plug ang iyong Arduino sa network, at gamitin ang MQTT.fx mag-subscribe sa alinman # o openhab / himitsu / # (o kung anuman ang binago mo ang pangalan ng silid, ngunit huwag kalimutang isama ang # sa dulo). Medyo malapit na dapat mong makita ang mga mensahe na papasok; at kung magpapadala ka ng ON o OFF sa paksa ng pag-utos, makikita mo rin ang mga pagkilala na babalik din.

MQTT Binding para sa OpenHAB

Ang pangwakas na hakbang sa equation ay i-hook ito sa OpenHAB. Para doon, syempre kailangan natin ng isang umiiral.

sudo apt-get install openhab-addon-binding-mqtt

sudo chown -hR openhab: openhab / usr / share / openhab

At i-edit ang config file upang paganahin ang pagbubuklod.

mqtt: broker.url = tcp: // localhost: 1883

mqtt: broker.clientId = openhab

I-restart ang OpenHAB

sudo serbisyo openhab restart

Pagkatapos magdagdag tayo ng isang item o dalawa:

/ * MQTT Sensors * /

Bilang Himitsu_Temp 'Himitsu Temperatura [% .1f ° C]' (Himitsu, Temperatura) {mqtt = '<[broker:openhab/himitsu/temperature:state:default]'}

Bilang Himitsu_Humidity'Himitsu Humidity [% .1f %%] '(Himitsu, Humidity) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Sa ngayon dapat mong maunawaan ang format; nakakakuha na ng Numero ng item mula sa pagbubuklod ng MQTT, sa isang tinukoy na paksa. Ito ay isang simpleng halimbawa, baka gusto mong mag-refer sa pahina ng wiki kung saan ito maaaring makakuha ng mas kumplikado .

Pagbati, mayroon ka na ngayong batayan ng isang murang Arduino-based sensor array. Susuriin namin ito sa hinaharap at mailagay ang Arduino's sa kanilang sariling ganap na magkakahiwalay na RF network. Lumikha din ako ng isang magkaparehong bersyon para sa Wizwiki 7500 boards kung nagkakaroon ka ng isa sa mga iyon.

Pagtitiyaga at Graphing Data

Sa ngayon marahil ay isang pangkat ng mga sensor ang na-set up, mula sa Z-Wave o pasadyang Arduinos na nagpapatakbo ng MQTT - upang matingnan mo ang kasalukuyang estado ng mga sensor na iyon sa anumang oras, at dapat mo ring reaksyon ang kanilang halaga sa mga panuntunan. Ngunit ang kagiliw-giliw na bagay tungkol sa mga halaga ng sensor ay pangkalahatan na nagbabago sila sa paglipas ng panahon: doon pumapasok ang pagtitiyaga at graphing. Pagtitiyaga sa OpenHAB ay nangangahulugang pag-save ng data sa paglipas ng panahon. Sige na at i-set up ang RRD4J (Round Robin Database para sa Java), tinawag dahil ang data ay nai-save sa isang bilog na robin fashion - ang mas matandang data ay itinapon upang i-compress ang laki ng database.

I-install ang mga rrd4j package sa mga sumusunod na utos.

sudo apt-get install openhab-addon-persistence-rrd4j
sudo chown -hR openhab:openhab /usr/share/openhab

Pagkatapos ay lumikha ng isang bagong file na tinawag rrd4j.persist nasa mga pagsasaayos / pagtitiyaga folder. I-paste sa sumusunod:

Estratehiya {

everyMinute: '0 * * * *?'

sa bawat Oras: '0 0 * * *?'

everyDay: '0 0 0 * *?'

default = everyChange

}

Mga item {

// magpumilit lahat kapag na-update ang halaga, isang default lamang, at ibalik ang mga ito mula sa database sa pagsisimula

*: diskarte = bawat Pagbabago, ibalik angOnStartup

// susunod na tinutukoy namin ang mga tukoy na diskarte ng bawat Oras para sa anumang bagay sa pangkat ng Temperatura, at at bawat minuto para sa Humidity

kung paano mag-screenshot sa snapchat nang walang nakakaalam

Temperatura *: diskarte = bawat Oras

Humidity *: diskarte = bawatMute

// kahalili maaari kang magdagdag ng mga tukoy na item dito, tulad ng

// Bedroom_Humidity, JamesInOffice: diskarte = bawatMinute

}

Sa unang bahagi ng file na ito, tinutukoy namin ang mga diskarte, na nangangahulugang pagbibigay ng isang pangalan sa isang expression na CRON. Ito ay kapareho ng nagawa na namin sa My.OpenHAB, ngunit sa oras na ito ay lumilikha kami ng ilang mga bagong diskarte na maaari naming magamit sa bawat Araw, bawat Oras at bawatMute. Hindi ko pa nagamit ang lahat, ngunit maaaring hinaharap ako.

Sa pangalawang kalahati ng file, sasabihin namin sa rr4dj kung aling mga halaga ng data ang mai-save. Bilang isang default, i-save namin ang lahat sa tuwing mag-a-update ito, ngunit tinukoy ko rin ang ilang mga diskarte na batay sa oras para sa mga partikular na sensor. Mga temperatura Hindi ako masyadong nababahala, kaya't itinakda ko iyon upang mai-save ang bawat Oras lamang, ngunit ang kahalumigmigan ay isang malaking alalahanin para sa akin, kaya nais kong makita kung paano ito nagbabago bawat minuto. Kung may iba pang data na partikular mong nais na makatipid sa mga itinakdang oras, idagdag ang mga narito ngayon o ayusin kung kinakailangan.

Tandaan: kung nais mong i-graph din ang data, DAPAT mong iimbak ito kahit isang beses sa isang minuto. Hindi mahalaga kung ang data ng iyong sensor ay na-update ito nang mabilis, kailangan mo lamang sabihin sa rr4dj na iimbak ito isang beses sa isang minuto.

Sa tinukoy na iyon, dapat kang magsimulang makakita ng ilang output ng pag-debug na nagsasabi sa iyo na ang mga halaga ay naiimbak.

Susunod, gumawa tayo ng ilang mga magagandang grap ng lahat ng data na ito. Madali lang talaga. Upang makagawa ng isang graph ng isang indibidwal na sensor, idagdag ang sumusunod sa iyong mapa ng site:

Item sa tsart = Panahon ng Silid-tulugan_Humidity = h

Literal yan ang kailangan mo. Mga wastong halaga para sa panahon ay h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; dapat maging malinaw kung ano ang ibig sabihin ng mga ito. Nagde-default ito sa D para sa isang buong araw ng data kung hindi tinukoy.

Upang lumikha ng isang graph na may maraming mga item, i-graph lamang ang pangalan ng pangkat sa halip:

Item sa tsart = Panahon ng kahalumigmigan = h

Maaari ka ring maging interesado na malaman na maaari mong gamitin ang grap na ito sa ibang lugar; bumubuo ito ng isang imahe gamit ang sumusunod na URL: http: // HISOPENHABURL: 8080 / tsart? mga pangkat = Humidity & period = h

Kamusta Iyong Paparating na ang OpenHAB System?

Iyon lang para sa installment ng gabay na ito, ngunit huwag asahan na ito ang huli mong maririnig mula sa amin tungkol sa OpenHAB. Inaasahan namin na ito at ang gabay ng nagsisimula ay nagbigay sa iyo ng isang solidong saligan upang bumuo ng iyong sariling kumpletong OpenHAB system - ngunit ito ay isang proseso na hindi talaga natapos.

Sa kabutihang palad, ang OpenHAB ay maaaring sukatin nang maayos mula sa ilang mga aparato hanggang daan-daang, mula sa simpleng pagiging kumplikado ng panuntunan hanggang sa kahuli-hulihan sa pag-aautomat sa bahay - kaya paano ang iyong system na magkakasama? Aling mga aparato ang pinili mo? Ano ang susunod na malaking proyekto na iyong tatalakayin?

Pag-usapan natin ang mga komento - at mangyaring, kung nalaman mong kapaki-pakinabang ang patnubay na ito, i-click ang mga pindutang magbahagi upang sabihin sa iyong mga kaibigan kung paano din nila mai-set up ang kanilang sariling OpenHAB system.

Inaasahan namin na gusto mo ang mga item na inirerekumenda namin at talakayin! Ang MUO ay may kaakibat at naka-sponsor na pakikipagsosyo, kaya nakakatanggap kami ng bahagi ng kita mula sa ilan sa iyong mga pagbili. Hindi ito makakaapekto sa presyo na babayaran mo at makakatulong sa amin na mag-alok ng pinakamahusay na mga rekomendasyon ng produkto.

Magbahagi Magbahagi Mag-tweet Email Isang Gabay ng Baguhan sa Animating Speech

Ang animating pagsasalita ay maaaring maging isang hamon. Kung handa ka nang magsimulang magdagdag ng diyalogo sa iyong proyekto, sisirain namin ang proseso para sa iyo.

Basahin Susunod
Mga Kaugnay na Paksa
  • DIY
  • Smart Home
  • Arduino
  • Pag-aautomat sa Bahay
  • Longform
  • Patnubay sa Longform
Tungkol sa May-akda James Bruce(707 Mga Artikulo Nai-publish)

Si James ay mayroong BSc sa Artipisyal na Katalinuhan at sertipikado sa CompTIA A + at Network +. Kapag hindi siya abala bilang Hardware Review Editor, nasisiyahan siya sa LEGO, VR, at mga board game. Bago sumali sa MakeUseOf, siya ay isang tekniko sa pag-iilaw, guro ng Ingles, at inhinyero ng data center.

Higit pa Mula kay James Bruce

Mag-subscribe sa aming newsletter

Sumali sa aming newsletter para sa mga tip sa tech, pagsusuri, libreng ebook, at eksklusibong deal!

Mag-click dito upang mag-subscribe