Рубрика развивается при поддержке
Разработка
Mikhail Solomonov
10 154

Борьба за открытое окно: технологии победили

Тема «закройте окно, мне холодно!» и «откройте окно, мне душно!» знакома каждому, но особенно она доставляет неудобств, когда начинается не в офисе, а дома.

В закладки

«Наука обычно побеждает!» — подумал я. И решил доказать домашним (а я как раз тяжело дышу при закрытых окнах), что закрытые окна приводят к повышению концентрации СО2 в квартире, что не сказывается положительно ни на ком. Тем более на детях.

Описание влияния на здоровье по шкале ниже несколько преувеличены (а иначе как бы продавались системы вентиляции и «умные» окна, но суть отражают верно: лишний углекислый газ тело человека не радует, особенно в крупных мегаполисах).

Постановка задачи была такая: прибор должен быть маленький, питаться от любой USB-розетки, собирать данные о CO2 и передавать их куда-то, чтобы потом получать графики и анализировать. Для изменения настроек устройства не должны быть нужны провода.

Было принято решение строить сам прибор для снятия данных на ESP8266, а данные отправлять в конечном итоге в Grafana на Raspberry PI 3, которая и так есть и всегда включена.

Датчиков было заказано по два комплекта.

  • CO2: CCS881 и MH-Z19.
  • Температура и влажность: DHT-11(22) и BME280 (в последнем еще и давление).

Но сборка производилась на тех компонентах, которые приехали раньше.

Финальный комплект компонентов конкретной сборки

  1. Макетная плата 3 х 7 см — 48 рублей.
  2. ESP8266 Wi-Fi модуль ESP-12S — 365 рублей.
  3. DC-DC преобразователь AMS1117 (с 4.8–12 V в 3.3 V) — 11 рублей.
  4. DHT-11 — 55 рублей.
  5. CCS881 — 458 рублей.
  6. MICRO MINI5P USB to Dip Female B-type — 7 рублей.
  7. Тактовая кнопка (две штуки) — 4 рубля.
  8. Резисторы по одной штуке (1 кОм, 2.2 кОм, 10 кОм) — 3 рубля.
  9. Гребенка с четырьмя штырьками — 1 рубль.
  10. Провода — 3 рубля.

Дополнительно для проведения работ

  • USB-TTL модуль CP2102 (для подключения к компьютеру).
  • Кабель mini-USB.
  • Сервер на Linux (у меня это Raspberry PI на Raspbian).

Софт

  • Arduino IDE.
  • Fritzing.
  • Raspbian.
  • Mosquitto.
  • Telegraf.
  • InfluxDB.
  • Grafana.

0. Аппаратная часть

После определения модулей, которые будут использованы, сначала была отрисована принципиальная схема во Fritzing, а за ней превращена в удобочитаемую макетная. На реальной плате не предполагается наличие модуля USB-TTL, а только пины для его подключения.

Далее по схеме на макетной плате была собрана плата.

Готовую плату пока откладываем. И приступаем к настройке принимающей стороны.

1. Устанавливаем и запускаем mosquitto MQTT брокер (сервер и клиент)

Погнали.

sudo apt -y install mosquitto mosquitto-clients

Для настройки авторизации в файл /etc/mosquitto/conf.d/auth.conf записываем следующие параметры.

allow_anonymous false password_file /etc/mosquitto/passwd

Создаем пользователя arduino для отправки данных с платы в брокер и назначаем ему пароль. Именно этот пароль нужно использовать в дальнейшем в скетче (вписать до заливки).

sudo mosquitto_passwd -c /etc/mosquitto/passwd arduino //пароль для примера 99999

Создаем пользователя telegraf для сервиса по трансляции данных в базу. Этот пароль тоже записываем — он будет нужен для настройки telegraf. В этом случае ключ -c применять категорически нельзя, так как это приведет к перезаписыванию файла ключей.

