創(chuàng)建了一個(gè)獨(dú)立的便攜式能量監(jiān)測(cè)和分析設(shè)備,并集成了Web應(yīng)用程序
掃描二維碼
隨時(shí)隨地手機(jī)看文章
測(cè)量任何插入設(shè)備的能量參數(shù)(電流/電壓/功率等),并在web應(yīng)用程序上查看儀表板和歷史數(shù)據(jù)圖表
在這個(gè)項(xiàng)目中,我創(chuàng)建了一個(gè)獨(dú)立的便攜式能量監(jiān)測(cè)和分析設(shè)備,并集成了Web應(yīng)用程序。
你一天看多少電視?那要花你多少錢?你的使用模式是什么?把洗衣機(jī)放在非高峰時(shí)間而不是高峰時(shí)間,你能省下多少錢?
或者,如果你是一家企業(yè),你在業(yè)務(wù)中使用某種工具的頻率是多少?操作那臺(tái)機(jī)器的費(fèi)用是多少?敏感實(shí)驗(yàn)室設(shè)備周圍的電壓有多穩(wěn)定?你所在位置接收到的電能質(zhì)量如何?例如,您可以使用這些信息來更好地估計(jì)產(chǎn)品成本,或者通過進(jìn)行異常檢測(cè)或預(yù)測(cè)性維護(hù)。
這個(gè)便攜式能量監(jiān)測(cè)裝置可以幫助你回答這些問題。它測(cè)量插入的任何設(shè)備/負(fù)載的能量參數(shù):
?監(jiān)控能源參數(shù)(電流(RMS),電壓(RMS),功率因數(shù),線路頻率,功率,能耗等),并將其寫入時(shí)間序列數(shù)據(jù)庫(InfluxDB)
?重置每天午夜的能量積累,這樣能量積累(累計(jì)消耗的能量)是每天進(jìn)行的。
?監(jiān)控事件條件(過流/功率,電壓驟降/浪涌)
?呈現(xiàn)一個(gè)顯示所有當(dāng)前參數(shù)的web儀表板。單擊每個(gè)參數(shù)還可以獲取并顯示最近5分鐘的活動(dòng)。
?使用線形圖呈現(xiàn)較長時(shí)期的歷史數(shù)據(jù)-您可以在同一圖形上覆蓋多個(gè)參數(shù)以進(jìn)行比較。您可以從下拉菜單中選擇數(shù)據(jù)的間隔- 5m, 10m, 30m, 1hr, 3hr, 6hr, 12hr和24hr
它是用Raspberry Pi 4、Dr. Wattson Energy Monitoring Board V2和OLED屏幕制作的。
ProtoStax機(jī)箱用于樹莓派3/4/5和Dr. Wattson能源監(jiān)視器,為整個(gè)項(xiàng)目提供了一個(gè)很好的模塊化機(jī)箱解決方案,包括一個(gè)電源入口和一個(gè)可以測(cè)量能耗參數(shù)的插座。插入您感興趣的負(fù)載并開始測(cè)量!
樹莓派運(yùn)行一個(gè)基于python Flask的應(yīng)用程序,每秒查詢Dr. watson,并將數(shù)據(jù)上傳到InfluxDB實(shí)例。該應(yīng)用程序還提供了一個(gè)使用HTML, CSS和Javascript的web用戶界面,在儀表板中顯示當(dāng)前的能源指標(biāo)。您可以點(diǎn)擊每個(gè)指標(biāo)來查看最近5分鐘的活動(dòng)。您還可以通過圖表查看歷史數(shù)據(jù)-最近5分鐘,10分鐘,30分鐘,60分鐘,3小時(shí),6小時(shí),12小時(shí)和24小時(shí)。您可以使用REST api直接查詢JSON格式的數(shù)據(jù)。設(shè)備上附帶的OLED屏幕顯示當(dāng)前的關(guān)鍵參數(shù),因此您可以通過查看設(shè)備屏幕快速查看數(shù)據(jù)。
此基礎(chǔ)設(shè)施還允許在其上輕松構(gòu)建任何其他數(shù)據(jù)分析和控制。您可以使用web應(yīng)用程序原樣獲得大量有用的信息,包括當(dāng)前和歷史數(shù)據(jù)(最多24小時(shí)),而無需任何額外的編碼。由于歷史數(shù)據(jù)存儲(chǔ)在時(shí)間序列數(shù)據(jù)庫中,您也可以查詢它,將其可視化(使用與InfluxDB配合良好的Grafana等工具),并通過額外的編碼和數(shù)據(jù)分析來分析它。
這是架構(gòu)圖。
使用它
我試圖簡化在你自己的設(shè)置中使用Energy Monitor的過程。
第一步是把電路組裝在一起,并將其組裝在外殼中。ProtoStax和沃森博士的用戶手冊(cè)里有足夠的信息,我建議你參考一下。
一旦您完成了這些,您將希望啟用Raspberry Pi的無頭操作。目前的樹莓派Imager使它相當(dāng)簡單,允許你配置你的WiFi網(wǎng)絡(luò)設(shè)置,也啟用SSH等。
一旦你有了一個(gè)工作設(shè)備,你可以啟動(dòng)和登錄,你必須安裝軟件。如果你還沒有g(shù)it,你首先需要安裝它:
您還需要安裝并設(shè)置InfluxDB2。關(guān)于這個(gè)有很多教程,所以我就不重復(fù)了。您需要設(shè)置組織和存儲(chǔ)桶,以及用于身份驗(yàn)證的令牌。注意這些值。
之后,你可以從Github克隆軟件:
接下來,我們將創(chuàng)建一個(gè)python虛擬環(huán)境,以方便安裝所需的軟件包,然后使用項(xiàng)目中的需求一次輕松安裝所有依賴項(xiàng):
接下來,您需要?jiǎng)?chuàng)建一個(gè)config.ini文件來包含連接到InfluxDB實(shí)例的憑據(jù)。提供了一個(gè)樣例config_sample.ini。你可以使用它,并在適當(dāng)?shù)臅r(shí)候更新它。記得創(chuàng)建一個(gè)新的文件config.ini(而不是修改config_sample.ini文件)
如果一切正常,你應(yīng)該可以像這樣啟動(dòng)應(yīng)用程序:
您還可以創(chuàng)建一個(gè)服務(wù),以便在樹莓派啟動(dòng)時(shí)自動(dòng)啟動(dòng)應(yīng)用程序。Github README有關(guān)于如何做到這一點(diǎn)的說明。我提供了一個(gè)示例服務(wù)文件供您根據(jù)需要進(jìn)行修改。
如果代碼正常運(yùn)行,您應(yīng)該能夠打開瀏覽器到您的web應(yīng)用程序。假設(shè)您將樹莓派命名為myPi.local。
代碼深潛
代碼是用Python編寫的。我使用了Flask,它是一個(gè)輕量級(jí)的web框架,作為web服務(wù)器,不僅提供web UI,還提供JSON格式的數(shù)據(jù)(客戶端Javascript使用JSON格式加載、顯示和刷新歷史數(shù)據(jù))。
為了與沃森博士交流,我使用它的Python庫UpbeatLabs_Python_MCP39F521。
我還安裝了一個(gè)InfluxDB2數(shù)據(jù)庫作為時(shí)間序列數(shù)據(jù)庫。InfluxDB的最新版本是3,但該版本有一個(gè)嚴(yán)格的限制,即只能支持大約72小時(shí)的數(shù)據(jù)查詢(再多的話性能就不高了,而且會(huì)給系統(tǒng)帶來很大的壓力)。InfluxDB2工作得很好,在可預(yù)見的未來,我將使用它超過3個(gè)版本(直到他們修復(fù)/解決問題)。對(duì)于InfluxDB2,您必須使用Flux查詢,這不是最流行的,但我認(rèn)為它們使用起來很好!
為了與OLED屏幕進(jìn)行通信,我使用Adafruit的Adafruit_Python_SSD1306。請(qǐng)注意,這個(gè)庫現(xiàn)在已被棄用,取而代之的是他們的CircuitPython庫,但它還不能在Raspberry Pi 5/bookworm上工作。我還必須用GPIO python庫做一些技巧來讓bookworm工作。
我使用Dr. watson的事件檢測(cè)引腳在事件觸發(fā)條件發(fā)生時(shí)獲得通知,并使用它打開顯示板上的LED。
當(dāng)連接到InfluxDB數(shù)據(jù)庫時(shí),我使用配置文件來存儲(chǔ)必要的信息(url、令牌、org、要使用的桶),并使用configparser庫來讀取和獲取數(shù)據(jù)。確保創(chuàng)建一個(gè)包含您自己的數(shù)據(jù)庫信息的config.ini文件!
Dr. Wattson使用的MCP39F521提供能量積累,Dr. Wattson公開api來打開/關(guān)閉能量積累。python應(yīng)用程序會(huì)在午夜重置能量積累,這樣我們就可以記錄一天的能量積累。
為了確保每天只進(jìn)行一次重置,即使應(yīng)用程序重新啟動(dòng),我也使用shelve python庫來跟蹤文件中的這些信息。如果當(dāng)天的能量積累已經(jīng)重置,則調(diào)用該函數(shù)沒有任何作用。
在Flask中,它定義路由,其中既包括數(shù)據(jù)(JSON格式),也包括呈現(xiàn)客戶端HTML、CSS和Javascript頁面。在Flask中,默認(rèn)情況下,html頁面存儲(chǔ)在“templates”目錄下,其他靜態(tài)資產(chǎn)(如CSS和Javascript)存儲(chǔ)在“static”目錄下。
對(duì)于客戶端,我使用Bootstrap框架來提供一致的、移動(dòng)友好的響應(yīng)界面,而不需要太多的麻煩。當(dāng)然,熟悉它是有學(xué)習(xí)曲線的!
對(duì)于儀表板以及度量圖表頁面,我使用Chart.js小部件和圖形來顯示各種項(xiàng)目。
例如,我使用“甜甜圈”圖表在儀表板上顯示電流、電壓、線路頻率、功率因數(shù)等指標(biāo)。我還使用了doughnutLabel注釋插件。這允許我將當(dāng)前值表示為一個(gè)儀表,以獲得更令人愉悅的視覺外觀。單擊每個(gè)儀表板指標(biāo)還會(huì)彈出一個(gè)指標(biāo)圖表,顯示最近5分鐘的活動(dòng)。讓它工作有點(diǎn)棘手!
對(duì)于事件條件(過電流,過功率,電壓下降和電壓浪涌)以及功率象限表示,我使用了一個(gè)散點(diǎn)圖,中心為0,0,并用4個(gè)注釋表示四個(gè)事件或四個(gè)功率象限。
在事件的情況下,一個(gè)或多個(gè)事件可以是活動(dòng)的,而功率象限可以是4個(gè)值中的一個(gè)。將鼠標(biāo)移到每個(gè)將給出額外的信息-例如,觸發(fā)過電流的條件是> 0.18 A。因此,這個(gè)小部件呈現(xiàn)了大量的信息,同時(shí)看起來極簡主義。將鼠標(biāo)懸停在數(shù)據(jù)點(diǎn)上并單擊可以獲得更多信息,活動(dòng)區(qū)域會(huì)改變顏色和大小(紅點(diǎn)變大)。
度量圖表頁面顯示一個(gè)線形圖,并具有所有不同的屬性。默認(rèn)情況下,只顯示當(dāng)前RMS,但您可以單擊其他屬性來啟用/禁用它們。因此,一個(gè)圖表可以用于所有屬性。我還添加了從下拉菜單中選擇不同時(shí)間框架的功能。這將獲取新數(shù)據(jù)并重新呈現(xiàn)圖表。它還智能地更改刷新間隔- 24小時(shí)圖表將每分鐘刷新一次,而5分鐘圖表將每5秒刷新一次。javascript使用合適的查詢參數(shù)調(diào)用后端REST API來獲取數(shù)據(jù)并更新圖表。我必須測(cè)試雙方,以確保一切都按預(yù)期工作,并發(fā)現(xiàn)和修復(fù)一些漏洞。這都是過程的一部分!
也可以設(shè)置y軸縮放的最小/最大-否則Chart.js會(huì)根據(jù)手頭的數(shù)據(jù)自動(dòng)縮放。如果你正在尋找特定的模式,并知道你正在觀察的最小/最大值,并在這些范圍內(nèi)渲染圖表,那么自己設(shè)置比例是很有用的。
為了在所有頁面之間共享導(dǎo)航鏈接和標(biāo)題,我有一個(gè)base.html頁面,所有其他頁面都繼承自這個(gè)頁面,所以如果我想更改導(dǎo)航鏈接,我可以只在一個(gè)位置這樣做。
因此,您可以看到在客戶端也發(fā)生了相當(dāng)多的事情!
前進(jìn)
由于數(shù)據(jù)在InfluxDB中,并且它支持Python,因此您可以通過編寫單獨(dú)的Python程序和直接查詢數(shù)據(jù)庫來添加額外的數(shù)據(jù)分析,并利用各種Python庫和框架進(jìn)行人工智能和數(shù)據(jù)分析(例如,生成每日?qǐng)?bào)告)。
當(dāng)然,你也可以修改/增強(qiáng)現(xiàn)有的應(yīng)用程序:
?添加用戶身份驗(yàn)證,這樣用戶必須登錄才能看到儀表板
?使用不同類型的圖表——條形圖、散點(diǎn)圖等。
?增加對(duì)查詢更長的數(shù)據(jù)周期的支持(目前最多可查詢24小時(shí))。在查詢大量數(shù)據(jù)時(shí)要記住一些事情。如何減少數(shù)據(jù)點(diǎn)的數(shù)量?您可以在Chart.js中使用數(shù)據(jù)抽取來幫助減少數(shù)據(jù)點(diǎn)的數(shù)量?;蛘吣梢栽诜?wù)器端進(jìn)行處理以減少它(例如,將數(shù)據(jù)聚合為5分鐘間隔以減少數(shù)據(jù)點(diǎn)的數(shù)量)。
?添加額外的分析和報(bào)告-您可以創(chuàng)建一個(gè)新的頁面來顯示報(bào)告
?添加用于更改配置設(shè)置的頁面—例如,事件觸發(fā)條件(這些現(xiàn)在是硬編碼的,但可以由用戶配置)
本文編譯自hackster.io