புரோஹோஸ்டர் > Блог > நிர்வாகம் > ஸ்மார்ட் ஹோம்: வீட்டு உதவியாளரில் தண்ணீர் மற்றும் மின்சார நுகர்வு பற்றிய வரைபடங்களை உருவாக்குகிறோம்
ஸ்மார்ட் ஹோம்: வீட்டு உதவியாளரில் தண்ணீர் மற்றும் மின்சார நுகர்வு பற்றிய வரைபடங்களை உருவாக்குகிறோம்
ஒவ்வொரு முறையும் நான் மின்சாரம் மற்றும் தண்ணீருக்கான கட்டணத்தைப் பெறும்போது, நான் ஆச்சரியப்படுகிறேன் - என் குடும்பம் உண்மையில் இவ்வளவு சாப்பிடுகிறதா? சரி, ஆமாம், குளியலறையில் ஒரு சூடான தளம் மற்றும் ஒரு கொதிகலன் உள்ளது, ஆனால் அவை எல்லா நேரத்திலும் தீயை எரிப்பதில்லை. நாங்கள் தண்ணீரைச் சேமிப்பது போல் தெரிகிறது (நாங்கள் குளியலறையில் தெறிக்க விரும்பினாலும்). பல ஆண்டுகளுக்கு முன்பு நான் ஏற்கனவே இணைக்கப்பட்ட நீர் மீட்டர் и மின்சாரம் புத்திசாலித்தனமான வீட்டிற்கு, ஆனால் அங்குதான் விஷயங்கள் சிக்கிக்கொண்டன. நாம் இப்போதுதான் நுகர்வு பற்றி ஆய்வு செய்துள்ளோம், இந்தக் கட்டுரை உண்மையில் எதைப் பற்றியது.
நான் சமீபத்தில் எனது ஸ்மார்ட் ஹோம் சிஸ்டமாக Home Assistantக்கு மாறினேன். பல்வேறு வகையான வரைபடங்களை வசதியாகக் கட்டமைக்கும் திறனுடன் ஒரு பெரிய அளவிலான தரவு சேகரிப்பை ஒழுங்கமைப்பதற்கான வாய்ப்பு ஒரு காரணம்.
இந்த கட்டுரையில் விவரிக்கப்பட்டுள்ள தகவல்கள் புதியவை அல்ல; வெவ்வேறு சாஸ்களின் கீழ் உள்ள இவை அனைத்தும் ஏற்கனவே இணையத்தில் விவரிக்கப்பட்டுள்ளன. ஆனால் ஒவ்வொரு கட்டுரையும் பொதுவாக ஒரு அணுகுமுறை அல்லது அம்சத்தை மட்டுமே விவரிக்கிறது. இந்த அணுகுமுறைகள் அனைத்தையும் ஒப்பிட்டுப் பார்த்து, மிகவும் பொருத்தமான ஒன்றை நானே தேர்வு செய்ய வேண்டியிருந்தது. கட்டுரை இன்னும் தரவு சேகரிப்பு பற்றிய விரிவான தகவலை வழங்கவில்லை, ஆனால் நான் அதை எவ்வாறு செய்தேன் என்பதற்கான ஒரு வகையான சுருக்கம். எனவே ஆக்கபூர்வமான விமர்சனங்களும் முன்னேற்றத்திற்கான ஆலோசனைகளும் வரவேற்கப்படுகின்றன.
பிரச்சனை அறிக்கை
எனவே, இன்றைய உடற்பயிற்சியின் குறிக்கோள் நீர் மற்றும் மின்சார நுகர்வு பற்றிய அழகான வரைபடங்களைப் பெறுவதாகும்:
2 நாட்களுக்கு மணிநேரம்
2 வாரங்களுக்கு தினமும்
(விரும்பினால்) வாராந்திர மற்றும் மாதாந்திர
இதில் சில சிரமங்கள் உள்ளன:
நிலையான விளக்கப்படக் கூறுகள் பொதுவாக மிகவும் மோசமாக இருக்கும். சிறந்த, நீங்கள் புள்ளி மூலம் ஒரு வரி வரைபட புள்ளி உருவாக்க முடியும்.
நீங்கள் கடினமாகப் பார்த்தால், நிலையான விளக்கப்படத்தின் திறன்களை விரிவாக்கும் மூன்றாம் தரப்பு கூறுகளை நீங்கள் காணலாம். ஒரு வீட்டு உதவியாளருக்கு, கொள்கையளவில், இது ஒரு நல்ல மற்றும் அழகான கூறு சிறு வரைபட அட்டை, ஆனால் இது ஓரளவு வரையறுக்கப்பட்டுள்ளது:
ஒரு பார் விளக்கப்படத்தின் அளவுருக்களை பெரிய இடைவெளியில் அமைப்பது கடினம் (பட்டியின் அகலம் ஒரு மணிநேரத்தின் பின்னங்களில் அமைக்கப்பட்டுள்ளது, அதாவது ஒரு மணி நேரத்திற்கும் மேலான இடைவெளிகள் பின்ன எண்களில் அமைக்கப்படும்)
நீங்கள் ஒரு வரைபடத்தில் வெவ்வேறு உட்பொருளைச் சேர்க்க முடியாது (உதாரணமாக, வெப்பநிலை மற்றும் ஈரப்பதம் அல்லது பட்டை வரைபடத்தை ஒரு வரியுடன் இணைக்கவும்)
ஹோம் அசிஸ்டெண்ட் முன்னிருப்பாக மிகவும் பழமையான SQLite தரவுத்தளத்தைப் பயன்படுத்துகிறது (மற்றும் ஒரு கைவினைஞர், MySQL அல்லது Postgres ஐ நிறுவுவதைக் கையாள முடியவில்லை), ஆனால் தரவு மிகவும் உகந்த முறையில் சேமிக்கப்படவில்லை. எனவே, எடுத்துக்காட்டாக, ஒவ்வொரு முறையும் நீங்கள் ஒரு அளவுருவின் சிறிய டிஜிட்டல் அளவுருவை மாற்றும்போது, ஒரு கிலோபைட் அளவுள்ள ஒரு பெரிய json தரவுத்தளத்தில் எழுதப்படுகிறது.
என்னிடம் நிறைய சென்சார்கள் உள்ளன (ஒவ்வொரு அறையிலும் வெப்பநிலை உணரிகள், நீர் மற்றும் மின்சார மீட்டர்), மேலும் சில நிறைய தரவுகளை உருவாக்குகின்றன. எடுத்துக்காட்டாக, SDM220 மின்சார மீட்டர் மட்டும் ஒவ்வொரு 10-15 வினாடிகளுக்கும் ஒரு டஜன் மதிப்புகளை உருவாக்குகிறது, மேலும் இதுபோன்ற 8 மீட்டர்களை நிறுவ விரும்புகிறேன். மற்ற சென்சார்களின் அடிப்படையில் கணக்கிடப்படும் அளவுருக்கள் முழுவதுமாக உள்ளன. அந்த. இந்த மதிப்புகள் அனைத்தும் தினசரி 100-200 MB தரவுத்தளத்தை எளிதாக உயர்த்தலாம். ஒரு வாரத்தில் கணினி நகராது, மேலும் ஒரு மாதத்தில் ஃபிளாஷ் டிரைவ் இறந்துவிடும் (ராஸ்பெர்ரி PI இல் ஒரு பொதுவான வீட்டு உதவியாளர் நிறுவலின் போது), மேலும் ஒரு வருடம் முழுவதும் தரவை சேமிப்பது கேள்விக்குறியாக உள்ளது.
நீங்கள் அதிர்ஷ்டசாலி என்றால், உங்கள் மீட்டர் நுகர்வு தானே கணக்கிட முடியும். நீங்கள் எந்த நேரத்திலும் மீட்டருக்குத் திரும்பலாம் மற்றும் திரட்டப்பட்ட நுகர்வு மதிப்பு எவ்வளவு நேரம் என்று கேட்கலாம். ஒரு விதியாக, டிஜிட்டல் இடைமுகம் (RS232/RS485/Modbus/Zigbee) கொண்ட அனைத்து மின்சார மீட்டர்களும் இந்த வாய்ப்பை வழங்குகின்றன.
சாதனம் சில உடனடி அளவுருக்களை (உதாரணமாக, உடனடி சக்தி அல்லது மின்னோட்டம்) அளவிட முடியும் அல்லது ஒவ்வொரு X வாட் மணிநேரம் அல்லது லிட்டருக்கு பருப்புகளை உருவாக்கினால் அது மோசமானது. அதை எப்படி, எதனுடன் ஒருங்கிணைக்க வேண்டும், எங்கு மதிப்பைக் குவிப்பது என்று யோசிக்க வேண்டும். எந்த காரணத்திற்காகவும் அடுத்த அறிக்கையை இழக்கும் அபாயம் உள்ளது, மேலும் ஒட்டுமொத்த அமைப்பின் துல்லியம் கேள்விகளை எழுப்புகிறது. ஹோம் அசிஸ்டெண்ட் போன்ற ஸ்மார்ட் ஹோம் சிஸ்டத்திடம் இதை நீங்கள் நிச்சயமாக ஒப்படைக்கலாம், ஆனால் தரவுத்தளத்தில் உள்ள பதிவுகளின் எண்ணிக்கையைப் பற்றிய புள்ளியை யாரும் ரத்து செய்யவில்லை, மேலும் ஒரு நொடிக்கு ஒரு முறைக்கு மேல் சென்சார்களை வாக்களிக்க முடியாது. வீட்டு உதவியாளர் கட்டிடக்கலை வரம்பு).
அணுகுமுறை 1
முதலில், வீட்டு உதவியாளர் என்ன வழங்குகிறார் என்பதைப் பார்ப்போம். ஒரு காலத்தில் நுகர்வு அளவிடுவது மிகவும் விரும்பப்படும் செயல்பாடாகும். நிச்சயமாக, இது ஒரு சிறப்பு கூறு வடிவத்தில் நீண்ட காலத்திற்கு முன்பு செயல்படுத்தப்பட்டது - utility_meter.
கூறுகளின் சாராம்சம் என்னவென்றால், அது உள்நாட்டில் ஒரு மாறி தற்போதைய_திரட்டப்பட்ட_மதிப்பை உருவாக்குகிறது மற்றும் ஒரு குறிப்பிட்ட காலத்திற்கு (மணி/வாரம்/மாதம்) பிறகு அதை மீட்டமைக்கிறது. கூறு தானே உள்ளீட்டு மாறியைக் கண்காணிக்கிறது (சில சென்சாரின் மதிப்பு), மதிப்பில் ஏற்படும் மாற்றங்களுக்கு தன்னைக் குழுசேர்க்கிறது - நீங்கள் முடிக்கப்பட்ட முடிவைப் பெறுவீர்கள். இந்த விஷயம் உள்ளமைவு கோப்பில் ஒரு சில வரிகளில் விவரிக்கப்பட்டுள்ளது
இங்கே sensor.water_meter_cold என்பது நான் பெறும் லிட்டரில் தற்போதைய மீட்டர் மதிப்பு நேரடியாக இரும்புத் துண்டிலிருந்து mqtt மூலம் வடிவமைப்பு, water_cold_hour_um மற்றும் water_cold_day_um ஆகிய 2 புதிய சென்சார்களை உருவாக்குகிறது, அவை மணிநேர மற்றும் தினசரி அளவீடுகளைக் குவித்து, காலம் காலாவதியான பிறகு அவற்றை பூஜ்ஜியத்திற்கு மீட்டமைக்கிறது. அரை நாளுக்கான மணிநேர பேட்டரியின் வரைபடம் இங்கே உள்ளது.
லவ்லேஸ்-யுஐக்கான மணிநேர மற்றும் தினசரி விளக்கப்படங்களுக்கான குறியீடு இதுபோல் தெரிகிறது:
- type: history-graph
title: 'Hourly water consumption using vars'
hours_to_show: 48
entities:
- sensor.water_hour
- type: history-graph
title: 'Daily water consumption using vars'
hours_to_show: 360
entities:
- sensor.water_day
உண்மையில், இந்த அணுகுமுறையின் சிக்கல் இந்த அல்காரிதத்தில் உள்ளது. நான் ஏற்கனவே குறிப்பிட்டுள்ளபடி, ஒவ்வொரு உள்ளீட்டு மதிப்புக்கும் (ஒவ்வொரு அடுத்த லிட்டருக்கும் தற்போதைய மீட்டர் வாசிப்பு) 1kb பதிவுகள் தரவுத்தளத்தில் உருவாக்கப்படுகின்றன. ஒவ்வொரு பயன்பாட்டு மீட்டரும் ஒரு புதிய மதிப்பை உருவாக்குகிறது, இது அடித்தளத்தில் சேர்க்கப்படுகிறது. நான் மணிநேரம்/தினசரி/வாரம்/மாதாந்திர வாசிப்புகள் மற்றும் பல வாட்டர் ரைசர்களை சேகரித்து, ஒரு பேக் எலக்ட்ரிக் மீட்டர்களைச் சேர்க்க விரும்பினால், அது நிறைய தரவுகளாக இருக்கும். சரி, இன்னும் துல்லியமாக, நிறைய தரவு இல்லை, ஆனால் வீட்டு உதவியாளர் தரவுத்தளத்தில் தேவையற்ற தகவல்களை எழுதுவதால், தரவுத்தளத்தின் அளவு வேகமாக வளரும். வாராந்திர மற்றும் மாதாந்திர விளக்கப்படங்களுக்கான அடித்தளத்தின் அளவைக் கணக்கிடக்கூட நான் பயப்படுகிறேன்.
கூடுதலாக, பயன்பாட்டு மீட்டர் தானாகவே சிக்கலை தீர்க்காது. பயன்பாட்டு மீட்டரால் உருவாக்கப்பட்ட மதிப்புகளின் வரைபடம் ஒரு சலிப்பான அதிகரிக்கும் செயல்பாடாகும், இது ஒவ்வொரு மணி நேரமும் 0 க்கு மீட்டமைக்கப்படும். அந்த காலகட்டத்தில் எத்தனை லிட்டர்கள் பயன்படுத்தப்பட்டன என்பதைக் காட்டும், பயனருக்குப் புரியும் நுகர்வு விளக்கப்படம் எங்களுக்குத் தேவை. நிலையான வரலாறு-வரைபடம் கூறு இதைச் செய்ய முடியாது, ஆனால் மினி-கிராஃப்-கார்டு வெளிப்புற கூறு நமக்கு உதவும்.
இது லவ்லேஸ்-யுஐக்கான கார்டு குறியீடு:
- aggregate_func: max
entities:
- color: var(--primary-color)
entity: sensor.water_cold_hour_um
group_by: hour
hours_to_show: 48
name: "Hourly water consumption aggregated by utility meter"
points_per_hour: 1
show:
graph: bar
type: 'custom:mini-graph-card'
சென்சார் பெயர், வரைபட வகை, நிறம் (நிலையான ஆரஞ்சு எனக்கு பிடிக்கவில்லை) போன்ற நிலையான அமைப்புகளுக்கு கூடுதலாக, 3 அமைப்புகளை கவனிக்க வேண்டியது அவசியம்:
group_by:hour — மணி நேரத்தின் தொடக்கத்தில் சீரமைக்கப்பட்ட பார்களுடன் வரைபடம் உருவாக்கப்படும்
point_per_hour: 1 - ஒவ்வொரு மணி நேரத்திற்கும் ஒரு பார்
மற்றும் மிக முக்கியமாக, aggregate_func: max - ஒவ்வொரு மணிநேரத்திலும் அதிகபட்ச மதிப்பை எடுத்துக் கொள்ளுங்கள். இந்த அளவுருவே மரக்கட்டை வரைபடத்தை பார்களாக மாற்றுகிறது
இடதுபுறத்தில் உள்ள நெடுவரிசைகளின் வரிசையில் கவனம் செலுத்த வேண்டாம் - தரவு இல்லை என்றால் இது கூறுகளின் நிலையான நடத்தை. ஆனால் தரவு எதுவும் இல்லை - இந்தக் கட்டுரையின் பொருட்டு சில மணிநேரங்களுக்கு முன்பு பயன்பாட்டு மீட்டர் தரவு சேகரிப்பை இயக்கினேன் (எனது தற்போதைய அணுகுமுறையை கீழே விவரிக்கிறேன்).
இந்த படத்தில் சில நேரங்களில் தரவு காட்சி கூட வேலை செய்கிறது மற்றும் பார்கள் உண்மையில் சரியான மதிப்புகளை பிரதிபலிக்கின்றன என்பதைக் காட்ட விரும்பினேன். ஆனால் அதெல்லாம் இல்லை. சில காரணங்களால், காலை 11 முதல் 12 மணி வரை தேர்ந்தெடுக்கப்பட்ட நெடுவரிசை 19 லிட்டரைக் காட்டுகிறது, இருப்பினும் அதே சென்சாரிலிருந்து அதே காலத்திற்கு 62 லிட்டர் நுகர்வு டூதி வரைபடத்தில் சற்று அதிகமாக உள்ளது. ஒன்று பிழை அல்லது கைகள் வளைந்திருக்கும். ஆனால் வலதுபுறத்தில் உள்ள தரவு ஏன் உடைந்தது என்று எனக்கு இன்னும் புரியவில்லை - நுகர்வு சாதாரணமாக இருந்தது, இது பல் வரைபடத்திலிருந்தும் தெரியும்.
பொதுவாக, இந்த அணுகுமுறையின் நம்பகத்தன்மையை என்னால் அடைய முடியவில்லை - வரைபடம் எப்போதும் ஒருவித மதவெறியைக் காட்டுகிறது.
பகல்நேர உணரிக்கான ஒத்த குறியீடு.
- aggregate_func: max
entities:
- color: var(--primary-color)
entity: sensor.water_cold_day_um
group_by: interval
hours_to_show: 360
name: "Daily water consumption aggregated by utility meter"
points_per_hour: 0.0416666666
show:
graph: bar
type: 'custom:mini-graph-card'
group_by அளவுரு இடைவெளிக்கு அமைக்கப்பட்டுள்ளது என்பதை நினைவில் கொள்ளவும், புள்ளிகள்_per_hour அளவுரு எல்லாவற்றையும் கட்டுப்படுத்துகிறது. இந்த கூறுகளில் மற்றொரு சிக்கல் உள்ளது - point_per_hour ஒரு மணிநேரம் அல்லது அதற்கும் குறைவான அட்டவணையில் நன்றாக வேலை செய்கிறது, ஆனால் அது பெரிய இடைவெளியில் உறிஞ்சும். எனவே ஒரே நாளில் ஒரு நெடுவரிசையைப் பெற, நான் 1/24=0.04166666 மதிப்பை உள்ளிட வேண்டும். நான் வாராந்திர மற்றும் மாதாந்திர விளக்கப்படங்களைப் பற்றி கூட பேசவில்லை.
அணுகுமுறை 2
வீட்டு உதவியாளரைப் புரிந்துகொண்டபோது, இந்த வீடியோவைப் பார்த்தேன்:
ஒரு நண்பர் பல வகையான Xiaomi சாக்கெட்டுகளிலிருந்து நுகர்வுத் தரவைச் சேகரிக்கிறார். அவரது பணி கொஞ்சம் எளிமையானது - இன்று, நேற்று மற்றும் மாதத்திற்கான நுகர்வு மதிப்பைக் காட்டவும். அட்டவணைகள் தேவையில்லை.
உடனடி சக்தி மதிப்புகளின் கையேடு ஒருங்கிணைப்பு பற்றிய விவாதங்களை ஒதுக்கி வைப்போம் - இந்த அணுகுமுறையின் "துல்லியம்" பற்றி நான் ஏற்கனவே மேலே எழுதியுள்ளேன். ஏற்கனவே அதே கடையில் சேகரிக்கப்பட்ட திரட்டப்பட்ட நுகர்வு மதிப்புகளை அவர் ஏன் பயன்படுத்தவில்லை என்பது தெளிவாகத் தெரியவில்லை. என் கருத்துப்படி, வன்பொருளுக்குள் ஒருங்கிணைப்பு சிறப்பாக செயல்படும்.
வீடியோவிலிருந்து ஒரு குறிப்பிட்ட காலத்திற்கு நுகர்வுகளை கைமுறையாக எண்ணும் யோசனையை நாங்கள் எடுப்போம். பையன் இன்று மற்றும் நேற்றைய மதிப்புகளை மட்டுமே கணக்கிடுகிறான், ஆனால் நாங்கள் மேலும் சென்று ஒரு வரைபடத்தை வரைய முயற்சிப்போம். எனது விஷயத்தில் முன்மொழியப்பட்ட முறையின் சாராம்சம் பின்வருமாறு.
ஒரு மாறி மதிப்பு_at_the_beginning_of_hour ஐ உருவாக்குவோம், அதில் தற்போதைய மீட்டர் அளவீடுகளை பதிவு செய்வோம்
டைமரைப் பயன்படுத்தி, மணிநேரத்தின் முடிவில் (அல்லது அடுத்த தொடக்கத்தில்) தற்போதைய வாசிப்புக்கும் மணிநேரத்தின் தொடக்கத்தில் சேமிக்கப்பட்டதற்கும் உள்ள வித்தியாசத்தைக் கணக்கிடுகிறோம். இந்த வித்தியாசம் தற்போதைய மணிநேரத்திற்கான நுகர்வாக இருக்கும் - மதிப்பை சென்சாரில் சேமிப்போம், எதிர்காலத்தில் இந்த மதிப்பின் அடிப்படையில் ஒரு வரைபடத்தை உருவாக்குவோம்.
தற்போதைய கவுண்டர் மதிப்பை அங்கு எழுதுவதன் மூலம் value_at_beginning_of_hour மாறியை "ரீசெட்" செய்ய வேண்டும்.
இதையெல்லாம் வீட்டு உதவியாளர் மூலமாகவே செய்ய முடியும்.
முந்தைய அணுகுமுறையை விட நீங்கள் இன்னும் கொஞ்சம் குறியீட்டை எழுத வேண்டும். முதலில், இதே "மாறிகளை" உருவாக்குவோம். பெட்டிக்கு வெளியே எங்களிடம் "மாறி" நிறுவனம் இல்லை, ஆனால் நாங்கள் mqtt தரகரின் சேவைகளைப் பயன்படுத்தலாம். நாங்கள் retain=true flag உடன் மதிப்புகளை அங்கு அனுப்புவோம் - இது தரகருக்குள் உள்ள மதிப்பைச் சேமிக்கும், மேலும் வீட்டு உதவியாளர் மறுதொடக்கம் செய்யப்பட்டாலும், எந்த நேரத்திலும் அதை அங்கிருந்து வெளியேற்றலாம். நான் மணிநேர மற்றும் தினசரி கவுண்டர்களை ஒரே நேரத்தில் செய்தேன்.
- platform: mqtt
state_topic: "test/water/hour"
name: water_hour
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/hour_begin"
name: water_hour_begin
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/day"
name: water_day
unit_of_measurement: l
- platform: mqtt
state_topic: "test/water/day_begin"
name: water_day_begin
unit_of_measurement: l
எல்லா மாயாஜாலங்களும் ஆட்டோமேஷனில் நடக்கும், இது முறையே ஒவ்வொரு மணி நேரமும் ஒவ்வொரு இரவும் இயங்கும்.
தொடக்க மற்றும் இறுதி மதிப்புகளுக்கு இடையிலான வித்தியாசமாக இடைவெளிக்கான மதிப்பைக் கணக்கிடுங்கள்
அடுத்த இடைவெளிக்கு அடிப்படை மதிப்பைப் புதுப்பிக்கவும்
இந்த வழக்கில் வரைபடங்களின் கட்டுமானம் வழக்கமான வரலாறு-வரைபடத்தால் தீர்க்கப்படுகிறது:
- type: history-graph
title: 'Hourly water consumption using vars'
hours_to_show: 48
entities:
- sensor.water_hour
- type: history-graph
title: 'Daily water consumption using vars'
hours_to_show: 360
entities:
- sensor.water_day
இது போல் தெரிகிறது:
கொள்கையளவில், இது ஏற்கனவே தேவை. இந்த முறையின் நன்மை என்னவென்றால், ஒரு இடைவெளிக்கு ஒரு முறை தரவு உருவாக்கப்படுகிறது. அந்த. ஒரு மணிநேர விளக்கப்படத்திற்கு ஒரு நாளைக்கு 24 பதிவுகள் மட்டுமே.
துரதிர்ஷ்டவசமாக, இது இன்னும் வளர்ந்து வரும் தளத்தின் பொதுவான சிக்கலை தீர்க்கவில்லை. நான் மாதாந்திர நுகர்வு வரைபடத்தை விரும்பினால், குறைந்தபட்சம் ஒரு வருடத்திற்கு டேட்டாவைச் சேமிக்க வேண்டும். ஹோம் அசிஸ்டெண்ட் முழு தரவுத்தளத்திற்கும் ஒரே ஒரு சேமிப்பக கால அமைப்பை வழங்குவதால், கணினியில் உள்ள அனைத்து தரவும் ஒரு வருடம் முழுவதும் சேமிக்கப்பட வேண்டும் என்பதாகும். உதாரணமாக, ஒரு வருடத்தில் நான் 200 கன மீட்டர் தண்ணீரை உட்கொள்கிறேன், அதாவது தரவுத்தளத்தில் 200000 உள்ளீடுகள். நீங்கள் மற்ற சென்சார்களை கணக்கில் எடுத்துக் கொண்டால், அந்த எண்ணிக்கை பொதுவாக அநாகரீகமாக மாறும்.
அணுகுமுறை 3
அதிர்ஷ்டவசமாக, புத்திசாலிகள் ஏற்கனவே InfluxDB தரவுத்தளத்தை எழுதுவதன் மூலம் இந்த சிக்கலை தீர்த்துள்ளனர். இந்த தரவுத்தளமானது நேர அடிப்படையிலான தரவைச் சேமிப்பதற்காக சிறப்பாக மேம்படுத்தப்பட்டுள்ளது மற்றும் வெவ்வேறு சென்சார்களின் மதிப்புகளைச் சேமிப்பதற்கு ஏற்றது. கணினி SQL போன்ற வினவல் மொழியையும் வழங்குகிறது, இது தரவுத்தளத்திலிருந்து மதிப்புகளைப் பிரித்தெடுக்கவும் பின்னர் அவற்றை பல்வேறு வழிகளில் ஒருங்கிணைக்கவும் அனுமதிக்கிறது. இறுதியாக, வெவ்வேறு தரவுகளை வெவ்வேறு நேரங்களில் சேமிக்க முடியும். எடுத்துக்காட்டாக, வெப்பநிலை அல்லது ஈரப்பதம் போன்ற அடிக்கடி மாறும் அளவீடுகளை இரண்டு வாரங்களுக்கு மட்டுமே சேமிக்க முடியும், அதே நேரத்தில் தினசரி நீர் நுகர்வு அளவீடுகள் ஒரு வருடம் முழுவதும் சேமிக்கப்படும்.
InfluxDB ஐத் தவிர, புத்திசாலிகள் InfluxDB இலிருந்து தரவின் அடிப்படையில் வரைபடங்களை வரைவதற்கான ஒரு அமைப்பான Grafana ஐயும் கண்டுபிடித்தனர். கிராஃபனா பல்வேறு வகையான வரைபடங்களை வரையலாம், அவற்றை விரிவாகத் தனிப்பயனாக்கலாம், மிக முக்கியமாக, இந்த வரைபடங்களை லவ்லேஸ்-யுஐ ஹோம் அசிஸ்டென்ட்டில் "சொருகலாம்".
ஊக்கம் பெறு இங்கே и இங்கே. வீட்டு உதவியாளருடன் InfluxDB மற்றும் Grafana ஐ நிறுவி இணைக்கும் செயல்முறையை கட்டுரைகள் விரிவாக விவரிக்கின்றன. எனது குறிப்பிட்ட பிரச்சனையை தீர்ப்பதில் கவனம் செலுத்துவேன்.
எனவே, முதலில், influxDB இல் எதிர் மதிப்பைச் சேர்க்க ஆரம்பிக்கலாம். வீட்டு உதவியாளர் உள்ளமைவின் ஒரு பகுதி (இந்த எடுத்துக்காட்டில் நான் குளிர்ச்சியை மட்டுமல்ல, சூடான நீரையும் கொண்டு வேடிக்கையாக இருப்பேன்):
இப்போது InfluxDB கன்சோலுக்குச் சென்று எங்கள் தரவுத்தளத்தை உள்ளமைப்போம். குறிப்பாக, குறிப்பிட்ட தரவு எவ்வளவு நேரம் சேமிக்கப்படும் என்பதை நீங்கள் கட்டமைக்க வேண்டும். இது என்று அழைக்கப்படுபவர்களால் கட்டுப்படுத்தப்படுகிறது. தக்கவைப்புக் கொள்கை - இது ஒரு முக்கிய தரவுத்தளத்தில் உள்ள தரவுத்தளங்களைப் போன்றது, ஒவ்வொரு உள் தரவுத்தளமும் அதன் சொந்த அமைப்புகளைக் கொண்டுள்ளது. இயல்பாக, எல்லா தரவும் autogen எனப்படும் தக்கவைப்புக் கொள்கையில் சேமிக்கப்படும்; இந்தத் தரவு ஒரு வாரத்திற்குச் சேமிக்கப்படும். மணிநேர தரவு ஒரு மாதத்திற்கு சேமிக்கப்பட வேண்டும், வாராந்திர தரவு ஒரு வருடத்திற்கு சேமிக்கப்பட வேண்டும் மற்றும் மாதாந்திர தரவு ஒருபோதும் நீக்கப்படக்கூடாது என்று நான் விரும்புகிறேன். பொருத்தமான தக்கவைப்புக் கொள்கையை உருவாக்குவோம்
CREATE RETENTION POLICY "month" ON "homeassistant" DURATION 30d REPLICATION 1
CREATE RETENTION POLICY "year" ON "homeassistant" DURATION 52w REPLICATION 1
CREATE RETENTION POLICY "infinite" ON "homeassistant" DURATION INF REPLICATION 1
இப்போது, உண்மையில், முக்கிய தந்திரம் தொடர்ச்சியான வினவலைப் பயன்படுத்தி தரவு ஒருங்கிணைப்பு ஆகும். இது ஒரு வினவலைத் தானாக குறிப்பிட்ட இடைவெளியில் இயக்கி, இந்த வினவலுக்கான தரவை ஒருங்கிணைத்து, முடிவைப் புதிய மதிப்பில் சேர்க்கும் பொறிமுறையாகும். ஒரு உதாரணத்தைப் பார்ப்போம் (நான் படிக்கக்கூடிய ஒரு நெடுவரிசையில் எழுதுகிறேன், ஆனால் உண்மையில் நான் இந்த கட்டளையை ஒரு வரியில் உள்ளிட வேண்டும்)
CREATE CONTINUOUS QUERY cq_water_hourly ON homeassistant
BEGIN
SELECT max(value) AS value
INTO homeassistant.month.water_meter_hour
FROM homeassistant.autogen.l
GROUP BY time(1h), entity_id fill(previous)
END
இந்த கட்டளை:
ஹோம் அசிஸ்டண்ட் தரவுத்தளத்தில் cq_water_cold_hourly என்ற பெயரில் தொடர்ச்சியான வினவலை உருவாக்குகிறது
கோரிக்கை ஒவ்வொரு மணிநேரமும் செயல்படுத்தப்படும் (நேரம்(1மணி))
கோரிக்கையானது, குளிர் மற்றும் சூடான நீர் அளவீடுகள் உட்பட, அளவீட்டு' homeassistant.autogen.l (லிட்டர்கள்) இலிருந்து அனைத்து தரவையும் அகற்றும்.
ஒருங்கிணைந்த தரவு entity_id மூலம் தொகுக்கப்படும், இது குளிர் மற்றும் சூடான நீருக்கான தனி மதிப்புகளை நமக்கு வழங்கும்.
லிட்டர் கவுண்டர் என்பது ஒவ்வொரு மணி நேரத்திற்கும் ஒரே மாதிரியாக அதிகரிக்கும் வரிசையாக இருப்பதால், அதிகபட்ச மதிப்பை எடுக்க வேண்டியது அவசியம், எனவே ஒருங்கிணைப்பு செயல்பாடு அதிகபட்சம் (மதிப்பு) மூலம் மேற்கொள்ளப்படும்.
புதிய மதிப்பு homeassistant.month.water_meter_hour இல் எழுதப்படும், அங்கு மாதம் என்பது ஒரு மாதத் தக்கவைப்புக் காலத்துடன் கூடிய தக்கவைப்புக் கொள்கையின் பெயர். மேலும், குளிர் மற்றும் சூடான நீர் பற்றிய தரவு, மதிப்பு புலத்தில் தொடர்புடைய entity_id மற்றும் மதிப்புடன் தனித்தனி பதிவுகளாக சிதறடிக்கப்படும்.
இரவில் அல்லது வீட்டில் யாரும் இல்லாத நேரத்தில், தண்ணீர் நுகர்வு இல்லை, எனவே homeassistant.autogen.l இல் புதிய உள்ளீடுகள் எதுவும் இல்லை. வழக்கமான வினவல்களில் மதிப்புகள் காணாமல் போவதைத் தவிர்க்க, நீங்கள் நிரப்பு (முந்தையது) பயன்படுத்தலாம். இது InfluxDBஐ கடைசி மணிநேரத்தின் மதிப்பைப் பயன்படுத்த கட்டாயப்படுத்தும்.
துரதிர்ஷ்டவசமாக, தொடர்ச்சியான வினவல் ஒரு தனித்தன்மையைக் கொண்டுள்ளது: நிரப்பு (முந்தைய) தந்திரம் வேலை செய்யாது மற்றும் பதிவுகள் வெறுமனே உருவாக்கப்படவில்லை. மேலும், இது ஒருவித தீர்க்க முடியாத பிரச்சனை பல ஆண்டுகளாக விவாதிக்கப்பட்டு வருகிறது. இந்த சிக்கலை நாங்கள் பின்னர் கையாள்வோம், ஆனால் நிரப்பு (முந்தையது) தொடர்ச்சியான வினவலில் இருக்கட்டும் - அது தலையிடாது.
என்ன நடந்தது என்று பார்ப்போம் (நிச்சயமாக, நீங்கள் இரண்டு மணி நேரம் காத்திருக்க வேண்டும்):
> select * from homeassistant.month.water_meter_hour group by entity_id
...
name: water_meter_hour
tags: entity_id=water_meter_cold
time value
---- -----
...
2020-03-08T01:00:00Z 370511
2020-03-08T02:00:00Z 370513
2020-03-08T05:00:00Z 370527
2020-03-08T06:00:00Z 370605
2020-03-08T07:00:00Z 370635
2020-03-08T08:00:00Z 370699
2020-03-08T09:00:00Z 370761
2020-03-08T10:00:00Z 370767
2020-03-08T11:00:00Z 370810
2020-03-08T12:00:00Z 370818
2020-03-08T13:00:00Z 370827
2020-03-08T14:00:00Z 370849
2020-03-08T15:00:00Z 370921
தரவுத்தளத்தில் உள்ள மதிப்புகள் UTC இல் சேமிக்கப்பட்டுள்ளன என்பதை நினைவில் கொள்க, எனவே இந்த பட்டியல் 3 மணிநேரம் வேறுபடுகிறது - InfluxDB வெளியீட்டில் 7am மதிப்புகள் மேலே உள்ள வரைபடங்களில் உள்ள 10am மதிப்புகளுக்கு ஒத்திருக்கும். அதிகாலை 2 முதல் 5 மணி வரை எந்தப் பதிவும் இல்லை என்பதையும் கவனத்தில் கொள்ளவும் - இது தொடர்ச்சியான வினவலின் அதே அம்சமாகும்.
நீங்கள் பார்க்கிறபடி, ஒருங்கிணைக்கப்பட்ட மதிப்பும் ஒரே மாதிரியாக அதிகரிக்கும் வரிசையாகும், உள்ளீடுகள் மட்டுமே குறைவாகவே நிகழ்கின்றன - ஒரு மணி நேரத்திற்கு ஒரு முறை. ஆனால் இது ஒரு பிரச்சனையல்ல - வரைபடத்திற்கான சரியான தரவை மீட்டெடுக்கும் மற்றொரு வினவலை எழுதலாம்.
SELECT difference(max(value))
FROM homeassistant.month.water_meter_hour
WHERE entity_id='water_meter_cold' and time >= now() -24h
GROUP BY time(1h), entity_id
fill(previous)
நான் புரிந்துகொள்வேன்:
homeassistant.month.water_meter_hour தரவுத்தளத்திலிருந்து கடைசி நாளுக்கான entity_id='water_meter_cold' க்கான தரவைப் பிரித்தெடுப்போம் (நேரம் >= இப்போது() -24h).
நான் ஏற்கனவே குறிப்பிட்டுள்ளபடி, homeassistant.month.water_meter_hour வரிசையில் சில உள்ளீடுகள் விடுபட்டிருக்கலாம். GROUP by time(1h) மூலம் வினவலை இயக்குவதன் மூலம் இந்தத் தரவை மீண்டும் உருவாக்குவோம். இந்த முறை நிரப்புதல் (முந்தையது) எதிர்பார்த்தபடி செயல்படும், விடுபட்ட தரவை உருவாக்கும் (செயல்பாடு முந்தைய மதிப்பை எடுக்கும்)
இந்த கோரிக்கையில் மிக முக்கியமான விஷயம் வேறுபாடு செயல்பாடு ஆகும், இது மணிநேர மதிப்பெண்களுக்கு இடையிலான வேறுபாட்டைக் கணக்கிடும். இது சொந்தமாக வேலை செய்யாது மற்றும் ஒரு திரட்டல் செயல்பாடு தேவைப்படுகிறது. இது முன்பு பயன்படுத்தப்பட்ட அதிகபட்சம்() ஆக இருக்கட்டும்.
அதிகாலை 2 மணி முதல் 5 மணி வரை (UTC) நுகர்வு இல்லை. ஆயினும்கூட, வினவல் நிரப்புவதற்கு (முந்தையது) அதே நுகர்வு மதிப்பை வழங்கும், மேலும் வேறுபாடு செயல்பாடு இந்த மதிப்பை தன்னிலிருந்து கழிக்கும் மற்றும் வெளியீடு 0 ஆக இருக்கும், இது சரியாகத் தேவைப்படுகிறது.
ஒரு வரைபடத்தை உருவாக்குவது மட்டுமே மீதமுள்ளது. இதைச் செய்ய, கிராஃபானாவைத் திறந்து, ஏற்கனவே உள்ள (அல்லது புதிய ஒன்றை உருவாக்க) டாஷ்போர்டைத் திறந்து, புதிய பேனலை உருவாக்கவும். விளக்கப்பட அமைப்புகள் இப்படி இருக்கும்.
அதே வரைபடத்தில் குளிர் மற்றும் சூடான நீர் தரவைக் காண்பிப்பேன். கோரிக்கை நான் மேலே விவரித்தது போலவே உள்ளது.
காட்சி அளவுருக்கள் பின்வருமாறு அமைக்கப்பட்டுள்ளன. என்னைப் பொறுத்தவரை இது கோடுகள் கொண்ட வரைபடமாக இருக்கும், இது படிகளில் (படிகளில்) செல்கிறது. கீழே உள்ள ஸ்டாக் அளவுருவை விளக்குகிறேன். கீழே இன்னும் இரண்டு காட்சி விருப்பங்கள் உள்ளன, ஆனால் அவை அவ்வளவு சுவாரஸ்யமாக இல்லை.
இதன் விளைவாக வரும் விளக்கப்படத்தை வீட்டு உதவியாளரிடம் சேர்க்க, நீங்கள் செய்ய வேண்டியது:
விளக்கப்பட எடிட்டிங் பயன்முறையிலிருந்து வெளியேறவும். சில காரணங்களால், சரியான விளக்கப்பட பகிர்வு அமைப்புகள் டாஷ்போர்டு பக்கத்திலிருந்து மட்டுமே வழங்கப்படுகின்றன
விளக்கப்படத்தின் பெயருக்கு அடுத்துள்ள முக்கோணத்தைக் கிளிக் செய்து, மெனுவிலிருந்து பகிர் என்பதைத் தேர்ந்தெடுக்கவும்
நேர வரம்பு (கடந்த 2 நாட்கள்) இங்கே அமைக்கப்பட்டுள்ளது, டாஷ்போர்டு அமைப்புகளில் இல்லை என்பதை நினைவில் கொள்ளவும்.
வரைபடம் இப்படி இருக்கிறது. கடந்த 2 நாட்களாக நான் வெந்நீரைப் பயன்படுத்தவில்லை, அதனால் குளிர்ந்த நீர் வரைபடம் மட்டுமே வரையப்பட்டுள்ளது.
எனக்கு எந்த கிராஃப், லைன்-ஸ்டெப் அல்லது உண்மையான பார்கள் அதிகம் பிடிக்கும் என்பதை இன்னும் நானே முடிவு செய்யவில்லை. எனவே, தினசரி நுகர்வு விளக்கப்படத்தின் உதாரணத்தை நான் தருகிறேன், இந்த முறை பார்களில் மட்டுமே. வினவல்கள் மேலே விவரிக்கப்பட்டதைப் போலவே கட்டமைக்கப்பட்டுள்ளன. காட்சி விருப்பங்கள்:
இந்த வரைபடம் இதுபோல் தெரிகிறது:
எனவே ஸ்டாக் அளவுரு பற்றி. இந்த வரைபடத்தில், சூடான நீரின் நெடுவரிசையின் மேல் குளிர்ந்த நீரின் ஒரு நெடுவரிசை வரையப்பட்டுள்ளது. மொத்த உயரம் காலத்திற்கு குளிர் மற்றும் சூடான நீரின் மொத்த நுகர்வுக்கு ஒத்திருக்கிறது.
காட்டப்பட்டுள்ள அனைத்து வரைபடங்களும் மாறும். ஆர்வமுள்ள இடத்தில் உங்கள் சுட்டியை நகர்த்தி ஒரு குறிப்பிட்ட புள்ளியில் விவரங்களையும் மதிப்பையும் பார்க்கலாம்.
துரதிர்ஷ்டவசமாக, களிம்பில் ஒரு ஜோடி ஈக்கள் இருந்தன. பார் விளக்கப்படத்தில் (படி கோடுகளுடன் கூடிய விளக்கப்படம் போலல்லாமல்), பட்டியின் நடுப்பகுதி பகலின் நடுவில் இல்லை, ஆனால் 00:00 மணிக்கு. அந்த. நெடுவரிசையின் இடது பாதி முந்தைய நாளின் இடத்தில் வரையப்பட்டது. எனவே சனி மற்றும் ஞாயிற்றுக்கிழமைக்கான வரைபடங்கள் நீல மண்டலத்தின் இடதுபுறத்தில் சிறிது வரையப்பட்டுள்ளன. அதை எப்படி தோற்கடிப்பது என்று நான் கண்டுபிடிக்கும் வரை.
மாதாந்திர இடைவெளியில் சரியாக வேலை செய்ய இயலாமை மற்றொரு பிரச்சனை. உண்மை என்னவென்றால், மணிநேரம்/நாள்/வாரத்தின் நீளம் நிர்ணயிக்கப்பட்டுள்ளது, ஆனால் மாதத்தின் நீளம் ஒவ்வொரு முறையும் மாறுபடும். InfluxDB சம இடைவெளியில் மட்டுமே வேலை செய்ய முடியும். இதுவரை 30 நாட்களுக்கு ஒரு நிலையான இடைவெளியை அமைக்க என் மூளை போதுமானதாக இருந்தது. ஆம், வரைபடம் ஆண்டு முழுவதும் சிறிது மிதக்கும் மற்றும் பார்கள் மாதங்களுக்கு சரியாக பொருந்தாது. ஆனால் ஒரு காட்சி மீட்டராக இந்த விஷயத்தில் நான் ஆர்வமாக இருப்பதால், நான் அதை சரிசெய்கிறேன்.
நான் குறைந்தது இரண்டு தீர்வுகளைக் காண்கிறேன்:
மாதாந்திர விளக்கப்படங்களைக் கைவிட்டு, வாரந்தோறும் உங்களை வரம்பிடவும். ஆண்டுக்கான 52 வாராந்திர பார்கள் மிகவும் அழகாக இருக்கின்றன
மாதாந்திர நுகர்வையே முறை எண். 2 எனக் கருதி, அழகான வரைபடங்களுக்கு மட்டுமே கிராஃபானாவைப் பயன்படுத்தவும். இது மிகவும் துல்லியமான தீர்வாக இருக்கும். ஒப்பிட்டுப் பார்க்க, கடந்த ஆண்டிற்கான வரைபடங்களை நீங்கள் மேலெழுதலாம் - கிராஃபானாவும் அதைச் செய்யலாம்.
முடிவுக்கு
ஏன் என்று எனக்குத் தெரியவில்லை, ஆனால் இந்த வகையான வரைபடங்களில் நான் வெறித்தனமாக இருக்கிறேன். வாழ்க்கை முழு வீச்சில் இருப்பதையும், எல்லாமே மாறுவதையும் அவை காட்டுகின்றன. நேற்று நிறைய இருந்தது, இன்று கொஞ்சம் இருக்கிறது, நாளை வேறு ஏதாவது இருக்கும். நுகர்வு என்ற தலைப்பில் வீட்டு உறுப்பினர்களுடன் இணைந்து பணியாற்றுவது மட்டுமே எஞ்சியுள்ளது. ஆனால் தற்போதைய பசியுடன் கூட, கட்டணச் சீட்டில் உள்ள ஒரு பெரிய மற்றும் புரிந்துகொள்ள முடியாத எண்ணிக்கை ஏற்கனவே நுகர்வு பற்றிய புரிந்துகொள்ளக்கூடிய படமாக மாறி வருகிறது.
புரோகிராமராக எனது கிட்டத்தட்ட 20 வருட வாழ்க்கை இருந்தபோதிலும், தரவுத்தளங்களுடன் எனக்கு எந்த தொடர்பும் இல்லை. எனவே, வெளிப்புற தரவுத்தளத்தை நிறுவுவது மிகவும் சுருக்கமாகவும் புரிந்துகொள்ள முடியாததாகவும் தோன்றியது. அனைத்தையும் மாற்றியது மேலே உள்ள கட்டுரை - பொருத்தமான கருவியை இணைப்பது இரண்டு கிளிக்குகளில் செய்யப்படுகிறது, மேலும் ஒரு சிறப்பு கருவி மூலம், வரைபடங்களைத் திட்டமிடும் பணி கொஞ்சம் எளிதாகிறது.
தலைப்பில் மின் நுகர்வு பற்றி குறிப்பிட்டேன். துரதிர்ஷ்டவசமாக, தற்போது என்னால் எந்த வரைபடத்தையும் வழங்க முடியாது. ஒரு SDM120 மீட்டர் எனக்கு இறந்துவிட்டது, மற்றொன்று மோட்பஸ் வழியாக அணுகும்போது தடுமாற்றம். இருப்பினும், இது இந்த கட்டுரையின் தலைப்பை எந்த வகையிலும் பாதிக்காது - வரைபடங்கள் தண்ணீருக்கான அதே வழியில் கட்டமைக்கப்படும்.
இந்த கட்டுரையில் நான் நானே முயற்சித்த அணுகுமுறைகளை வழங்கினேன். எனக்குத் தெரியாத தரவு சேகரிப்பு மற்றும் காட்சிப்படுத்தலை ஒழுங்கமைக்க வேறு சில வழிகள் உள்ளன. கருத்துகளில் அதைப் பற்றி சொல்லுங்கள், நான் மிகவும் ஆர்வமாக இருப்பேன். ஆக்கபூர்வமான விமர்சனங்கள் மற்றும் புதிய யோசனைகளுக்கு நான் மகிழ்ச்சியடைவேன். வழங்கப்பட்ட பொருள் ஒருவருக்கும் உதவும் என்று நம்புகிறேன்.