ПОМОГИТЕ кому не сложно ARDUINO датчики

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение serghei » Вт сен 20, 2016 8:24 am

Тогда надо что то делать с протоколом. Статус изменился - ушел пакет , и пока не получили подтверждение отправляем постоянно. Получили - следующее через какое то время время. Так реализовано в АМС.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Вт сен 20, 2016 12:46 pm

У меня счас так и реализовано. Долбит до тех пор пока не получит подтверждения. Ну есть только тайм аут, скажем 10 попыток, на случай если вдруг что с устройством, ну сдохло или еще что. Из за это получается ардуина перегружена. Вот думаю надо как то либо протокол поменять, либо разделить функции на две дуины, ну или пожертвовать какими то подтверждениями.
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение ipz » Вт сен 20, 2016 7:52 pm

Мне кажется)), что библиотека MySensors Вам поможет...
Полностью от проблем, конечно, не избавит, но под Ваше описание подходит...
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение serghei » Вт сен 20, 2016 9:39 pm

Интересная эта тема - протокол. И наверное обсуждать надо не тут. В АМС столкнулся с ситуацией - первая версия очень удачная, в запросе куча настроек и проходит всегда с первого раза. С пятью сенсорами приходит ответ - передача не удалась, хотя все цифры отображаются корректно с первого раза. В сторону MySensor только начинаю смотреть. С учетом когда сделают свой гейт.....
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Ср сен 21, 2016 7:40 am

Всем привет. Нашел проблему она не совсем в сервере. Точнее в сети радиоканала. С сервера по радио данные улетают, вроде как и сразу получает получатель, а вот ответ не доходит. И сервер начинает опять его долбить. Начал выяснять при переходе радио модуля с передачи на прием не хватает тех задержек что регламентируют. Вчера на одном датчике поэкспериментировал с задержкой после перехода на прием сервера передающий модуль не сразу отвечает а делает паузу (я поставил 200-300мс). Вроде ответы доходят все и сразу. Сегодня погоняю еще. Я все данные прохождения по этапам вывел в COM порт там сразу все видно кто в цепочке косячит.
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Ср сен 21, 2016 7:45 am

И еще думаю надо при отправке каких то запросов с majordomo на включение чего то или установки каких то параметров, сделать полный перехват работы сервера и выполнение пришедшего задания. А потом доделка сервером начатого. Так сказать датчики с параметрами немного подождут. А до этого ставилась задача в очередь.
Sergey2055
Сообщения: 73
Зарегистрирован: Ср авг 31, 2016 7:54 am
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение Sergey2055 » Ср сен 21, 2016 7:49 am

Но самое я считаю незаменимое это то что мне помог реализовать nick7zmail. Сейчас такой запрос решает кучу проблем и не надо городить огород.
Аватара пользователя
mazahaka7sk
Сообщения: 54
Зарегистрирован: Сб фев 20, 2016 8:46 am
Откуда: Усть-Каменогорс
Благодарил (а): 8 раз
Поблагодарили: 10 раз
Контактная информация:

Re: ПОМОГИТЕ кому не сложно ARDUINO датчики

Сообщение mazahaka7sk » Пн ноя 14, 2016 7:08 pm

Собрал у всех по кусочкам и ЗАРАБОТАЛО) :P
кому нужно вот скетч
СпойлерПоказать
int cycle_counter=0;
char val = 0;
int old_SensorSpalnaD=0;
int old_SensorZalD=0;
int old_SensorKyxnaD=0;
int old_SensorKoridorD=0;
int old_SensorTyaletD=0;
int old_Sensorvodityalet=0;
#include "DHT.h"

#define DHTPIN 12 // what pin we're connected to

#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);

unsigned int sensorValue = 0;
char buf[80];

// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf);
}


void setup()
{
Serial.println("DHTxx test!");

dht.begin();

pinMode(2, INPUT); // Датчик движение спальня 2 пин
old_SensorSpalnaD=digitalRead(2);

pinMode(3, INPUT); // Датчик движение зал 3 пин
old_SensorZalD=digitalRead(3);

pinMode(4, INPUT); // Датчик движение кухня 4 пин
old_SensorKyxnaD=digitalRead(4);

pinMode(5, INPUT); // Датчик движение коридор 5 пин
old_SensorKoridorD=digitalRead(5);

pinMode(6, INPUT); // Датчик движение туалет 6 пин
old_SensorTyaletD=digitalRead(6);

pinMode(7, OUTPUT); // реле света спальня 7 пин

pinMode(8, OUTPUT); // реле подсветки кухня 8 пин

pinMode(9, OUTPUT); // реле лазер охрана 9 пин

pinMode(10, INPUT); // сенсор воды туалет 10 пин
old_Sensorvodityalet=digitalRead(10);

pinMode(11, OUTPUT); // реле звука туалет 11 пин


//pinMode(12, OUTPUT); // реле 12пин температура

pinMode(13, OUTPUT); // реле 13 пин

Serial.begin(115200); // Скорость консольного порта 9600 (пригодится для отладки)
}

