Я так пока не умею, если не сложно, покажите пример такой отправки
тогда надо точное ТЗ, что бы нельзя было его трактовать двояко, и все там было описано, и просто понималось… и понимание наверное нужно что оплатить надо в 10 раз дороже чем вы хотите предложить… но все же это не точно…
а приложение надо заменить веб сервером наверное… в крайнем случае вы его сами сделаете апк приложением….
шутки шутками, но больше напоминает что надо все сделать за вас….
но может кто позже поможет примером кода….
Может это вопрос не сюда дб, но сколько может стоить разработка такого решения? Хотя бы ориентировочно, на основании того, что я уже написал.
Конечно я не готов тратить миллионы на приложение для себя, поэтому и пытаюсь разобраться сам в вопросе, если пойму, что не смогу, пойду другим путем.
а приложение надо заменить веб сервером наверное… в крайнем случае вы его сами сделаете апк приложением….
У меня такое есть самодельное, но у него есть ряд недостатков: основной - мне важно, чтобы при срабатывании датчика на открытие, эта инфа сразу была послана на телефон в виде сигнала о тревоге, а приложение, отображающее данные веб-сервера так не может или я не разобрался, что может. Т.е. оно показывает все данные, когда я его запускаю, но всплыть из фонового режима и уведомить меня о чем-то не может.
но может кто позже поможет примером кода….
мне и нужен пример кода, но как Вы мне ответили на 1й вопрос было, конечно, идеальным вариантом)
я хочу приложение на телефоне, которое сообщает мне об открытых дверях и окнах, передает информацию по температуре и еще пару других датчиков.
У меня нет слов, кроме матерных, три дня ты нам тут мозги паришь. То что хочешь давно у всех есть и примеров рабочих больше десятка в интернетах и только ленивый про это еще не писал и не показывл, и других не учил как это сделать. И называется это телеграм бот.
И например у меня это вот так …
первое значение - данные датчика, второе время.
А как именно Вы собираетесь различать, где первое, а где - второе?
А как именно Вы собираетесь различать, где первое, а где - второе?
Моя непрофессиональная мысль была такая: есть запрос на сервер типа
add_new.php?g1[]=1&g1[]=”12:20:24”&g1[]=0&g1=”12:20:54”
в итоге в обработчике
$g1 = [];
if(isset($_GET[“g1”]))
{
$g1 = $_GET["g1"];
}
В итоге g1[0]=1 - значение датчика, g1[1] - время этого значения.
g1[2]=0 - следующее значение датчика, g1[3] - время этого значения.
И называется это телеграм бот.
не хочу телеграм бот, тем более скоро он перестанет работать. хотел отдельное приложение по умному дому
У меня нет слов, кроме матерных, три дня ты нам тут мозги паришь.
я вроде никого не заставляю помогать мне, просто прошу помощи, если нет, значит нет и на этом спасибо
приложение
Это уже вчерашний день. Переходи на Matter или в крайнем случае зигби. Все колонки поддерживают эти протоколы.
Это уже вчерашний день. Переходи на Matter или в крайнем случае зигби
a совместно с mqtt тоже не вариант?
https://www.wqtt.ru/ может пригодится… или умный дом какой то… только там вроде отслеживается время получения ответа… но может и можно что то придумать…
а вы точно честны в том что надо ?))) и точно отправка будет каждые 10 секунд ? а то окажется каждый час, еще и объема памяти не хватит, и сразу лучше писать отправку с sd карты…
а почему не отправлять данные сразу по событию ? событие произошло отправили данные….
https://www.wqtt.ru/ может пригодится
спасибо
лучше писать отправку с sd карты…
я тоже думал об этом, тк может не быть связи и чтобы данные не пропали их надо будет записывать на sd, а потом при восстановлении отправлять на сервер.
10 секунд - это лимит веб-сервера, которым я пользуюсь, если делать чаще запросы от выдает ошибку 429 Too many requests
Моя непрофессиональная мысль была такая: есть запрос на сервер типа
add_new.php?g1=1&g1=”12:20:24”&g1=0&g1=”12:20:54”
Передача в виде строк в человекочитаемом виде - худший вариант, который можно придумать. Нафига тут вот эти “g1=”, для кого? Для компа?
Сам посмотри - в твоей записи 41 символ для передачи двух значений по байту и двух отметок времени , для которых хватило бы трёх байт.
Это не говоря о том, что это потом ещё и при получении раскодировать нужно.
mqtt брокер позволяет отправлять по событию, этот время в логах указывает сам…
тогда вопрос отпал или нет ?))) вроде и приложение апк у них есть, через него в личный кабинет попадаете…
настройка на том сервере я бы сделал за 30к)))
вникать в ваш не хочется… по этому сделал бы на вашем за 80к)))
- это все надо собирать мне самому и тестировать…
и это если чего то сложного не окажется, иначе дороже, и цены без шуток!!!))
// Параметры
const int SENSOR_COUNT = 8;
const int SENSOR_PINS[SENSOR_COUNT] = {2, 3, 4, 5, 6, 7, 8, 9};
const unsigned long SEND_INTERVAL = 10000; // 10 секунд
const unsigned long DEBOUNCE_DELAY = 50; // 50 мс на устранение дребезга
// Структура события
struct Event {
int sensorId;
bool state; // true = замкнут (например), false = разомкнут
unsigned long time;
};
// Буфер событий (на 50 событий, например)
const int MAX_EVENTS = 50;
Event eventBuffer[MAX_EVENTS];
int eventCount = 0; // Текущее количество событий в буфере
// Переменные для антидребезга и хранения состояния
bool lastStableState[SENSOR_COUNT];
bool lastReading[SENSOR_COUNT];
unsigned long lastDebounceTime[SENSOR_COUNT];
// Таймер отправки
unsigned long lastSendTime = 0;
void setup() {
Serial.begin(9600); // Для отладки, если нужно
for (int i = 0; i < SENSOR_COUNT; i++) {
pinMode(SENSOR_PINS[i], INPUT_PULLUP); // Геркон обычно замыкает на GND, используем подтяжку
lastStableState[i] = digitalRead(SENSOR_PINS[i]);
lastReading[i] = lastStableState[i];
lastDebounceTime[i] = 0;
}
lastSendTime = millis();
}
void loop() {
checkSensors(); // 1. Проверяем датчики на наличие новых событий
sendDataTimer(); // 2. Проверяем, не пора ли отправить данные
}
// Функция проверки датчиков с антидребезгом
void checkSensors() {
for (int i = 0; i < SENSOR_COUNT; i++) {
int reading = digitalRead(SENSOR_PINS[i]);
// Если значение изменилось, сбрасываем таймер
if (reading != lastReading[i]) {
lastDebounceTime[i] = millis();
lastReading[i] = reading;
}
// Если прошло достаточно времени (50 мс) и состояние стабильно
if ((millis() - lastDebounceTime[i]) > DEBOUNCE_DELAY) {
// И если это состояние отличается от последнего стабильного
if (reading != lastStableState[i]) {
// СОБЫТИЕ! Сохраняем его
lastStableState[i] = reading;
addEvent(i, reading); // Добавляем событие в буфер
}
}
}
}
// Функция добавления события в буфер
void addEvent(int sensorId, bool state) {
if (eventCount < MAX_EVENTS) {
eventBuffer[eventCount].sensorId = sensorId;
eventBuffer[eventCount].state = state;
eventBuffer[eventCount].time = millis(); // Запоминаем время события
eventCount++;
// Для отладки можно вывести в Serial
// Serial.print("Event: D"); Serial.print(sensorId); Serial.print(" = "); Serial.println(state);
} else {
// Буфер переполнен! Старые события будут потеряны.
// Можно реализовать перезапись самых старых или увеличить MAX_EVENTS.
// Но для 8 датчиков и 10 секунд 50 событий обычно хватает с запасом.
}
}
// Функция отправки данных по таймеру
void sendDataTimer() {
if (millis() - lastSendTime >= SEND_INTERVAL) {
lastSendTime = millis(); // Сброс таймера
if (eventCount == 0) {
// Нет событий за последние 10 секунд
sendEmptyPayload(); // Отправляем "пустой" сигнал, что всё тихо
} else {
// Есть события - формируем запрос
sendPayload();
}
// Важно: Очищаем буфер событий для следующего интервала
eventCount = 0;
}
}
// Функция формирования GET-запроса
void sendPayload() {
String url = "/api/endpoint?data="; // Ваш базовый URL
for (int i = 0; i < eventCount; i++) {
Event e = eventBuffer[i];
// Формат: ID:Состояние:Время_от_начала_отсчета
// Время нужно будет интерпретировать на сервере относительно начала работы Arduino
// или вы можете синхронизировать время предвварительно.
url += String(e.sensorId) + ":";
url += String(e.state ? 1 : 0) + ":";
url += String(e.time);
if (i < eventCount - 1) {
url += ","; // Разделитель между событиями
}
}
// Здесь ваш код отправки HTTP GET (через Ethernet, WiFi и т.д.)
// http://your-server.com + url
Serial.println("Sending: " + url); // Для отладки
}
void sendEmptyPayload() {
// Отправляем запрос, что всё спокойно, или просто пинг
Serial.println("No events. Sending heartbeat.");
// http://your-server.com/api/endpoint?status=ok
}
в коде наверняка будут баги, что то будет не учтено!
как отправлять с sd карты… не подскажу, надо вникать в ваш сервер…
можно как то грубо сделать… произошло событие, записали его, потом сформировали все события произошедшие, и отправили их строкой, удалив документ… и дальше пишите заново если что то произошло…
У меня уже много лет работает умный дом mojordomo. Работет он на маленькой плате raspberry pi zero w. Выход в сеть через роутер keenetic, который имеет виртуальный внешний адресс. Делает всё что ты хочешь. Http mqtt сервера на этой плате работают.
а еще на ум вот что приходит, добавить часы, и все события пишем на sd карту, 01.03.2026.txt создаем документ каждые сутки, и записываем что происходило и когда, еще для этого всего сделать веб сервер надо, для просмотра там, и открытия документов, за 30к сервер, и за 10к настройку выхода сервера в интернет… для его выхода в интернет вы просто покупаете у своего оператора постоянный ип, и далее можете управлять сервером через интернет… мне бы по крайней мере было интересно взяться и посидеть с кодом))) думаю это вариант самый реальный что бы найти человека на форуме…
естественно это все так сможете попытаться сделать через ии, вроде должен справится…
ну а если нет, пишите)))
Когда-то была телеметрия с низкой скоростью и пропаданиями/ошибками.
Выдает один байт состояния герконов на момент запроса=отправки.
А второй байт с единичками в битах, если были изменения после предыдущей отправки.
Если текстом, то например ![]()
“ОООССООО” Open / Close
“CCUUUCCC“ Change / Unchanged
Если нужен факт проникновения, то секунды неинтересны и даже минут 5 точность приемлемо.
Обычно идет рассинхронизация часов в разных системах сбора/передачи/анализа/отображения. Хотя иногда используется сигнал синхронизации раз в час или сутки.
Спасибо за предложение, я подумаю. Не хотелось, конечно никаких ip покупать. Хостинг уже есть какой-никакой и планы были именно на него.
По записи на sd все равно надо делать, тк может быть отключение интернета. Я думал записывать на sd, если не получается отправить данные на сервер.
За код отдельное спасибо, буду вечером его тестировать
Хостинг уже есть какой-никакой и планы были именно на него
POST запрос и через PHP лей в базу, 10 секунд это очень часто, минута нормальный интервал
Не хотелось,
наверное не кому не хочется вникать в ваш сервер,(даже если платите деньги!))) ) и хочет быстро обменять знания на деньги, быстро написав все свое, то что он делает ежедневно, так как в будущем ваш сервер ему никак не пригодится))) и главное сервер будет полностью ваш, а ип меняется, и постоянные ип покупают у операторов интернета… если не нужно управление через интернет, то и покупать не надо)))