sudo mosquitto_passwd /etc/mosquitto/passwd telegraf //пароль для примера inserthardtoreadpasswordhere

Перезапускаем сервис, чтобы применились настройки.

sudo service mosquitto restart

Теперь уже можно проверять работу брокера. Открываем на «прослушку» все топики брокера под определенным названием (в нашем случае sensors/…)

mosquitto_sub -d -t sensors/# -u "telegraf" -P "inserthardtoreadpasswordhere"

Чтобы закинуть что-то в эфир у нас есть два варианта:

  1. Перейти в конец данной статьи, скорректировать в соответствии с уже известными логином, паролем и IP-адресом mosquitto скетч и залить его на ESP скетч и убедиться, что от него летят данные.
  2. Открыть второе окно терминала и оттуда что-то отправить в топик sensors. Например, “Hello world!”:
mosquitto_pub -h localhost -t "sensors" -m "hello world" -u "arduino" -P "99999"

Если все сделано правильно, то в первом окне терминала мы увидим свое сообщение. Можно продолжать.

2. Устанавливаем и запускаем influxDB

Здесь без каких-то особых нюансов, все по инструкции, коих много. Все заработало с первого раза.

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add - echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list sudo apt update sudo apt -y install influxdb sudo service influxdb start

Сразу создаем двух пользователей: одного для сервиса telegraf, а второго уже для Grafana.

influx -execute "CREATE USER "telegraf" WITH PASSWORD 'telegraf' WITH ALL PRIVILEGES;" influx -execute "CREATE USER "grafana" WITH PASSWORD 'grafana' WITH ALL PRIVILEGES;"

3. Устанавливаем и запускаем telegraf

sudo apt -y install telegraf

Установка завершена :) Но есть нюансы. Вся настройка заключается в корректировке файла /etc/telegraf/telegraf.conf.

# Telegraf Configuration # # Telegraf is entirely plugin driven. All metrics are gathered from the # declared inputs, and sent to the declared outputs. # # Plugins must be declared in here to be active. # To deactivate a plugin, comment out the name and any variables. # # Use 'telegraf -config telegraf.conf -test' to see what metrics a config # file would generate. # # Environment variables can be used anywhere in this config file, simply surround # them with ${}. For strings the variable must be within quotes (ie, "${STR_VAR}"), # for numbers and booleans they should be plain (ie, ${INT_VAR}, ${BOOL_VAR}) # Global tags can be specified here in key="value" format. [global_tags] # dc = "us-east-1" # will tag all metrics with dc=us-east-1 # rack = "1a" ## Environment variables can be used as tags, and throughout the config file # user = "$USER" # Configuration for telegraf agent [agent] ## Default data collection interval for all inputs interval = "10s" ## Rounds collection interval to 'interval' ## ie, if interval="10s" then always collect on :00, :10, :20, etc. round_interval = true ## Telegraf will send metrics to outputs in batches of at most ## metric_batch_size metrics. ## This controls the size of writes that Telegraf sends to output plugins. metric_batch_size = 1000 ## Maximum number of unwritten metrics per output. metric_buffer_limit = 10000 ## Collection jitter is used to jitter the collection by a random amount. ## Each plugin will sleep for a random time within jitter before collecting. ## This can be used to avoid many plugins querying things like sysfs at the ## same time, which can have a measurable effect on the system. collection_jitter = "0s" ## Default flushing interval for all outputs. Maximum flush_interval will be ## flush_interval + flush_jitter flush_interval = "10s" ## Jitter the flush interval by a random amount. This is primarily to avoid ## large write spikes for users running a large number of telegraf instances. ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s flush_jitter = "0s" ## By default or when set to "0s", precision will be set to the same ## timestamp order as the collection interval, with the maximum being 1s. ## ie, when interval = "10s", precision will be "1s" ## when interval = "250ms", precision will be "1ms" ## Precision will NOT be used for service inputs. It is up to each individual ## service input to set the timestamp at the appropriate precision. ## Valid time units are "ns", "us" (or "µs"), "ms", "s". precision = "" ## Log at debug level. # debug = false ## Log only error level messages. # quiet = false ## Log file name, the empty string means to log to stderr. logfile = "telegraflog" ## The logfile will be rotated after the time interval specified. When set ## to 0 no time based rotation is performed. Logs are rotated only when ## written to, if there is no log activity rotation may be delayed. logfile_rotation_interval = "2d" ## The logfile will be rotated when it becomes larger than the specified ## size. When set to 0 no size based rotation is performed. # logfile_rotation_max_size = "0MB" ## Maximum number of rotated archives to keep, any older logs are deleted. ## If set to -1, no archives are removed. # logfile_rotation_max_archives = 5 ## Override default hostname, if empty use os.Hostname() hostname = "" ## If set to true, do no set the "host" tag in the telegraf agent. omit_hostname = false ############################################################################### # OUTPUT PLUGINS # ############################################################################### # Configuration for sending metrics to InfluxDB [[outputs.influxdb]] ## The full HTTP or UDP URL for your InfluxDB instance. ## ## Multiple URLs can be specified for a single cluster, only ONE of the ## urls will be written to each interval. # urls = ["unix:///var/run/influxdb.sock"] # urls = ["udp://127.0.0.1:8089"] urls = ["http://localhost:8086"] ## The target database for metrics; will be created as needed. ## For UDP url endpoint database needs to be configured on server side. database = "sensors" ## The value of this tag will be used to determine the database. If this ## tag is not set the 'database' option is used as the default. # database_tag = "" ## If true, the database tag will not be added to the metric. # exclude_database_tag = false ## If true, no CREATE DATABASE queries will be sent. Set to true when using ## Telegraf with a user without permissions to create databases or when the ## database already exists. # skip_database_creation = false ## Name of existing retention policy to write to. Empty string writes to ## the default retention policy. Only takes effect when using HTTP. retention_policy = "" ## Write consistency (clusters only), can be: "any", "one", "quorum", "all". ## Only takes effect when using HTTP. write_consistency = "any" ## Timeout for HTTP messages. timeout = "5s" ## HTTP Basic Auth username = "telegraf" password = "telegraf"

До следующего раздела все оставляем по умолчанию. В связке логин и пароль выше — доступ к InfluxDB, а ниже — к mosquitto.

# # Read metrics from MQTT topic(s) [[inputs.mqtt_consumer]] # ## MQTT broker URLs to be used. The format should be scheme://host:port, # ## schema can be tcp, ssl, or ws. servers = ["localhost:1883"] # # ## Topics that will be subscribed to. topics = ["sensors/node2/#"] # # ## The message topic will be stored in a tag specified by this value. If set # ## to the empty string no topic tag will be created. # # topic_tag = "topic" # # ## QoS policy for messages # ## 0 = at most once # ## 1 = at least once # ## 2 = exactly once # ## # ## When using a QoS of 1 or 2, you should enable persistent_session to allow # ## resuming unacknowledged messages. qos = 0 # # ## Connection timeout for initial connection in seconds # # connection_timeout = "30s" # # ## Maximum messages to read from the broker that have not been written by an # ## output. For best throughput set based on the number of metrics within # ## each message and the size of the output's metric_batch_size. # ## # ## For example, if each message from the queue contains 10 metrics and the # ## output metric_batch_size is 1000, setting this to 100 will ensure that a # ## full batch is collected and the write is triggered immediately without # ## waiting until the next flush_interval. max_undelivered_messages = 1000 # # ## Persistent session disables clearing of the client session on connection. # ## In order for this option to work you must also set client_id to identity # ## the client. To receive messages that arrived while the client is offline, # ## also set the qos option to 1 or 2 and don't forget to also set the QoS when # ## publishing. persistent_session = true # # ## If unset, a random client ID will be generated. client_id = "telegraf" # # ## Username and password to connect MQTT server. username = "telegraf" password = "telegraf" # # ## Optional TLS Config # # tls_ca = "/etc/telegraf/ca.pem" # # tls_cert = "/etc/telegraf/cert.pem" # # tls_key = "/etc/telegraf/key.pem" # ## Use TLS but skip chain & host verification # # insecure_skip_verify = false # # ## Data format to consume. # ## Each data format has its own unique set of configuration options, read # ## more about them here: # ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md data_format = "value" data_type = "float"

Перезапускаем сервис, чтобы применились настройки.

sudo service telegraf reload

После этого можно проверить работоспособность связки InfluxDB и telegraf:

influx SHOW DATABASES

В результате в списке баз мы должны увидеть базу sensors.

4. Установка и запуск Grafana

curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | sudo apt-key add - echo "deb https://dl.bintray.com/fg2it/deb jessie main" | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt update sudo apt -y install grafana sudo systemctl enable grafana-server sudo service grafana-server start

Сразу после запуска Grafana становится доступна по адресу http://localhost:3000. Логин и пароль по умолчанию: admin\admin. Лучше его сразу поменять, для этого жмем на шестеренку слева и переходим в раздел Server Admin. Далее все интуитивно понятно.

5. Запуск ESP8266

Открываем в IDE скетч wifi_weather_station_mqtt.ino.

В соответствии со своими настройками правим в начале:

//================================================================== // ### ПАРАМЕТРЫ НАСТРОЙКИ ### #define DHTPIN 0 // пин датчика температуры #define DHTTYPE DHT11 // тип датчика const int PIN_LED = 2; // пин светодиода для тестов (встроенный в esp12s светодиод) const int TRIGGER_PIN = 0; // пин кнопки для перевода в режим прошивки const char* hostaddr = "weather01"; //адрес платы в сети const char* pwd = "99999"; // после смены пароля устройство нужно перезагрузить по питанию const char* mqttname = "arduino"; const char* mqttpwd = "99999"; const long sensors_int = 10000; // интервал отправки данных с датчиков брокеру MQTT const long blink_int = 1000; // интервал изменения статуса светодиода const char* mqttServer = "192.168.0.3"; //адрес MQTT брокера const int mqtt_port = 1883; // порт MQTT брокера

Заливаем поправленный скетч в плату.

Для заливки нажимаем на кнопку ближе к датчику DHT, держим ее, а затем нажимаем на крайнюю и обе отпускаем.

После запуска платы ищем Wi-Fi сеть ESP***** и подключаемся к ней. Если окно настройки не всплывает автоматически, то открываем http://192.168.4.2.

После выбора сети обязательно нажимаем /wifisave.

После перезагрузки устройства проверяем на сервере данные с ESP:

pi@raspberrypi:~ $ mosquitto_sub -d -t sensors/# -u "telegraf" -P "telegraf" Client mosqsub|25451-raspberry sending CONNECT Client mosqsub|25451-raspberry received CONNACK (0) Client mosqsub|25451-raspberry sending SUBSCRIBE (Mid: 1, Topic: sensors/#, QoS: 0) Client mosqsub|25451-raspberry received SUBACK Subscribed (mid: 1): 0 Client mosqsub|25451-raspberry received PUBLISH (d0, q0, r0, m0, 'sensors/node2/hum', ... (20 bytes)) sensor humidity = 33 Client mosqsub|25451-raspberry received PUBLISH (d0, q0, r0, m0, 'sensors/node2/temp', ... (23 bytes)) sensor temperature = 26 Client mosqsub|25451-raspberry received PUBLISH (d0, q0, r0, m0, 'sensors/node2/co2', ... (10 bytes)) CO2 = 1068 Client mosqsub|25451-raspberry received PUBLISH (d0, q0, r0, m0, 'sensors/node2/tvoc', ... (10 bytes)) TVOC = 101

6. Настройка Grafana

В графическом интерфейсе настраиваем Data Source.

Далее добавляем интересующие нас дашборды по такому примеру (или можно на один график, но мне показалось неудобным). График рваный, так как проводились разные опыты над ESP.

В результате после настройки я получил такое решение, доступное мне откуда угодно:

Скетч

Скетч очень тщательно закомментирован, чтобы по-максимуму не вызывать вопросов.

Датчики типа DHT имеют свойство с платами ESP периодически выкидывать максимальные для себя значения (2147483647), поэтому данные по температуре и влажности более 100 просто не передаем.

Некоторым помогает перепрошивка ESP в другую версию прошивки — мне не помогло. Опытным путем установлено, что опрос раз в десять секунд приводит к минимальному числу таких всплесков.

Инструкция по использованию

Крайняя кнопка на плате — перезагрузка.

Кнопка между датчиком и другой кнопкой имеет две функции:

  • Удерживаем и нажимаем перезагрузку — перевод в режим программирования платы по кабелю.
  • Один раз нажать во время нормальной работы платы — перевод в режим конфигурирования Wi-Fi через портал.

Если зайти на IP-адрес платы во время нормальной работы, то ответ должен быть такой: Not found: /

Веб-команды (на примере адреса платы 192.168.0.100):

  • http://192.168.0.100/restart — перезагрузка платы.
  • http://192.168.0.100/reburn — перевод платы в режим прошивки по воздуху. Для прошивки в IDE нужно выбрать порт:

После нажатия upload ввести пароль, который ранее задан в зоне конфигурирования в скетче.

  • http://192.168.0.100/wifi — перевод платы в режим настройки Wi-Fi. Чтобы действие выполнилось наверняка, забиваем настройки платы сетью SSID: 0000, passw: 0000.

Послесловие

По результатам проекта окна в квартире теперь стабильно открыты, так как даже в детской при двух маленьких детях при закрытых окнах за три–четыре часа уровень СО2 уползает с 450–490 до 750 ppm. Тема наконец закрыта :)

P.S.

Дальнейшим развитием проекта планируется с управление приточной вентиляцией с HEPA-фильтрами, дабы автоматизировать процесс. Управление пластиковыми окнами рассматривалось, но так как окна и откидные и распашные и их нужно иногда мыть — признано для себя решением неверным.

Единственная реальная у нас проблема: уровень концентрации пыльцы в воздухе (к сожалению, в доме есть аллергики). В остальном — не существенно, хотя живём в пяти домах от Ленинского проспекта. Просто этаж низкий, окна во двор, в деревья между домами :)

Второй частью планируется стать вынос всех параметров, зависящих от внешних факторов (адрес MQTT-брокера, порт, логины, пароли, интервалы) в ту же веб-морду, для чего планируется в том числе переписать библиотеку.

Третьей частью планируется освоить 3D-моделирование и напечатать корпус. Но тут пока возможны нюансы (ко мне доехали остальные датчики: MH-Z19 и BME280), и для определения точности, возможно, я сделаю еще одну близкую модель, но с ними. Тогда корпус нужно будет сделать универсальным.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Mikhail Solomonov", "author_type": "self", "tags": ["define"], "comments": 63, "likes": 75, "favorites": 70, "is_advertisement": false, "subsite_label": "dev", "id": 83353, "is_wide": true, "is_ugc": true, "date": "Mon, 16 Sep 2019 23:25:48 +0300", "is_special": false }
Облачная платформа
Основа для цифровизации бизнеса
0
{ "id": 83353, "author_id": 336968, "diff_limit": 1000, "urls": {"diff":"\/comments\/83353\/get","add":"\/comments\/83353\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/83353"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 235819, "last_count_and_date": null }
63 комментария
Популярные
По порядку
Написать комментарий...
37

Ничеси, филиал старого доброго хабра на виси!

Люто плюсую, продолжайте!

Ответить
1

Ну - всё по фэншую! Arduino, макетка, Rpi, linux command line, скрипты, конфиги, grafana, вот это всё)) 

Ответить
10

Для хабра? Да перестаньте. Хабр сдох. Там сейчас правят бал копипастеры типа Ализара и Ко.

Ну, и про окна, я часто открываю окна из-за

1. Абсолютной тишины снаружи. Ведь я живу в Подмосковье, в пригороде ;)

2. Дома всё равно автоматически котёл работает и краники в батареях открываются

3. - не знаю, чем плох сквозняк, это ж вентиляция -

Думаю, что просто отлично ночью подышать прекрасным подмосковным кислородом, поспать в тишине и тепле, чтобы с утра проснуться выспавшимся. А ещё, просто супер спать столько, сколько хочется, чего всем и желаю.

Стрессы - это плохо. Старайтесь прийти к тому, чтобы их исключить из своей жизни.

Ответить
7

Статья скорее для хабра. С точки зрения технической составляющей - здорово, подробно расписано.

Но с точки зрения вопроса «открывать или не открывать окна» - раскрыт только вопрос об уровне CO2.

Понятное дело, лишний углекислый газ это плохо, но я например часто закрываю окна из-за:

1. Сильного шума снаружи.
2. Холода.
3. Сквозняк.

Думаю можно еще несколько причин найти, если вспомнить. Поэтому зачастую лучше чуть-чуть подышать лишним СО2, но спать в тишине и тепле, чтобы с утра проснуться выспавшимся и непростуженым, что довольно таки полезно :)

Ответить
4

Проблему концентрации CO2 без проблем с шумом и пылью решает такой прибор как бризер. Например, Tion S3. Я пользую, мне нравится.

Ответить
1

Есть варианты приточных вентиляций, которые стоят на 15к дешевле Тиона. Ballu airmaster2, например. В принципе, парочку таких в квартиру, и можно попробовать дышать нормально. Но будем честными, я с датчиками в соей квартире не стоял. 

Ответить
0

Есть, конечно, разные варианты! Я просто обращал внимание на такой тип приборов, как бризер. Именно они наиболее эффективны для решения проблемы с co2

Ответить
1

Это все хорошие приборы, но кто мне позволит бурить шахту в стене дома и нарушать фасад здания? Кто-то знает какие есть варианты, без вмешательства в фасад?

Ответить
0

Вмешательство в окно, не?

Ответить
0

Обычно никто особо не против дырки в стене! Особенно, если дом кирпичный. Дыра закрывается решеткой в цвет фасада и довольно незаметна.

У многих современных домов уже есть штатные вентиляционные отверстия.

Ответить
0

не в моем случае. Дом отделан керамогранитной плиткой. Весь район в одной-двух цветовых гаммах. У нас запрещено даже стекление балкона цветом отличного от утвержденного. А так же установка кондиционера на фасад. Как в Европе)

Ответить
0

Аналогично! Только у меня материал - отделочный кирпич. Но есть штатные места под блоки кондиционеров и штатная вентиляция.

Ответить
0

Это где такое?

Ответить
0

Питер, Московская Славянка. Кажется, нынче это тенденция всех неплохих районов-застроек.

Ответить
0

 Есть варианты приточных вентиляций, которые стоят на 15к дешевле Тиона. Ballu airmaster2, например.

Открыл сайты, Tion S3 - 36к, Tion Lite - 19к,  Ballu2 - 30к (а реально - 39к, если с подогревом и фильтрами)

Ткните пальцем, где "от 15 к дешевле", хочу.

Ответить
2

Отличное замечание, спасибо. Дополню статью, пока можно. Дальнейшим развитием проекта планируется управление приточной вентиляцией, дабы автоматизировать процесс. Единственная реальная проблема: уровень концентрации пыльцы в воздухе (к сожалению в доме есть аллергики). В остальном - не существенно, хотя живём в 5 домах от Ленинского проспекта. Просто этаж низкий, окна во двор, в деревья между домами :)

Ответить
0

Бризер нормально фильтрует приточный воздух от пыльцы, например. Не проблема.

Думаю, сложности составят всякие газы от машин - но мы их и не замеряем! А co2 реально снизить до 350-500

Ответить
3

Почему просто не купить датчик и не пропустить весь этот ебаторий?

Ответить
7

Это такое Лего для тех, кто постарше. Фан. Не страдают, а наслаждаются!))

Тем-кому решить проблему за деньги - могут готовое решение купить. У меня - MagicAir от тиона, который бризерами и управляет (по концентрации углекислоты как раз).

Ответить
0

А ни че что все эти бризеры и тионы полное гов....? Потому что нельзя упихать в такой корпус полноценную вент машину. У нее заявлено 100 куб м. Час максимум. А на деле 'зимой эт0 10 в час оказывается. Ибо нагреватель всего 0.5 квт

Ответить
2

Вот уж точно не мой метод) Ну и просто датчик потом наращивать функциями неясно как

Ответить
0

Нормальный у вас метод. И технологии вполне себе подходящие. 

Следующим проектом должен идти управляемый по API прибор приточной вентиляции! У Tion нет публичного официального API, но есть неофициальный. У Ballu есть приложение, но про API ничего не нашел. 

Ответить
–7

Жесть!

Автор, а вы в курсе, что есть такие углекислые ванны, например? Где человек специально забирается в "СО2", и это очень благотворно на его здоровье отзывается.

Или что есть, например, метод Бутейко, когда человек сознательно насыщает себя углекислым газом через задержку дыхания? И проходят все болезни.

—- 

Закрытые форточки плохо не из-за СО2, а совсем из-за другого. Повышенный СО2 - наоборот, это очень хорошо.

Ответить
6

можно ссылки не исследования, подтверждающие подобную информацию?)

Ответить
–11

)))

можете мне не верить, не проблема

Ответить
7

поддержу предыдущего оратора. Можно какой-то пруф?

Ответить
1

пруф?

Ответить
0

Подтверждение своим словам

Ответить
3

Есть и иглотерапия и пиявки и кропопускание

Ответить
0

Не понимаю ваш комментарий, поясните, пожалуйста?

Ответить
1

Все хорошо в меру.

Ну и углекислые ванны почитайте как устроены

Ответить
1

я и так и не понял ваш тот комментарий

уж этот - тем более, не понял

ну, ладно, пусть.

Ответить
0

а аппликатор Кузнецова?

Ответить
1

Это же не значит, что нужно теперь дышать повышенной концентрацией СО2 постоянно правда? Процедуры на то и процедуры, что лимитированы по времени. Да и доказательств у Вас не нашлось. Про Бутейко: а есть дыхательная гимнастика по Стрельниковой, где наоборот вдыхают и говорят тоже все лечит...

Ответить
–4

Дмитрий, если вы заметили, то я ни с кем не спорю.

И вообще, я удивлен таким низким интеллектуальным уровнем читателей и "писателей" вс.ру.

Ответить
2

Миша, к каждой новой статьёй открываю тебя с разных сторон :) 

Ответить
0

Сочувствую близким автора. Им возможно просто не комфортно постоянно находиться на сквозняке. А он их достал своими открытыми окнами, да еще какой изощренный способ выбрал, что бы все было только, как он хочет и только, как ему комфортно.

Ответить
1

Спасибо от близких ) 

Речи о сквозняке не идёт ни в коем случае. 

Ответить
0

Ну все, VC окончательно поглотил хабр. RIP.

Ответить
2

Посему сразу Рип. Глядя на современный хабр, welcome back.

Ответить
1

Вы красавчик, пишите, смоделим корпус))

Ответить
1

Я бы не доверял CCS881, он совсем странные вещи измеряет, а не СО2.

Ответить
0

в плане замена на mh-z19, точнее хочу поставить рядом и сравнить

Ответить
1

По моим наблюдениям напряжно находиться в помещении, где выше 1500 ppm и теплее 26. При температуре 20-22 можно и больше ppm не заметить, и наоборот, если в помещении 27-28, уже при 800 ppm будет хреново. 

Ответить
0

RIP Habr

Ответить
0

Все это можно было сделать в 5 раз проще на Pysense + Lopy4

Ответить
1

Обязательно изучу, спасибо

Ответить
0

Mikhail, спасибо. Понравилось. Плюсанулось).

Маленький вопрос: откуда взяты данные "Влияние концентрации углекислого газа на состояние человека"(первая иллюстрация в статье)? Насколько это научно?

Ответить
1

Картинку я нарисовал. Данные из трёх статей. Одна из https://cyberleninka.ru/article/v/vliyanie-kontsentratsii-uglekislogo-gaza-na-organizm-cheloveka

Ответить
0

Спасибо.

Ответить
0

Есть идеи как контролировать качество измерений? Как производить калибровку готового прибора?
Есть возможность провести сравнительный тест с, например, MT8057S?

Ответить
0

Планирую рядом поставить другую сборку с другими датчиками и далее посмотреть разницу и решить что делать следующим шагом.

Ответить
1

На ixbt в теме про измерения co2 уже накоплен у людей большой опыт по датчикам, посмотрите. Для тех кому нужен готовый прибор, с экраном, аккумулятором, качественными датчиками, возможностью подключения к умному дому - посмотрите xiaomi air glass. Он ещё и pm2.5 и tvoc в воздухе измеряет. Ну и вместо окна из на проветриватели тоже стоит обратить внимание, от xiaomi того же, на ixbt тоже тема есть по это.

Ответить
0

Какая прекрасная статья! Автор хорош, Хабр RIP :)

Ответить
0

Т.е. если открыть окно, то воздух станет свежее? Ну нихерасе новости!

Ответить
0

Купил бы готовое законченное решение с GUI)

Ответить
0

Очень круто, спасибо. Попробуем воспроизвести.

Ответить
0

В москве. Открывать окно в надежде, что в квартире станет свежее)) пфффф))

Ответить
0

Снимите офис с центральной вентиляцией. Нет кондиционеров, не надо открывать окна.

В квартире - поставьте бризер - не надо открывать окна.

Ответить
0

Кошмар моего детства, батя себе напердит в зале и давай проветривать весь дом, окна заклеены на зиму, поэтому просто открывалась дверь, а за окном минус 25, очень неприятно.

Если по делу, свежий воздух очень важен, к примеру у нас в офисе было невозможно работать, хоть и прохладно, но дышать нечем, вот не хватало такого датчика. 

Главное что бы не возникало сквозняков, был случай, буквально два месяца назад знакомая на ночь открыла окна, продуло лицевой нерв, теперь половина лица не работает, нет мимики, не круто 

Ответить
0

Михаил у нас есть чат в телеграмме по iot , ваша железка под него подходит. Хотите я вас туда добавлю? 

Ответить
0

Да уж заморочились )) Все никак на бризер не решусь, от xiaomi неплохой вариант появился с датчиком CO2, хотя мне и простой бы пошел - главное шум от улицы убрать, и чтобы тихий в комнате был (тут тионы и не подходят)

Ответить
0

Смотрю в этом магазине https://optsantex.ru/ можно заказать всё для отопительной системы по выгодной цене. Мы как раз изучаем, как отопление сделать максимально выгодным для себя по стоимости, и при этом экономить энергоресурсы.  Мне не обязательно топить так, чтобы открывать окна пришлось, главное не замёрзнуть и не тратить все деньги на коммуналку, чтобы согреться.

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }