Hướng dẫn cho Người mới bắt đầu OpenHAB Phần 2: ZWave, MQTT, Quy tắc và Biểu đồ

Hướng dẫn cho Người mới bắt đầu OpenHAB Phần 2: ZWave, MQTT, Quy tắc và Biểu đồ

Miễn phí không phải lúc nào cũng có nghĩa là 'không tốt bằng trả phí', và OpenHAB không phải là ngoại lệ. Phần mềm tự động hóa gia đình mã nguồn mở vượt xa khả năng của bất kỳ hệ thống tự động hóa gia đình nào khác trên thị trường - nhưng không dễ để thiết lập. Trên thực tế, nó có thể rất khó chịu.





Trong phần 1 của hướng dẫn, tôi đã hướng dẫn bạn cài đặt OpenHAB trên Raspberry Pi , đã giới thiệu các khái niệm cốt lõi của OpenHAB và hướng dẫn bạn cách thêm các mục đầu tiên của bạn vào hệ thống. Hôm nay chúng ta sẽ đi xa hơn:





  • Thêm thiết bị ZWave
  • Thêm bộ điều khiển Harmony Ultimate
  • Giới thiệu các quy tắc
  • Giới thiệu MQTT và cài đặt nhà môi giới MQTT trên Pi của bạn, với các cảm biến trên Arduino
  • Ghi dữ liệu và vẽ biểu đồ

Giới thiệu về Z-Wave

Z-Wave đã là giao thức tự động hóa gia đình thống trị trong nhiều năm: nó đáng tin cậy, đã được phát triển rộng rãi và hoạt động trong phạm vi xa hơn nhiều so với bất kỳ sản phẩm nhà thông minh nào khác. Có hàng trăm cảm biến Z-Wave có sẵn cho bạn để thực hiện nhiều tác vụ khác nhau. OpenHAB có thể làm việc với Z-Wave, nhưng khó thiết lập và độ tin cậy không được đảm bảo.





Nếu bạn đang cân nhắc việc mua một ngôi nhà có đầy đủ các cảm biến Z-Wave đặc biệt để sử dụng với OpenHAB, tôi khuyên bạn nên xem xét lại. Nó có thể hiệu quả với bạn, hoặc nó có thể bị cản trở bởi những vấn đề nhỏ nhưng dai dẳng. Ít nhất, đừng mua một ngôi nhà có đầy đủ các cảm biến cho đến khi bạn có cơ hội dùng thử một vài chiếc. Lý do duy nhất để chọn Z-Wave là nếu bạn không hoàn toàn yên tâm trên OpenHAB và muốn để ngỏ các tùy chọn của bạn trong tương lai: Z-Wave chẳng hạn hoạt động với trung tâm Samsung SmartThings, cũng như các trung tâm cụ thể của Z-Wave chẳng hạn như Homeseer và một loạt các tùy chọn phần mềm khác như domoticz .

Mặc dù OpenHAB bao gồm ràng buộc Z-Wave, bạn vẫn cần định cấu hình mạng Z-Wave trước tiên , trước khi OpenHAB có thể bắt đầu truy vấn dữ liệu. Nếu bạn có bo mạch điều khiển Rasberry, bạn có một số phần mềm được cung cấp để định cấu hình mạng, vì vậy chúng tôi sẽ không đề cập đến vấn đề đó ở đây. Nếu bạn đã mua bộ điều khiển Aeotec USB Z-Stick hoặc bộ điều khiển tương tự, có thể bạn sẽ không có bất kỳ phần mềm nào đi kèm, vì vậy hãy đọc tiếp.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB để tạo cổng (Màu trắng thông thường) MUA NGAY TRÊN AMAZON

Nếu bạn đã có thiết lập mạng Z-Wave , bạn có thể chỉ cần cắm bộ điều khiển của mình vào Pi và bắt đầu định cấu hình ràng buộc và các mục. Nếu đây là lần đầu tiên bạn bước vào Z-Wave, nó sẽ phức tạp hơn một chút.

Đầu tiên, về mặt phần cứng: mỗi bộ điều khiển có cách ghép nối riêng với các thiết bị (về mặt kỹ thuật được gọi là 'chế độ bao gồm' trong đó ID nút được chỉ định). Trong trường hợp của Aotec Z-Stick, điều này có nghĩa là rút phích cắm của nó khỏi cổng USB và nhấn nút một lần để đặt nó vào chế độ bao gồm. Sau đó, đưa nó đến gần thiết bị bạn đang ghép nối và nhấn cả nút bao gồm trên thiết bị đó (điều này cũng sẽ khác nhau: ổ cắm Everspring của tôi yêu cầu nút nhấn 3 lần liên tiếp, vì vậy bài học ở đây là đọc hướng dẫn sử dụng cho thiết bị của bạn) .





Z-Stick nhấp nháy nhanh để cho biết thành công. Điều này gây ra sự cố khi cắm lại nó vào Pi, vì một cổng mới được chỉ định. Khởi động lại Pi của bạn để đặt nó trở lại cổng tiêu chuẩn nếu bạn thấy nó đã được gán lại động một cổng khác. Vẫn tốt hơn: không cắm nó vào Pi cho đến khi bạn đã thực hiện tất cả các ghép nối phần cứng trước.

Cài đặt HABmin và Z-Wave Bindings

Vì OpenHAB không thực sự là một tiện ích cấu hình cho Z-Wave, chúng tôi sẽ cài đặt một công cụ quản lý web khác - một cái gì đó gọi là HABmin. Đi thẳng đến Kho lưu trữ HABmin Github tải xuống bản phát hành hiện tại. Sau khi giải nén nó, bạn sẽ thấy 2 .cái lọ các tệp trong thư mục addons - những tệp này sẽ được đặt trong thư mục addons tương ứng trong phần chia sẻ Trang chủ OpenHAB của bạn (nếu bạn cũng đang sử dụng Aotec gen5 Z-Stick, hãy đảm bảo rằng bạn có ít nhất phiên bản 1.8 của ràng buộc Z-Wave) .





Tiếp theo, tạo một thư mục mới trong thư mục ứng dụng web và gọi nó là 'habmin' (chữ thường rất quan trọng). Sao chép phần còn lại của các tệp đã tải xuống vào đó.

Lưu ý: Ngoài ra còn có một HABmin 2 đang phát triển tích cực. Việc cài đặt cũng giống như vậy nhưng có thêm một addon .jar. Có thể đáng để thử cả hai chỉ để xem bạn thích cái nào hơn.

Nếu bạn chưa có, hãy cắm bộ điều khiển của bạn vào Pi. Nhập thông tin sau để tìm đúng cổng.

ls / dev / tty *

Bạn đang tìm kiếm bất kỳ thứ gì có tên USB hoặc trong trường hợp cụ thể của tôi, Z-stick tự giới thiệu là / dev / ttyACM0 (một modem). Có thể dễ dàng hơn để thực hiện lệnh một lần trước khi cắm vào và một lần sau đó, vì vậy bạn có thể xem những gì thay đổi nếu bạn không chắc chắn.

Mở tệp cấu hình OpenHAB và sửa đổi phần trên Z-Wave, bỏ ghi chú cả hai dòng và nhập địa chỉ thiết bị thực của bạn. Một bước cuối cùng đối với tôi là cho phép người dùng OpenHAB truy cập vào modem.

sudo usermod -a -G dialout openhab

Bây giờ, để khởi động mọi thứ, hãy khởi động lại OpenHAB

khởi động lại dịch vụ sudo openhab

Hy vọng rằng, nếu bạn đang kiểm tra nhật ký gỡ lỗi, bạn sẽ thấy một cái gì đó như thế này. Xin chúc mừng, bạn đang nói Z-Wave. Bạn cũng có thể thấy nhật ký gỡ lỗi chứa đầy các thông báo từ các nút Z-Wave khác nhau. Hãy bắt đầu bằng cách kiểm tra HABMIN để xem nó được tìm thấy gì: http: //openhab.local: 8080 / habmin / index.html (thay thế openhab.local bằng tên máy chủ hoặc địa chỉ IP Raspberry Pi của bạn).

Có rất nhiều điều để xem trong HABMIN, nhưng chúng tôi chỉ thực sự quan tâm đến Cấu hình -> Ràng buộc -> Z-Wave -> Thiết bị như bạn có thể thấy bên dưới. Mở rộng nút để chỉnh sửa vị trí và nhãn tên để bạn dễ tham khảo.

Định cấu hình các mục Z-Wave

Mỗi thiết bị Z-Wave sẽ có một cấu hình cụ thể cho OpenHAB. Rất may, hầu hết các thiết bị đã được khám phá và sẽ có các ví dụ cho bạn. Định cấu hình các thiết bị tùy chỉnh không được nhận dạng nằm ngoài phạm vi của hướng dẫn này, nhưng hãy giả sử rằng nó được hỗ trợ ngay bây giờ.

Đầu tiên, tôi có một công tắc nguồn và đồng hồ đo Everspring AN158 cơ bản trên Node 3. Một Google nhanh chóng dẫn tôi đến một bài đăng blog trên Wetwa.re, với một cấu hình mục mẫu. Tôi đã điều chỉnh điều này như sau:

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

Number Dehumidifier_Watts 'Công suất tiêu thụ của máy hút ẩm [% .1f W]' {zwave = '3: command = meter'}

Hoàn hảo.

Tiếp theo là cảm biến đa cảm biến Aeotec Gen5.

Aeon Labs Aeotec Z-Wave Gen5 Đa cảm biến (Z-Wave Plus) MUA NGAY TRÊN AMAZON

Đối với cái này, tôi đã tìm thấy một cấu hình mẫu tại iwasdot.com và cảm biến đa cảm biến của tôi đang ở trên Node 2.

Number Hallway_Tempe Heat 'Hallway Temperature [% .1f ° C]' (Hành lang, Nhiệt độ) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Number Hallway_Humidity 'Hallway Humidity [% .0f %%]' (Hành lang, Độ ẩm) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Number Hallway_Luminance 'Độ sáng hành lang [% .0f Lux]' (Hành lang) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

Liên hệ với Hallway_Motion 'Hallway Motion [% s]' (Hành lang, Chuyển động) {zwave = '2: 0: command = sensor_binary, response_to_basic = true'}

Cảm biến số_1_battery 'Battery [% s %%]' (Chuyển động) {zwave = '2: 0: command = pin'}

Nếu định dạng này có vẻ lạ với bạn, vui lòng quay lại định dạng đầu tiên hướng dẫn cho người mới bắt đầu , cụ thể là phần ràng buộc Huế, nơi tôi giải thích cách các mục được thêm vào. Có thể bạn sẽ chỉ cần sao chép các ví dụ dán như thế này, nhưng trong trường hợp bạn có thiết bị mới, tài liệu ràng buộc nêu chi tiết tất cả lệnh .

Logitech Harmony Binding

Trước khi chúng ta tìm hiểu các quy tắc, tôi muốn thêm một ghi chú nhanh về cách làm việc với ràng buộc Harmony. Tôi là một fan hâm mộ lớn của loạt điều khiển từ xa tối ưu Harmony để đơn giản hóa trải nghiệm trung tâm truyền thông gia đình, nhưng chúng thường đứng như một hệ thống riêng biệt trong ngôi nhà thông minh. Với OpenHAB, các hoạt động của Logitech Harmony và toàn quyền kiểm soát thiết bị giờ đây có thể là một phần của hệ thống tập trung của bạn và thậm chí còn được đưa vào các quy tắc tự động hóa.

Bắt đầu bằng cách cài đặt ba tệp liên kết mà bạn tìm thấy bằng cách sử dụng apt-cache để tìm kiếm 'sự hài hòa':

Đừng quên băm nhỏ thư mục ràng buộc một lần nữa khi bạn hoàn thành:

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

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

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

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

Để định cấu hình ràng buộc, hãy mở tệp openhab.cfg và thêm một phần mới như sau:

########## ĐIỀU KHIỂN TỪ XA HARMONY ##########

hài hòa: host = 192.168.1.181 hoặc ip của bạn

hài hòa: tên người dùng = của bạn-hòa-hợp-email-đăng nhập

hài hòa: mật khẩu = mật khẩu của bạn

Địa chỉ IP là của trung tâm Harmony của bạn. Sử dụng máy quét mạng để tìm ra điều đó. Bạn cũng sẽ cần nhập chi tiết đăng nhập của mình, những chi tiết bạn nhập khi khởi chạy tiện ích cấu hình Harmony tiêu chuẩn. Đó là nó. Khi khởi động lại Hue, nhật ký gỡ lỗi của bạn sẽ có một loạt đầu ra đột ngột từ liên kết.

Đây là danh sách được định dạng JSON của tất cả các hoạt động, thiết bị và lệnh của bạn có thể được gửi. Bạn nên sao chép nó ra để tham khảo trong tương lai. bạn có thể làm cho việc đọc dễ dàng hơn với các nút có thể thu gọn bằng cách dán vào trình định dạng JSON trực tuyến chẳng hạn như cái này .

Cũng như hoạt động PowerOff tiêu chuẩn là hoạt động mặc định, bạn sẽ tìm thấy các hoạt động được xác định của riêng mình được liệt kê ở đây theo tên. Bây giờ chúng ta hãy tạo một điều khiển một nút đơn giản để bắt đầu các hoạt động. Đầu tiên, trong tệp mặt hàng của bạn, hãy thêm dòng sau. Thay đổi nhóm và biểu tượng nếu bạn muốn.

/ * Trung tâm hài hòa * /

Chuỗi Harmony_Activity 'Harmony [% s]' (Living_Room) {monyhub = '* [currentActivity]'}

Đây là một ràng buộc chuỗi hai chiều , có thể vừa tìm nạp hoạt động hiện tại vừa ra lệnh cho hoạt động hiện tại là một thứ khác. Bây giờ chúng ta có thể tạo một nút cho nó, trong tệp sơ đồ trang web.

Chuyển mục = Harmony_Activity mappings = [PowerOff = 'Tắt', Bài tập = 'Bài tập', 13858434 = 'TV', Karaoke = 'Karaoke']

làm thế nào để có được dịch vụ internet tạm thời

Trong dấu ngoặc vuông, bạn sẽ thấy từng hoạt động cùng với nhãn. Nói chung, bạn có thể tham chiếu trực tiếp đến các hoạt động như bạn đã đặt tên cho chúng trên điều khiển từ xa của mình, nhưng ngoại lệ mà tôi tìm thấy, là bất kỳ thứ gì có khoảng trắng trong tên hoạt động, chẳng hạn như 'Xem TV'. Trong trường hợp này, bạn sẽ cần sử dụng ID hoạt động. Một lần nữa, bạn có thể tìm thấy ID trong đầu ra gỡ lỗi JSON. Lưu và làm mới giao diện của bạn, bạn sẽ thấy một cái gì đó tương tự như sau:

Bạn cũng có thể tham khảo các hoạt động trong quy tắc của mình, như chúng ta sẽ thấy tiếp theo. Đọc trang wiki để biết thêm thông tin về Hòa hợp ràng buộc .

Giới thiệu chung về các quy tắc

Hầu hết các trung tâm nhà thông minh bao gồm một số loại tạo quy tắc để bạn có thể tự động phản ứng với dữ liệu cảm biến và các sự kiện trong nhà. Trên thực tế, tôi cho rằng một ngôi nhà thông minh thực sự không phải là ngôi nhà bạn cần dành thời gian tương tác với các ứng dụng di động - đó là một ngôi nhà vô hình đối với người dùng cuối và hoàn toàn tự động. Để đạt được điều này, OpenHAB cũng bao gồm một ngôn ngữ kịch bản quy tắc mạnh mẽ mà bạn có thể lập trình, vượt xa sự phức tạp của hầu hết các trung tâm nhà thông minh hoặc công thức IFTTT.

Các quy tắc lập trình nghe có vẻ tệ hơn nó. Hãy bắt đầu đơn giản với một số quy tắc bật hoặc tắt đèn tùy thuộc vào cảm biến hiện diện:

quy tắc 'Đèn văn phòng bật sáng khi James có mặt'

khi nào

Mục JamesInOffice đã thay đổi từ TẮT thành BẬT

sau đó

sendCommand (Office_Hue, ON)

kết thúc

quy tắc 'Đèn văn phòng tắt khi James rời đi'

khi nào

Mục JamesInOffice đã thay đổi từ BẬT thành TẮT

sau đó

sendCommand (Office_Hue, OFF)

kết thúc

Đầu tiên, chúng tôi đặt tên cho quy tắc - mang tính mô tả để bạn biết sự kiện nào đang kích hoạt. Tiếp theo, chúng tôi xác định quy tắc đơn giản của mình bằng cách nói khi x đúng thì làm y . Kết thúc biểu thị sự đóng của quy tắc cụ thể đó. Có một số từ đặc biệt bạn có thể sử dụng trong các quy tắc, nhưng hiện tại chúng ta đang xử lý hai bit cú pháp đơn giản - Bài báo , cho phép bạn truy vấn trạng thái của một thứ gì đó; và sendCommand , thực hiện chính xác những gì bạn nghĩ. Tôi đã nói với bạn điều này là dễ dàng.

Có lẽ không cần thiết phải sử dụng một cặp quy tắc, nhưng vì logic của tôi ngày càng phức tạp, sẽ có lợi nếu tách chúng ra cho dù tôi đang đi vào hay rời khỏi khu vực - và có thể là một ý tưởng hay khi thêm một cảm biến ánh sáng ở đâu đó vào phương trình để chúng tôi không bật đèn một cách không cần thiết.

Hãy xem một ví dụ khác để tạo quy tắc đã lên lịch.

quy tắc 'Tập thể dục mỗi sáng'

khi nào

Thời gian cron '0 0 8 1/1 *? * '

sau đó

hài hòaStartActivity ('Bài tập')

kết thúc

Một lần nữa, chúng tôi đặt tên cho quy tắc, nêu các điều kiện khi nào nó sẽ kích hoạt và các hành động cần thực hiện. Nhưng trong trường hợp này, chúng tôi đang xác định một mẫu Thời gian. Đoạn mã vui nhộn mà bạn thấy trong dấu ngoặc kép là biểu thức CRON cho Quartz Scheduler (định dạng hơi khác với CRONtab thông thường). Tôi đã sử dụng cronmaker.com để giúp tạo biểu thức, nhưng bạn cũng có thể đọc hướng dẫn định dạng [Không còn khả dụng] để có giải thích chi tiết và thêm ví dụ.

CronMaker.com được sử dụng để tạo biểu thức Cron được định dạng chính xác

Quy tắc của tôi chỉ đơn giản là '8 giờ sáng mỗi sáng, mỗi ngày trong tuần, yêu cầu hệ thống Harmony Ultimate của tôi bắt đầu hoạt động Tập thể dục', lần lượt kích hoạt TV, Xbox, bộ khuếch đại và nhấn nút A sau một phút để khởi chạy đĩa trong ổ đĩa.

Đáng buồn là OpenHAB vẫn chưa thể thực hiện bài tập cho tôi.

Một quy tắc nữa mà tôi muốn chỉ cho bạn là một thứ mà tôi sử dụng để quản lý mức độ ẩm trong nhà của mình. Tôi có một máy hút ẩm duy nhất mà tôi cần phải di chuyển bất cứ nơi nào cần thiết, vì vậy tôi quyết định xem xét tất cả các cảm biến độ ẩm của mình, tìm cái nào là cao nhất và lưu trữ cái đó trong một biến số. Nó hiện được kích hoạt mỗi phút, nhưng điều đó có thể dễ dàng được hạ xuống. Hãy xem trước:

nhập org.openhab.core.library.types. *

nhập org.openhab.model.script.actions. *

nhập java.lang.String

quy tắc 'Màn hình độ ẩm'

khi Thời gian cron '0 * * * *?'

sau đó

var presHigh = 0

var highHum = ''

Độ ẩm? .Members.forEach [hum |

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

if (hum.state as DecimalType> prevHigh) {

presHigh = hum.state

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

}

bạn có thể lấy lại tin nhắn đã xóa trên messenger không

]

logDebug ('wet.rules', highHum);

postUpdate (Dehumidifier_Needed, highHum);

kết thúc

Cốt lõi của quy tắc là ở Độ ẩm? .Members.foreach hàng. Độ ẩm là tên nhóm cho các cảm biến độ ẩm của tôi; .các thành viên lấy tất cả các mục trong nhóm đó; cho mỗi lặp lại chúng (với định dạng dấu ngoặc vuông gây tò mò mà bạn có thể không quen thuộc). Cú pháp của các quy tắc là một dẫn xuất của Xtend, vì vậy bạn có thể đọc Tài liệu Xtend nếu bạn không thể tìm thấy một ví dụ để thích ứng.

Có thể bạn sẽ không cần phải làm vậy - có hàng trăm quy tắc mẫu:

MQTT cho OpenHAB và Internet of Things

MQTT là một hệ thống nhắn tin nhẹ để giao tiếp giữa máy với máy - một loại Twitter để Arduinos hoặc Raspberry Pis của bạn trò chuyện với nhau (mặc dù tất nhiên nó hoạt động với nhiều thứ khác ngoài những thứ đó). Nó nhanh chóng trở nên phổ biến và tự tìm cho mình một ngôi nhà với các thiết bị Internet of Things, thường là những bộ điều khiển vi mô ít tài nguyên cần một cách đáng tin cậy để truyền dữ liệu cảm biến trở lại trung tâm của bạn hoặc nhận lệnh từ xa. Đó chính xác là những gì chúng tôi sẽ làm với nó.

Nhưng tại sao phải phát minh lại bánh xe?

MQ Telemetry Transport được phát minh vào năm 1999 để kết nối các đường ống dẫn dầu thông qua các kết nối vệ tinh chậm, được thiết kế đặc biệt để giảm thiểu việc sử dụng pin và băng thông, trong khi vẫn cung cấp khả năng cung cấp dữ liệu đáng tin cậy. Qua nhiều năm, các nguyên tắc thiết kế vẫn giữ nguyên, nhưng trường hợp sử dụng đã chuyển từ các hệ thống nhúng chuyên dụng sang các thiết bị Internet of Things nói chung. Năm 2010, giao thức được phát hành miễn phí bản quyền, mở cho bất kỳ ai sử dụng và thực hiện. Chúng tôi thích miễn phí.

Bạn có thể tự hỏi tại sao chúng tôi thậm chí còn bận tâm đến một giao thức khác - dù sao thì chúng tôi cũng đã có HTTP - có thể được sử dụng để gửi tin nhắn nhanh giữa tất cả các hệ thống được kết nối web (như OpenHAB và IFTTT, đặc biệt là với kênh nhà sản xuất mới ). Và bạn đã đúng. Tuy nhiên, chi phí xử lý của một máy chủ HTTP khá lớn - đến mức bạn không thể dễ dàng chạy một máy chủ trên một vi điều khiển nhúng như Arduino (ít nhất là bạn có thể, nhưng bạn sẽ không còn nhiều bộ nhớ cho bất kỳ thứ gì khác ). Mặt khác, MQTT nhẹ, vì vậy việc gửi tin nhắn xung quanh mạng của bạn sẽ không làm tắc nghẽn đường ống và nó có thể dễ dàng phù hợp với không gian bộ nhớ Arduino nhỏ của chúng tôi.

MQTT hoạt động như thế nào?

MQTT yêu cầu cả một máy chủ (được gọi là 'nhà môi giới') và một hoặc nhiều máy khách. Máy chủ hoạt động như một người trung gian, nhận tin nhắn và truyền lại chúng cho bất kỳ khách hàng nào quan tâm.

Hãy tiếp tục với Twitter dành cho máy móc sự tương tự mặc dù. Cũng giống như người dùng Twitter có thể tweet 140 ký tự vô nghĩa của riêng họ và người dùng có thể 'theo dõi' những người dùng khác để xem luồng bài đăng được quản lý, ứng dụng khách MQTT có thể đăng ký một kênh cụ thể để nhận tất cả tin nhắn từ đó, cũng như xuất bản tin nhắn của riêng họ đến kênh đó. Mẫu xuất bản và đăng ký này được gọi là quán rượu / phụ , trái ngược với truyền thống máy khách / máy chủ mô hình của HTTP.

HTTP yêu cầu bạn tiếp cận với máy mà bạn đang giao tiếp, nói Xin chào, sau đó liên tục xác nhận lẫn nhau trong khi bạn lấy hoặc đưa dữ liệu. Với pub / sub, khách hàng thực hiện việc xuất bản không cần biết khách hàng nào đã đăng ký: nó chỉ bơm ra các thông báo và nhà môi giới phân phối lại chúng cho bất kỳ khách hàng đã đăng ký nào. Bất kỳ khách hàng nào cũng có thể xuất bản và đăng ký các chủ đề, giống như người dùng Twitter.

Không giống như Twitter, MQTT không giới hạn ở 140 ký tự. Đó là dữ liệu bất khả tri, vì vậy bạn có thể gửi các số nhỏ hoặc khối văn bản lớn, biểu đồ dữ liệu định dạng JSON hoặc thậm chí hình ảnh và tệp nhị phân.

Không phải MQTT tốt hơn HTTP cho mọi thứ - nhưng nó phù hợp hơn nếu chúng ta sẽ có nhiều cảm biến xung quanh nhà, liên tục báo cáo.

Cũng cần biết rằng OpenHAB sẽ không hoạt động như nhà môi giới MQTT của bạn - chúng tôi sẽ giải quyết vấn đề đó sau. Tuy nhiên, OpenHAB sẽ hoạt động như một ứng dụng khách: nó có thể xuất bản nhật ký hoạt động OpenHAB của bạn, cũng như liên kết các kênh cụ thể với các thiết bị, vì vậy, ví dụ: bạn có thể có một công tắc được điều khiển bởi các tin nhắn MQTT trên một kênh cụ thể. Điều này là lý tưởng để tạo ra một ngôi nhà có đầy đủ các cảm biến.

Cài đặt Mosquitto trên Pi của bạn

Mặc dù OpenHAB bao gồm một ứng dụng khách MQTT để bạn có thể đăng ký một chủ đề và cũng xuất bản các thông báo, nhưng nó sẽ không hoạt động như một máy chủ. Để làm được điều đó, bạn cần sử dụng nhà môi giới MQTT dựa trên web (trả phí hoặc miễn phí) hoặc cài đặt phần mềm miễn phí trên Pi của bạn. Tôi muốn giữ tất cả trong nhà, vì vậy tôi đã cài đặt Mosquitto trên Pi.

Thật không may, phiên bản có sẵn thông qua apt-get thông thường đã hoàn toàn lỗi thời. Thay vào đó, hãy thêm các nguồn mới nhất.

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

sudo apt-key thêm mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

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

sudo apt-get install mosquitto

Đó là tất cả những gì chúng ta cần làm để thiết lập và chạy một máy chủ MQTT trên mạng cục bộ. Nhà môi giới của bạn đang chạy trên cổng 1883 theo mặc định.

Kiểm tra máy chủ MQTT của bạn có đang hoạt động hay không bằng cách sử dụng MQTT.fx miễn phí, đa nền tảng. Nhấp vào biểu tượng cài đặt để tạo hồ sơ mới và nhập địa chỉ IP hoặc tên Raspberry Pi của bạn. Lưu và nhấn kết nối. Nếu đèn giao thông nhỏ ở trên cùng bên phải chuyển sang màu xanh lục, bạn nên đi.

Để kiểm tra nhanh, hãy nhấp vào tab 'đăng ký' và nhập inTopic / vào hộp văn bản, sau đó nhấn Đặt mua cái nút. Bạn hiện đã đăng ký nhận tin nhắn về chủ đề có tên inTopic, mặc dù nó sẽ hiển thị 0 tin nhắn. Quay lại tab xuất bản, nhập InTopic vào hộp nhỏ và một thông báo ngắn vào hộp văn bản lớn bên dưới. Đánh Công bố một vài lần và nhìn lại tab đăng ký. Bạn sẽ thấy một vài thông báo đã xuất hiện trong chủ đề đó.

Trước khi thêm một số cảm biến thực tế vào mạng của mình, chúng ta cần tìm hiểu về các cấp chủ đề, cho phép chúng ta cấu trúc và lọc mạng MQTT. Tên chủ đề phân biệt chữ hoa chữ thường, không nên bắt đầu bằng $, hoặc bao gồm khoảng trắng hoặc các ký tự không phải ASCII - thực sự là các phương pháp lập trình tiêu chuẩn cho tên biến.

Dấu phân tách / biểu thị cấp chủ đề, được phân cấp, ví dụ: các cấp sau là tất cả các cấp chủ đề hợp lệ.

inTopic / smallSubdivision / EvenSmallerSubdivision

myHome / livingRoom / nhiệt độ

myHome / livingRoom / độ ẩm

myHome / nhà bếp / nhiệt độ

myHome / nhà bếp / độ ẩm

Bạn sẽ thấy cấu trúc cây này hoàn hảo như thế nào cho một ngôi nhà thông minh với đầy đủ các cảm biến và thiết bị. Thực tiễn tốt nhất để sử dụng với nhiều cảm biến trong một phòng là xuất bản từng biến cảm biến như cấp độ chủ đề của riêng nó - phân nhánh thành mức độ cụ thể hơn (như trong các ví dụ ở trên) - thay vì cố gắng xuất bản nhiều loại cảm biến cho cùng một kênh .

Sau đó, khách hàng có thể xuất bản hoặc đăng ký bất kỳ cấp độ chủ đề riêng lẻ nào hoặc sử dụng một số ký tự đại diện đặc biệt để lọc từ cấp cao hơn trong cây.

+ Ký tự đại diện thay thế cho bất kỳ cấp chủ đề nào. Ví dụ:

myHome / + / nhiệt độ

sẽ đăng ký khách hàng cho cả hai

myHome / livingRoom / nhiệt độ

myHome / nhà bếp / nhiệt độ

... nhưng không phải là mức độ ẩm.

# Là một ký tự đại diện nhiều cấp, vì vậy bạn có thể tìm nạp bất kỳ thứ gì từ mảng cảm biến livingRoom với:

myHome / livingRoom / #

Về mặt kỹ thuật, bạn cũng có thể đăng ký cấp độ gốc # mà bạn sẽ giúp bạn hoàn toàn mọi thứ đều đi qua nhà môi giới, nhưng điều đó có thể giống như dí vòi rồng vào mặt bạn: hơi quá sức. Hãy thử kết nối với nhà môi giới MQTT công khai từ HiveMQ và đăng ký #. Tôi nhận được khoảng 300 tin nhắn trong vài giây trước khi khách hàng của tôi gặp sự cố.

Mẹo dành cho người mới bắt đầu MQTT: ' /myHome/' là một chủ đề khác với ' myHome/' - bao gồm dấu gạch chéo ở đầu sẽ tạo ra một cấp chủ đề trống, mặc dù hợp lệ về mặt kỹ thuật, nhưng không được khuyến khích vì nó có thể gây nhầm lẫn.

Bây giờ chúng ta đã biết lý thuyết, hãy bắt đầu với Arduino, Ethernet Shield và cảm biến nhiệt độ và độ ẩm DHT11 - bạn có thể đã có một cái trong bộ khởi động của mình, nhưng nếu không, chỉ cần hoán đổi cảm biến môi trường cho một chuyển động cảm biến (hoặc thậm chí một nút).

Xuất bản MQTT từ Arduino có kết nối Ethernet

Nếu bạn có thiết bị tương thích với Arduino kết hợp với Wi-Fi hoặc Ethernet tích hợp, thiết bị đó cũng sẽ hoạt động. Cuối cùng, chúng tôi sẽ muốn có một cách giao tiếp tốt hơn / rẻ hơn rằng phải sử dụng kết nối mạng trong mọi phòng, nhưng điều này phục vụ cho việc tìm hiểu những điều cơ bản.

Bắt đầu bằng cách tải xuống thư viện pubsubclient từ Github . Nếu bạn đã sử dụng nút 'Tải xuống dưới dạng ZIP', cấu trúc hơi sai. Giải nén, đổi tên thư mục thành pubsubclient , sau đó lấy hai tệp ra khỏi src và di chuyển chúng lên một cấp đến thư mục gốc của thư mục đã tải xuống. Sau đó, di chuyển toàn bộ thư mục vào Arduino / thư viện danh mục.

Đây là mã mẫu của tôi mà bạn có thể điều chỉnh : đầu ra tín hiệu DHT11 ở chân 7. Thay đổi IP máy chủ cho Pi của bạn trên dòng sau:

client.setServer ('192.168.1.99', 1883);

Rất tiếc, chúng tôi không thể sử dụng tên thân thiện của nó (OpenHAB.local trong trường hợp của tôi) vì ngăn xếp TCP / IP trên Arduino rất đơn giản và việc thêm mã để đặt tên Bonjour sẽ là rất nhiều bộ nhớ mà chúng tôi không muốn lãng phí. Để thay đổi các chủ đề mà dữ liệu cảm biến đang được phát, hãy cuộn xuống các dòng sau:

đệm char [10];

dtostrf (t, 0, 0, bộ đệm);

client.publish ('openhab / himitsu / nhiệt độ', bộ đệm);

dtostrf (h, 0, 0, bộ đệm);

client.publish ('openhab / himitsu / Moisturiser', bộ đệm);

Mã này cũng bao gồm đăng ký kênh lệnh. Tìm và điều chỉnh dòng sau:

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

Kiểm tra mã xung quanh đó và bạn sẽ thấy rằng bạn có thể dễ dàng điều khiển đèn LED hoặc rơ le, chẳng hạn bằng cách gửi lệnh đến các kênh cụ thể. Trong mã ví dụ, nó chỉ đơn giản gửi một thông báo trở lại xác nhận đã nhận lệnh.

Tải lên mã của bạn, cắm Arduino của bạn vào mạng và sử dụng MQTT.fx đăng ký # hoặc openhab / himitsu / # (hoặc bất cứ thứ gì bạn đã đổi tên phòng, nhưng đừng quên thêm dấu # ở cuối). Bạn sẽ sớm thấy tin nhắn đến; và nếu bạn BẬT hoặc TẮT chủ đề lệnh, bạn cũng sẽ thấy các xác nhận quay trở lại.

MQTT Binding cho OpenHAB

Bước cuối cùng trong phương trình là nối nó vào OpenHAB. Đối với điều đó, tất nhiên chúng ta cần một ràng buộc.

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

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

Và chỉnh sửa tệp cấu hình để kích hoạt ràng buộc.

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

mqtt: broker.clientId = openhab

Khởi động lại OpenHAB

khởi động lại dịch vụ sudo openhab

Sau đó, hãy thêm một hoặc hai mục:

/ * Cảm biến MQTT * /

Số Himitsu_Temp 'Nhiệt độ Himitsu [% .1f ° C]' (Himitsu, Nhiệt độ) {mqtt = '<[broker:openhab/himitsu/temperature:state:default]'}

Số Himitsu_Humidity'Himitsu Humidity [% .1f %%] '(Himitsu, Độ ẩm) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Bây giờ bạn đã hiểu định dạng; nó nhận được một Mục số khỏi ràng buộc MQTT, về một chủ đề cụ thể. Đây là một ví dụ đơn giản, bạn có thể muốn tham khảo trang wiki nơi nó có thể phức tạp hơn rất nhiều .

Xin chúc mừng, bây giờ bạn đã có cơ sở là một mảng cảm biến dựa trên Arduino giá rẻ. Chúng tôi sẽ xem xét lại điều này trong tương lai và đặt Arduino vào mạng RF hoàn toàn riêng biệt của riêng họ. Tôi cũng đã tạo một phiên bản giống hệt cho bảng Wizwiki 7500 nếu bạn tình cờ có một trong những cái đó.

Dữ liệu đồ thị và độ bền

Bây giờ bạn có thể đã thiết lập một loạt các cảm biến, cho dù từ Z-Wave hay Arduinos tùy chỉnh chạy MQTT - vì vậy bạn có thể xem trạng thái hiện tại của các cảm biến đó bất kỳ lúc nào và bạn cũng phải phản ứng với giá trị của chúng trong các quy tắc. Nhưng điều thú vị về các giá trị cảm biến nói chung là chúng thay đổi theo thời gian: đó là nơi mà sự bền bỉ và biểu đồ xuất hiện. Sự bền bỉ trong OpenHAB có nghĩa là lưu dữ liệu theo thời gian. Hãy tiếp tục và thiết lập RRD4J (Cơ sở dữ liệu Round Robin cho Java), được gọi như vậy vì dữ liệu được lưu theo kiểu vòng tròn - dữ liệu cũ hơn bị loại bỏ để nén kích thước của cơ sở dữ liệu.

Cài đặt các gói rrd4j bằng các lệnh sau.

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

Sau đó, tạo một tệp mới có tên rrd4j.persist bên trong cấu hình / sự bền bỉ thư mục. Dán vào phần sau:

Chiến lược {

everyMinute: '0 * * * *?'

everyHour: '0 0 * * *?'

everyDay: '0 0 0 * *?'

default = everyChange

}

Vật phẩm {

// giữ nguyên mọi thứ khi giá trị được cập nhật, chỉ là giá trị mặc định và khôi phục chúng từ cơ sở dữ liệu khi khởi động

*: chiến lược = everyChange, restoreOnStartup

// tiếp theo, chúng tôi xác định các chiến lược cụ thể của mọi Giờ đối với bất kỳ thứ gì trong nhóm Nhiệt độ và từng phút đối với Độ ẩm

cách sử dụng airpods với android

Nhiệt độ *: chiến lược = everyHour

Độ ẩm *: chiến lược = everyMinute

// hoặc bạn có thể thêm các mục cụ thể tại đây, chẳng hạn như

// Phòng ngủ_Humidity, JamesInOffice: chiến lược = everyMinute

}

Trong phần đầu tiên của tệp này, chúng tôi đang xác định các chiến lược, điều này chỉ có nghĩa là đặt tên cho biểu thức CRON. Điều này cũng giống như chúng tôi đã làm với My.OpenHAB, nhưng lần này chúng tôi tạo ra một số chiến lược mới mà chúng tôi có thể sử dụng cho everyDay, everyHour và everyMinute. Tôi vẫn chưa sử dụng tất cả chúng, nhưng tôi có thể sẽ sử dụng trong tương lai.

Trong nửa sau của tệp, chúng tôi cho rr4dj biết những giá trị dữ liệu nào cần lưu. Theo mặc định, chúng tôi sẽ lưu mọi thứ mỗi khi nó cập nhật, nhưng tôi cũng đã chỉ định một số chiến lược dựa trên thời gian cho các cảm biến cụ thể. Nhiệt độ Tôi không quá bận tâm, vì vậy tôi đã đặt điều đó để tiết kiệm mỗi Giờ, nhưng độ ẩm là mối quan tâm lớn đối với tôi, vì vậy tôi muốn xem nó thay đổi như thế nào mỗi phút. Nếu có dữ liệu khác mà bạn muốn lưu cụ thể vào những thời điểm đã định, hãy thêm những dữ liệu đó vào đây ngay bây giờ hoặc điều chỉnh nếu cần.

Lưu ý: nếu bạn cũng muốn vẽ biểu đồ dữ liệu, bạn PHẢI lưu trữ nó ít nhất một lần một phút. Không quan trọng nếu dữ liệu cảm biến của bạn được cập nhật nhanh chóng, bạn chỉ cần yêu cầu rr4dj lưu trữ dữ liệu đó mỗi phút một lần.

Với định nghĩa đó, bạn sẽ bắt đầu thấy một số đầu ra gỡ lỗi cho bạn biết rằng các giá trị đang được lưu trữ.

Tiếp theo, hãy tạo một số biểu đồ đẹp của tất cả dữ liệu này. Nó thực sự dễ dàng. Để tạo biểu đồ của một cảm biến riêng lẻ, hãy thêm phần sau vào sơ đồ trang web của bạn:

Mục biểu đồ = Phòng ngủ_Humidity period = h

Đó thực sự là tất cả những gì bạn cần. Giá trị hợp lệ cho khoảng thời gian là h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; nó phải rõ ràng những gì có nghĩa là. Nó được đặt mặc định là D cho một ngày dữ liệu đầy đủ nếu không được chỉ định.

Để tạo một biểu đồ có nhiều mục, thay vào đó, chỉ cần vẽ biểu đồ tên nhóm:

Mục biểu đồ = Giai đoạn độ ẩm = h

Bạn cũng có thể muốn biết rằng bạn có thể sử dụng biểu đồ này ở những nơi khác; nó tạo ra một hình ảnh bằng cách sử dụng URL sau: http: // YOUROPENHABURL: 8080 / chart? groups = Humidity & period = h

Thế nào Của bạn Hệ thống OpenHAB sắp ra mắt?

Đó là nó cho phần này của hướng dẫn, nhưng đừng mong đợi đây sẽ là lần cuối cùng bạn nghe chúng tôi về OpenHAB. Hy vọng rằng điều này và hướng dẫn dành cho người mới bắt đầu đã cung cấp cho bạn một nền tảng vững chắc để phát triển hệ thống OpenHAB hoàn chỉnh của riêng bạn - nhưng đó là một quá trình chưa bao giờ thực sự kết thúc hoàn toàn.

Rất may, OpenHAB có thể mở rộng quy mô tốt từ một vài thiết bị đến hàng trăm thiết bị, từ độ phức tạp của quy tắc đơn giản đến mức tối ưu trong tự động hóa gia đình - vậy hệ thống của bạn hoạt động như thế nào? Bạn đã chọn những thiết bị nào? Dự án lớn tiếp theo mà bạn sẽ giải quyết là gì?

Hãy nói chuyện trong các nhận xét - và vui lòng, nếu bạn thấy hướng dẫn này hữu ích, hãy nhấp vào các nút chia sẻ đó để cho bạn bè của bạn biết cách họ cũng có thể thiết lập hệ thống OpenHAB của riêng họ.

Chúng tôi hy vọng bạn thích các mặt hàng chúng tôi giới thiệu và thảo luận! MUO có quan hệ đối tác liên kết và được tài trợ, vì vậy chúng tôi nhận được một phần doanh thu từ một số giao dịch mua của bạn. Điều này sẽ không ảnh hưởng đến giá bạn phải trả và giúp chúng tôi đưa ra các đề xuất sản phẩm tốt nhất.

Đăng lại Đăng lại tiếng riu ríu E-mail Hướng dẫn cho người mới bắt đầu để tạo hoạt ảnh cho bài phát biểu

Hoạt hình có thể là một thách thức. Nếu bạn đã sẵn sàng bắt đầu thêm đối thoại vào dự án của mình, chúng tôi sẽ chia nhỏ quy trình cho bạn.

Đọc tiếp
Chủ đề liên quan
  • DIY
  • Nhà thông minh
  • Arduino
  • Tự động hóa gia đình
  • Longform
  • Hướng dẫn Longform
Giới thiệu về tác giả James Bruce(707 bài báo đã xuất bản)

James có bằng Cử nhân về Trí tuệ nhân tạo và được chứng nhận CompTIA A + và Network +. Khi không bận rộn với tư cách là Biên tập viên đánh giá phần cứng, anh ấy thích LEGO, VR và các trò chơi trên bàn. Trước khi gia nhập MakeUseOf, anh ấy là kỹ thuật viên ánh sáng, giáo viên tiếng Anh và kỹ sư trung tâm dữ liệu.

Xem thêm từ James Bruce

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký