版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
智能家庭監(jiān)控系統(tǒng)設(shè)計摘要在互聯(lián)網(wǎng)高速發(fā)展的今天,越來越多的Iot設(shè)備涌入我們的日常生活,使生活更加安全便捷舒適。為了有效提高生活的品質(zhì),人們開始關(guān)注周圍的環(huán)境質(zhì)量(如:空氣溫度、濕度、環(huán)境噪音、空氣甲醛等有害氣體含量等)。因此,環(huán)境的感知和數(shù)據(jù)存儲監(jiān)控,成為了物聯(lián)網(wǎng)的一大熱點之一。顯然,這些參數(shù)都能通過嵌入式開發(fā)板、傳感器等設(shè)備獲取。于此同時,近些年來云計算產(chǎn)業(yè)也突飛猛進地發(fā)展完善起來,社會能信息化程度進一步地提升,各行各業(yè)都加大了在云數(shù)據(jù)云計算的發(fā)展力度。為了滿足人們對云數(shù)據(jù)服務(wù)的需求,各個行業(yè)的企業(yè)都開始建立起了自己的信息數(shù)據(jù)中心,來監(jiān)控各種不同的業(yè)務(wù)數(shù)據(jù)、環(huán)境數(shù)據(jù)等。為了保證監(jiān)控服務(wù)的可靠性,必須對數(shù)據(jù)中心所監(jiān)控的各種資源進行實時監(jiān)控,但隨著數(shù)據(jù)中心的數(shù)據(jù)來源越來越復(fù)雜,監(jiān)控規(guī)模越來越龐大,監(jiān)控任務(wù)變得越來越困難,傳統(tǒng)的監(jiān)控方式難以滿足現(xiàn)代的監(jiān)控模式。為了滿足新時代,人們對家庭環(huán)境的高要求以及不斷擴增的數(shù)據(jù)中心規(guī)模的監(jiān)控需求,論文通過樹莓派、DHT11、MQ-2、ADS1115等模塊傳感器實現(xiàn)了監(jiān)控數(shù)據(jù)的采集和上報;通過對數(shù)據(jù)中心數(shù)據(jù)特征進行分析,完善了監(jiān)控系統(tǒng)的分布式多模塊架構(gòu)設(shè)計,運用分布式的數(shù)據(jù)傳輸存儲的方式對監(jiān)控系統(tǒng)進行了橫向擴展;通過動態(tài)調(diào)整相隔較久的歷史數(shù)據(jù)保存周期,來達到降低監(jiān)控系統(tǒng)存儲負載及提高系統(tǒng)靈活性的目的。本論文主要目的是通過物聯(lián)網(wǎng)設(shè)備對家庭環(huán)境進行實時監(jiān)控,對家庭環(huán)境的改變做出及時的感知,上報并及時告警處理并提供長期的環(huán)境數(shù)據(jù)曲線,更進一步的分析家庭環(huán)境狀態(tài),從而營造更加健康舒適便捷的家庭生活。采用物聯(lián)網(wǎng)嵌入式開發(fā)基礎(chǔ),分布式管理模式,多門編程語言并行工作。其使用了經(jīng)濟便捷的物聯(lián)網(wǎng)設(shè)備樹莓派為載體,通過各項傳感器采集數(shù)據(jù),最終呈現(xiàn)在本地或公網(wǎng)服務(wù)器上,利用便利的web頁面對環(huán)境進行實時的監(jiān)控并可配合其他物聯(lián)網(wǎng)設(shè)備進行調(diào)控,提高生活智能化。本智能家庭監(jiān)控中心項目主要分為五大模塊,基于樹莓派和各傳感器的數(shù)據(jù)采集agent模塊、用于傳輸數(shù)據(jù)的pusher模塊、告警判斷上報的judgee模塊、數(shù)據(jù)存儲的store模塊、監(jiān)控展示與策略配置的dashboard模塊和其他小模塊,使得用戶可以靈活的根據(jù)自己的環(huán)境需求配置相關(guān)告警策略來實現(xiàn)智能的家庭環(huán)境監(jiān)控。 關(guān)鍵詞:環(huán)境監(jiān)控,Iot,智能家居,樹莓派英文摘要Today,withtherapiddevelopmentoftheInternet,moreandmoreIotdevicesarepouringintoourdailylives,makinglifesafer,moreconvenientandmorecomfortable.Inordertoeffectivelyimprovethequalityoflife,peoplebegantopayattentiontothesurroundingenvironmentalquality(suchas:airtemperature,humidity,environmentalnoise,airformaldehydeandotherharmfulgascontent,etc.).Therefore,environmentalawarenessanddatastoragemonitoringhasbecomeoneofthehotspotsoftheInternetofThings.Obviously,theseparameterscanbeobtainedthroughembeddeddevelopmentboards,sensorsandotherdevices.Atthesametime,inrecentyears,thecloudcomputingindustryhasalsodevelopedrapidlyandsteadily,andthedegreeofinformationizationofsocialenergyhasfurtherimproved.Allwalksoflifehaveincreasedthedevelopmentofclouddatacloudcomputing.Inordertomeetpeople'sdemandforclouddataservices,enterprisesinvariousindustrieshavebeguntoestablishtheirowninformationdatacenterstomonitorvariousbusinessdataandenvironmentaldata.Inordertoensurethereliabilityofthemonitoringservice,thevariousresourcesmonitoredbythedatacentermustbemonitoredinrealtime.However,asthedatasourcesofthedatacenterbecomemoreandmorecomplex,themonitoringscalebecomeslargerandlarger,andthemonitoringtaskbecomesmoreandmoredifficult.Traditionalmonitoringmethodsaredifficulttomeetthemodernmonitoringmode.Inordertomeetthenewera,people'shighrequirementsforthefamilyenvironmentandthemonitoringneedsoftheever-expandingdatacenterscale,thepaperhasrealizedthecollectionandreportingofmonitoringdatathroughmodulesensorssuchasRaspberryPi,DHT11,MQ-2,ADS1115;Thedatacenterdatacharacteristicsareanalyzed,thedistributedmulti-modulearchitecturedesignofthemonitoringsystemisimproved,andthemonitoringsystemisscaledhorizontallybymeansofdistributeddatatransmissionandstorage;bydynamicallyadjustingthehistoricaldatastorageperiodseparatedbyalongtime,Reducethestorageloadofthemonitoringsystemandincreasetheflexibilityofthesystem.ThemainpurposeofthisthesisistomonitorthehomeenvironmentinrealtimethroughIoTdevices,maketimelychangestothechangesinthehomeenvironment,reportandtimelyalarmprocessingandprovidelong-termenvironmentaldatacurves,andfurtheranalyzethestateofthehomeenvironmenttocreateaAhealthier,morecomfortableandconvenientfamilylife.AdoptingthefoundationofIoTembeddeddevelopment,distributedmanagementmode,multi-doorprogramminglanguageworkinparallel.ItusestheeconomicalandconvenientInternetofThingsdeviceRaspberryPiasthecarrier,collectsdatathroughvarioussensors,andfinallypresentsitonthelocalorpublicnetworkserver,andusestheconvenientwebpagetomonitortheenvironmentinrealtimeandcooperatewithotherIoTdevices.Carryoutregulationandcontroltoimprovetheintelligenceoflife.Theintelligenthomemonitoringcenterprojectismainlydividedintofivemodules,adatacollectionagentmodulebasedontheRaspberryPiandeachsensor,apushermodulefortransmittingdata,ajudgermoduleforalarmjudgmentreporting,astoremodulefordatastorage,amonitoringdisplayandastrategy.Theconfigureddashboardmoduleandothersmallmodulesenableuserstoflexiblyconfigurerelatedalarmpoliciesaccordingtotheirownenvironmentrequirementstoimplementintelligenthomeenvironmentmonitoring.目錄本科畢業(yè)設(shè)計(論文) 11. 緒論 71.1. 題目背景及目的 71.2. 國內(nèi)外研究狀況 71.3. 研究內(nèi)容及論文構(gòu)成 102. 相關(guān)技術(shù)介紹 102.1. Golang/Python開發(fā)語言 102.1.1. Python 102.1.2. Golang 102.2. 存儲相關(guān) 112.2.1. MYSQL(待改) 112.2.2. OPENTSDB(待改) 112.3. 樹莓派開發(fā)板 122.4. 軟件相關(guān)協(xié)議 122.4.1. REST(待改) 122.4.2. HTTP(待改) 132.4.3. RPC(待改) 142.5. 硬件相關(guān)協(xié)議 152.5.1. IIC(待改) 152.5.2. 單總線雙向串行通信協(xié)議(待改) 152.6. JSON數(shù)據(jù)交互格式(待改) 162.7. 分布式系統(tǒng)架構(gòu)(待改) 162.7.1. 一致性HASH算法(待改) 172.8. Flask框架(待改) 173. 需求分析與設(shè)計 183.1. 需求分析 183.1.1. 室內(nèi)環(huán)境的重要性 183.1.2. 統(tǒng)一管理監(jiān)控平臺 193.1.3. 應(yīng)用場景 錯誤!未定義書簽。3.2. 系統(tǒng)架構(gòu)圖 193.3. 數(shù)據(jù)庫設(shè)計 203.3.1. OPENTSDB 203.3.2. MYSQL 213.4. 模塊介紹 213.4.1. 硬件相關(guān)模塊 213.4.2. Agent模塊 303.4.3. Pusher模塊 323.4.4. Judger模塊 343.4.5. Store模塊 353.4.6. Dashboard模塊 364. 系統(tǒng)實現(xiàn)與操作測試 364.1. 環(huán)境監(jiān)控數(shù)據(jù)查看 364.2. 如何配置環(huán)境告警策略 384.2.1. 配置環(huán)境告警接收人 384.2.2. 創(chuàng)建環(huán)境告警HostGroup 394.2.3. 創(chuàng)建環(huán)境告警策略模塊 394.2.4. 將模板與HostGroup進行告警綁定4 394.3. 配置策略表達式 394.4. 告警展示恢復(fù)刪除列表 395. 總結(jié)與展望 39緒論題目背景及目的隨著二十一世紀科技和信息化的高速發(fā)展,經(jīng)濟發(fā)展越來越繁榮,國家日益昌盛,GDP不斷上升,人民的可支配入手顯著提高,人們對物質(zhì)生活的要求也逐步提升,人們漸漸地意識到物聯(lián)網(wǎng)設(shè)備給生活帶來了越來越多的便利,大量智能設(shè)備涌入人們的日常生活。物聯(lián)網(wǎng)(InternetofThings,簡稱IoT),是新一代信息科技發(fā)展的重點之一,成為繼計算機、互聯(lián)網(wǎng)之后世界科技信息發(fā)展的第三次浪潮。據(jù)統(tǒng)計,2018年國內(nèi)物聯(lián)網(wǎng)企業(yè)規(guī)模已超過萬億,物聯(lián)網(wǎng)早已上升為國家級戰(zhàn)略新興產(chǎn)業(yè)。物物互聯(lián),是物聯(lián)網(wǎng)的另外一個定義。物聯(lián)網(wǎng)產(chǎn)業(yè)能大致分為感知層、傳導(dǎo)層、應(yīng)用層和SDK平臺層。我們常見的射擊芯片、模塊等傳感器屬于感知層;通過局域網(wǎng)或廣域網(wǎng)傳輸(如WIFI、藍牙、NFC等)長短距離傳輸屬于傳導(dǎo)層;集成數(shù)據(jù)平臺、監(jiān)控平臺、設(shè)備管理平臺等屬于SDK平臺層;而應(yīng)用層是最廣泛融合在我們的日常生活中,如:醫(yī)療、居家、機械農(nóng)業(yè)、安防、交通運輸?shù)刃袠I(yè)都受到應(yīng)用層物聯(lián)網(wǎng)的青睞。國內(nèi)外研究狀況目前而已,就專門的IoT物聯(lián)網(wǎng)監(jiān)控平臺在國內(nèi)外還很少有對此進行專業(yè)優(yōu)化的理論資料和技術(shù)應(yīng)用。但近幾年來,國內(nèi)外不當(dāng)迸發(fā)出各種獨具特色的通用監(jiān)控平臺的SDK和工具,都巧妙地適配到我們的IoT平臺,也成為IoT監(jiān)控系統(tǒng)的一種趨勢。這些成熟的通用網(wǎng)絡(luò)監(jiān)控管理平臺或工具,提供是各式各樣便捷可靠的功能,為本文后續(xù)的工資提供了一些重要的思路。針對監(jiān)控管理平臺,國內(nèi)和國外已經(jīng)有多款成熟優(yōu)秀的產(chǎn)品推出,其中被業(yè)界廣泛應(yīng)用推廣的有如下幾款:由UCBerkeley發(fā)起的Ganglia是一個致力于高性能計算機(集群)系統(tǒng)的開源監(jiān)視項目,提供一個分布式且可伸縮的監(jiān)控環(huán)境系統(tǒng),通常用于測量數(shù)以千計的節(jié)點。Ganglia的數(shù)據(jù)組織和表示形式分別采取XML和XDR。在數(shù)據(jù)采集和傳輸?shù)南嚓P(guān)數(shù)據(jù)結(jié)構(gòu)和算法進行優(yōu)化設(shè)計之后,能夠高效高性能的是實現(xiàn)監(jiān)控系統(tǒng)的采集和傳輸。在存儲技術(shù)上,在服務(wù)器上搭建RRDTool對數(shù)據(jù)是溴銨存儲、歸檔和可視化等操作。Ganglia普遍被用于集群監(jiān)控,能夠支持上千哥節(jié)點的并發(fā)處理。Ganglia的核心包含監(jiān)控代理gmond模塊、數(shù)據(jù)匯集gmetad模塊以及一個Web前端繪制展示模塊。主要是用來監(jiān)控系統(tǒng)性能以及各種硬件的運行狀態(tài),如:CPU、內(nèi)存、硬盤利用率,I/O負載、網(wǎng)絡(luò)流量情況等,通過曲線的展現(xiàn)方式很容易觀察到每個節(jié)點的工作狀態(tài),并做出合理調(diào)整、分配系統(tǒng)資源,有效的提高系統(tǒng)架構(gòu)的性能。Zabbix是國外的一款開源成熟的企業(yè)級網(wǎng)絡(luò)監(jiān)控平臺,由AlexeiVladishev創(chuàng)建的ZabbixSIA開發(fā)維護,也是目前最廣泛應(yīng)用的一款監(jiān)控軟件,提供了界面化的web管理控制平臺,同時遵循著GPLv2標(biāo)準(zhǔn)開發(fā)。主要由server、agent、proxy、frontend四個獨立模塊構(gòu)成。從文獻[3]可以看出,Zabbix的主要數(shù)據(jù)源來自:Zabbix/SNMP/IPMI代理、直連設(shè)備、自定義格式監(jiān)控、常用數(shù)據(jù)庫、內(nèi)建Java應(yīng)用、硬件等。在配置監(jiān)控時,Zabbix提供了自由靈活的自定義閾值、可參考一個或多個主機、條目、定義時間跨度等多個維度進行問題定位。圖形界面端包括:web展示前端、全局儀表盤/圖形/圖表/幻燈片展示、元數(shù)據(jù)訪問、告警事件和通知詳情等。Zabbix不僅提供了數(shù)據(jù)收集存儲、聚合、分析功能,還能以多種不同的方式來將告警通知管理員。同時在通知模塊功能上,Zabbix提供了模板化的方式進行維護,一個模塊配置可以被多個實體/實體集使用、鏈接,所有監(jiān)控的條目觸發(fā)器和圖型相關(guān)模塊都可以自動添加到被鏈接的實例上。Zabbix還提供了自我發(fā)現(xiàn)技術(shù),自動化便捷地管理監(jiān)控環(huán)境中的實例動作如文件系統(tǒng)、遠端設(shè)備其脫離或者新增到組織的動作都能被自動檢測。另外,Zabbix本身提供的API完美的支持了二次開發(fā)、第三方軟件集成、和不同端(Android、IOS、WinPhone)的軟件應(yīng)用中。Nagios是互聯(lián)網(wǎng)行業(yè)中基礎(chǔ)設(shè)備監(jiān)控的行業(yè)標(biāo)桿。同樣,它也是一款開源的企業(yè)級別監(jiān)控系統(tǒng),提供了常見的監(jiān)控項監(jiān)控方案和多種實例(服務(wù)器、交換機以及各種服務(wù)應(yīng)用)監(jiān)控的通知告警功能機制。Nagios是基于熱插拔的結(jié)構(gòu)開發(fā)的,它本身沒用任何監(jiān)控的功能選項,所有的監(jiān)控功能模塊都是通過插件的形式存在,因此它具有高度的模塊化和靈活性。主要功能有:網(wǎng)絡(luò)狀況檢測監(jiān)控、VPS資源監(jiān)控、遠程腳本調(diào)用監(jiān)控、SSH/SSL加密通道方式監(jiān)控、多種開發(fā)語音(Python、PHP、C/C++、Shell、Ruby、C#等)開發(fā)出來的插件監(jiān)控、各樣圖形化插件、并發(fā)服務(wù)檢測監(jiān)控等。除此之外,監(jiān)控系統(tǒng)Nagios還提供了強大的異常事件捕獲并進行告警通知功。當(dāng)監(jiān)控對象的狀態(tài)發(fā)現(xiàn)異常是,能夠及時地通過短信或者郵件的方式通知運維人員,并且當(dāng)監(jiān)控實例的狀態(tài)從異?;謴?fù)為正常狀態(tài)時,它還能再次提醒相關(guān)人員。Nagios監(jiān)控的并不是具體的數(shù)值(如操作系統(tǒng)上某文件夾內(nèi)文件個數(shù)),而是通過抽象屬性對實例對象進行監(jiān)控。它使用四種抽象屬性描述:OK/WARNING/CRITICAL/UNKNOW。因此,運維人員只需要關(guān)注和定義某個被監(jiān)控對象的WARNING/CRITICAL狀態(tài)的閾值即可。當(dāng)監(jiān)控實例狀態(tài)發(fā)送異常變換時,Nagios內(nèi)部模塊通過將WARNING/CRITICAL的閾值發(fā)送給相應(yīng)插件,插件對數(shù)據(jù)進行分析聚合,最終輸出成為狀態(tài)信息(OK/WARNING/CRITICAL/UNKNOW)以及一些附近詳情說明。Open-Falcon是向國內(nèi)小米公司開發(fā)設(shè)計的一款開源監(jiān)控系統(tǒng),它結(jié)合了業(yè)界一些大的互聯(lián)網(wǎng)公司的監(jiān)控方案結(jié)合了各個SRE、SA、DEVS的開發(fā)經(jīng)驗。相比其他上述的監(jiān)控系統(tǒng),Open-Falcon在性能、分布式擴展性和用戶使用效率等方面有著明顯的優(yōu)勢。隨著現(xiàn)代信息科技的快速發(fā)展,對于監(jiān)控系統(tǒng)來說,監(jiān)控的對象也越來越多,監(jiān)控項越來越復(fù)雜多變,監(jiān)控系統(tǒng)的容量需求驟增,而小米的Open-Falcon框架便將此視為重點,重點優(yōu)化了監(jiān)控系統(tǒng)的高并發(fā)、分布式、熱插拔、可擴展(水平、垂直)等功能特性,在國內(nèi)大受歡迎。其他還有一些監(jiān)控系統(tǒng),如MRTG網(wǎng)絡(luò)管理工具等。這些工具很多都于上面介紹的產(chǎn)品功能相似,在此就不再做詳細介紹。另外還有一些如NetView、OpnView等,價格昂系統(tǒng)復(fù)雜的傳統(tǒng)系統(tǒng),由于成本效率等原因,并沒有得到廣泛的推廣應(yīng)用。研究內(nèi)容及論文構(gòu)成相關(guān)技術(shù)介紹Golang/Python開發(fā)語言PythonPython是一種面向?qū)ο蟮哪_本語言。它具有解釋性、編譯性、互動性和易上手等特性。Python就為我們提供了非常完善的基礎(chǔ)代碼庫,覆蓋了網(wǎng)絡(luò)、文件、GUI、數(shù)據(jù)庫、文本等大量內(nèi)容。這使得Python在做一些工具類的開發(fā)非常方便,許多功能的開發(fā)都可以在這些官方或第三方庫的基礎(chǔ)上快速完成。在監(jiān)控系統(tǒng)中,我們也用到了多種第三方庫,來快速開發(fā)樹莓派。同時還使用了基于Python的WEB框架FLASK。GolangGolang是整個監(jiān)控系統(tǒng)模塊核心代碼所使用的開發(fā)語言。作為Google開發(fā)的一個開源項目,Go語言由羅伯特·格瑞史莫、羅伯·派克和肯·湯普遜發(fā)起開發(fā)的,主要是為了解決C++種出現(xiàn)的問題,提高開發(fā)者的開發(fā)效率。靈活、簡潔、清晰、高效是Go的語言特性。Go是一個靜態(tài)類型語言,同時又具有解釋語言動態(tài)類型特征的系統(tǒng)級語法標(biāo)準(zhǔn)定義。Go語言自帶協(xié)程,使得它再并發(fā)領(lǐng)域也占有一席之地。我們可以便捷的將Go用于多核和網(wǎng)絡(luò)并發(fā)的開發(fā)場景,同時靈活新穎的類型系統(tǒng)使得編寫模塊化系統(tǒng)更是水到渠成。對于傳統(tǒng)C++語言,C++的學(xué)習(xí)開發(fā)周期長,編譯時間長,而Python又是動態(tài)類型語言,很多錯誤常常再運行時拋出。Go則具有快速編譯的特性,同時具有垃圾回收機制,高效管理內(nèi)存,并且還支持運行時反射。與C++相比,Go并不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數(shù)等功能,但增加了切片、并發(fā)、管道、垃圾回收、接口等特性的語言級支持。不同于Java,Go內(nèi)嵌了關(guān)聯(lián)數(shù)組(也稱為哈希表(Hashes)或字典(Dictionaries)),就像字符串類型一樣。目前Go開發(fā)退隊有穩(wěn)定的發(fā)布周期,大約半年就有一次版本的更新,最新的是1.12。存儲相關(guān)MYSQLMySQL是Oracle支持的一個開源關(guān)系行數(shù)據(jù)庫管理系統(tǒng)(簡稱RDBMS),它是基于結(jié)構(gòu)化查詢語句(SQL)設(shè)計的,機會能運行在所有平臺之上,包括Windows,Linux和UNIX。MySQL是基于客戶端-服務(wù)器模型的,俗人它廣泛應(yīng)用的各種應(yīng)用程序,但MySQL與web應(yīng)用程序通常是在線發(fā)布相關(guān)聯(lián)的。MySQL服務(wù)器的MySQL服務(wù)的核心,它處理所有指向數(shù)據(jù)庫的指令和命令。MySQL服務(wù)器通常作為單獨的程序提供,既可用于客戶端-服務(wù)端網(wǎng)絡(luò)環(huán)境,同時也可以嵌入到獨立的應(yīng)用程式中,以第三方庫的形式存在,并可以與多個支持MySQL數(shù)據(jù)庫管理的實例程序共同運行。MySQL客戶端安裝在請求應(yīng)用上,其指令或命令通過MySQL客戶端發(fā)送到MySQLServer。MySQL最初是為了快速高效處理大型的數(shù)據(jù)庫而開發(fā)的。雖然MySQL通常只安裝在一臺主機(節(jié)點)上,但它卻能夠?qū)?shù)據(jù)傳遞到多臺主機(節(jié)點)。因為用戶可以通過多個MySQL客戶端連接訪問同一個遠程倉庫,將SQL語句發(fā)送到服務(wù)器處理,然后返回數(shù)據(jù)顯示結(jié)果。OPENTSDBOpenTSDB是一種可擴展的時間序列數(shù)據(jù)庫,它是基于Hadoop和HBase構(gòu)建的分布式架構(gòu)設(shè)計的,可以提供數(shù)十億個數(shù)據(jù)點的采集和存儲,而不會丟失任何精度。這使的OpenTSDB成為監(jiān)控系統(tǒng)的完美解決方案。OpenTSDB運用HBase技術(shù)來進行時間序列數(shù)據(jù)存儲,使用ZooKeeper從HBase集群獲取信息。它還包括一個時間序列守護進程(TSD)以及一組命令行常用的實用程序。通常情況下,用戶與OpenTSDB的交互溝通傳輸主要通過在一臺或多臺主機上運行一個或多個TSD來實現(xiàn)的。對應(yīng)每個TSD都是獨立的,沒有master和沒有共享狀態(tài)。因此,我們可以根據(jù)需求運行盡可能多的TSD,從而達到處理系統(tǒng)產(chǎn)生的巨大負載。每個TSD節(jié)點使用開源數(shù)據(jù)庫(HBase)來存儲和檢索時間序列數(shù)據(jù),從而提高數(shù)據(jù)庫的性能指標(biāo)。樹莓派開發(fā)板在二十一世紀萬物聯(lián)網(wǎng)的今天,國內(nèi)外大量涌現(xiàn)出各種智能家居、智能電器等新產(chǎn)品。而廣大民眾常用的物聯(lián)網(wǎng)設(shè)備常常都是一些昂貴的物聯(lián)網(wǎng)系統(tǒng)設(shè)備,這很大限度上限制了物聯(lián)網(wǎng)行業(yè)的發(fā)展,使得物聯(lián)網(wǎng)設(shè)備平民化的趨勢受阻。從市場調(diào)查的數(shù)據(jù)上看,目前大多數(shù)互聯(lián)網(wǎng)設(shè)備及相關(guān)微型系統(tǒng)還很多不人性化的設(shè)計和集成度較低等缺點。通常都使用多種相對獨立的設(shè)備拼接協(xié)作而成。由此,擁有性能強打、部署方便、價格便宜等優(yōu)點的樹莓派成為了智能家居、物聯(lián)網(wǎng)系統(tǒng)開發(fā)設(shè)備的不二之選?;跇漭傻幕A(chǔ)設(shè)備結(jié)合linux操作系統(tǒng)加上云服務(wù)器的物聯(lián)網(wǎng)解決方案,能夠巧妙的適用從公網(wǎng)遠程家庭環(huán)境監(jiān)控。樹莓派本身的功耗低,散熱良好,使得它長時間運行也能保證穩(wěn)定性。同時樹莓派采用linux操作系統(tǒng),其可擴展性搞且軟件耦合度低,讓我們能更加簡單的在其基礎(chǔ)上開發(fā)出各種多樣化的功能模塊。軟件相關(guān)協(xié)議REST(待改)表現(xiàn)層狀態(tài)轉(zhuǎn)換(RepresentationalStateTransfer,簡寫:REST)是一種用于描述軟件系統(tǒng)結(jié)構(gòu)的風(fēng)格。REST是一種通用的萬維網(wǎng)軟件架構(gòu)風(fēng)格,由RoyThomasFielding博士在他的博士論文中提出的,使得不同程序、軟件在網(wǎng)絡(luò)中相互傳遞信息更加便捷。它定義了一組服務(wù)約束,用于創(chuàng)建規(guī)范Web服務(wù)。通常我們將符合REST體系結(jié)構(gòu)樣式的Web服務(wù)叫做RWS,RESTfulWeb服務(wù),提供了一種計算機網(wǎng)絡(luò)系統(tǒng)之間的互操作性。表現(xiàn)層狀態(tài)轉(zhuǎn)換是一種提供萬維網(wǎng)絡(luò)服務(wù)的軟件構(gòu)建的設(shè)計風(fēng)格,根基于HTTP(超文本傳輸協(xié)議)之上而定義的一組約束和屬性。網(wǎng)絡(luò)服務(wù)如果很好的匹配或兼任了RESTful的架構(gòu)風(fēng)格,客戶端發(fā)出統(tǒng)一的資源標(biāo)識符訪問和控制網(wǎng)絡(luò)資源的請求將被允許,同時與預(yù)定義好的無狀態(tài)操作集具有一致化特性。因此,為彼此資源交互協(xié)作性質(zhì)(interoperability),RestfulAPI提供了在互聯(lián)網(wǎng)絡(luò)的計算系統(tǒng)之間的巧妙交互。服務(wù)請求端通過調(diào)用一組統(tǒng)一且預(yù)定義的無狀態(tài)系統(tǒng)操作來訪問和控制Web資源的文本的請求被允許存在于RESTfulWeb服務(wù)請求中。"Web資源"起源于Internet上定義為相應(yīng)URI標(biāo)識的文件。而在今天它們得到了一種更加抽象通用化的定義包含了在Web上以任何方式能夠識別、命名、獲取、尋址或處理的所有資源。通用的RESTfulWeb服務(wù)使用是以HTML、XML、BJSON、JSON或其他格式格式對資源URI發(fā)出的請求進行設(shè)置的有效負載來引發(fā)響應(yīng)。響應(yīng)是對遠程的資源進行了一些更改行為的確定答復(fù),響應(yīng)也可以提供重定向行為,使得返回指向其他資源或資源集合的相關(guān)超文本鏈接。在使用HTTP中,GET/HEAD/POST/PUT/ROUTER/DELETE/CONNECT/OPTION/TRACE是最常見的通用操作(HTTP方法)。通用的無狀態(tài)協(xié)議和標(biāo)準(zhǔn)控制,RESTful系統(tǒng)旨在實現(xiàn)性能優(yōu)越、連接可靠和靈活適應(yīng)能力。即使在系統(tǒng)運行期間,在不影響整個系統(tǒng)的情況下,通過重用可進行管理和更新的組件實現(xiàn)。代表狀態(tài)轉(zhuǎn)移是博士羅伊·菲爾丁在他的論文中定義的,他第一次引用了“代表狀態(tài)轉(zhuǎn)移”這個詞。在論文中,他完整地解釋了這個從1994年就開始被稱為"HTTP對象模型"的REST原則。HTTP1.1標(biāo)準(zhǔn)和統(tǒng)一資源標(biāo)識符(URI)標(biāo)準(zhǔn)就是基于這些原則設(shè)計的。HTTP(待改)HTTP協(xié)議是一種應(yīng)用層協(xié)議,其全稱為超文本傳輸協(xié)議(HyperTextTransferProtocol),用于計算機之間傳輸文本而定制的傳送協(xié)議。該協(xié)議構(gòu)建在傳輸層的TCP協(xié)議之上,保證了傳輸文檔的可靠性。對因特網(wǎng)應(yīng)用程序開發(fā)人員來,這樣就無需擔(dān)心HTTP通信會在傳輸過程中被破壞、復(fù)制或產(chǎn)生畸變了。開發(fā)人員可以專注于應(yīng)用程序特有細節(jié)的編寫,而不用考慮因特網(wǎng)中存在的一些缺陷和問題(DavidGourley,2002)。HTTP的報文采用請求與響應(yīng)式的無狀態(tài)傳輸報文。消息的無狀態(tài)指的是前后兩個請求是相互獨立的,協(xié)議本身不提供事務(wù)處理的記憶能力。為了在特定場景下的需要,HTTP協(xié)議一般會通過Cookie機制來保存用戶的信息,從而達到有狀態(tài)的效果。HTTP的請求包含三個部分。第一部分是請求行,包括了請求方法、URL和協(xié)議版本;第二部分包括了用來向服務(wù)器說明附加信息的請求頭部;第三部分是消息主題,也就是請求的數(shù)據(jù)。HTTP響應(yīng)與之類似,也包含了三個部分。第一部分是狀態(tài)行,用來說明響應(yīng)的結(jié)果成功與否;第二部分為消息報頭,用來向客戶端返回附加的信息,如Content-Type、Cookie等;第三部分是響應(yīng)正文,一般是通過報頭字段中的Content-Type來確定具體的格式,常用的有html、text、json等。HTTP協(xié)議基于客戶端-服務(wù)器架構(gòu)來實現(xiàn),運行在不同系統(tǒng)的客戶端和服務(wù)器可以通過交換HTTP消息進行交互(CheMin,2016)。一次完整的HTTP請求和響應(yīng)過程一般有以下步驟:客戶端通過完整的URL與服務(wù)器建立TCP套接字連接??蛻舳送ㄟ^套接字向HTTP服務(wù)器發(fā)送一個請求報文,表明需要的資源。服務(wù)器接受請求并解析,根據(jù)需要將資源發(fā)送回客戶端讀取。服務(wù)器根據(jù)連接的類型選擇釋放連接或者是保持一段時間。通過這樣的一個過程,在客戶端與服務(wù)器之間就完成了一次數(shù)據(jù)交互。這個過程對于用戶都是透明的。RPC(待改)在分布式計算中,遠程過程調(diào)用(RPC)是指計算機程序?qū)е逻^程(子例程)在不同的地址空間(通常在共享網(wǎng)絡(luò)上的另一臺計算機上)執(zhí)行時,其編碼就好像是正常的(本地)過程調(diào)用,沒有程序員明確編寫遠程交互的細節(jié)。也就是說,程序員基本上編寫相同的代碼,無論子程序是執(zhí)行程序的本地程序還是遠程程序。這是客戶端-服務(wù)器交互的一種形式(調(diào)用者是客戶端,執(zhí)行者是服務(wù)器),通常通過請求-響應(yīng)消息傳遞系統(tǒng)實現(xiàn)。在里面面向?qū)ο蟮木幊谭独?,RPC調(diào)用由遠程方法調(diào)用(RMI)表示。RPC模型意味著一定程度的位置透明性,即無論是本地還是遠程,調(diào)用過程大致相同,但通常它們不相同,因此本地調(diào)用可以與遠程調(diào)用區(qū)分開來。遠程呼叫通常比本地呼叫慢幾個數(shù)量級且不太可靠,因此區(qū)分它們非常重要。RPC是進程間通信(IPC)的一種形式,因為不同的進程具有不同的地址空間:如果在同一主機上,它們具有不同的虛擬地址空間,即使物理地址空間相同;而如果它們在不同的主機上,則物理地址空間不同。已經(jīng)使用許多不同的(通常是不兼容的)技術(shù)來實現(xiàn)該概念。硬件相關(guān)協(xié)議IIC由飛利浦在80年代初期設(shè)計的I2C總線協(xié)議,使得同一電路板上的組件之間輕松通信得到的允許和規(guī)范。在2006年,飛利浦半導(dǎo)體遷移至恩智浦,同時I2C的名稱轉(zhuǎn)換為“InterIC”,有時總線稱為IIC或I2C總線。原始通信方式其傳輸速度定義為最大100kbit/s,許多應(yīng)用程序通常并不需要用到更快的傳輸。IIC的設(shè)計使用了一個7位地址空間長度的尋址方式(但實際上預(yù)留了16位)。因此,一單獨組件做多可與112個組件節(jié)點同時通訊。IIC也有多種工作模式,根據(jù)傳輸速度劃分為(單位:Kbit/s):標(biāo)準(zhǔn)模式(100),低速模式(10),快速模式(400)和高速模式(3400)。IIC不僅適用于單板工作場景,還用于通過電路連接的組件。簡單性和靈活性是包含IIC總線的應(yīng)用都具有的富含吸引力的關(guān)鍵特性。單總線雙向串行通信協(xié)議(待改)單總線即one-wire總線,是美國DALLAS公司推出的外圍串行擴展總線技術(shù)。與SPI、I2C串行數(shù)據(jù)通信方式不同.它采用單根信號線,既傳輸時鐘又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,具有節(jié)省I/O口線、資源結(jié)構(gòu)簡單、成本低廉、便于總線擴展和維護等諸多優(yōu)點。單總線是DALLAS公司研制開發(fā)的種協(xié)議由一個總線主節(jié)點、或多個從節(jié)點組成系統(tǒng),通過根信號線對從芯片進行數(shù)據(jù)的讀取。每一個符合OneWire協(xié)議的從芯片都有一個唯一的地址,包括48位的序列號、8位的家族代碼和8位的CRC代碼。主芯片對各個從芯片的尋址依據(jù)這64位的不同來進行。單總線利用一根線實現(xiàn)雙向通信。因此其協(xié)議對時序的要求較嚴格,如應(yīng)答等時序都有明確的時間要求。,基本的時序包括復(fù)位及應(yīng)答時序、寫一位時序、讀一位時序。在復(fù)位及應(yīng)答時序中,主器件發(fā)出復(fù)位信號后,要求從器件在規(guī)定的時間內(nèi)送回應(yīng)答信號;在位讀和位寫時序中,主器件要在規(guī)定的時間內(nèi)讀固或?qū)懗鰯?shù)據(jù)。單總線適用于單主機系統(tǒng),能夠控制一個或多個從機設(shè)備。主機可以是微控制器,從機可以是單總線器件,它們之間的數(shù)據(jù)交換只通過一條信號線。當(dāng)只有一個從機設(shè)備時,系統(tǒng)可按單節(jié)點系統(tǒng)操作;當(dāng)有多個從設(shè)備時,系統(tǒng)則按多節(jié)點系統(tǒng)操作。JSON數(shù)據(jù)交互格式(待改)JSON是一種鍵值式的輕量級數(shù)據(jù)交換格式,其解析效率高于XML,由于XML的不足,JSON在應(yīng)用的數(shù)據(jù)交換中得到了廣泛的應(yīng)用(KereshmehAfsari,2017)。它采用獨立于編程語言的文本格式來表示和存儲數(shù)據(jù)。其文本格式有點類似于Map的形式,值卻有著更多樣化的類型,故而極其適合作為應(yīng)用數(shù)據(jù)交換的格式。正是由于數(shù)據(jù)通信量小、快速、安全而且通用的數(shù)據(jù)格式,JSON在與各種服務(wù)端數(shù)據(jù)交互的Android終端應(yīng)用的設(shè)計和開發(fā)過程中顯得尤為重要(楊建強,2018)。JSON中有兩種較為常用的類型:對象,數(shù)組。對象表示為鍵值對,鍵的類型是字符串,而值可以是任意類型。對象中的數(shù)據(jù)由逗號分隔,并且以一個花括號對來表示一個對象的開始與結(jié)束。而數(shù)組則以方括號來表示,其內(nèi)部只有值類型,訪問的形式一般是通過下邊索引獲取其元素的引用。分布式系統(tǒng)架構(gòu)(待改)分布式系統(tǒng)是由一組通過網(wǎng)絡(luò)進行通信、為了完成共同的任務(wù)而協(xié)調(diào)工作的計算機節(jié)點組成的系統(tǒng)。分布式系統(tǒng)的出現(xiàn)是為了用廉價的、普通的機器完成單個計算機無法完成的計算、存儲任務(wù)。其目的是利用更多的機器,處理更多的數(shù)據(jù)。首先需要明確的是,只有當(dāng)單個節(jié)點的處理能力無法滿足日益增長的計算、存儲任務(wù)的時候,且硬件的提升(加內(nèi)存、加磁盤、使用更好的CPU)高昂到得不償失的時候,應(yīng)用程序也不能進一步優(yōu)化的時候,我們才需要考慮分布式系統(tǒng)。因為,分布式系統(tǒng)要解決的問題本身就是和單機系統(tǒng)一樣的,而由于分布式系統(tǒng)多節(jié)點、通過網(wǎng)絡(luò)通信的拓撲結(jié)構(gòu),會引入很多單機系統(tǒng)沒有的問題,為了解決這些問題又會引入更多的機制、協(xié)議,帶來更多的問題。分布式系統(tǒng)分為分布式計算(computation)與分布式存儲(storage)。計算與存儲是相輔相成的,計算需要數(shù)據(jù),要么來自實時數(shù)據(jù)(流數(shù)據(jù)),要么來自存儲的數(shù)據(jù);而計算的結(jié)果也是需要存儲的。在操作系統(tǒng)中,對計算與存儲有非常詳盡的討論,分布式系統(tǒng)將這些理論推廣到多個節(jié)點。那么分布式系統(tǒng)怎么將任務(wù)分發(fā)到這些計算機節(jié)點呢,很簡單的思想,分而治之,即分片(partition)。對于計算,那么就是對計算任務(wù)進行切換,每個節(jié)點算一些,最終匯總就行了,這就是MapReduce的思想;對于存儲,更好理解一下,每個節(jié)點存一部分數(shù)據(jù)就行了。當(dāng)數(shù)據(jù)規(guī)模變大的時候,Partition是唯一的選擇,同時也會帶來一些好處。一方面,提升性能和并發(fā),操作被分發(fā)到不同的分片,相互獨立。另一方面,提升系統(tǒng)的可用性,即使部分分片不能用,其他分片不會受到影響一致性HASH算法(待改)一致性HASH算法是用于描述使用散列算法分布數(shù)據(jù)以確定其位置的過程的術(shù)語。只使用數(shù)據(jù)id的哈希值就可以準(zhǔn)確地確定數(shù)據(jù)的位置。這種散列到位置的映射通常被稱為“環(huán)”。可能最簡單的哈希只是id的模數(shù)。例如,如果所有ID都是數(shù)字,并且您希望將數(shù)據(jù)分配給兩臺機器,則可以將所有奇數(shù)編號的ID放在一臺機器上,甚至將編號的ID放在另一臺機器上。假設(shè)您有一個平衡數(shù)量的奇數(shù)和偶數(shù)ID,以及每個id的平衡數(shù)據(jù)大小,您的數(shù)據(jù)將在兩臺機器之間得到平衡。由于數(shù)據(jù)ID通常是文本名稱而不是數(shù)字,例如文件或URL的路徑,因此使用“真實”散列算法將名稱首先轉(zhuǎn)換為數(shù)字是有意義的。例如,使用MD5,名稱'mom.png'的散列是'4559a12e3e8da7c2186250c2f292e3af','dad.png'的散列是'096edcc4107e9e18d6a03a43b3853bea'?,F(xiàn)在,使用模數(shù),我們可以將'mom.jpg'放在奇數(shù)機器上,將'dad.png'放在偶數(shù)機器上。使用像MD5這樣的散列算法的另一個好處是,生成的散列具有已知的均勻分布,這意味著您的id將均勻分布,而不必擔(dān)心保持id值本身均勻分布。Flask框架(待改)Flask是一個Web框架。這意味著flask為您提供了允許您構(gòu)建Web應(yīng)用程序的工具,庫和技術(shù)。此Web應(yīng)用程序可以是某些網(wǎng)頁,博客,Wiki或與基于Web的日歷應(yīng)用程序或商業(yè)網(wǎng)站一樣大。Flask是微框架類別的一部分。微框架通常是框架,對外部庫幾乎沒有依賴性。這有利有弊。優(yōu)點是框架很輕,很少依賴更新和監(jiān)視安全漏洞,缺點是有時你必須自己做更多工作或通過添加插件增加自己的依賴列表。在Flask的情況下,它的依賴關(guān)系是:Werkzeug是一個WSGI實用程序庫、jinja2是它的模板引擎。需求分析與設(shè)計需求分析室內(nèi)環(huán)境的重要性室內(nèi)環(huán)境是人類是日常生活最頻繁最密切相關(guān)的因素之一,80%以上的人的日常生活工作是在室內(nèi)進行的。因此,建立一個舒適的室內(nèi)環(huán)境,讓室內(nèi)成員享受高質(zhì)量空氣、環(huán)境,以滿足人體的舒適感、健康度是人類生活至關(guān)重要的一個部分。而提高環(huán)境質(zhì)量的第一步就是發(fā)現(xiàn)、監(jiān)控環(huán)境質(zhì)量。溫濕度環(huán)境的影響溫濕度環(huán)境是指人體在室內(nèi)對熱的適應(yīng)度、舒適度等相關(guān)因素的總體反應(yīng),包括了空氣溫度、空氣濕度等。關(guān)于人體對環(huán)境因素的感知,國際普遍公認的是Fanger的起點標(biāo)準(zhǔn)尺度熱投票值:冷、涼、稍涼、中興、稍暖、暖和熱。為了人體保持能量的平衡,控制室內(nèi)熱環(huán)境對人的健康生活有極大的幫助。當(dāng)周圍的環(huán)境問題提升至超出人體時,人體的熱量對流輻射將減少、余熱無法散出,導(dǎo)致人體溫度上升,人體就會感覺不適,體溫增到40度,將停之出汗,增至43度,人將面臨死亡。相反,在一個過冷的環(huán)境,則人體的熱量會快速喪失,若喪失超過正常熱平衡情況時的87W熱量,則一個睡眠者將會被凍醒,持續(xù)在低溫下,人會感到不適甚至生病。而濕度往往是通過影響周圍建筑等因素,從而影響人的健康。如:建筑物通過吸濕影響了室內(nèi)空氣的熱評火熱過程;建筑體的冷凝和結(jié)露影響建筑維護結(jié)構(gòu),使其耐久性變差;建筑表面潮濕導(dǎo)致細菌滋生,誘發(fā)人體產(chǎn)生多種疾病等。通常情況下,室內(nèi)濕度超過75%時,極度適合霉菌繁殖,而濕度低于35%時,會導(dǎo)致人的眼、口、鼻粘膜干燥,流行感染病會增加。同時,室內(nèi)濕度保持在35-75%還能有效的防止靜電產(chǎn)生。可見,室內(nèi)溫濕度對人類生活的影響。甲醛等有毒氣體的危害在日常生活中,最常見的室內(nèi)空氣污染物就是甲醛。甲醛主要來源于室內(nèi)裝修的纖維板、隔音板、三夾板等,約有四千多種不同的建筑材料都會釋放大量甲醛。世界衛(wèi)生組織已將甲醛認定為致癌和致畸性氣體。超過0.5毫克每平立方米的室內(nèi)濃度能的導(dǎo)致人體產(chǎn)生淚水、眼睛異常敏感的癥狀。如果長期接觸低劑量的甲醛,很容易引起慢性呼吸道疾病、結(jié)腸癌、腦瘤、基因突變等疾病。皮膚及粘膜對甲醛的抵抗性很差,在甲醛的刺激性作用下,咽喉鼻腔和眼睛等部分容易產(chǎn)生水腫、發(fā)炎甚至潰爛等。同時身體直接接觸甲醛可能產(chǎn)生過敏癥狀,嚴重者甚至?xí)绊懜喂δ?、肺功能、腎臟等異常。若空氣中甲醛含量超過0.1毫克每立米方,便會開始傷害眼睛和粘膜細胞,甲醛可與蛋白質(zhì)或DNA鍵發(fā)生不可逆的結(jié)合。甲醛對嬰兒或孕婦的危害更加嚴重,在孕期間,可使得胎兒無法正常發(fā)育生長,洗腦發(fā)育不全,甚至出現(xiàn)流產(chǎn)畸形兒等。統(tǒng)一管理監(jiān)控平臺與應(yīng)用場景系統(tǒng)架構(gòu)圖監(jiān)控系統(tǒng),是整個Iot環(huán)境智能監(jiān)控這整個產(chǎn)品運行期間最為關(guān)鍵的一個環(huán)節(jié)。它提供了環(huán)境事故的事前及時預(yù)警發(fā)現(xiàn)功能和事后對歷史數(shù)據(jù)的追查定位功能。系統(tǒng)特性:靈活的數(shù)據(jù)采集來源:可以通過agent服務(wù)添加,也可以通過agent帶的http的push接口,靈活的補充自定義數(shù)據(jù)。高性能的水平擴展能力:分布式的系統(tǒng)設(shè)計,支持同服務(wù)多節(jié)點部署。簡單易懂的告警配置:最多告警次數(shù)限制、告警分級、環(huán)境恢復(fù)通知等。便捷的數(shù)據(jù)分析:用戶可以自定義screen,對數(shù)據(jù)進行多維度分析。開發(fā)語言:數(shù)據(jù)采集使用python+golang、數(shù)據(jù)傳輸存儲采用golang、web展示后端使用python。對每個家庭都要裝一臺樹莓派agent,自發(fā)采集家庭環(huán)境的各種數(shù)據(jù)指標(biāo)(如:溫度、濕度)。數(shù)據(jù)庫設(shè)計OPENTSDB對于監(jiān)控系統(tǒng)的使用效率而言,數(shù)據(jù)模型的設(shè)計是至關(guān)重要的一環(huán)。比如zabbix系統(tǒng)中,數(shù)據(jù)分為hostname/ip、metric兩個維度。雖然簡化的數(shù)據(jù)定義,數(shù)據(jù)處理相對簡單,但是不利于分析多維度數(shù)據(jù)。在家庭環(huán)境監(jiān)控系統(tǒng)中,我們采用和opentsdb一致的數(shù)據(jù)格式,由多維度的metric、endpoint、tags(多組key、value)和時間戳timestamp、數(shù)據(jù)類型和值(countertype、value)、采樣間隔step構(gòu)成。如下:{metric:temperature,endpoint:ldy-house,tags:city=beijing,idc=hengda,value:15,timestamp:`date+%s`,counterType:GAUGE,step:60}通過這樣的json數(shù)據(jù)格式,我們可以多維度的分析數(shù)據(jù),其中endpoint可以看作是一種特殊的tag。數(shù)據(jù)匯集模塊由pusher擔(dān)當(dāng),當(dāng)收到客戶端數(shù)據(jù)時,對數(shù)據(jù)進行規(guī)范化、檢查并轉(zhuǎn)發(fā)到相應(yīng)其他后端模塊。在轉(zhuǎn)發(fā)到其他系統(tǒng)模塊時,由于監(jiān)控系統(tǒng)是分布式水平擴展部署,pusher會通過一致性hash算法,將數(shù)據(jù)分片傳輸,提高系統(tǒng)的水平擴展性能。pusher之間采用rpc接口通訊,自身是無狀態(tài)的,在監(jiān)控系統(tǒng)中可以部署多塔,任意一臺掛掉之后不會影響其性能。MYSQL模塊介紹硬件相關(guān)模塊樹莓派開發(fā)板樹莓派由RaspberryPi(簡寫為RPi/RasPi)翻譯而來,樹莓派是由英國Eben·Upton/埃·厄普頓為項目帶頭人的慈善組織”RaspberryPi基金會”開發(fā)的旨在為學(xué)生計算機軟件編程教育而設(shè)計的基于Linux等多操作系統(tǒng)微型卡片式電腦。樹莓派小巧的外形,性能的強大,軟硬件的開源以及完整簡潔的入門教程,使得RasPi在開源界廣受歡迎并不斷更新,目前已推出zero、1、2、3代以及各種不同的模組(A、A+、B、B+、W)等系類?,F(xiàn)如今,樹莓派已經(jīng)在教育、物聯(lián)網(wǎng)、嵌入式等領(lǐng)域占據(jù)重要的地位,成為廣大發(fā)燒友們?nèi)腴T玩轉(zhuǎn)的首選之一。在本項目,我們選擇了RaspberryPi3ModelB這款樹莓派。它是第三代樹莓派的最早型號,于2016年2月取代了RaspberryPi2ModelB。其板載四核1.2GHzBroadcomBCM2837B0,Cortex-A53(ARMv8)64-bit的片上SoC,1GBRAM,BCM43438無線LAN和藍牙低功耗(BLE),以太網(wǎng)接口,40個GPIO擴展引腳,4 個USB2.0端口,4極立體聲輸出和復(fù)合視頻接口,F(xiàn)ullsizeHDMI,CSI相機端口(用于連接RaspberryPi相機),DSI顯示接口(用于連接RaspberryPi觸摸屏顯示器),MicroSD卡(用于加載操作系統(tǒng)和存儲數(shù)據(jù)),升級后的MicroUSB電源電壓高達2.5A。 樹莓派實物圖與GPIO引腳圖:DHT11溫濕度傳感器什么是DHT11?DHT11數(shù)字溫濕度傳感器是一種經(jīng)過校準(zhǔn)的數(shù)字信號輸出復(fù)合型溫濕度傳感器。它采用專業(yè)的數(shù)字采集模塊技術(shù)和溫濕度傳感技術(shù),來保證產(chǎn)品具有極度的可靠性與優(yōu)秀的長期穩(wěn)定性。其傳感器內(nèi)部包含一個電阻式感濕原件,一個NTC測溫元件來同一個高性能的8為單片機相連交互,最終輸出溫濕度數(shù)字信號。優(yōu)點與常用領(lǐng)域:DHT11使用成本低、品質(zhì)優(yōu)異、響應(yīng)靈敏、抗干擾能力強、持續(xù)穩(wěn)定、相對濕度和溫度測量、適合長距離信號傳輸、數(shù)字信號輸出、數(shù)據(jù)精準(zhǔn)矯正,故該傳感器在很多領(lǐng)域被使用,如:通用空調(diào)、除濕裝置、測試檢測設(shè)施、消費品、數(shù)據(jù)記錄器、氣象站、家電、濕度調(diào)節(jié)器、汽車、自動化控制、醫(yī)療等其他相關(guān)的檢測控制。模塊實物圖與電路圖:模塊單總線雙向串行通信協(xié)議: DHT11模塊使用單總線與樹莓派通訊。設(shè)備通過一個漏極開路或者三態(tài)端口連接數(shù)據(jù)閑。單總線需要外接一個約5.1kΩ的上拉電阻,使得閑置總線為高電平。樹莓派為主機,DHT11為從機,一次傳輸40位數(shù)據(jù),高位優(yōu)先傳輸。數(shù)據(jù)格式:濕度整數(shù)部分數(shù)據(jù)(8bit)+濕度小數(shù)部分數(shù)據(jù)(8bit)+溫度整數(shù)部分數(shù)據(jù)(8bit)+溫度小數(shù)部分數(shù)據(jù)(8bit)+校驗位(8bit)校驗位=濕度整數(shù)部分數(shù)據(jù)(8bit)+濕度小數(shù)部分數(shù)據(jù)(8bit)+溫度整數(shù)部分數(shù)據(jù)(8bit)+溫度小數(shù)部分數(shù)據(jù)(8bit)數(shù)據(jù)時序圖:數(shù)據(jù)讀取步驟:步驟一:DHT11上電后先保持1s以上,進行環(huán)境數(shù)據(jù)檢測,同時DHT11的DATA先保持上拉高電平,進入輸入狀態(tài)。步驟二:步驟三:步驟四:步驟五:在DHT11輸出40位數(shù)據(jù)后,繼續(xù)持續(xù)50s低電平轉(zhuǎn)為輸入狀態(tài),由上拉電阻轉(zhuǎn)為高電平,結(jié)束本次讀取。ADS1115ADC轉(zhuǎn)換器描述(待改)ADS1115器件(ADS111x)是兼容I2C的16位高精度低功耗模數(shù)轉(zhuǎn)換器(ADC),采用超小型無引線X2QFN-10封裝和VSSOP-10封裝。ADS111x器件采用了低漂移電壓基準(zhǔn)和振蕩器。ADS1115還采用可編程增益放大器(PGA)和數(shù)字比較器。這些特性加以較寬的工作電源電壓范圍使得ADS111x非常適合功率受限和空間受限的傳感器測量。ADS111x可在數(shù)據(jù)速率高達每秒860個樣本(SPS)的情況下執(zhí)行轉(zhuǎn)換。PGA可提供從±256mV到±6.144V的輸入范圍,從而實現(xiàn)精準(zhǔn)的大小信號測量。ADS1115具有一個輸入多路復(fù)用器(MUX),可實現(xiàn)兩次差動輸入測量或四次單端輸入測量。在ADS1115中可使用數(shù)字比較器進行欠壓和過壓檢測。ADS111xADS111x既可在連續(xù)轉(zhuǎn)換模式下工作,也可在單沖模式下工作。在單沖模式下,這些器件可在一次轉(zhuǎn)換后自動斷電;因此顯著降低了空閑期間的功耗。DEVICEANALOG/DIGITALINPUT/PIN#ADS1113ADS1114ADS1115OUTPUTDESCRIPTION1ADDRADDRADDRDigitalInputI2Cslaveaddressselect2NC(1)ALERT/RDYALERT/RDYDigitalOutputDigitalcomparatoroutputorconversionready(NCforADS1113)3GNDGNDGNDAnalogGround4AIN0AIN0AIN0AnalogInputDifferentialchannel1:Positiveinputorsingle-endedchannel1input5AIN1AIN1AIN1AnalogInputDifferentialchannel1:Negativeinputorsingle-endedchannel2input6NCNCAIN2AnalogInputDifferentialchannel2:Positiveinputorsingle-endedchannel3input(NCforADS1113/4)7NCNCAIN3AnalogInputDifferentialchannel2:Negativeinputorsingle-endedchannel4input(NCforADS1113/4)8VDDVDDVDDAnalogPowersupply:2.0Vto5.5V9SDASDASDADigitalI/OSerialdata:Transmitsandreceivesdata10SCLSCLSCLDigitalInputSerialclockinput:ClocksdataonSDAIIC時序圖:MQ-2煙霧氣敏傳感器適用于家庭環(huán)境的氣體物質(zhì)泄漏監(jiān)測裝置,適宜于液化氣、丁烷、丙烷、甲烷、酒精、氫氣、煙霧氣體質(zhì)量檢測。MQ-2信號輸出指示、雙路信號輸出(模擬量輸出及TTL電平輸出)、濃度越高電壓越高、對液化氣,天然氣,城市煤氣有較好的靈敏度、具有長期的使用壽命和可靠的穩(wěn)定性、具有長期的使用壽命和可靠的穩(wěn)定性。雨露傳感器實物連接圖Agent模塊每個家庭環(huán)境都會安裝一臺樹莓派agent,用于采集家庭環(huán)境監(jiān)控指標(biāo),如溫度濕度等,默認情況下每隔60秒就會push上報給pusher。agent與pusher之間使用長連接,使得數(shù)據(jù)能夠及時低消耗的發(fā)送,同時還提供了一個http接口/push用于接受一些額外的自定義數(shù)據(jù)。模塊核心代碼:main.gofuncmain(){ cfg:=flag.String("c","cfg.json","configurationfile") flag.Parse() g.ParseConfig(*cfg) ifg.Config().Debug{ g.InitLog("debug") }else{ g.InitLog("info") } g.InitAll() g.InitRpcClients() funcs.BuildMappers() cron.ReportAgentStatus() cron.SyncBuiltinMetrics() cron.SyncTrustableIps() cron.Collect() gohttp.Start() select{}}push.py#-*-coding:utf-8-*-importAdafruit_DHTimporttimeimportjsonimportrequestsimportcopyimportAdafruit_ADS1x15fromthreadingimportTimeradc=Adafruit_ADS1x15.ADS1115()GAIN=1defget_data_push():sensor=Adafruit_DHT.DHT11humidity,temperature=Adafruit_DHT.read_retry(sensor,27)ts=int(time.time())push_url=":1988/v1/push"values=[0]*4payload=[]foriinrange(4):values[i]=adc.read_adc(i,gain=GAIN)ifi==0:mq2_data={"endpoint":"home.test1","metric":"room.mq2.test1","timestamp":ts,"step":60,"value":values[i],"counterType":"GAUGE","tags":"module=mq2"}payload.append(copy.copy(mq2_data)) ifi==2:mq135_data={"endpoint":"home.test1","metric":"room.mq135.test1","timestamp":ts,"step":60,"value":values[i],"counterType":"GAUGE","tags":"module=mq135"}payload.append(copy.copy(mq135_data)) ifi==3:yulu_data={"endpoint":"home.test1","metric":"room.yulu.test1","timestamp":ts,"step":60,"value":values[i],"counterType":"GAUGE","tags":"module=yulu"}payload.append(copy.copy(yulu_data))ifhumidityisnotNone:humidity_data={"endpoint":"home.test1","metric":"room.humidity.test1","timestamp":ts,"step":60,"value":humidity,"counterType":"GAUGE","tags":"module=dht11"}payload.append(copy.copy(humidity_data))iftemperatureisnotNone:temperature_data={"endpoint":"home.test1","metric":"room.temperature.test1","timestamp":ts,"step":60,"value":temperature,"counterType":"GAUGE","tags":"module=dht11"}payload.append(copy.copy(temperature_data))r=requests.post(push_url,data=json.dumps(payload))defcronb_push(inc):get_data_push()t=Timer(inc,cronb_push,(inc,))t.start()if__name__=='__main__':cronb_push(60)配置文件:cfg.json{"debug":true,"hostname":"","ip":"","pusher":{"enabled":true,"addrs":[":8433",":8433"],"interval":60,"timeout":1000},"http":{"enabled":true,"listen":":1988","backdoor":false}}Pusher模塊pusher是數(shù)據(jù)傳輸模塊。他將從樹莓派接收到的數(shù)據(jù),對接收到的數(shù)據(jù)進行合法性校驗和調(diào)整規(guī)范,對每個后端模塊實例都維護一個內(nèi)存定長隊列來緩存數(shù)據(jù)和RPC連接池。然后使用hash算法對數(shù)據(jù)進行處理分片,最后發(fā)送打?qū)?yīng)的后端模塊。模塊核心代碼:funcmain(){ cfg:=flag.String("c","cfg.json","configurationfile") flag.Parse() g.ParseConfig(*cfg) proc.Start() sender.Start() receiver.Start() http.Start() select{}}配置文件:{"debug":true,"http":{"enabled":true,"listen":":6060"},"rpc":{"enabled":true,"listen":":8433"},"judger":{"enabled":true,"batch":200,"connTimeout":1000,"callTimeout":5000,"maxConns":32,"maxIdle":32,"replicas":500,"cluster":{"judger-00":":6080"}},"store":{"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026山西醫(yī)科大學(xué)第二醫(yī)院招聘博士研究生50人筆試備考試題及答案解析
- 2026勝通和科技有限公司招聘60人(廣東)筆試模擬試題及答案解析
- 2026四川雅安市老干部活動中心招聘1人筆試模擬試題及答案解析
- 2026上半年云南事業(yè)單位聯(lián)考省農(nóng)業(yè)科學(xué)院公開招聘人員筆試參考題庫及答案解析
- 福建福州市羅源縣教育局舉辦2026屆公費師范生專項招聘5人考試參考題庫及答案解析
- 2026年用戶增長黑客實戰(zhàn)方法培訓(xùn)
- 2026河南周口市川匯區(qū)政府專職消防員招聘18人筆試備考題庫及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考黔東南州招聘948人考試備考試題及答案解析
- 2026年配音演員情緒表達訓(xùn)練
- 2026年從數(shù)據(jù)看企業(yè)年度發(fā)展
- ISO13485:2016醫(yī)療器械質(zhì)量管理手冊+全套程序文件+表單全套
- 學(xué)校6S管理培訓(xùn)
- DB15-T 4031-2025 建設(shè)項目水資源論證表編制導(dǎo)則
- 2025-2030國學(xué)啟蒙教育傳統(tǒng)文化復(fù)興與商業(yè)模式探索報告
- 2025年事業(yè)單位考試(醫(yī)療衛(wèi)生類E類)職業(yè)能力傾向測驗試卷及答案指導(dǎo)
- 2025年江蘇省高考歷史真題(含答案解析)
- 2025-2030中國綠色甲烷行業(yè)發(fā)展現(xiàn)狀與未來發(fā)展前景預(yù)測報告
- 系統(tǒng)解剖學(xué)章節(jié)練習(xí)題及答案
- (人教版)初中物理九年級 第二十章綜合測試及答案03
- 人教版九年級歷史上冊期末復(fù)習(xí)知識點考點背誦提綱
- 2025年電動三輪車銷售與農(nóng)村市場拓展合同
評論
0/150
提交評論