Как измерить приближение глобального кризиса по синусоиде у себя в розетке
Калужская область Сценарий: НПЗ горит, свет пока есть
Итог: ~1500-2000 руб за комплект. Всё паяется на коленке и прячется в бокс на DIN-рейку.
Создаём таблицу для хранения «сырых» замеров. Чтобы потом рисовать годовые графики и ловить тренды.
-- База: energy_monitor
CREATE TABLE IF NOT EXISTS grid_quality (
id INT AUTO_INCREMENT PRIMARY KEY,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
voltage_rms FLOAT COMMENT 'Среднекв. напряжение (В)',
frequency FLOAT COMMENT 'Частота (Гц)',
thd_percent FLOAT COMMENT 'Коэф. гармоник (%)',
peak_voltage FLOAT COMMENT 'Пиковое напряжение',
sag_count INT DEFAULT 0 COMMENT 'Счётчик просадок за сутки',
swell_count INT DEFAULT 0 COMMENT 'Счётчик скачков',
outage_flag BOOLEAN DEFAULT FALSE COMMENT 'Было отключение',
raw_adc TEXT COMMENT 'JSON сырых данных для анализа'
);
-- Индекс для быстрых выборок по времени
CREATE INDEX idx_timestamp ON grid_quality(timestamp);
Код для ESP32, который раз в 5 минут шлёт данные на ваш сервер с MySQL.
import network, urequests, json, time from machine import ADC, Pin import mysql.connector # если на сервере, или API-шлюз # -------- Заглушка для замера (ADC) -------- adc_voltage = ADC(Pin(34)) adc_voltage.atten(ADC.ATTN_11DB) # диапазон 0-3.6В def measure_network(): # Здесь логика расчёта RMS и частоты через Zero-Crossing raw = adc_voltage.read() # 0-4095 voltage = (raw / 4095.0) * 3.3 * 100 # примерный калибр freq = 50.0 # Заглушка, реально считаем по таймерам thd = 2.1 # Заглушка return voltage, freq, thd # -------- Отправка в БД (через API) -------- def save_to_mysql(voltage, freq, thd): sql = f"INSERT INTO grid_quality (voltage_rms, frequency, thd_percent) VALUES ({voltage}, {freq}, {thd})" # Тут либо прямой драйвер MySQL, либо POST на ваш PHP/Python бэкенд print(f"SQL: {sql}") # Главный цикл while True: v, f, t = measure_network() save_to_mysql(v, f, t) time.sleep(300) # 5 минут
Через год запускаешь этот запрос и смотришь: если среднее напряжение упало на 5-10В, а частота стала гулять — пора покупать инвертор.
SELECT
DATE(timestamp) as day,
AVG(voltage_rms) as avg_voltage,
MIN(voltage_rms) as min_voltage,
AVG(frequency) as avg_freq,
STDDEV(frequency) as freq_jitter,
SUM(sag_count) as total_sags
FROM grid_quality
WHERE timestamp > DATE_SUB(NOW(), INTERVAL 1 YEAR)
GROUP BY day
ORDER BY day;
Если хочешь красиво — подними Grafana, подключи к ней твою БД и настрой дашборд:
Это будет выглядеть как настоящий диспетчерский пункт. Идеальный пост для IT-блога.
Комментарии
Пока нет комментариев. Будьте первым!