У многих дома стоят счётчики воды с импульсным выходом — это два проводка, которые «щёлкают» при прохождении определённого объёма воды (например, 1 литр). Зачем они? Чтобы можно было считывать расход автоматически. Но как из этого сделать что-то полезное — особенно если у тебя своя система на PHP?
Разберём всё по шагам: от железа до mos.ru.
Это импульсный выход. Обычно:
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();
}
}
Создай файл 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']} л";
Краткий ответ: нет, нельзя напрямую.
Сервисы вроде mos.ru, Госуслуги или ЖКХ-порталы:
Технически можно попробовать эмулировать браузер (например, через Puppeteer), но:
Вывод: автоматическая отправка в госсистемы — плохая идея. Лучше:
Есть коммерческие решения:
Поэтому — самописный HTTP-подход самый практичный.
Зато теперь у тебя всегда под рукой актуальные показания — и никаких штрафов за просрочку!
Комментарии
Пока нет комментариев. Будьте первым!