이 프로젝트에서는 Raspberry Pi Zero W, Pimoroni Enviro+ 및 Plantower 공기 품질 센서를 사용하여 공기 입자, 가스, 온도, 습도, 기압, 조도 및 소음 수준을 모니터링, 표시 및 보고합니다. SGP30 센서를 추가하여 eCO2 및 TVOC 수준을 모니터링하는 옵션도 있습니다. 이 코드는 Pimoroni에서 게시한 많은 Python 예제 및 라이브러리를 기반으로 하며 다양한 수정 및 개선 사항이 포함되어 있습니다.
기압 수준 및 변화에 따른 기본 일기 예보 기능이 추가되었습니다.
우수한 날씨 및 조명의 조명 수준 표시가 공기 질 수준을 표시하도록 변경되었습니다. 이제 배경 색조는 공기 질 수준을 나타내며 태양의 위치는 이제 눈에 보이는 태양 아이콘을 통해 표시됩니다. 또한 일기 예보 정보, 소음 수준(활성화된 경우)을 제공하고 습도 표시기에 약간의 변경 사항이 있습니다.
각 그래프의 가시성이 향상되도록 Combined 기능이 수정되었습니다. 그래프 색상은 각 매개변수의 레벨 임계값을 기준으로 하며 측정된 매개변수만 표시합니다. 디스플레이의 가독성을 높이기 위해 'display_everything' 메소드도 공기질 매개변수만 표시하도록 수정되었습니다.
All in One 기능은 Enviro Monitor의 모든 기능을 순환할 수 있도록 수정되었습니다.
보다 효과적인 보상 알고리즘을 개발하기 위해 광범위한 테스트와 회귀 분석(섭씨 0~40도 사이)을 수행하여 온도 및 습도 측정의 정확도가 향상되었습니다. 그러나 이러한 개선된 알고리즘 자체만으로는 충분한 정확도를 제공하지 못했으며 Enviro+를 Raspberry Pi Zero W에서 분리하고 리본 케이블을 통해 연결하려면 3D 프린팅 케이스를 사용해야 했습니다.
온도 및 습도 측정을 개선하는 것 외에도 Enviro+ 가스 센서에 대한 시간 기반 드리프트, 온도, 습도 및 기압 보상을 제공하기 위해 테스트 및 회귀 분석이 수행되었습니다. 알고리즘과 청정 공기 교정은 또한 가스 센서 판독값(ppm)을 제공하는 데 사용됩니다. 회귀분석을 지원하기 위해 데이터 로깅 기능이 제공됩니다. 추가 회귀 분석을 수행하기 전에 해당 분석을 위한 로그 파일을 활성화하고 유효한 json 형식으로 변환해야 합니다.
기압 판독값의 정확성은 고도 보상을 통해 전달됩니다. 고도는 config.json 파일의 'altitude' 매개변수로 설정됩니다.
케이스는 방수 기능이 없으므로 외부 환경으로부터 보호되어야 합니다. 베이스는 장치가 수직 표면에 장착되지 않은 경우에만 필요합니다. eCO2 및 TVOC 수준을 모니터링하는 Indoor Plus 모델용 케이스와 커버의 변형이 있습니다. 이 케이스 변형은 SGP30 센서를 위한 추가 공간과 공기 흐름을 제공합니다.
케이스에는 날씨 커버를 추가하여 외부 환경으로부터 추가적인 보호를 제공하는 옵션도 있습니다. 이 표지를 사용하는 경우 config.json 파일의 "enable_display"를 "false"로 설정해야 합니다. 이는 디스플레이 기능을 공기 질 기반 색상 및 일련 번호로만 제한하고 온도 및 습도 보상 변수를 변경하여 커버가 온도 및 습도 센서에 미치는 영향을 완화합니다.
이 저장소를 기반으로 대략적인 소음 수준 측정이 버전 6에 추가되었습니다. 이 기능은 보정되지 않았으며 정확한 사운드 레벨 측정에 사용되지 않습니다. 버전 6.7에서는 이를 이용하여 소음 레벨 측정 기능의 주파수 보상이 향상되었으나 여전히 추가적인 작업과 교정이 필요합니다. 이 소음 수준 측정 기능은 추가 설정(아래 설명)이 필요하며 설정 후 구성 파일에서 활성화해야 합니다.
mqtt 지원은 외부 온도 및 습도 센서 사용(데이터 로깅 및 회귀 분석용), Enviro Monitor와 홈 오토메이션 시스템 간의 연동, 실외 및 실내 Enviro Monitor 간의 연동을 지원하기 위해 제공됩니다. 이러한 연동을 통해 실내 환경 모니터의 디스플레이가 실내와 실외 판독값을 순환할 수 있습니다.
실내 Enviro 모니터에서 실외 판독값을 얻기 위해 mqtt 연결 실내 및 실외 Enviro 모니터를 사용하는 대신 다른 Enviro 모니터에서 Luftdaten 판독값 또는 Adafruit IO 피드를 캡처하도록 실내 Enviro 모니터를 구성하는 것입니다.
Luftdaten 연동은 최소, 최대 및 평균 소음 수준 판독값 추가를 지원하도록 수정되었습니다. config.json 파일에서 "enable_luftdaten_noise"를 true로 설정하면 소음 수준 판독값을 Luftdaten으로 보낼 수 있습니다. Luftdaten은 현재 노드당 3개의 센서로 구성할 수 없으므로 PM 또는 기후 판독값이 비활성화된 경우에만 소음 수준 판독값을 Luftdaten으로 보낼 수 있습니다. config.json 파일의 "disable_luftdaten_sensor_upload"를 "Climate" 또는 "PM"으로 설정하면 됩니다.
동일한 Enviro+ 설정이 Enviro Monitor를 설정하는 데 사용되며 config.json 파일 매개변수는 해당 기능을 사용자 정의하는 데 사용됩니다. config.json 파일의 매개변수에 대한 설명은 여기에 있습니다.
소음 수준 측정을 설정하려면 다음과 같은 추가 단계가 필요합니다.
구성 파일에서 소음 측정을 활성화하기 전에 이 설정을 성공적으로 실행해야 합니다.
sudo apt-get 업데이트
sudo apt-get 업그레이드
컬 -sSL https://get.pimoroni.com/enviroplus | 세게 때리다
sudo python -m pip 제거 사운드 장치
sudo pip3 설치 sounddevice==0.3.15
버전 6.7 이상의 경우 다음도 수행하십시오.
sudo apt-get python3-scipy 설치
sudo pip3 설치 git+https://github.com/endolith/waveform_analytic.git@master
그런 다음 "볼륨 조절 추가"를 포함하여 https://learn.adafruit.com/adafruit-i2s-mems-microphone-breakout/raspberry-pi-wiring-test의 지침을 따르십시오.
~/.asoundrc에 대해 문서화된 텍스트 대신 다음을 사용하십시오.
버전 6.7 이전 버전의 경우:
alsamixer를 사용하여 adau7002 캡처 수준을 50으로 설정
버전 6.7 이상의 경우:
alsamixer를 사용하여 adau7002 캡처 수준을 10으로 설정
사용자 가이드는 Enviro Monitor 사용에 대한 지침을 제공합니다.
스트리밍 일기 예보, 공기 질, 온도, 습도, 이슬점, 기압, PM 농도, 가스 농도, 조도, 소음 수준에 대한 지원이 제공되며 옵션 SGP30 센서를 사용하면 eCO2 및 TVOC 데이터를 Adafruit IO에 제공합니다. 다음과 같이 활성화하고 설정할 수 있습니다.
Adafruit IO 피드에 데이터를 제공하려면 Enviro Monitor의 config.json 파일에 있는 다음 필드를 채워야 합니다.
"enable_adafruit_io": Adafruit IO 피드를 활성화하려면 true로 설정하고 비활성화하려면 false로 설정합니다.
"aio_user_name": "Adafruit IO 사용자 이름",
"aio_key": "Adafruit IO 키",
"aio_feed_window": 0에서 9 사이의 값입니다. 1분 피드 창의 시작 시간을 설정합니다(Adafruit 조절 제어 참조). Enviro 모니터가 하나만 있는 경우 0으로 설정하세요.
"aio_feed_sequence": 0에서 3 사이의 값. 1분 피드 업데이트 창 내에서 피드 업데이트 시작 시간을 설정합니다(Adafruit 조절 제어 참조). Enviro 모니터가 하나만 있는 경우 0으로 설정하세요.
"aio_household_prefix": "모니터링 중인 가구의 Adafruit IO 키 접두사(Adafruit IO 명명 규칙 참조)",
"aio_location_prefix": "이 특정 환경 모니터의 위치에 대한 Adafruit IO 키 접두사입니다. 실내 모니터에는 'indoor'를 사용하고 실외 모니터에는 'outdoor'를 사용합니다. (Adafruit IO 명명 규칙 참조)",
"aio_package": "Premium Plus" 또는 "Premium Plus Noise" 또는 "Premium" 또는 "Premium Noise" 또는 "Basic Air" 또는 "Basic Combo"로 설정
'Premium Plus', 'Premium Plus Noise', 'Premium' 또는 'Premium Noise' 패키지와 Enviro Monitor Indoor Plus(SGP30 eCO2/TVOC 센서 장착)를 사용하려면 Adafruit IO+ 계정이 필요합니다. Premium Plus' 또는 'Premium Plus Noise' 패키지(Adafruit IO 패키지 참조)",
스크립트는 이 예와 같이 Enviro Monitor의 Adafruit IO 피드, 대시보드 및 블록을 설정합니다.
스크립트는 aio_feed_prefix 사전을 필수 데이터로 채워 한 번의 실행으로 여러 가구와 위치를 설정할 수 있습니다. aio_feed_prefix의 형식은 다음과 같습니다.
aio_feed_prefix = {'가정 1 이름': {'key': 'household1key', 'package': 'aio_package', 'locations': {'Location1Name': 'location1key', 'Location2Name': 'location2key'}, 'visibility ': '공개' 또는 '비공개'}, '가족 2 이름': {'key': 'household2key', '패키지': 'aio_package', 'locations': {'Location1Name': 'location1key'}, 'visibility': 'public' 또는 'private'}}
가구 이름 및 가구 키는 관련 Enviro 모니터의 config.json 파일에 정의된 것과 일치해야 합니다.
예를 들어, 귀하의 가구에 Enviro Monitor가 하나만 있고 config.json 파일에서 "aio_household_prefix"를 "home"으로, "aio_location_prefix"를 "outdoor"로, "aio_package"를 "Premium"으로 설정한 경우 해당 Enviro Monitor를 사용하고 피드, 대시보드 및 블록을 비공개 가시성으로 설정하려면 다음을 수행하세요.
aio_feed_prefix = {'집': {'키': '집', '패키지': 프리미엄', '위치': {'야외': '야외'}, '가시성': '비공개'}}
가족용 Enviro 모니터가 2개 있고 두 Enviro 모니터 모두에 대해 config.json 파일을 "aio_household_prefix"로 "home"으로 설정한 경우, 실외 모니터의 경우 "aio_location_prefix"를 "outdoor"로 설정하고 모니터의 경우 "indoor"로 설정했습니다. 실내 모니터의 경우 "aio_package"를 실외 모니터의 경우 "Premium"으로, 실내 모니터의 경우 "Premium Plus"로 설정하고 피드, 대시보드 및 블록 설정을 원하는 경우 대중에게 공개됨:
aio_feed_prefix = {'집': {'키': '집', '패키지': 프리미엄 플러스', '위치': {'야외': '야외', '실내': '실내'}, '가시성': '공공의'}}
다른 두 개의 사용자 정의 사전은 aio_user_name과 aio_key입니다. Enviro Monitor의 config.json 파일에 사용한 것과 동일한 사용자 이름과 키로 채워야 합니다.
aio_user_name = "Adafruit IO 사용자 이름"
aio_key = "Adafruit IO 키"
활성화되면 Adafruit IO 피드 업데이트가 10분마다 생성됩니다. 구성 파일의 aio_feed_window 및 aio_feed_sequence 변수는 여러 Enviro 모니터에서 피드를 수집할 때 Adafruit IO 조절 오류를 최소화하는 데 사용됩니다. aio_feed_window 변수는 1분 피드 업데이트 기간의 시작 시간을 설정하기 위해 0에서 9 사이의 값일 수 있습니다. 0은 매시 0, 10, 20, 30, 40, 50분에 창을 열고, 1은 매시 1, 11, 21, 31, 41, 51분에 창을 열고, 2는 2시에 창을 엽니다. 매시 12분, 22분, 32분, 42분, 52분 등. aio_feed_sequence 변수는 1분 피드 업데이트 창 내에서 피드 업데이트 시작 시간을 설정하기 위해 0에서 3 사이의 값일 수 있습니다. 0은 창이 열린 직후 피드 업데이트를 시작하고, 1은 시작을 15초, 2는 30초, 3은 45초 지연합니다.
각 Enviro Monitor의 Adafruit IO 피드, 대시보드 또는 블록에 대한 명명 규칙은 각 피드, 대시보드 또는 블록의 접두사로 가구 이름과 해당 가구 내의 관련 Enviro Monitor 위치 위치를 사용하는 것입니다. "aio_household_prefix"에 적합한 이름을 선택하고 "aio_location_prefix"는 "indoor" 또는 "outdoor"일 수 있습니다. 예를 들어, "aio_household_prefix"를 "home"으로 설정하고 "aio_location_prefix"를 "outdoor"로 설정하면 각 피드 이름의 접두사가 "Home Outdoor"로 설정되고 각 피드 키의 접두사가 "home-outdoor-"로 설정됩니다. 온도 피드의 이름은 '집 실외 온도'이고 키는 '집-외-온도'입니다. 대시보드에는 이름이 '집', 키는 '집'이 있으며 해당 대시보드 내의 온도 게이지 블록에는 이름은 "실외 온도 게이지"이고 핵심은 "실외 온도 게이지"입니다.
6가지 Adafruit IO 패키지 옵션을 사용할 수 있습니다. Enviro당 14개의 데이터 피드가 있는 "Premium", Enviro당 17개의 데이터 피드가 있는 "Premium Noise", Enviro당 16개의 데이터 피드가 있는 "Premium Plus"(즉, 옵션을 통해 eCO2 및 TVOC 추가) SGP30 센서), Enviro당 19개의 데이터 피드가 있는 "Premium Plus Noise"(모두 Adafruit IO+ 계정 필요) 5가지 공기질 데이터 스트림(대기질 수준, 공기질 텍스트, PM1, PM2.5 및 PM10)이 포함된 "기본 공기" 및 5가지 공기질/기후 흐름(공기질 수준, 일기예보 아이콘, 온도, 온도)이 포함된 "기본 콤보" 습도 및 기압).
"Premium Noise" 및 "Premium Plus Noise" Adafruit IO 패키지를 사용하려면 관련 설정 지침을 사용하여 Enviro에서 소음 측정을 구성하고 활성화해야 합니다. 버전 6.5에서는 피드 업데이트 간의 최대, 최소 및 평균 소음 수준을 표시하도록 소음 피드와 대시보드를 변경한 반면, 이전 버전에서는 피드 업데이트 간의 최대 소음 수준만 표시했습니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE.md 파일을 참조하세요.
RJ Ellis의 www.worldstormcentral.co/law_of_storms/secret_law_of_storms.html을 기반으로 한 일기 예보