Категории

Как автоматизировать передачу показаний счётчиков воды: от провода до mos.ru

13.01.2026 | Статья из категории: IOT умный дом

Как автоматизировать передачу показаний счётчиков воды: от провода до mos.ru

У многих дома стоят счётчики воды с импульсным выходом — это два проводка, которые «щёлкают» при прохождении определённого объёма воды (например, 1 литр). Зачем они? Чтобы можно было считывать расход автоматически. Но как из этого сделать что-то полезное — особенно если у тебя своя система на PHP?

Разберём всё по шагам: от железа до mos.ru.

1. Что за провод у счётчика?

Это импульсный выход. Обычно:

2. Собираем «умный» узел на ESP32

ESP32 — идеален: есть Wi-Fi, GPIO, питание от USB, стоит ~300–500 руб.

Подключение:

Код для ESP32 (Arduino IDE):

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "ТВОЙ_SSID";
const char* password = "ТВОЙ_ПАРОЛЬ";
const char* url = "http://твой-сайт.ру/water_meter.php";

const int pulsePin = 4;
volatile unsigned long pulseCount = 0;
unsigned long lastSent = 0;
const float litersPerPulse = 1.0; // Уточни в паспорте счётчика!

void IRAM_ATTR onPulse() {
  pulseCount++;
}

void setup() {
  Serial.begin(115200);
  pinMode(pulsePin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(pulsePin), onPulse, FALLING);
  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void loop() {
  if (millis() - lastSent > 60000) { // раз в минуту
    HTTPClient http;
    String fullUrl = String(url) + "?counter=hot&liters=" + String(pulseCount * litersPerPulse);
    
    http.begin(fullUrl);
    int code = http.GET();
    http.end();
    
    if (code == 200) Serial.println("Отправлено");
    lastSent = millis();
  }
}

3. Приём данных на своём сайте (PHP)

Создай файл water_meter.php:

<?php
$counter = $_GET['counter'] ?? 'unknown';
$liters = $_GET['liters'] ?? null;

if ($liters === null) die('Нет данных');

$pdo = new PDO("mysql:host=localhost;dbname=ваша_бд", "юзер", "пароль");
$stmt = $pdo->prepare("
  INSERT INTO water_meters (counter_type, total_liters, updated_at)
  VALUES (?, ?, NOW())
  ON DUPLICATE KEY UPDATE total_liters = VALUES(total_liters)
");
$stmt->execute([$counter, $liters]);
echo "OK";
?>

И таблицу в БД:

CREATE TABLE water_meters (
  counter_type VARCHAR(20) PRIMARY KEY,
  total_liters FLOAT NOT NULL,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Теперь на главной странице можно выводить:

$meters = $pdo->query("SELECT * FROM water_meters")->fetchAll(PDO::FETCH_KEY_PAIR);
echo "Горячая: {$meters['hot']} л";

4. А можно ли отправлять сразу на mos.ru?

Краткий ответ: нет, нельзя напрямую.

Сервисы вроде mos.ru, Госуслуги или ЖКХ-порталы:

Технически можно попробовать эмулировать браузер (например, через Puppeteer), но:

Вывод: автоматическая отправка в госсистемы — плохая идея. Лучше:

5. Альтернативы: готовые сервисы?

Есть коммерческие решения:

Поэтому — самописный HTTP-подход самый практичный.

Итог

Зато теперь у тебя всегда под рукой актуальные показания — и никаких штрафов за просрочку!

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0


кто я | о блоге

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA