[Project Trẻ Em] Update hệ thống theo dõi không khí (của người khác).

Oke, thì tại sao tôi làm cái này trong khi có cả đống seri khác chưa viết xong. Tất nhiên lại là vì tôi lười như con gâu đần 3 4 tuổi, và cái này một mặt nào đấy là cấp thiết vì tôi mới sắm được một thằng kẹo con ăn lắm ị nhiều.

Shout out to Chum Chum, thằng nhóc ra đời thiếu hướng dẫn sử dụng nên ông bô nó phải tự đi làm doc bắt đầu từ hôm nay.

thiết bị

Oke, thì cái này để làm gì. Để bắt đầu thì chuyện là tôi bị xoang, và tôi đảm bảo ở cái đất hà nội này tôi không phải là thằng duy nhất bị xoang tới độ u mê lú lẫn. Nói thẳng ra thời tiết nó toang hoác vờ lờ, chất lượng công khí thì khỏi phải nói vì nói bụi nó bay vào mồm không 1g thì nửa lạng.

Vì thế nên t đóng cửa, sắm con máy lọc khí, tắt đèn và làm nghề IT. Vì IT không cần ra ngoài, đằng nào thì con người cũng là khó ưa nên tội gì nhỉ, một mũi tên trúng hai con kangaru. Cơ mà sau khi đóng cửa có rất nhiều vấn đề sảy ra, Oxi đâu, nhiệt độ, độ ẩm cả tỉ thứ liên quan vì thế tôi lại đi kiếm thiết bị kiểm tra khí.

Thiết bị toàn hàng fake, không có sensor thật, không có giá trị sử dụng, có thì đắt lòi mắt không đạt tí p/p nào.

Nên tôi làm bố một con tự chơi, tội tình gì. Chả tội tình gì.

*lấy hơi, ngắt dòng, sang khổ mới*

Rồi, thì thật ra đây không phải là một bài toán mới và tôi cũng chỉ định làm cái project sinh viên 1 2 ngày gì đấy cho cái bài toán cấp thiết này. Không thằng ngu nào đi sáng tạo lại cái bánh xe cả, nên t lên mạng tìm mấy thiết bị opensource đang thừa tràn lan trên mạng. Và từ đó lấy cái này

https://www.airgradient.com/open-airgradient/instructions/diy/

Đại khái là, mạch nó đã viết, giao thức serial tới các module đã xong, tới 70% công việc đã hoàn thành. Thế thì chả tội gì, chúng ta nhảy vào với nó luôn.

Đầu tiên là phần mạch cứng. Ừm, cái này vì cái link trên nó đã hướng dẫn rõ ràng rồi, t lười giải thích. Tiện tôi còn dư 8 cái mạch cứng chưa dùng, chưa link kiện, ai thích có thể liên hệ.

Từ link trên chúng ta nhảy vào git của dự án opensource này: https://github.com/airgradienthq/arduino

Chọn example và vào DIY_BASIC là con mạch rẻ tiền 2 cụ mà chúng ta hướng tới, scan code phát. Cái quan trọng là phải hiểu tụi này định kiếm sống ra sao, vì chả có bữa cơm nào miễn phí hết.

Sau khi scan một chút các bạn có thể thấy

Point tới server của các bạn
bắn hết thông số phòng qua luôn

Vậy là sau khi nghía tí, hóa ra các bố muốn open hardware nhưng bán hệ thống quản lý thiết bị cho trường học. Và xin lỗi tôi không có nhu cầu mua cloud solution của các ông, ở đây tụi tôi không chơi thế. Idea rõ ràng là biến sản phẩm từ push base thành pull base và sử dụng Prometheus để get metrics ở mạng nội bộ của mình. Cơ bản

Từ đấy bạn lại lần mò ra một cái link khác của một thanh niên tên Jeff Geerling với link: https://github.com/geerlingguy/airgradient-prometheus

Version của thanh niên chắc là base trên một version đã cũ của AirGradient, ở đây cũng đã hướng tới chuyển sang metric prometheus nhưng tất cả phần config đều là static. Với một cái hệ thống fix cứng thế thì sản phẩm khó dùng thấy bà cố nội, chả phải tất cả người dùng đều biết về tech đâu. =)) nên là chúng ta trươc mắt sẽ ghép 2 version này lại với nhau, mục tiêu cuối là loại bỏ tất cả các thao tác re-push code vào mạch.

*e hèm*

Oke, thì thật ra tôi cũng chả code 8266 và cũng không thông thuộc đống lib của nó, cái này chỉ là project vui 2 ngày thôi. Nên nếu tôi code ngu các bạn làm nhúng thấy ngứa mắt thì thông cảm, tôi thấy nó tải được, tôi dùng được, code tôi cũng sẽ chả tối ưu. Kệ nó đi, sau thích các ông lấy về mà chế dùng.

RỒI, SCAN TỔNG QUAN CODE:

Code version hiện tại của AG sử dụng WifiManager là một thư viện hỗ trợ thiết lập mạng cho ESP8266 qua chế độ HOTSPOT.

Vào -> (Nếu không có thiết lập mạng hoặc thiết lập mạng không kết nối được) -> Setup Hotspot -> Người dùng vào Hotspot nhập SSID/pass -> Thiết bị reset với config được thiết lập và join vào mạng wifi gia đình.

Về phần U8g2lib thì là một lib hỗ trợ thiết lập màn hình. Chắc trước mắt chúng ta bỏ qua.

Quay qua code của thanh niên Jeff

Thanh niên dùng ESP8266WebServer để thiết lập một webserver cơ bản cung cấp text metrics để prometheus pull. Đơn giản dễ hiểu.

Phần còn lại, tất cả thông tin kết nối làm bằng tay, thiết lập thông số mạng cũng bằng tay. Và ideal của ông này là tách biệt nhiều thiết bị trong mạng ra dựa theo ip tĩnh của nó và port của webserver. Cái này theo tôi là rườm rà vờ lờ.

Từ đấy, chúng ta có quyết định sau, sử dụng code base của AG mới loại bỏ phần post server. Tận dụng phần build metric của thanh niên Jeff.

Loại bỏ thư viện cũ, thêm thư viện webserver

Khởi tạo đối tượng webserver -> tạo webserver ở setup state -> check các request liên tục trong loop

Webserver sẽ được khởi tạo khi wifi kết nối thành công. Bắt trên 2 part root và /metrics về func HandleRoot(), tất cả các request sai chạy tới HandleNotFound()

HandleNotFound() trả về 404 với một HTML cơ bản để báo là, bố trẻ đi sai đường rồi.

HandleRoot() sẽ kéo tới GenerateMetrics để build Prometheus text format theo mỗi request.

Ừm tôi bếch nguyên của thanh niên Jeff, thay đổi ít biến. Tội gì phải làm khó mình.

OKE, VÀ NHƯ THẾ CHÚNG TA CÓ VERSION 1 CỦA SẢN PHẨM CON LAI NỬA MÙA CHO “SMART HOME” (nghe cho sang).

Code version 1 có UI để thiết lập mạng, và khi khởi chạy sẽ ra webserver vào IP DHCP của mạng wifi của chúng ta.

*Hold off*

Thế thì làm thế đếch nào để một end user có thể biết được ip nó là cái quái gì, ở đâu =))) làm khó nhau chăng. Từ câu chuyện này chúng ta chạy sang version 2 của đống code thổ tả.

mDNS – multicast DNS

Về cơ bản là thiết bị sẽ tự động cache một cái DNS vào router và bảo là, ê bố mày, chính bố mày là thằng IOT A đây, tên tao thế này này.

  1. Multicast DNS thì mặc định có domain là .local
  2. không có root với branch gì hết, tôi chả hiểu hoặc tôi vốn không hiểu mDNS tới thế. Nên cái code này chỉ chạy với example: taodeptrai.local mà không chạy với tao.deptrai.local

Thế là chúng ta sẽ apply mDNS vào code.

Thêm thư viện mDNS, vì tôi ngu, thời giờ toàn code thư viện, bảo tôi tự viết chắc chết.

khi wifi kết nối, tạo ra một cache DNS tên chumchum.local

re-apply mDNS mỗi loop

và nó chạy

Oke, vậy là mDNS hoạt động, giờ phải chuyển cái config mDNS ra cùng cái UI thiết lập wifi ở phía HOTSPOT

Thêm thiết lập domain mDNS parameter

Một config airURL – get value nhập từ UI vào biến

Dùng nó để khởi tạo mDNS.

OKE

thành quả, khi khởi chạy chưa có config wifi, hotport hiện lên, chúng ta truy cập vào wifi

Về cơ bản nó tự nhảy ra ui, nếu không default là 192.168.4.1

vào configure Wifi

trường URL đã xuất hiện cùng với Wifi setup từ ban đầu. Dễ

ĐẤY THẾ LÀ XONG PHẦN CỨNG, CHÍNH RA LÀ TÔI LÀM THÊM 1 CÁI NÚT BẤM VẬT LÝ ĐỂ RESET WIFI NỮA CŨNG ĐƯỢC NHƯNG MÀ TÔI LƯỜI THẤY BÀ, VÀ THẬT RA CÁI CASE ĐẤY CŨNG KHÔNG QUÁ QUAN TRỌNG. BẠN ĐỔI PASS WIFI NÓ TỰ HIỆN LẠI HOTPORT THÔI.

Sang phần 2, monitoring – wsl – prometheus – grafana – casaos

Tại sao lại lấy stack này, vì tôi lười =))) tôi sẵn mấy cái này

oke, vì nghèo không có máy serve còn lại nên cũng thế cả, chúng ta ảo hóa nó trong wsl2. Sử dụng CasaOS cho việc quản trị container qua web.

(CASAOS đ phải là một OS tôi không hiểu thằng ú la ú lần nào đặt nó cái tên này nhưng cơ bản con Casa này chỉ là một nền quản trị container)

Step 1 – Vào Windows Store cài Ubuntu – cho dễ – tự search google đi

Step 2 – cài CasaOS cho Ubuntu – google tiếp

Step 3 – CasaOS UI chúng ta làm từ đây

Cũng đẹp đấy chứ

Tạo tài khoản quản trị

UI Chính thế này

Vào Ubuntu tạo file config ở /data/prometheus/prometheus.yaml

Tạo manual một Prometheus server với mode 777

Truy cập prometheus thử

Lên, dễ ợt.

Thêm grafana lần này thử làm bằng appstore của CasaOS

bấm vào appstore

Cài và vào UI

Lại dễ, đùa chứ viết mấy cái này cứ bị nhục, nó dễ quá.

Thêm data source của prometheus, lưu ý vì chúng ta deploy 2 module không cùng net nên phải pick host IP của WSL làm cầu mạng

Đây cái ip này.

Xong thế là mạng vào, Grafana có thông tin

Test ra luôn.

À xong build cái UI thôi cái này cũng dễ, mỗi người thích 1 kiểu. đại khái thế.

Như bạn thấy cái chỗ tôi ngồi lượng CO2 đang cao lòi bản họng, nên tôi viết có hơi phê anh em thông cảm.

Tại tôi cũng ngu nữa nên là, chịu vậy.

END.

Ừ code tù vờ lờ, thiếu tính năng phần cứng. Nhưng t lười vẽ lại bảng mạch, kệ mấy người.

PEACE

Leave a Reply

Your email address will not be published. Required fields are marked *