Авторизация
Регистрация

Напомнить пароль

Контроль температур горячей воды в ТСЖ с оповещениями в Telegram на базе ESP8266

Последнее время в нашем доме часто стала возникать проблема с горячей водой. В принципе, это началось, когда мы отсудили котельную в общедомовую собственность и начали сами ей распоряжаться, в том числе наняли другую обслуживающую организацию. Потом обслуживающую организацию снова поменяли, стало дешевле, но качество не выросло. И больше всего напрягало, что с момента остановки котельной до момента, когда горячая вода снова нагревалась до нужной температуры, проходило очень много времени — порой до четырех часов. Складывалось ощущение, что диспетчеризация не работала, либо на ее сигналы просто забивал диспетчер, а высылали техника к нам только после телефонного звонка. Приходилось щупать змеевик в ванной и гадать — 5 минут назад было теплее и он остывает или все-таки котельную уже запустили и он нагревается? Бегать в котельную вечером, как вы понимаете, тоже очень лениво.

Наткнулся тут на обзоры всяких датчиков от Sanja, этот добрый человек прислал ссылки на запчасти, что мне надо закупить (плата с модулем WiFi NodeMCU ESP8266 и датчики DS18b20) и даже ролик на ютубе, показывающий, что надо делать и как. В принципе, этих ссылок достаточно для создания аналогичного устройства, но были и сложности, о которых я и хочу рассказать, дабы еще более упросить повторение процесса для таких же новичков в этом деле, как я)

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

Итак, нам понадобится:
  • Плата с модулем WiFi NodeMCU ESP8266 ~220 руб
  • Датчики Dallas DS18b20 по ~80 руб за штуку
  • Резистор 4к7 маломощный ~5 руб
  • Разъемы «мама» для подключения к ножкам Arduino и подобным ~120руб за 40 штук
  • WiFi роутер (если в предполагаемом для установки помещении его еще нет) ~400 руб б/у
  • Блок питания USB (1А, говорят, достаточно, но я брал на 2А) и кабель microUSB для программирования (при подключении к компу) и питания ~200 руб

Сначала параллельно соединяем все датчики, которые нам нужны, в одно целое
по такой схеме:

Получилось примерно так:

Потом, конечно, это все тщательно замотано изолентой/термоусадкой.


Подключаем к пинам по схеме, плату подсоединяем USB-кабелем к компьютеру, запускаем свежеустановленный Arduino 1.8.2 и настраиваем его, как описано тут. Порт меняем на COM4 (если плата уже подключена).

Распаковываем архив в папку, где у вашей Arduino лежат скетчи. В комплекте уже есть библиотеки, которые было так тяжело найти подходящие, пол дня убил на это.
Загружаем сам скетч sketch_esp8266dallas в среду разработки.
Меняем там на строках 14 и 15 название WiFi сети и пароль к ней, а также на 45 строке адрес сервера, на котором будут сохраняться передаваемые параметры. Серверная часть (PHP) описана ниже.
К слову, мы могли бы уже здесь отправлять уведомления в Telegram, если температуры ниже заданного уровня, немного изменив код отправки GET-запроса, но Telegram у нас в России под запретом, поэтому существуют некоторые проблемы с использованием его API. Альтернативный вариант — использовать API от sms.ru, но это уже совсем другая история. Главное, что сюда можно вписать абсолютно любое обращение к какому угодно сервису, будь то «народный мониторинг» или любой другой.

Пробуем скомпилировать скетч через меню «Скетч — Проверить/Компилировать», если все хорошо и ошибок нет, то можно загружать в плату «Скетч — Загрузка».

Открываем меню «Инструменты — Монитор порта» и видим примерно такую картину:


А если у вас картина другая и плата WiFi-соединение поднимает, но запросы нифига не идут, то скорее всего роутер находится слишком далеко и сигнал слабый. У меня роутер стоял в соседней комнате (!) и я пару часов убил на выяснение, почему же не работает сервис Blink или любой другой. Когда ты этим занимаешься первый раз, сложно понять, что плате просто не хватает мощности сигнала, ведь к сети то она подцепиться смогла, причем с первого раза. И именно по этой причине пришлось купить дополнительный роутер, потому что в подвале, где я хотел расположить датчик, ситуация с WiFi была бы еще хуже. Я даже посмотрел кучку обзоров на разные вариации этой платы и анализ мощности приема WiFi-сигнала, а также возможность использования дополнительных антенн, но найденные примеры не демонстрировали существенного эффекта.
Тут мне пришла в голову мысль, что вместо WiFi-платы можно было бы использовать сразу модуль с RJ-45 на борту, но было уже поздно :)

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

У меня, как у любого порядочного веб-программиста, имеется с пяток хостинговых площадок в распоряжении, поэтому вопроса о том, где разместить серверную часть, не возникло — уже работал в ТСЖ сайт на вордпрессе. Но есть и варианты бесплатного хостинга с PHP и MySQL, я ими не пользовался и ссылок ставить не буду, но найти их легко в Яндексе.

Далее нам нужно через PHPMyAdmin создать табличку в любой имеющейся или новой базе с названием temperatures и полями: datatime (тип DATETIME), t1 (DECIMAL), t2 (DECIMAL), t3 (DECIMAL), t4 (DECIMAL).

Распаковываем архив серверной части через ftp у себя на сервере и правим в файлах index.php и json.php параметры соединения с базой данных и в index.php внешний адрес скрипта для получения данных. Также у меня весь скрипт лежит в папке /temp/ на сайте, а если вы собираетесь распаковать все в корень сайта, то надо в index.php заменить все вхождения "/temp/" на "/".

В коде нет ничего невероятного, если кому-то лень скачивать архив, то вот содержимое основных php-скриптов:

index.php
<?php
// Параметры соединения с базой данных
$db_server = 'localhost';
$db_name = '*****';
$db_user = '*****';
$db_passwd = '******';

// Подключение к базе данных
$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
if (!$db_connection || !@mysql_select_db($db_name, $db_connection))
{
	echo "Error during SQL connection";
}
mysql_select_db($db_name, $db_connection);

// Сохранение в базу переданных с контроллера данных
if(isset($_GET['t1']) && isset($_GET['t2']) && isset($_GET['t3']) && isset($_GET['t4'])) {
	$t1 = floatval($_GET['t1']);
	$t2 = floatval($_GET['t2']);
	$t3 = floatval($_GET['t3']);
	$t4 = floatval($_GET['t4']);
	if($t1>0 && $t2>0 && $t3>0&& $t4>0) {
		$result = mysql_query("
			INSERT INTO `temperatures` (datatime,t1,t2,t3,t4) 
			VALUES (now(), $t1, $t2, $t3, $t4)");
		echo mysql_error();	
		
		// Если температуры ниже минимума, отправим сообщение в Telegram
		if($t4<40 || $t2<35 || $t1<50 || $t3<50) {
			include 'tele.php';
			message_to_telegram("ГВС_П: $t4, ГВС_О: $t2, Котельная_П: $t1, Котельная_О: $t3");
		}
	}
	
	die();
}
?>

<html>
<head>
	<title>Температурные данные дома №*** по ул.*********</title>
	<link href="/temp/style.css" rel="stylesheet">
	<link href="/temp/jquery.datetimepicker.min.css" rel="stylesheet">
	<script type="text/javascript" src="/temp/jquery-3.3.1.min.js"></script>
	<script type="text/javascript" src="/temp/moment.js"></script>
	<script type="text/javascript" src="/temp/jquery.datetimepicker.full.min.js"></script>
	<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></script>
	<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet">
</head>
<body> 
	<div class='current row'>
		<div class='col time'></div>
		<div class='t1 col'>ГВС, подача:
 <b></b></div>
		<div class='t2 col'>ГВС, обратка:
 <b></b></div>
		<div class='t3 col'>Котельная, подача:
 <b></b></div>
		<div class='t4 col'>Котельная, обратка:
 <b></b></div>
	</div> 
	<div class="row selectperiod">
		<div class="col"><input type="text" id="datastart" value="" class="form-control"/></div>
		<div class="col"><input type="text" id="dataend" value="" class="form-control"/></div>
		<div class="col">Точность: <select id="intervalMinutes">
			<option value="1">1 мин</option>
			<option value="5">5 мин</option>
			<option value="15">15 мин</option>
			<option value="30" selected>30 мин</option>
			<option value="6">1 час</option>
			</select>
		</div>
	</div>  
	<div id="chartContainer" style="position: relative; height:40vh; width:90vw;margin: 0 auto;">
		<canvas id="myChart"></canvas>
	</div>
	<script>
	// Создание и отрисовка графика
	function getChart(dataFromJSON) {
		var dates = [], t1arr = [], t2arr = [], t3arr = [], t4arr = [];
		dataFromJSON.forEach(function(item, i, arr) {
			dates.push(item.datatime);
			t1arr.push(item.t1);
			t2arr.push(item.t2);
			t3arr.push(item.t3);
			t4arr.push(item.t4);
		});
	
		var ctx = document.getElementById("myChart").getContext('2d');
		window.myChart = new Chart(ctx, {
			type: 'line',
			data: {
				labels: dates,
				datasets: [{
					label: 'ГВС, подача',
					data: t1arr,
					borderColor: '#ffc700',
					backgroundColor: 'rgba(255,255,255,0)'
				},{
					label: 'ГВС, обратка',
					data: t2arr,
					borderColor: '#3bd100',
					backgroundColor: 'rgba(255,255,255,0)'
				},{
					label: 'Контур котельной, подача',
					data: t3arr,
					borderColor: '#ff0000',
					backgroundColor: 'rgba(255,255,255,0)'
				},{
					label: 'Контур котельной, обратка',
					data: t4arr,
					borderColor: '#ee00ff',
					backgroundColor: 'rgba(255,255,255,0)'
				}]
			},
			options: {
				responsive: true,
				//maintainAspectRatio: false,
				legend: {
					display: false
				},
				scales: {
					xAxes: [{
						type: 'time',
						time: {
							unit: 'minute'
						}
					}]
				}
			}
		});
	}
	
	// Обновление графика данными
	function updateChart(dataFromJSON) {
		var dates = [], t1arr = [], t2arr = [], t3arr = [], t4arr = [];
		dataFromJSON.forEach(function(item, i, arr) {
			dates.push(item.datatime);
			t1arr.push(item.t1);
			t2arr.push(item.t2);
			t3arr.push(item.t3);
			t4arr.push(item.t4);
		});
		
		window.myChart.data.labels = dates;
		window.myChart.data.datasets[0].data = t1arr;
		window.myChart.data.datasets[1].data = t2arr;
		window.myChart.data.datasets[2].data = t3arr;
		window.myChart.data.datasets[3].data = t4arr;
		window.myChart.update();
	}
	
	// Получение данных для графика
	function doUpdateChart() {
		$.getJSON( "путь к файлу/json.php?datastart="+$("#datastart").val()+"&dataend="+$("#dataend").val()+"&intervalMinutes="+$("#intervalMinutes").val(),
			function( data ) {
				updateChart(data);
			});
	}
	
	// Получение текущих данных
	function doUpdateLastValues() {
		$.getJSON( "путь к файлу/json.php?last=true",
			function( data ) {
				$(".time").html((data[0].datatime+'').replace(' ', '
'));
				$(".t1 b").text(data[0].t1+"°C");
				$(".t2 b").text(data[0].t2+"°C");
				$(".t3 b").text(data[0].t3+"°C");
				$(".t4 b").text(data[0].t4+"°C");
			});
	}
		
	$(function() {
		// Выбор дат
		$.datetimepicker.setLocale('ru');
		$('#datastart,#dataend').datetimepicker({
		  format:'d.m.Y H:i',
		  lang:'ru',
		  minDate:'20.11.2018',
		  maxDate:Date.now(),
		  formatDate:'d.m.Y',
		  dayOfWeekStart: 1,
		  i18n:{
			  ru:{
			   months:[
				'Январь','Февраль','Март','Апрель',
				'Май','Июнь','Июль','Август',
				'Сентябрь','Октябрь','Ноябрь','Декабрь',
			   ],
			   dayOfWeek:[
				"Вс", "Пн", "Вт", "Ср", 
				"Чт", "Пт", "Сб",
			   ]
			  }
			 },
		});
				
		// Загрузка текущих данных
		doUpdateLastValues();
		// Заполнение графика
		$.getJSON( "путь к файлу/json.php?datastart="+$("#datastart").val()+"&dataend="+$("#dataend").val()+"&intervalMinutes="+$("#intervalMinutes").val(),
			function( data ) {
				getChart(data);
			});
					
		window.lastDataStart = $("#datastart").val();
		window.lastDataEnd = $("#dataend").val();
		window.intervalMinutes = $("#intervalMinutes").val();
		var winHeight = $(window).height();
		setInterval(function() {
			var changed = false;
			if($("#datastart").val() != window.lastDataStart) {
				changed = true;
				window.lastDataStart = $("#datastart").val();
			}
			if($("#dataend").val() != window.lastDataEnd) {
				changed = true;
				window.lastDataEnd = $("#dataend").val();
			}
			if($("#intervalMinutes").val() != window.intervalMinutes) {
				changed = true;
				window.intervalMinutes = $("#intervalMinutes").val();
			}
			if(changed)
				doUpdateChart();
		}, 1000);
		// Обновлять текущие данные раз в 30 сек
		setInterval(function() {
			doUpdateLastValues();
			doUpdateChart();
		}, 30000);
	});
	</script>

</body>
</html>

json.php
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

// Параметры соединения с базой данных
$db_server = 'localhost';
$db_name = '*****';
$db_user = '*****';
$db_passwd = '*****';

// Вычисление разницы дат
function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);   
    $interval = date_diff($datetime1, $datetime2);   
    return $interval->format($differenceFormat);   
}

// Подключение к базе данных
$db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
if (!$db_connection || !@mysql_select_db($db_name, $db_connection))
{
	echo "Error during SQL connection";
}
mysql_query("set names utf8");

// Если запрошены текущие данные
if(isset($_GET['last'])) {
	$result = mysql_query("
			SELECT DATE_FORMAT(DATE_ADD(datatime, INTERVAL 1 HOUR),'%d.%m.%Y %H:%i:%s') datatime,t1 t3,t2 t2,t3 t4,t4 t1 FROM temperatures 
			ORDER BY datatime DESC
			LIMIT 1");
	$data = [];
	while($row = mysql_fetch_assoc($result)) {	
			$data[] = $row;
	}
	// Выводим только их и заканчиваем на этом
	die(json_encode($data ));
}

$intervalMinutes = 30;
$datastart = date_add(date_create(date('Y-m-d H:i:s')), date_interval_create_from_date_string('-1 days'));
$dataend = date_add(date_create(date('Y-m-d H:i:s')), date_interval_create_from_date_string('1 hour'));
if(isset($_GET['intervalMinutes']))
	$intervalMinutes = intval($_GET['intervalMinutes']);

// Если слишком большой временной промежуток, то не будем наружать сервер большим объемом данных, округлим побольше
$difHours = date_diff($datastart, $dataend);
if($difHours->format('%days')>3) 
	$intervalMinutes = 60;
if($difHours->format('%days')>10) 
	$intervalMinutes = 180;
if(isset($_GET['datastart']) && $_GET['datastart']!="")
	$datastart = date_create($_GET['datastart']);
if(isset($_GET['dataend']) && $_GET['dataend']!="")
	$dataend = date_create($_GET['dataend']);
	


$result = mysql_query("
	SELECT roundeddatetime datatime, AVG(t1) t3,AVG(t2) t2,AVG(t3) t4,AVG(t4) t1 
	FROM
	(
		SELECT DATE_FORMAT(DATE_ADD(DATE_ADD(datatime, INTERVAL (".$intervalMinutes."-MINUTE(datatime)%".$intervalMinutes.") MINUTE), INTERVAL 1 HOUR),'%Y-%m-%d %H:%i:00') roundeddatetime,t1,t2,t3,t4 FROM temperatures 
		WHERE datatime>DATE_ADD('".$datastart->format('Y-m-d H:i:s')."', INTERVAL -1 HOUR) AND datatime<DATE_ADD('".$dataend->format('Y-m-d H:i:s')."', INTERVAL -1 HOUR)
	) t1
	GROUP BY roundeddatetime
	LIMIT 3440");
$data = [];
while($row = mysql_fetch_assoc($result)) {	
	$data[] = $row;
}

echo json_encode($data );
?>

tele.php
<?
// сюда нужно вписать токен вашего бота
define('TELEGRAM_TOKEN', '*****:********');

// сюда нужно вписать ваш внутренний айдишник чата
define('TELEGRAM_CHATID', '414951********599');

//echo message_to_telegram('Данные!');

function message_to_telegram($text) {
    $ch = curl_init();
	$url = "https://api.telegram.org/bot".TELEGRAM_TOKEN."/sendMessage?chat_id=".TELEGRAM_CHATID."&text=".$text; // где XXXXX - ваши значения

	$prxy       = '162.33.68.41:56505'; // адрес:порт прокси http://spys.one/proxys/US/
	$prxy_auth = 'auth_user:auth_pass';       // логин:пароль для аутентификации
	curl_setopt_array ($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true)); 
/********************* Код для подключения к прокси *********************/


    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);  // тип прокси 
    curl_setopt($ch, CURLOPT_PROXY,  $prxy);                 // ip, port прокси
    curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxy_auth);  // авторизация на прокси
    curl_setopt($ch, CURLOPT_HEADER, false);                // отключение передачи заголовков в запросе 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            // возврат результата в качестве строки
    curl_setopt($ch, CURLOPT_POST, 1);                      // использование простого HTTP POST
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        // отмена проверки сертификата удаленным сервером
	curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
	// Параметры ниже подходят, если у вас PHP свежей версии
	//curl_setopt($ch, CURLOPT_RESOLVE, array("api.telegram.org:443:146.185.158.29"));
    //curl_setopt($ch, CURLOPT_DNS_SERVERS, '8.8.8.8,8.8.4.4');  // тип прокси 
/***********************************************************************/
    $response = curl_exec($ch);
	if ($response === FALSE) {	 
		$response = "cURL Error: " . curl_error($ch);	 
	}
	$info = curl_getinfo($ch); 
	//$response .= '
Took ' . $info['total_time'] . ' seconds for url ' . $info['url']."
";
	curl_close($ch); 
	return $response;
}
?>


style.css
.current {
	margin-top: 10px;
	padding: 0 10px;
	font-size: 14px;
}
.current div {
	height: 100px;
}
.current b {
	display:inline-block;
	border: 3px solid #ffc700;
	padding: 5px;
	font-size: 30px;
}
.t2 b {
	border: 3px solid #3bd100;
}
.t3 b {
	border: 3px solid #ff0000;
}
.t4 b {
	border: 3px solid #ee00ff;
}
.current .time {
	padding-top: 20px;
	font-weight: bold;
	text-align: center;
	font-size: 18px;
}
.selectperiod {
	padding: 5px 30px;
}
.selectperiod div{
	text-align:center;
}


В архиве лежат еще файлики библиотеки jquery, moment.js и jquery.datetimepicker.
Для красивого отображения графика используется ChartJS.

Итак, теперь у нас сохраняются температуры в базу и даже выводятся в виде красивого графика. Дело за малым — настроить оповещения в Telegram, когда температуры достигают слишком малых значений. По этой инструкции легко настроить бот, который будет присылать вам сообщения, если послать запрос на api.telegram.org. Мой код такой обработки температур и отправки в телеграм в файле index.php:
// Если температуры ниже минимума, отправим сообщение в Telegram
if($t4<40 || $t2<35 || $t1<50 || $t3<50) {
	include 'tele.php';
	message_to_telegram("ГВС_П: $t4, ГВС_О: $t2, Котельная_П: $t1, Котельная_О: $t3");
}


Но вот незадача, телеграм то в России заблокирован! И у большинства провайдеров вы даже IP-адрес сервера не получите по этому имени домена.
Для работы с этим сервером придется использовать SOCKS-прокси (выше есть код файла tele.php), плюс в некоторых случаях потребуется прописать
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

чтобы запросы начали ходить бесперебойно.

Можно раскомментировать строчку 9 в файле tele.php и проверить отправку, обновив страницу.

Подготовка завершена, осталось разместить все это на местах:


Придерживаясь колхоз-стайла, датчики к трубе можно примотать великим Скотчем, но для лучшей теплопередачи предварительно смазать место контакта термопастой:

А сверху нужно еще теплоизолировать датчики от внешней среды. Самый практичный вариант — пенофолом (фольгированый вспененный полиэтилен).

Для потомков и случайно оказавшихся в бойлерной слесарей желательно обозначить на корпусе, что это за фиговина с проводами:


Прокинули витую пару с интернетом до бойлерной, подключили роутер, вставили в розетку наше устройство и наслаждаемся картинкой:


Открывать ссылку можно с любого устройства, даже со слабым интернетом. Вообще говоря, веб-сервер можно поднять и на самой ESP8266 и рисовать аналогичный график, заморочившись с обновлением IP-адреса через DynDNS, но «я художник, я так вижу» :) Да и стабильность у такого варианта все-таки куда выше, а еще доработки в серверную часть можно вносить прямо с рабочего места в другом городе, а не программировать каждый раз плату.

На этом можно остановиться, ибо все работает, но есть и пока не решенные проблемы.
Первая — это датчики почему-то иногда сбоят. С периодичностью раз в 4 часа плата почему-то путается в показаниях и присылает откровенную фигню. Один раз даже показало температуру в -70 градусов на одном из датчиков, после чего я внес в серверный код условие добавления в базу значений, только если они все положительные.
Вот пример полученных корявых данных


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

Третье — найденный в интернете прокси-сервер может просто-напросто прекратить свое существование, его нужно будет сменить. А сообщения то вам не будут присылаться в телеграм… Поэтому надо добавить либо оповещение на email, либо сделать парсинг свежих прокси каждый раз. А может кто-то знает лучшее решение?

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

UPD 1: В комментариях muskati предложил использовать twitter.com/tgvpn:
['proxy' => 'socks5://login:pass@server.tgvpnproxy.me:1080']


UPD 2: Полезный совет от merlin7 про использование медианного фильтра.

UPD 3: SiZE предложил вместо танцев с прокси телеграма использовать bullhorn_bot, намного проще.

UPD 4: На днях сделал на другой плате аналогичное только для 1 датчика, серверную часть скачать можно тут: yadi.sk/d/Ujb7Ucp2QjT94w. (На этот раз разместил в папке /temp2/, поэтому если у вас путь на сайте отличается, поменяйте этот путь по всем файлам внутри.
Добавить в избранное
+112 +216
свернутьразвернуть
Комментарии (229)
RSS
+
avatar
+4
  • Mice
  • 22 ноября 2018, 10:59
>> А может кто-то знает лучшее решение?

купить платный прокси за 3 бакса
+
avatar
0
  • genix
  • 22 ноября 2018, 11:05
Да, я думал про такое решение, но хочется минимизировать затраты :)
+
avatar
+3
  • muskati
  • 22 ноября 2018, 11:26
twitter.com/tgvpn

['proxy' => 'socks5://login:pass@server.tgvpnproxy.me:1080']
+
avatar
0
  • genix
  • 22 ноября 2018, 11:37
Искал подобное, но почему-то не нашел. Спасибо!
+
avatar
0
Купить за 5 баксов виртуалку в облаке у хетцнера и хостить всё там.
+
avatar
+7
  • Sanja
  • 22 ноября 2018, 12:08
за € 2.49 вообще-то: www.hetzner.com/cloud

VPN-сервер разворачиваем скриптом с github.com/jawj/IKEv2-setup (даже домен не понадобится).

на нём же поднимаем прокси для Телеграма (так он на мобильном меньше жрёт батарейку, чем через VPN) -https://habr.com/post/412759/#comment_18717423

Через мою хетцнеровскую виртуалку сидят 60 человек сослуживцев, загрузка минимальная, скорости выжимаются с лихвой за сто мегабит
+
avatar
0
  • stasv
  • 23 ноября 2018, 11:11
Заставил ребенка развернуть подобную пепяку на Digital Ocean, но тут сам DO в Роскомнадзоровский бан попал по айпишнику.
+
avatar
0
  • Sanja
  • 24 ноября 2018, 17:10
hetzner не попадал под ковровые бомбардировки, к тому же у них за тот же тариф, что у DO вдвое больше RAM дают
+
avatar
0
  • AndyBig
  • 26 ноября 2018, 09:01
Не весь, их лондонские (если не ошибаюсь) сервера не попали :)
+
avatar
0
Не используйте для телеграма носки. Носки спокойно читаются DPI и прибивается коннект если он к телеграму. Используйте родной MTProto Proxy
Если кому-то очень надо и лень ставить, то в личке могу поделиться своим, мне не жалко.
+
avatar
0
  • Sanja
  • 24 ноября 2018, 16:50
ссылка на хабр как раз ведёт на статью по установке MTProto, но там используется богомерзкий докер
+
avatar
0
Ссылка ведет на установку dante, то есть socks5-сервера(socks=носки). А использовать socks5 не нужно.
+
avatar
0
  • ABATAPA
  • 28 ноября 2018, 13:18
Да что там устанавливать? Скачать с git и запустить.
+
avatar
0
  • ABATAPA
  • 28 ноября 2018, 13:17
У Aruba до недавнего времени был (и остаётся у тех, кто купил) за $1.
Сейчас €2.79…
+
avatar
0
  • volos4
  • 22 ноября 2018, 11:24
поставте локальный TOR. он умеет proxy
+
avatar
0
  • Ermak82
  • 22 ноября 2018, 11:24
3??? БАКСА?
VPS же за 1 евро в европе продают, слабенькие очень, но там можно и серверную часть поднять, и собственно заблокирован телеграм для него не будет.
+
avatar
+1
  • Di1Ly
  • 22 ноября 2018, 11:42
может кому надо, тут на тарифе SMART за 1 2,79 евро (подняли цены блин!!!) в мес, дают linux VPS vmware 1gb 20gb 1TB трафика
+
avatar
0
  • Ermak82
  • 22 ноября 2018, 12:25
Действительно подняли :(. Но для клиентов которые по 1 евро покупали, вроде оставили 1 евро. Сейчас жалею что только 1 сервер поднял.
+
avatar
0
Блин. У меня всего три виртуалки там по 1 евро. Вот ведь хотел четвертую взять несколько месяцев назад. За 2.79 уже смысла нет, можно взять у более надежных хостеров за такие деньги
+
avatar
0
  • ABATAPA
  • 28 ноября 2018, 13:19
Да, пользуюсь уже давно, тоже пожалел, что не взял больше. Хотя… Пришлось бы «на всякий случай» платить, а зачем?..
+
avatar
0
Да у меня обидно, что думал одного «жильца» со своего сервера отселить, взять ему за ойро в месяц виртуалку, сказать «Дружище, с тебя 12 ойро за год» и убрать его нагрузку с моего личного сервера, полез туда, а там облом. Придется дальше его у себя держать, так как проект у человека некоммерческий тратить больше он вряд ли захочет
+
avatar
0
  • adeep
  • 22 ноября 2018, 23:50
arubacloud 1евро в месяц
+
avatar
+1
Стоит туда зайти и посмотреть. Они подняли цены.
+
avatar
0
Уже нет. 2,79 евро в месяц
1 остался только для продления для клиентов с уже купленным тарифным планом по 1 евро.
+
avatar
+10
Последнее время в нашем доме часто стала возникать проблема с горячей водой. В принципе, это началось, когда мы отсудили котельную в общедомовую собственность и начали сами ей распоряжаться

отличное начало!
+
avatar
+6
  • genix
  • 22 ноября 2018, 12:55
Да :) Но если сравнить платежи, то экономия для людей в двух домах (288 квартир) очень существенная получилась. За октябрь, например, по сравнению с прошлым годом, 1000 рублей разница для средней двушки.
А проблемы мы решим!)
+
avatar
0
а отопление нормально?
+
avatar
0
  • genix
  • 22 ноября 2018, 19:01
Не очень понял вопрос. Пока не было холодов, чтобы кто-то жаловался на холод
+
avatar
0
  • mikel23
  • 22 ноября 2018, 11:14
А нет готовой такой же. Просто wi-fi метеостанции с веб интерфейсом или отправкой e-mail telegramm и тд.?..
Конкретно нужена только температура в серверной.и если она больше порога то сообщение.

Интересен опыт реальный.
+
avatar
+2
Еспешка за два бакса из Китая и прошивка с WiFi-Iot.ru за те же два бакса — вуаля!
+
avatar
0
  • stdm
  • 22 ноября 2018, 11:31
Я такое сделал на распберри, куплленной на авито за 500 р.
Рисуется график температуры (по простому, через MRTG), при превышении заданного порога отправляется уведомление на почту (самодельным скриптом на питоне).
Если бы первая, самая древняя распберри тормозила меньше, можно было бы сказать что на настройку ушло 15 минут. С учетом ее тормозов, времени ушло чуть больше, только пакеты минут 20 обновлялись )
+
avatar
0
  • mikel23
  • 22 ноября 2018, 12:12
А готовое есть? Я из готового видел SON OFF.

https://aliexpress.com/item/item/Sonoff-TH10-TH16-Smart-Wi-Fi/32854996164.html
+
avatar
0
  • stdm
  • 22 ноября 2018, 12:28
Я делал систему исходя из следующих требований:
— не WiFi
— минимальная зависимость от локальной инфраструктуры (железке назначен внешний IP и зависит она только от оборудования провайдера)
— возможность удаленного контроля и настройки
— возможность добавления функций в случае необходимости
+
avatar
+2
Есть конструктор для ESP8266 — wifi-iot.com
Там можно прикрутить разные сервисы, например Народный мониторинг.
+
avatar
0
  • genix
  • 22 ноября 2018, 12:58
И зачем-то платить, если, например, понадобится всунуть больше 1 температурного датчика. Я не понял этой идеи, ведь самое сложное для меня было именно понять, как скетч заливать в плату…
+
avatar
0
Если нужно готовое устройство, то есть СМС-стукачь u-m.biz/phpBB3/viewtopic.php?t=175
+
avatar
0
  • samwell
  • 26 ноября 2018, 00:26
что то не понял, а как он на смс стучит?
+
avatar
0
  • AndyBig
  • 26 ноября 2018, 09:08
Видимо в ней есть GSM-модуль.
+
avatar
0
  • samwell
  • 26 ноября 2018, 09:26
Ну в обзираемом модуле жсм модуля нет, я потому и призадумался. Получается второй модуль покупать надо, а он не дешево стоит :(
+
avatar
+1
  • AndyBig
  • 26 ноября 2018, 09:33
Я по ссылке выше вообще не увидел что там за модуль и что в нем есть :)
+
avatar
0
  • samwell
  • 26 ноября 2018, 09:45
В модуле есть вафля, входы и выходы, т.е. можно чем то управлять через вафлю, так я понял за два дня его исследования, может чего то еще пропустил, но жсм модуля в нем точно нет :)
+
avatar
0
  • AndyBig
  • 26 ноября 2018, 10:12
А у Вас именно этот «СМС стукач»? Напишите письмо производителю, пусть он объяснит как этот модуль может отправлять СМС без инета :)
+
avatar
0
  • samwell
  • 26 ноября 2018, 11:12
Нет, у меня то что на картинке в обзоре — NodeMCU v3 на вафле, ссылка данная на смс стукач я так и не понял как реализовывать. точнее понял как необходимость добавления дополнительного жсм модуля.
+
avatar
0
  • AndyBig
  • 26 ноября 2018, 11:32
Ну этот стукач, насколько я понял, — отдельный девайс на базе ESP. В нем много чего может быть кроме, собственно, самой ESP :)
+
avatar
0
  • freezl
  • 22 ноября 2018, 14:04
Если есть серверная, то наверняка есть и сервера, и мониторинг. В серверах навалом датчиков температуры, которые по IPMI отдают значения. Ставим Zabbix и настраиваем получение данных по IPMI и алерты на превышение какого то порога. Покупать вообще ничего не надо.
+
avatar
-1
  • Di1Ly
  • 22 ноября 2018, 11:15
Раз уж ESP8266, я бы эту задачу реализовал на Blynk.
По идее бесплатного объема элементов приложения должно хватить, или можно поднять свой сервер на дешевом хостинге.

В приложении графики выглядят красиво, есть экспорт в .csv.
Оповещения приходят в само приложение, думаю API от телеграмм тоже можно прикрутить.
+
avatar
0
  • genix
  • 22 ноября 2018, 11:40
В посте ссылки как раз на использование blink, но мне захотелось вывести именно в веб, без всяких приложений
+
avatar
-3
  • dimats
  • 22 ноября 2018, 11:16
Термодатчики скотчем… да…

Используйте хотя бы обычный силиконовый герметик, и желательно не через краску
+
avatar
+2
  • genix
  • 22 ноября 2018, 11:41
А Вы сравнивали теплопроводность силиконового герметика и минимального слоя алкидной эмали?
+
avatar
+5
  • dimats
  • 22 ноября 2018, 11:59
Да, но не с краской. Краску всегда удаляю с металла.

Ставлю уже много лет светодиоды не только на термоклей, но и на герметик, особенно если звезды использую (на автомобильный герметик, что на 200-300 градусов, он удобнее, и гдето читал теплопроводнее обычного строительного)

Когда-то эту идею почерпнул из интернета, попробовал, сравнил температуру радиатора, оказалась разница в пределах статичтических погрешностей.

PS: если вы разбирали блоки питания, в них сплошь и рядом термождатчики на герметике приклеены к радиаторам.
+
avatar
+3
  • hcetih
  • 22 ноября 2018, 13:31
Вполне себе стандартное решение взять датчик и просто прижать к трубе. И герметик и удаление краски — колхоз. А для высокой точности есть совсем другие способы монтажа датчика
+
avatar
+3
  • ambuddy
  • 22 ноября 2018, 13:54
Это важно, если вам надо только однажды узнать температуру, например, для обзора того же блока питания. А когда у вас есть динамика, не важно, что показывает датчик в конкретный момент. Важно, как текущие показания соотносятся с предыдущими. Грубо говоря, даже если датчик стабильно показывает на 50 градусов меньше, то и текущее и предудыщее значения будут на 50 градусов меньше, что просто учитывается в коде прослушки… Ну может коряво объяснил, но надеюсь, смысл понятен :)
+
avatar
0
Посоветуйте недорогой термоклей, аналогичный в блоках питания?
+
avatar
+2
  • phazz
  • 23 ноября 2018, 05:03
И ещё нужно было брать датчик без гильзы, он намного чувствительней и за счёт того что одна сторона плоская будет лучше прилегание. А теплоизоляция сверху нужна обязательно, иначе при изменении внешней температуры показания датчика тоже будут меняться.
+
avatar
0
  • Serko
  • 27 ноября 2018, 12:25
Размер датчика невелик, поэтому тепловой контакт с трубой намного эффективнее, чем влияние окружающего воздуха с ничтожной теплоёмкостью.
+
avatar
0
  • wwest
  • 13 декабря 2018, 02:46
Сами то проверяли теоретик?
Когда прижимаешь рукой термопару к радиатору отопления то влияет на точность измерения ВСЁ!
И температура руки и время и сквозняк и температура воздуха и даже слой краски.
В результате пришлось прижимать термопару в меховой перчатке через слой поролона и на термопасту.
И держать так несколько минут пока температура не стабилизируется.Или приматывать изолентой через толстый слой поролона на термопасту.Для разового измерения.
В каждой из 9 точек радиатора.
Весь этот ужас кончился только с покупкой ИК термометра.
+
avatar
+1
  • Xizel
  • 22 ноября 2018, 11:22
А что мешает зделать на народном мониторе и не выставлять датчик для всех. У меня так и работает. Есть и приложение для андрюши и прокси не надо.
+
avatar
0
  • genix
  • 22 ноября 2018, 11:46
Мне хотелось именно простоту просмотра для всех. Понадобится — просто поменяю путь к странице)
+
avatar
0
  • Xizel
  • 22 ноября 2018, 11:54
Ваш проект взял на заметку. У Нас телеграмм не блокируют, сервер есть дома — очень здорово. А подымать прокси тоже для народа не просто. Может отстрелялся с прошивками и пользуйся…
+
avatar
0
Поднять MTProto Proxy это ровно 1(одна) команда, что бы человеку подключить телеграм через нее это два тычка пальцем по экрану мобилы. Вроде не очень сложно.
+
avatar
+4
термопастой мазать не обязательно. можно просто поверх наложить кусок пенки.
+
avatar
+3
  • genix
  • 22 ноября 2018, 11:50
Согласен, теплоизолировать снаружи надо, не дошли руки еще) А термопаста валялась, че бы и не применить, хуже то не будет)
+
avatar
0
и лучше не особо тоже)
+
avatar
0
Поднять свой прокси и vpn, например на aruba.it
+
avatar
+5
  • rocket1
  • 22 ноября 2018, 11:32
На вашем сайте браузер ругается на несовпадение доменов при ajax запросах. Происходит запрос c домена 'www' на домен без 'www'. Настройте полиси, или «как порядочный веб-программист»© делайте запрос getJSON на относительный url. :)
+
avatar
0
  • genix
  • 22 ноября 2018, 11:51
Спасибо, да, поменяю на относительные) Но такой ошибки у себя не получал
+
avatar
0
  • neomoto
  • 22 ноября 2018, 11:33
Кто ж так переменные называет. И таблицы
+
avatar
+3
  • genix
  • 22 ноября 2018, 11:53
Куда без этого комментария :) Вы не смогли понять по названию переменных, для чего они нужны?)
+
avatar
0
  • neomoto
  • 23 ноября 2018, 09:16
я, конечно, смог, их всего 4 ) Просто если регулярно так делать, то войдет в привычку, а это не очень хорошо
+
avatar
+1
  • fps
  • 22 ноября 2018, 11:55
А что там не так?
+
avatar
0
  • neomoto
  • 23 ноября 2018, 09:15
имя переменной должно иметь смысл и в идеале отражать то, что она хранит
+
avatar
+1
  • fps
  • 23 ноября 2018, 09:56
Бесспорно. Но это никак не отвечает на мой вопрос.
+
avatar
+2
Должно иметь смысл для кого? Если код пишется для себя и не планируется его открывать под цивилизованными лицензиями, а так же не планируется, что кто-то другой будет с ним работать, то можно задавать такие имена, что они будут иметь смысл только для тебя.
+
avatar
+1
  • AndyBig
  • 22 ноября 2018, 11:34
Не пашет график по этому адресу :))
+
avatar
0
  • genix
  • 22 ноября 2018, 12:00
Попробуйте без www ;)
+
avatar
0
  • AndyBig
  • 22 ноября 2018, 12:12
Перебрасывает все равно на www :)
+
avatar
0
  • sir0ta
  • 22 ноября 2018, 12:42
Это дебильный хром. Попробуй через IE. он не добавляет www.
+
avatar
+1
  • AndyBig
  • 22 ноября 2018, 12:53
Хром тоже сам ничего не добавляет в адрес :)
ЗЫ: уже заработало :) А www добавляла опера если только явно не написать перед именем сервера http:// :)
+
avatar
0
  • sir0ta
  • 22 ноября 2018, 13:05
Добавляет.
www.thewindowsclub.com/browser-automatically-adds-www-to-url
If your Google Chrome browser does this, Disable Prediction Service.

Go to Settings > Show advanced settings > Uncheck the box saying Use a prediction service to help complete searches and URLs typed in the address bar or the app launcher search box.
Сам столкнулся. Заказчик прозевал оплату хостинга (там все), хостинг хоть и имел бэкап, но все скрывает после подобного. Т.е. надо просить ТП. При восстановлении ребята как-то не правильно прописали зоны в DNS. И вышло так что www.site.ru был доступен, а site.ru редиректил на заглушку, как будто там ни чего нет. Я сразу этого не заметил, т.к. при наборе site.ru хром автоматом добавлял www. и перекидывал меня на сайт. У заказчика же была лиса и он сразу столкнулся с подобной проблемой. Я проверил на всех устройствах что у меня есть и естественно везде у меня хром и на всех устрйоствах я смог зайти на сайт.
+
avatar
0
  • AndyBig
  • 22 ноября 2018, 13:30
Добавляет.
Только если вводится адрес, который ранее уже открывался с www :)
+
avatar
0
  • Brs
  • 22 ноября 2018, 19:38
Надо было ему адсенс или Яндекс директ привесить) заработал бы)))
+
avatar
+7
  • genix
  • 22 ноября 2018, 13:26
Да, уже починил, спасибо)
Там энтузиасты начали графиком член рисовать, вот ведь муськоэффект… А я даже сознательно в посте ссылки не указал на график, все равно нашлись бета-тестеры))
+
avatar
+2
  • AndyBig
  • 22 ноября 2018, 14:27
Засветили адрес — сознательно или нет — ждите муськоэффекта :)
+
avatar
0
  • Brs
  • 22 ноября 2018, 19:37
У меня пашет во всю) и правда значит система работает ))
+
avatar
0
  • AndyBig
  • 22 ноября 2018, 19:51
Так автор уже давно все исправил :)
+
avatar
+1
  • Rost
  • 22 ноября 2018, 11:39
Раз уж такая пьянка, то может кто-нить подскажет самый дешевый вариант мониторинга трехфазного напряжения сети, который можно прикрутить к esp8266?
PZEM избыточен и дорог на три фазы.
+
avatar
+1
  • Bacchus
  • 22 ноября 2018, 11:53
Я сейчас смотрю на ZMPT101B но пока не пробовал
+
avatar
0
  • Rost
  • 22 ноября 2018, 17:53
У него аналоговый выход, понадобится 3шт esp8266.
Но цена приятная.
Вариант годный, уж всяко лучше, чем самостоятельно искать какие-то трансформаторы и после них городить выпрямители и делители.
+
avatar
0
  • Bacchus
  • 22 ноября 2018, 20:05
3 esp это жестоко :-)
PCF8591 или ADS1115 несколько попроще будет :-)
+
avatar
0
Хотел бы я на такое чудо посмотреть:)) А так- действительно внешний ацп на нужное число каналов, а если не нужна сверхвысокая точность, то можно и мультимплексором переключать входы.
+
avatar
+3
Мониторинг это мерить напряжение? Делитель и выпрямитель на АЦП
+
avatar
0
Можно реализовать на одной PZEM поочередно подключая каждую фазу (естественно при этом замеряем только напругу и ток по фазам) или вариант использовать аналоговый вход через понижающие трансформаторы. Так как вход один, необходимо также релешками коммутировать выходные напряжения трансформаторов на аналоговый вход. Схемы для однофазной сети в инете имеются.
+
avatar
0
Для точности «1 час» у вас вместо 60 минут используется 6 минут.
+
avatar
0
  • genix
  • 22 ноября 2018, 13:27
Спасибо, исправил!
+
avatar
+2
  • AndyBP
  • 22 ноября 2018, 11:53
Вот и бета-тестеры подтянулись…
+
avatar
0
  • Dfcz22
  • 22 ноября 2018, 11:54
Сразу же хочется все-все-все контролировать и получать от бота информацию. Желательно бота с ИИ, что бы поговорить было с кем.
+
avatar
0
  • genix
  • 22 ноября 2018, 12:03
Точно! Но не сразу, с момента заказа платы прошел ровно год)
+
avatar
+5
  • bakinec
  • 22 ноября 2018, 12:07
желательно обозначить на корпусе, что это за фиговина с проводами:
для особо продвинутых слесарей (ну и потомков тоже), можно было ещё QR-код наклеить на корпус :)
+
avatar
+1
  • genix
  • 22 ноября 2018, 13:28
Спасибо за идею, попробую срисовать :)
+
avatar
+1
  • SilverD
  • 22 ноября 2018, 12:07
Вопрос по бойлерной:
Почему такая просадка по температуре в 10:30 вечера и в 8:30 утра? Хотя, температура теплонасителя не упала.
Мощности теплообменников не хватает? Или они забились и требуют промывки?
+
avatar
0
  • Harwest
  • 22 ноября 2018, 12:24
Наверное расход большой на помывку…
+
avatar
0
  • genix
  • 22 ноября 2018, 13:34
Это тоже верно, к сожалению, не заложили это в смету на год, придется в следующем теперь.
+
avatar
0
  • npp
  • 22 ноября 2018, 12:31
Если б мощности теплообменников не хватало — ТС проявил бы явную озабоченность.
Обыкновенные пики потребления.

Вот почему вечером и утром резко уменьшается температура теплоносителя — это уже интересно. Такое впечатление, что ложные срабатывания погодных датчиков или других, которые контролируют работу теплогенерации.
+
avatar
+3
  • SilverD
  • 22 ноября 2018, 12:36
Я раньше работал инженером в эксплуатации бизнес-центра.
У нас такая ситуация была (с падением температуры в пики), когда теплообменники забились совсем. Мы их промыли химией, и все встало на свои места. И потом пришли к выводу, что теплообменники нужно промывать минимум раз в год. Иначе происходит такая ситуация как на графиках ТС.
+
avatar
0
  • npp
  • 22 ноября 2018, 12:49
Вывод Вы сделали абсолютно верный. Периодическая очистка поверхностей теплообмена — обязательна. Тем более со стороны сырой воды.
Я не о том.
Если подобное снижение температуры ГВС, при пиковых нагрузках, не сказывается отрицательно на потребителях — значит оборудование подобрано правильно, с верным запасом мощности.
+
avatar
0
  • diaskzn
  • 22 ноября 2018, 15:26
Это, насколько я помню, прописано в инструкции/паспорте к теплообменнику.
+
avatar
0
  • genix
  • 22 ноября 2018, 13:34
Вчера включили дополнительный котел, температура поднялась. Перед этим, видимо, выключали, чтобы провести какое-то ТО. Но в час ночи, судя по графику, какой-то котел вырубился, который вчера запустили дополнительно, и тут уже можно только догадки строить… Вот уже третий день специалисты обслуживающей котельную организации что-то чинят и ломают голову.
+
avatar
+1
  • genix
  • 22 ноября 2018, 13:31
Вот именно из-за этих просадок я и заморочился с этим устройством. Скорее всего теплообменники действительно требуют промывки, займемся этим через неделю, как получим деньги от старой управляющей компании по суду.
+
avatar
0
  • Harwest
  • 22 ноября 2018, 12:27
Хм, а mqtt сервак и пуш-уведомления на сотик сильно сложнее?
+
avatar
+4
  • myweb
  • 22 ноября 2018, 12:38
Для себя использовал ESP32 + 1-Wire DS18b20 и MQTT+InfluxDB+Grafana. В скором времени переведу на ESP8266 — ESP32 слишком мощная для такой простой задачи.

Вот скриншот:


InfluxDB + Grafana нравится:
Полностью хранится изначальная точность измерений по сравнению с RRD Решениями. Поддержка Alerts, Plugins, и т.д.
+
avatar
0
Тоже пользуюсь InfluxDB+Grafana, для температур на даче. очень нравится!
+
avatar
0
  • robosku
  • 22 ноября 2018, 18:33
Красота! За графану отдельный плюс, прекрасный софт )
+
avatar
0
  • nochkin
  • 23 ноября 2018, 04:09
В чём будет бонус перевода на ESP8266 в данном случае?
+
avatar
0
  • myweb
  • 26 ноября 2018, 09:43
Меньший размер устройства, дешевизна, ESP32 будет свободна для более трудоемких проектов.
+
avatar
+1
каким датчиком потребление воды смотрите? я только для мелкой автоматизации нашел, а для квартиры что то не вижу.
+
avatar
+1
  • myweb
  • 26 ноября 2018, 09:50
очень долго пытался сделать датчик к обычному счетчику (пробовал датчик холла, оптический CNY70), но подошел поверочный интервал и просто купил счетчики с импульсным выходом (1 литр = 1 импульс). Не инженерный подход, но работает стабильно и сделать получилось относительно быстро (т.к. ESP стоит не рядом, то пришлось ставить пару конденсаторов что бы убрать наводки)
+
avatar
0
  • genix
  • 26 ноября 2018, 10:02
Почему же не инженерный, вполне себе. У меня та же задача есть в планах, только не с 3/4 счетчиком квартирным, а с огромным таким, на 80-ую трубу… Сам по себе такой счетчик около 7000руб стоит новый, без импульсного выхода…
+
avatar
0
о, точно. Что то не подумал про это.

А какая модель счетчика? Как конденсатор подключали? Я просто только начинаю, и еще не все понимаю с полу слова. Т.е. там параллельно или как?
+
avatar
0
  • myweb
  • 26 ноября 2018, 14:05
Модель счетчика СВГ-15И «Струмень-Гран» — Белорусского производства: www.strumen.com/ru/products/schetchik-vody-strumen-gran.html

Где-то 33 USD стоят.

В счетчике стоит герконовый датчик (далеко не самое лучшее решение...) — конденсатор поставил параллелельно геркону.
+
avatar
0
  • Stress
  • 22 ноября 2018, 12:50
Прикольно сделано. Ссылка открывается.

Я бы краску ещё стёр на трубе под датчиком температуры для лучшего контакта.
+
avatar
0
  • genix
  • 22 ноября 2018, 13:40
Спасибо за отзыв! Стирать краску не хочется, потому что может возрасти вероятность коррозии в этом месте (большая влажность в помещении, конденсат и т.п.) А чинить трубу потом очень затратно(
+
avatar
+5
  • ksiman
  • 22 ноября 2018, 14:03
Стирать краску не хочется
Да и не нужно — прикройте датчик теплоизоляцией с отражающим слоем и будет он казать точно
+
avatar
0
вот да. тоже первая мысль была, что как-то утеплить надо внешне…
+
avatar
+6
  • merlin7
  • 22 ноября 2018, 12:51
Подобные всплески на графике прекрасно убираются медианным фильтром
У меня в проекте мониторинга воздушной среды один из датчиков (кислород) аналоговый. Он дает такие же выбросы. Усреднение результатов приводит к погрешности. Следующий код решил проблему.

Код
В основном цикле
// накапливаем данные для медианного фильтра аналогового входа
// период опроса 120мсек
if (millis()-timer3 > 120)
{
//выбираем 65 значений
if (median_count<65)
{
oxy_raw[median_count] = analogRead(pinAdc);
median_count++;
}
timer3=millis();
}

Функция фильтра
float readO2_median ()
{
// сортируем массив по возрастанию значений в ячейках
float temp = 0; // временная переменная
for (int i = 0; i < 65; i++){
for (int j = 0; j < 65 — 1; j++){
if (oxy_raw [j] > oxy_raw [j + 1]){
temp = oxy_raw [j];
raw[j] = oxy_raw [j + 1];
oxy_raw [j + 1] = temp;
}
}
}
// возвращаем значение средней ячейки массива

float MeasuredVout = oxy_raw [32] * (VRefer / 1023.0);
//Сбрасываем счетчик накопления
median_count=0;
return MeasuredVout;
}


При такой фильтрации случайные всплески датчика не будут влиять на результат.
+
avatar
0
  • genix
  • 22 ноября 2018, 13:41
Спасибо за дельный совет!
+
avatar
+2
  • Sploder
  • 22 ноября 2018, 12:55
А не проще бы выяснить в чем причина остановки котла? И соответственно решать эту проблему.
+
avatar
+2
  • genix
  • 22 ноября 2018, 15:37
Не проще, потому что если за проблему ответственны другие люди, то у вас есть уже две проблемы — сама проблема и проблема контроля этих людей, чтобы они ее исправили :)
Размещение этих датчиков как раз решает проблему контроля — оно позволило привлечь больше внимания к проблеме со стороны обслуживающей организации, сегодня директор этой организации лично пол дня лазил по подвалу и некоторые выводы уже сделаны, сформулированы методы решения.
+
avatar
+5
Никакой авторизации, можно отправлять показания всем желающим
+
avatar
+4
  • genix
  • 22 ноября 2018, 13:43
Спасибо, добрый молодец, что указали на недостаток %)
Добавил авторизацию, пока кто-нибудь член не нарисовал графиком. Честно говоря, не ожидал, что кто-то будет этим заниматься)
+
avatar
0
  • ambuddy
  • 22 ноября 2018, 13:59
del
+
avatar
+9
Сам прошел этим же путем: датчики DS18B20 снаружи на трубах.

Что я могу сказать.
1. Датчики надо теплоизолировать от окружающей среды, иначе получается «погода на Марсе, осложненная земным климатом». Сами же видите: датчик касается трубы мизерной площадью, а все остальное висит в окружающем холодном воздухе. И скотч — это плохая теплоизоляция (и крепеж плохой). Свои я крепил проволокой, и стоило замотать их в два слоя теплоизоляцией на ширине в полметра — как добавилось почти 10 градусов.

2. Датчики надо калибровать. Потому что метод измерения у вас — косвенный, и температура на поверхности трубы вовсе не равна температуре воды внутри. Я использую такую эмпирическую формулу: до +20 температуры равны, выше — прямая «истинной» температуры идет вверх круче температуры трубы, а угловой к-т получил калибровкой в рабочей точке: взял второй датчик, одел варежки чтобы не обвариться, приоткрыл кран слива трубы — и сунул датчик в поток. И подождал пять минут, а система все это время писала показания с обоих датчиков.

3. Показания датчиков надо фильтровать от ошибок. 1-wire — система, весьма чувствительная к наводкам, а у вас в ИТП наверняка есть насосы и прочие мощные потребители электричества. Так что сбои — будут. Можно вылавливать явные ошибки (те же -70 например), а можно сделать скажем медианный фильтр: берете 5 подряд результатов измерения, сортируете по возрастанию, и в качестве результата используете третье значение.

4. Показания датчиков надо фильтровать от шумов. Датчик неидеален, и конструкция измерительной системы неидеальна, а в итоге будет разброс показаний, не несущий никакой смысловой нагрузки. Используйте например экспоненциальное скользящее среднее — предельно просто реализуется, а результат радует глаз.

P.S. Как сделать экспоненциальное скользящее среднее. Определяемся с длиной… пусть скажем n=10

const float aEMA=2.0/(1.0+n);
float xEMA;

А дальше пусть x это очередные показания датчика
Тогда в самом начале, с первым показанием делаем так

xEMA=x;

А дальше в рабочем цикле, получив очередное значение x

xEMA= aEMA*x+(1.0-aEMA)*xEMA;

И используем xEMA как результат
+
avatar
0
  • Lvenok
  • 22 ноября 2018, 13:54
Есть такая теплоизоляционная лента-скотч K-flex. Стоит денег, но у холодильщиков расходник…
+
avatar
0
  • genix
  • 22 ноября 2018, 13:59
Спасибо за ценные советы!
На фото видны датчики теплосчетчика, стоящие неподалеку, они как раз по-правильному монтированы прямо в среду, внутрь трубы. И показывают тот же результат с разницей в 1 градус (при температуре 50 градусов) Возможно, для больших значений отклонение будет чуть больше. Теплоизолирую снаружи обязательно! Но 10 вряд ли добавится, конечно…
Про медианный фильтр уже кто-то выше советовал, попробую реализовать, спасибо)
С выводом графика прекрасно справляется ChartJS, если указывать период данных не слишком частый, конечно)
+
avatar
0
Еще раз: два разных фильтра, решающих две разные задачи.

Сперва фильтруем данные от ошибок — медианным фильтром, или «окном» (отбрасываем все значения выше и ниже ожидаемых), или еще как.

А после, к свободным от ошибок, но зашумленным данным, применяем другой фильтр — можно обычное скользящее среднее, но мне больше нравится экспоненциальное.

А данные я отправляю в Zabbix (видимо — у кого какая профессиональная деформация, тот на то и горазд :) )
+
avatar
0
  • freezl
  • 22 ноября 2018, 14:57
Показания в -70 — это скорее всего из-за неправильного подключения. 1-wire — это шина и датчики на ней должны крепиться последовательно, как гирлянда. 1-wire не любит ответвлений от основной шины более чем на метр (как раз то, что сделал автор). Вторая вероятная причина — не хватает питания, возможно стоит уйти от паразитной схемы.
+
avatar
0
  • genix
  • 22 ноября 2018, 15:40
Поясните пожалуйста, что значит «автор сделал ответвления от основной шины более чем на метр»? И про «паразитную схему» тоже, я что-то далек от электротехники, к сожалению.
+
avatar
0
  • Avacha
  • 22 ноября 2018, 16:02
Схема паразитного питания датчика ds18b20, описана в даташите.
+
avatar
0
  • freezl
  • 22 ноября 2018, 16:43
Автор соединил все провода в точки. Для питания это пойдёт, а вот для передачи данных в 1-wire не очень хорошо. Как бы объяснить… гирлянду представляете? Аналогия та же — основной провод является шиной и датчики должны подключаться максимально близко к ней, без ответвлений.
Паразитное питание, это когда датчик запитывается от сигнального провода.
+
avatar
0
  • genix
  • 26 ноября 2018, 10:20
Вот не могу представить гирлянду при параллельном подключении. При последовательном — легко. Или там какая-то другая схема, не как в посте?
+
avatar
0
  • freezl
  • 26 ноября 2018, 10:57
В 1-wire датчики последовательно и подключаются. Они подключены все к одному проводу, но для 1-wire это является последовательным подключением. Я тоже совсем не электрик, просто как раз на эти грабли наступил недавно — подключил к ардуинке DS18B20 и всё работает хорошо, подключаю второй датчик Вашим способом и ловлю точно такие же проблемы. Полез читать про 1-wire и нашёл, что он не любит ответвлений от общей шины.
Я - художник, я так вижу! Считайте, что предупредил

Сверху неправильно подключено, внизу — правильно.
Ну в Вашем случае
Слева как сделали Вы, а справа как надо.
+
avatar
+2
  • AndyBig
  • 26 ноября 2018, 11:37
В 1-wire датчики последовательно и подключаются.
Они подключаются параллельно. Как при этом они разнесены в пространстве — не имеет ни малейшего отношения к способу подключения :)
Я тоже совсем не электрик
Вот и не сбивайте людей с толку неправильной терминологией :)
+
avatar
0
  • freezl
  • 26 ноября 2018, 12:05
Вот и не сбивайте людей с толку неправильной терминологией :)
А по сути вопроса есть что сказать?
Для общего развития я бы тоже с удовольствием почитал как оно на самом деле и почему так. (вот без сарказма!)
+
avatar
+1
  • AndyBig
  • 26 ноября 2018, 12:35
По сути — есть. Четыре далласовских датчика у меня работало на проводах длиной 5-8 метров, причем сходились провода на самой плате. Работали с паразитным питанием и не жужжали :)
По сути там не такие частоты, чтобы мешали какие-то неравномерности на кабеле (тем более, что они в любом случае есть), так что я не думаю, что настоящая причина ошибок — разводка кабеля. Была бы у меня подобная ошибка — я бы разбирался с осциллографом в зубах :)
+
avatar
+1
  • Lvenok
  • 22 ноября 2018, 13:53
а у каждого физического датчика свой индивидуальный адрес зашит с завода? Как контроллер их различает?
+
avatar
+1
Да, у каждого девайса на шине 1-wire адрес уникальный и зашит на заводе.
+
avatar
-2
Чёт я не понял, где люди говорящие «ethernet- прошлый век, купи wifi роутер 5 ГГц»?
+
avatar
0
  • kovax
  • 22 ноября 2018, 14:25
не мне одному «повезло» с датчиками такими — делал отопление у себя и прикупил 5 датчиков таких, все развел — работало, решил еще прикупить на будущее 6шт, купил и лежали… понадобились и какое было у меня чувство — девайс сдох или «лыжи не едут», когда при подключении дополнительных все стало валиться. на ардуинке собрал тестер — ВСЯ последняя партия МЕРТВЫЕ датчики((
нормальные датчики с проводами красный, оранжевый, черный, а мертвые красный, желтый, черный… почитал в инете — не мне одному так «везло»((((((((( купил отдельно чипы с хорошими отзывами — исполнение делать сам буду, потому как такой кусок трубки не всегда удобно можно пристроить (разбирал их — внутри просто на герметик вставлен чип без намека на термопасту)…
+
avatar
+2
  • Avacha
  • 22 ноября 2018, 16:04
Может, цвета у проводов перепутаны, попробуйте желтый и красный местами поменять.
+
avatar
+3
Большая медная луженая клемма под провод соответствующего сечения. Датчик в корпусе «как транзистор». Припаиваем провода, изолируем, выдавливаем каплю термопасты в клемму, вставляем туда датчик — и пассатижами слегка обжимаем низ клеммы, чтобы датчик не выскочил. И еще раз изолируем.
И крепить удобно, и теплопроводность хорошая.
+
avatar
0
И все равно нужно изолировать от окр среды. Я такой клеммой пытался температуру двигателя на авто мерить. Лаг быль сильно большой.
+
avatar
0
Скажите, все «порядочные веб-программисты» располагают корпус отверстием вверх, без дренажных отверстий снизу?
+
avatar
+5
  • genix
  • 22 ноября 2018, 15:13
Специально подобранная банка сделана таким образом, что как только уровень воды внутри нее достигает половины банки, она автоматически отсоединяется от крышки и отваливается вниз под действием силы тяжести. А сама плата дополнительно герметизирована с помощью великого Скотча и полиэтилена, но провода, на которых она висит, дополнительно удерживают ее в самом верху банки, исключая контакт с внезапно образовавшейся внутри банки водой)
+
avatar
0
Изоленту синюю забыли. Без нее в этой схеме никак…
+
avatar
+3
  • SiZE
  • 22 ноября 2018, 14:56
Для уведомлений без прокси можно @bullhorn_bot подключить. Он принимает post запрос с json вида:
{"text":"So _advanced_\nMuch *innovations* "}
и выводит в телеге.
+
avatar
0
  • genix
  • 22 ноября 2018, 15:15
Отлично, спасибо, добавлю в пост
+
avatar
0
  • denM
  • 22 ноября 2018, 16:11
Котельная у вас в доме или обособленная? и долго пришлось судиться?

Вы на общественных началах программером/админом «работаете» или всё-таки за денежку ?, думаю немногие стали бы из альтруистических побуждении (пусть даже для себя) так стараться, расходуя личное время и нервы.
+
avatar
+2
  • genix
  • 22 ноября 2018, 16:23
Котельная у нас на крыше, но по странному стечению обстоятельств, она почему-то с момента сдачи дома была в собственности у организации, учредителем которой является гендиректор фирмы-застройщика. И горячая вода у нас в прошлом году стоила бывало по 400 рублей за куб (даже зимой). Судились чуть больше полугода…

Программером я работаю за денежку, а вот председательство в ТСЖ — скорее хобби, потому что даже 15 тысяч рублей в месяц, которые у меня были окладом первый год после создания ТСЖ, деньгами назвать сложно (с точки зрения веб-программиста, конечно). А с августа этого года уже управлением домом занимается нанятая посторонняя управляющая за оклад 20000 руб, на мой взгляд, самая профессиональная в нашем небольшом городке. А я продолжаю следить за всем за 2900 руб в месяц :)
Альтруизм — это моя слабость, да)
+
avatar
0
  • denM
  • 22 ноября 2018, 16:33
похвально — за альтруизм.

правда размещение котельной на крыше, напряжно как-то, имхо, ГИ хотя бы сделана — а то в случае чего — ой :(
+
avatar
+1
  • genix
  • 22 ноября 2018, 16:53
Зря, крышные котельные применяются повсеместно. Если они запитаны от ГРП газовой трубой низкого давления, то они даже не являются ОПО (опасный производственный объект). Стены там не несущие, в случае взрыва (не дай Бог) зданию даже ущерба не нанесется серьезного, кроме самого оборудования котельной. Да и автоматики там столько, что вероятность крайне мала. Иначе бы постоянно в новостях мелькало…
+
avatar
0
  • denM
  • 22 ноября 2018, 17:10
ну помимо газа, еще есть и вода и эл-во. я именно больше про воду.

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

автоматика — дело такое — может и не сработать вовремя, да и не от всего спасёт увы, должны быть предусмотреть и мех. задвижки и задвижки до задвижек и еще задвижки до задвижек задвижек.
+
avatar
+1
  • Brs
  • 22 ноября 2018, 19:45
По моим наблюдениям у нас на новых домах в 60-70 процентов случаев котельные на крыше. Если бы было запрещено, то не делали бы, а так явно всякие документы есть что можно так делать
+
avatar
+2
  • arbatjc
  • 22 ноября 2018, 16:40
Отличный проект, однозначно жирный плюс! Спасибо.
+
avatar
0
раз тут собрались спецы по 8266, может кто делал или встречал проект похожий, надо читать UART раз в секунду и отдавать по воздуху любым способом, при этом нужно минимальное энергопотребление, т.к батарейное питание. будить могу внешним МК.
+
avatar
+1
«Будить раз в секунду» и «отдавать по wifi» — несовместимо, wifi стартует дольше секунды.

Либо накапливайте данные, а потом пакетом передавайте раз в несколько минут. Либо используйте не WiFi, а другой канал — провод, или скажем LoRa.
+
avatar
0
По-поводу прокси сервера, я прикупил себе виртуальный сервер за 1 евро в месяц на аруба .it, Подсмотрел на хабре, вот тут, надеюсь помог :)
habr.com/company/aladdinrd/blog/353738/
+
avatar
0
  • renat85
  • 22 ноября 2018, 21:20
Можно было вкатить tasmota и гнать данные по mqtt на тот же blynk или cloudmqtt. Если уж совсем заморочится то можно было бы поднять и сервер на homeassistant, openhab, majordomod и т.д. по вкусу. А там уже и диспетчеризация котельной и преферанс и дамы. По информированию присмотритесь к Slack.
+
avatar
+25
  • rexen
  • 22 ноября 2018, 21:39

— как-то вы сильно упростили «традицию» :)
+
avatar
+1
На сервере время правильное
В базе данных время правильное
На клиенте время правильное
В выдаче json время +1 час вперед — соответственно на странице тоже.

Это лечится?

Спасибо за статью. Подчерпнул так подчерпнул.
+
avatar
0
  • genix
  • 23 ноября 2018, 07:52
«Правильным» это время на сервере будет только для тех, кто живет по часовому поясу Москвы :)
А мы в глуши, в Саратове…
+
avatar
0
А если серьезно?
Кто портит картину?
+
avatar
0
  • genix
  • 23 ноября 2018, 10:00
Почему портит? При выводе специально добавляется час, чтобы выводилось по нашему Саратовскому времени, потому что устройство используется только тут. Мне показалось более правильным, что данные соответствуют правильному времени там, где они находятся. Сервер — в Москве, данные в базе поэтому по времени мск. Клиентская часть — в Саратове, поэтому прибавляется час в коде перед выводом.
+
avatar
0
Неправильно добавлять что-то при выводе. Правильно использовать в софте часовой пояс для которого он работает, либо, если у нас идет браузерная отдача клиенту вообще использовать время клиента.
+
avatar
+2
Если часовые пояса источника данных, сервера и клиента — разные, правильнее хранить и пересылать данные в GMT, а в настройках клиента делать поправку на часовой пояс при отображении.
+
avatar
0
Гляжу в книгу в код — вижу фигу. Разобрался :)
+
avatar
0
Не подскажете, что нужно поправить?
+
avatar
+1
везде где добавляется 1 час…
конструкция
DATE_ADD(datatime, INTERVAL 1 HOUR)
можно написать
DATE_ADD(datatime, INTERVAL 0 HOUR)
или вообще убрать эту функцию
+
avatar
0
Кстати, в скетче не нашел (или опять плохо искал? :)) настройки разрешения датчиков.
Можно командой в 1-wire настроить точность 9,10,11 или 12бит для каждого датчика.
От этого сильно зависит время преобразования температуры.
Разрешение — Максимальное время конвертирования
9-bit — 93.75 ms (0,5 градуса)
10-bit — 187.5 ms (0,25)
11-bit — 375 ms (0,125)
12-bit — 750 ms (0,0625)
+
avatar
0
  • genix
  • 23 ноября 2018, 13:11
Где-то я слышал, что у них погрешность измерения то ли в 0.5 градуса, то ли в целый градус… При этом о разрешении в 9 или 12 бит говорить довольно смешно :)
Ну, по крайней мере 4 датчика, лежащие прям рядом с друг другом, всегда показывают относительно разные температуры в пределах погрешности, причем их линии пересекаются, а не движутся все синхронно) А про скорость считывания — не возникало такой проблемы, не подозревал даже о ней.
+
avatar
0
Да, есть такое. Причем чем больше температура — тем больше погрешность.
Просто вот эти 4 строчки:
float temp1 = sensors.getTempCByIndex(0);
float temp2 = sensors.getTempCByIndex(1);
float temp3 = sensors.getTempCByIndex(2);
float temp4 = sensors.getTempCByIndex(3);
Выполняются за 3 секунды, а могли бы за 0,375сек :) Вдруг пригодится в дальнейшем…

Период опроса в скетче 60сек. К ним каждый раз прибавляется еще 3 сек. минимум.
То есть реальный период 63 сек.
+
avatar
0
  • genix
  • 23 ноября 2018, 15:47
Интересное замечание) Что-то беглый осмотр библиотеки не дал мне понять, как это реализовать, но если в дальнейшем понадобится, буду иметь в виду, спасибо)
+
avatar
+1
sensors.SetResolution(от9до12);
По-умолчанию «с завода» оно 12бит
При инициализации датчиков есть строка bitResolution=9
А в sensors.begin есть такая строчка:
bitResolution = max(bitResolution, getResolution(deviceAddress));
То есть выберет то, что установлено в датчике.
+
avatar
0
  • genix
  • 23 ноября 2018, 20:53
Отлично, спасибо!
+
avatar
0
Используя полное резрешение и усредняя результат многих измерений — устраняем случайную погрешность.
А калибровкой — систематическую.

P.S. А еще у этих датчиков есть саморазогрев: при интенсивной работе температура кристалла может «уходить» выше температуры корпуса на 2-3 градуса. Для вас это несмертельно, а вот при измерении температур около ноля С — бывает обидно; лечится либо увеличенными интервалами измерений (скажем, не чаще раза в пару минут), либо… использованием другого типа датчиков. PT-100 например, с соответствующим преобразователем.
+
avatar
0
  • qwerty2
  • 23 ноября 2018, 00:50
А в чем профит использования еспешки, если все равно тянули кабель и ставили рутер рядом? По мне так лучше бы ардуинку с ланом + poe. И на рутере сэкономили бы.
+
avatar
0
  • genix
  • 23 ноября 2018, 07:55
Да, я так в тексте и написал)

Тут мне пришла в голову мысль, что вместо WiFi-платы можно было бы использовать сразу модуль с RJ-45 на борту, но было уже поздно :)
+
avatar
0
  • zack
  • 23 ноября 2018, 02:17
Подскажите, а можно ли отправлять данные не на телеграмм, а допустим в облако (icloud) и тому подобное. Как такое реализовать? или же можно ли сделать допустим отправку смс на определенный номер?
+
avatar
0
  • genix
  • 23 ноября 2018, 08:09
Используя указанный в посте сервис sms.ru это можно сделать элементарно, заменив в коде скетча (если совсем исключить из этого проекта сервер на PHP и отправлять СМС сразу с датчика)
sprintf (url, "http://адрес_вашего_сервера/?t1=%.2f&t2=%.2f&t3=%.2f&t4=%.2f", temp1, temp2, temp3, temp4);

на
sprintf (url, "https://sms.ru/sms/send?api_id=ВАШ_АПИ_КЛЮЧ&to=7ВАШ_НОМЕР_ТЕЛЕФОНА&json=1&msg=t1=%.2f&t2=%.2f&t3=%.2f&t4=%.2f", temp1, temp2, temp3, temp4);

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

А если именно отправку на телеграм поменять, то в файле index.php поменять строки
include 'tele.php';
message_to_telegram("ГВС_П: $t4, ГВС_О: $t2, Котельная_П: $t1, Котельная_О: $t3");

на
file_get_contents("https://sms.ru/sms/send?api_id=ВАШ_АПИ_КЛЮЧ&to=7ВАШ_НОМЕР_ТЕЛЕФОНА&json=1&msg=t1=$t1,t2=$t2,t3=$t3,t4=$t3");


Сервис полезный, периодически пользуюсь им для целей ТСЖ.

Про «облака» — icloud например, это хранилище, типа флешки. Как отправить температурные данные на флешку? Ну, можно создавать каждый раз новый файл… Можно дописывать в какой-то определенный файл и сохранять… В зависимости от того, как вы придумаете хранить информацию в этом «облаке», можно и реализовать как угодно. Чаще всего подобные операции можно сделать с помощью HTTP-запроса, пример которого я и описал выше
+
avatar
+1
Весьма колхозно для промышленного объекта. Я бы:
1. Установил всё в клеммную коробку или маленький пластиковый щиток, например в щит для автоматов на 2 DIN места. Повесил бы это щит\коробку в положенном по правилам месте, то есть не на трубу, не рядом с кранами, не на пол бы бросил…
2. Кабели. Не плохо бы повесить бирки, кабели проложить в гофре или лотке, кабельканале…
3. Датчики. Ну так прилепить скотчем — совсем стыд. Матнули бы теплоизоляцией, чтоб этого колхоза не видеть, да и показания точнее станут.
А так как есть — вызывает желание оторвать нафиг и выкинуть.
+
avatar
-1
  • genix
  • 25 ноября 2018, 05:38
Проблема в том, что датчики эти метровой длины, и длиннее провод к ним прицеплять не положено, якобы повлияет на точность измерения. А трубы находятся на значительном удалении — тут либо на каждую трубу тогда отдельную плату, чтобы все было «красиво», либо так. А отдельная плата — это 4 блока питания USB уже вместо одного.
Кстати, термоизоляцией уже обмотал.
+
avatar
+3
Ну нет, тут надо на ds18b20 читать даташит, они дофигаметров поддерживают. У меня на 40 метров по витой паре работают, но могут гораздо больше.
+
avatar
0
Палец вверх, хотя кот отсутствует в котельной.
По железной части, если витую тянуть в котельную, то ИМХО еэспишка и роутер- излишне. Роутер A5-V11 за $7 с прошивкой CyberWRT, в USB роутера переходник usb-uart, к нему шлейф датчиков, в RJ45 роутера- витую пару. В прошивке ставится модуль «термостат».
+
avatar
0
  • wwest
  • 26 ноября 2018, 12:22
Котя живут в котельной и всю засрали и зассали.
А трупы завонялись так что пришлось жалобу писать.
+
avatar
+1
  • Cthulhu
  • 25 ноября 2018, 22:58
Вопрос с доступностью бота я решил через тор. Легко устанавливается, практически нечего настраивать. Получается свой локальный сокс-прокси. Периодически перезапускаю сервис, чтоб точку выхода менять. Ну и в настройках запрет на выход из зоны ру
А для мониторинга использую заббикс. Вопроса с повторными оповещениями не возникает. Но для данной задачи это конечно как из пушки по воробушкам
+
avatar
+1
  • samwell
  • 26 ноября 2018, 00:40
тоже хочется что то сделать на этом модуле, так уж получилось, что этот модуль не заказывал, случайно перепутали посылки и прилетело вот это чудо что у вас на картинке, собственно второй день собираю инфу как бы на нем что либо реализовать. 1. идея — управления ниппельным краном через шаговый движок в зависимости от температуры, т.е. выбор установка на 78.2 и если температура повысилась, сигнал мотору на один шаг по часовой, потом через 5 секунд если температура не снизилась еще один шаг, и наоборот, если ниже, то против часовой. 2 идея, это котельная при торговом центре. там правда есть свой модуль СМС-информирования Болид, но он такой скудный и понятия не имею как его программировать, а тут можно датчиков наподключать по своему вкусу, но есть опять же нюансы а).нужно ставить роутер, т.к. нет интернета, б).как сигналы превышающие пороговые спихивать в СМС?
+
avatar
0
  • genix
  • 26 ноября 2018, 08:12
Вот я хочу тоже переделать как раз теплообменник на ГВС, чтобы было ограничение по температуре, но пока не могу найти адекватный по цене вариант такой управляемой задвижки на трубу с диаметром 80мм.
Про СМС писал тут — mysku.club/blog/diy/68375.html#comment2906254
+
avatar
0
  • samwell
  • 26 ноября 2018, 11:20
Я думаю тут нужно покупать нормальную электронную задвижку, понятно что она не дешево стОит, зато эффективна.
www.techmarcet.ru/zadvizhki/zadvizhki-s-ehlektroprivodom/?_openstat=ZGlyZWN0LnlhbmRleC5ydTszNDUzMTIxOTs1Njc0OTgxNzMzO3d3dy55YW5kZXgucnU6cHJlbWl1bQ&yclid=7029105930651326929
+
avatar
0
  • genix
  • 26 ноября 2018, 12:58
Наверно все-таки регулирующий клапан тут больше подходит, вот например — tem-pribor.com/catalog/selected_product:v:24.htm
У нас такие стоят на погодной автоматике. Но вот сможет ли ими управлять ESP8266 — вопрос)
+
avatar
0
  • samwell
  • 26 ноября 2018, 13:09
с точки зрения клапаном будет проще управлять, у него же два значения, по факту дискретных — открыто/закрыто. А ESP8266 сможет управлять хоть многотонным клапаном, просто нужно развязывающий контактор ставить :)
+
avatar
0
  • genix
  • 26 ноября 2018, 13:11
Не, у него там процент открытости есть) По 5% шаг
+
avatar
0
  • samwell
  • 26 ноября 2018, 13:29
Надо тогда смотреть, если концевики конечных положений, а так вероятно придется сигнал давать так же дискретный (не постоянный) вот мне именно такая и нужна программа, в этом я не силен :)
+
avatar
0
  • wwest
  • 26 ноября 2018, 12:21
Хомут купить не судьба?
Через пол года скотч отклеится.
Сразу видно программиста!
Да и вообще вся история показательна.
+
avatar
+1
  • samwell
  • 26 ноября 2018, 13:05
я так понял это на скорую руку для тестирования было наклеено. Там как минимум хомут + теплоизоляция шириной метр надо, чтобы не показывала температуру в помещении. в идеале там гильзу надо ставить. Я хз. у нас на котельной термометры все в гильзах, любой вытащил, да вставил туда датчик :)
+
avatar
0
  • genix
  • 26 ноября 2018, 13:41
Скотч, обернутый три раза вокруг трубы, не отклеится никогда) Скорее труба сгниет)

На самом деле да, этот проект был собран «для себя» — посмотреть, как оно вообще будет работать и будет ли.Ну а временные решения у нас, как водится, самые постоянные. Про хомуты кстати не вспомнил почему-то. В идеале да, гильзы должны быть на трубах, с маслом, а туда уже датчик втыкать… Но эти гильзы приделать — столько мороки… И зачем, если и так все показывает отменно) Теплоизоляцию сделал, конечно, чуть позже, я и в посте это писал.

Да и вообще вся история показательна.
Закончите мысль?
+
avatar
-1
  • asm
  • 28 ноября 2018, 12:43
А может разумнее решить проблему, чем её мониторить?
Можно найти схему теплового узла? Её автоматику?
Хотя, сразу оговорюсь: в «классических» тепловых пунктах температуру ГВС невозможно поддержать точно, да и цели такой никто никогда не ставит. Экономической справедливости ради имеет смысл поставить теплосчётчик, учитывающий потребление именно контура ГВС, и тогда в подаче +45С не будет ничего «обидного», она холоднее, но дешевле.
+
avatar
+1
  • genix
  • 28 ноября 2018, 13:30
При чем тут схема теплового узла, если выключаются котлы в котельной?
А может разумнее решить проблему, чем её мониторить?
Ок, как тогда Вы поймете, что проблема решена?

Вы плохо представляете себе работу управляющих компаний в ЖКХ с точки зрения психологии (и/или философии). Если люди не звонят, чтобы сообщить о проблеме, это не значит, что ее нет. Если компания, обслуживающая котельную, говорит, что проблема решена, это не обязательно означает, что она действительно решена. Если вы считаете, что легко сменить обслуживающую котельную компанию на более профессиональную без увеличения стоимости ее содержания для жильцов, то это тоже не так.
И отговорка «у вас горячая вода зато дешевле будет» плохо работает, когда люди просто не могут ванну горячую набрать, чтобы ребенка искупать.
+
avatar
0
  • asm
  • 29 ноября 2018, 12:44
Давайте по порядку. Я — инженер АСУТП, занимаюсь автоматизацией приточно-вытяжной вентиляции, тепловых пунктов и холодильных центров. С котельными не работаю, но общие принципы представляю.
Понятное дело, никто под «правильное решение» реконструкцию котельной не устроит, и тепловой пункт возводить не станет. Но если есть что-то, что можно «покрутить», то кручение этого самого прекрасно можно автоматизировать. Только делать это нужно нормальным контроллером, а не ардуиной-стм-есп.

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

И чисто по-человечески, очень рекомендую посмотреть на термостатические смесители, нынче их на Али от 30 долларов продают, а 15 лет назад они были по 200, и всё равно того стоили. Не панацея, но добавляют много комфорт и даже безопасности.
+
avatar
+1
  • genix
  • 29 ноября 2018, 13:15
Не очень понимаю, для чего нужно здесь приводить схему теплоснабжения, и какой именно разговор планируете сделать более предметным.
Проблемы есть две:
1. Нерегулярная подача теплоносителя на теплообменник от котельной.
2. Неэффективная работа теплообменника по нагреву воды до нужной температуры.

Первая проблема практически решена — вчера собственноручно нашли причину непонятной разницы температуры на котлах и приходящей к теплообменнику, она заключалась в том, что из 11 котлов работали только 5, а вода шла через все 11. Таким образом, разогретая до 85 градусов смешивалась с 65 градусами обратки, проходящей через выключенные котлы, и в итоге получалось 71 на выходе. А инженеры организации, обслуживающей котельную, этого не замечали. Закрыли краны на выключенных котлах и поставили на рабочих котлах температуру 73 градуса вместо 85 — верхняя линия на графике стабилизировалась. Думаю, также сократился и расход газа, но это подтвердится только 25-го декабря.

Вторую проблему с забитым теплообменником вчера увидели на тепловизоре. Прокладки для них уже заказали, как придут — поменяем и проведем промывку, будут работать. И греть водичку с гораздо большим КПД, чем сейчас.

А при чем тут смесители?
+
avatar
0
  • asm
  • 29 ноября 2018, 16:09
Смесители просто приносят много удовольствия в жизнь, вот я Вам их и рекомендую. в определённой степени они во время пользования водой нивелируют изменения т-ры ГВС.
К вопросу они не относятся.

А вот то, почему между котельной и теплообменником нет никакого регулирования, это вопрос.
Нет, заглушить не работающие котлы это хорошо, почистить теплообменник (хотя это надо каждый год делать) — тоже. Только Вы ни разу регулирование не упомянули, а это очень странно. Ну, сами посудите, если расхода ГВС нет, то теплообменник (ТО) должен лишь компенсировать остывание ГВС при циркуляции (разницу между подачей и обраткой), а если расход есть, то ему надо холодную воду (в расчёте берётся +12С) нагреть до т-ры подачи ГВС, а это совсем другая мощность. Ну вот не могу я поверить, что где-то ГВС включено через теплообменник, но не содержит регулирующего клапана (со стороны теплоносителя котельной). Он даже термо-механическим может быть, но он должен быть всегда.

Я пока промолчу о том, что в норме контур ГВС имеет два теплообменника, где первый стоит в разрыв обратки теплосети, не имея никакой регулировки, а второй уже работает «нормально».

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

И для справки: проблемы теплообменника определяют по перепаду давления на манометрах, тепловизор для этого не нужен.
+
avatar
+1
  • genix
  • 30 ноября 2018, 07:30
Регулятор температуры есть, как раз таки термо-механический. Но сейчас он выкручен на полную, чтобы исключить его влияние пока. Как только промоем теплообменники и сменим прокладки, попытаемся его включить, но не факт, что он заработает, как положено… 2008 года выпуска он и выглядит как-то не очень работоспособным.
+
avatar
+1
Мониторить нужно всегда. В том числе и для того, что бы видеть есть проблема или нет, а если есть ее решать.
+
avatar
+1
  • Genixoid
  • 01 декабря 2018, 00:25
Собрал себе подобную же штуку для измерения температуры в системе отопления, только данные слать решил не напрямую в сервер а через mqtt. Каждый датчик в свой топик.
+
avatar
0
Косяк нашел :) Хотя автор о нем наверное уже знает.
if(isset($_GET['last'])) {
        $result = mysqli_query($db_connection,"
                        SELECT DATE_FORMAT(DATE_ADD(datatime, INTERVAL 1 HOUR),'%d.%m.%Y %H:%i:%s') datatime,t1 t3,t2 t2,t3 t4,t4 t1 FROM temperatures 
                        ORDER BY datatime DESC
                        LIMIT 1");

в json.php?last=true вернет данные за 30 ноября максимум, т.к. сначала изменяется порядок в формате даты, а потом сортировка.
Главным определяющим сортировку становится день-месяц-год а не год-месяц-день.
Только 31 декабря мы увидим данные, т.к. 31>30 :)
Поправил колхозно просто добавив еще одно поле
datatime,t1 t3,t2 t2,t3 t4,t4 t1,datatime dt FROM temperatures 
                        ORDER BY dt DESC

Может есть более изящный способ?
+
avatar
0
  • genix
  • 02 декабря 2018, 19:58
Да вот тоже с утра уже поломал голову над этим:) Мой способ менее изящный, не буду его даже писать)
+
avatar
0
Менее изящным может быть только обратное преобразование в ORDER BY :)
Интересно все таки как «правильно»…
+
avatar
0
  • mm1348
  • 08 декабря 2018, 10:21
А что нужно сделать, чтобы просто просматривать время от времени данные, подключая ноут?
Нужны еще какие то модули?

P.S. Немного соображаю в котельных, но в Ардуино не погружался.
+
avatar
0
  • genix
  • 08 декабря 2018, 11:37
Для этого нужно переписать код, чтобы значения сохранялись в память устройства, а не отправлялись. А как это сделать — не знаю пока, может подключить например модуль sd-карты и писать на нее…
+
avatar
0
  • zack
  • 21 января 2019, 02:38
Подскажите пожалуйста как решить ошибку.

Arduino: 1.8.8, Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

Несколько библиотек найдено для "WiFiClient.h"
In file included from C:\arduino-1.8.8\sketch_esp8266dallas\sketch_esp8266dallas.ino:5:0:

 Используется: C:\Users\priborist\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi
C:\arduino-1.8.8\libraries\Blynk\src/BlynkSimpleEsp8266.h:18:21: fatal error: version.h: No such file or directory

Не используется: C:\arduino-1.8.8\libraries\WiFi
 #include <version.h>

Не используется: C:\arduino-1.8.8\libraries\WiFi
                     ^

Не используется: C:\arduino-1.8.8\libraries\WiFi
compilation terminated.

Не используется: C:\arduino-1.8.8\libraries\WiFi
exit status 1
Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).
+
avatar
+1
  • genix
  • 21 января 2019, 08:22
Вы видимо папку скетчей не скачали, а именно вот эта строчка намекает:
C:\arduino-1.8.8\libraries\Blynk\src/BlynkSimpleEsp8266.h:18:21: fatal error: version.h: No such file or directory
Что оно не может найти файл BlynkSimpleEsp8266.h
+
avatar
0
  • zack
  • 22 января 2019, 04:40
Ок. Спасибо вроде разобрался.
+
avatar
0
  • zack
  • 28 января 2019, 02:31
У меня возникла еще одна трудность, но уже при создании базы данных.

Создаю базу phpMyadmin с именем (temperatures) как в инструкции.
Прописываю имя и тип datatime (тип DATETIME), t1 (DECIMAL)
Выдает ошибку:
Ошибка
SQL-запрос:

CREATE TABLE  `xnnx_23357355_temperatures`.`temperatures` (

`datatime ` DATETIME NOT NULL ,
`t1` DECIMAL NOT NULL
) ENGINE = MYISAM ;

Ответ MySQL: 

#1166 - Incorrect column name 'datatime ' 

Я просто далек от этого. Подскажите пожалуйста как исправить. :)
+
avatar
+1
  • genix
  • 28 января 2019, 05:35
У вас там пробел после названия колонки как-то втесался…
+
avatar
0
  • zack
  • 28 января 2019, 07:53
Да. Вы абсолютно правы. Извините невнимателен.
И последний вопрос.
На хостинге возникла ошибка в index.php (на 17 строке) я не пойму как ее исправить
И я не понял что писать на 7 строке в место звездочек "$db_name ="
+
avatar
+1
  • genix
  • 28 января 2019, 08:34
И я не понял что писать на 7 строке в место звездочек "$db_name ="
Поэтому и ошибка. $db_name — имя базы данных (database name)
+
avatar
0
  • zack
  • 01 февраля 2019, 03:59
Ага! Кажись разобрался.
+
avatar
0
  • zack
  • 02 февраля 2019, 04:55
Что-то я не понял ничего. Вы можете уделить мне немного времени и помочь с базами за небольшое вознаграждение?
+
avatar
0
  • genix
  • 02 февраля 2019, 05:53
Напишите мне в личку вконтакте или в инстаграме, посмотрим, что у Вас не получается.
+
avatar
0
  • zack
  • 04 февраля 2019, 02:17
Кажись разобрался. (были проблемы в самом хостинге).
Но не все так просто как хотелось.
При мониторинге порта появляется такая строчка
chksum Sent to server, response: <html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("086bfc0fff34064b9b394643606af663");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://zack1156.xenn.xyz/?t1=-127.00&t2=-127.00&t3=-127.00&t4=-127.00&i=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>

это проблема в сайте или проблема в моём браузере? Если на сайте, то как ее можно решить.
+
avatar
0
  • genix
  • 04 февраля 2019, 08:02
Это означает, что при отправке запроса на адрес «zack1156.xenn.xyz/?t1=-127.00&t2=-127.00&t3=-127.00&t4=-127.00&i=1», указанный в коде, получается ответ сервера такой, как у Вас в коде, начиная с "". Сейчас при таком же запросе страница совсем чистая отдается, без каких-либо ошибок и текста мне.
+
avatar
0
  • danax
  • 05 апреля 2019, 14:52
в терминале возвращает Temperatures: t1:%.2f, t2:%.2f, t3:%.2f, t4:%.2f, т.е. не работает строка sprintf (str, «Temperatures: t1:%.2f, t2:%.2f, t3:%.2f, t4:%.2f», temp1, temp2, temp3, temp4); Предполагаю, что дело в float. Т.к. Serial.print(temp1) показывает в терминале температуру.
Где копать?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.