void loop()
{
{
if (Serial.available() > 0) {
val = Serial.read();
if (val=='B') digitalWrite(7,HIGH); // выключить свет
if (val=='V') digitalWrite(7,LOW); // включить свет
if (val=='Z') digitalWrite(8,HIGH); // выключить свет
if (val=='X') digitalWrite(8,LOW); // включить свет
if (val=='S') digitalWrite(12,HIGH); // выключить свет
if (val=='D') digitalWrite(12,LOW); // включить свет
if (val=='F') digitalWrite(13,HIGH); // выключить свет
if (val=='G') digitalWrite(13,LOW); // включить свет
if (val=='K') digitalWrite(9,HIGH); // выключить свет
if (val=='L') digitalWrite(9,LOW); // включить свет
}
}


int valid_sensor=0;
delay(1000); // задержка в 0.1 сек.
cycle_counter++;

if (cycle_counter>600) {
cycle_counter=0;
}

//движение спальня
Serial.println("G");
int current_SensorSpalnaD=digitalRead(2);
//Serial.println(current_SensorSpalnaD);
if (current_SensorSpalnaD!=(int)old_SensorSpalnaD) {
old_SensorSpalnaD=(int)current_SensorSpalnaD;
sprintf(buf, "GET /objects/?object=SensorSpalnaD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorSpalnaD);
sendHTTPRequest();
}

//GARAGE GATES SENSOR
Serial.println("H");
int current_SensorZalD=digitalRead(3);
//Serial.println(current_SensorZalD);
if (current_SensorZalD!=(int)old_SensorZalD) {
old_SensorZalD=(int)current_SensorZalD;
sprintf(buf, "GET /objects/?object=SensorZalD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorZalD);
sendHTTPRequest();
}

//GARAGE GATES SENSOR
Serial.println("T");
int current_SensorKyxnaD=digitalRead(4);
//Serial.println(current_SensorKyxnaD);
if (current_SensorKyxnaD!=(int)old_SensorKyxnaD) {
old_SensorKyxnaD=(int)current_SensorKyxnaD;
sprintf(buf, "GET /objects/?object=SensorKyxnaD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorKyxnaD);
sendHTTPRequest();
}

//GARAGE GATES SENSOR
Serial.println("N");
int current_SensorKoridorD=digitalRead(5);
//Serial.println(current_SensorKoridorD);
if (current_SensorKoridorD!=(int)old_SensorKoridorD) {
old_SensorKoridorD=(int)current_SensorKoridorD;
sprintf(buf, "GET /objects/?object=SensorKoridorD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorKoridorD);
sendHTTPRequest();
}

//GARAGE GATES SENSOR
Serial.println("O");
int current_SensorTyaletD=digitalRead(6);
//Serial.println(current_SensorTyaletD);
if (current_SensorTyaletD!=(int)old_SensorTyaletD) {
old_SensorTyaletD=(int)current_SensorTyaletD;
sprintf(buf, "GET /objects/?object=SensorTyaletD&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_SensorTyaletD);
sendHTTPRequest();

}


//Сенсор воды туалет
// Serial.println("P");
// int current_Sensorvodityalet=digitalRead(10);
//Serial.println(current_Sensorvodityalet);
// if (current_Sensorvodityalet!=(int)old_Sensorvodityalet) {
// old_Sensorvodityalet=(int)current_Sensorvodityalet;
// sprintf(buf, "GET /objects/?object=Sensorvodityalet&op=m&m=statusChanged&status=%t HTTP/1.0", (int)current_Sensorvodityalet);
// sendHTTPRequest();
//}

// DHT
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();

// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT");
}
else
{
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");

int h2 = (h - (int)h) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=humSensor01&op=m&m=humChanged&h=%0d.%d", (int)h, abs(h2));
sendHTTPRequest();
int t2 = (t - (int)t) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=TempSensor01&op=m&m=tempChanged&t=%0d.%d", (int)t, abs(t2));
sendHTTPRequest();

// end DHT

}
}
CONNECT |Группа в VK| ЮТУБ КАНАЛ
Система стоит на Raspberry pi 3b v3.31
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
Ответить