Подскажите, как проще сделать следующее:
У меня есть класс неких устройств скажем Device. С рядом свойств и методов
Я могу создать объект Device12345. И мое устройство будет с ним синхронизироваться и все такое.
Но Сейчас хочу включать много таких устройств и так лень их прописывать.
Хочется чего то такого:
Устройство включилось первый раз - вошло в сеть послало GET запрос на какой то скрипт(сценарий типа NewDevice) и передало свой номер(рандомный 54321) и айпи.
А скрипт создал уже в системе новый объект такого класса - Device54321 . Ну и дальше оно работает само собой.
Опять же что бы не лезьб в устройство не смореть какой айпи оно получило... Включил, указал свой вайфай - усе поехало!
Я понимаю что могу в базу просто написать и все такое - но лень - наверно уже как то кем то такое реализовано ведь?
Думал MQTT отправлять в какой то топик - но как то костылевато...
Создать новый объект класса из сценария
Модератор: immortal
-
- Сообщения: 27
- Зарегистрирован: Ср дек 05, 2012 10:58 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
- tarasfrompir
- Сообщения: 3216
- Зарегистрирован: Ср мар 02, 2016 8:18 pm
- Откуда: Украина Пирятин
- Благодарил (а): 223 раза
- Поблагодарили: 816 раз
Re: Создать новый объект класса из сценария
Примерно таким занимался модуль SSDP finderToutlemond писал(а): ↑Чт окт 01, 2020 9:07 amПодскажите, как проще сделать следующее:
У меня есть класс неких устройств скажем Device. С рядом свойств и методов
Я могу создать объект Device12345. И мое устройство будет с ним синхронизироваться и все такое.
Но Сейчас хочу включать много таких устройств и так лень их прописывать.
Хочется чего то такого:
Устройство включилось первый раз - вошло в сеть послало GET запрос на какой то скрипт(сценарий типа NewDevice) и передало свой номер(рандомный 54321) и айпи.
А скрипт создал уже в системе новый объект такого класса - Device54321 . Ну и дальше оно работает само собой.
Опять же что бы не лезьб в устройство не смореть какой айпи оно получило... Включил, указал свой вайфай - усе поехало!
Я понимаю что могу в базу просто написать и все такое - но лень - наверно уже как то кем то такое реализовано ведь?
Думал MQTT отправлять в какой то топик - но как то костылевато...
Спасибо нам ПОМОЖЕТ..!
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 632 раза
Re: Создать новый объект класса из сценария
функция addClassObject($class_name, $object_name, $system = '') не поможет?Toutlemond писал(а): ↑Чт окт 01, 2020 9:07 amПодскажите, как проще сделать следующее:
У меня есть класс неких устройств скажем Device. С рядом свойств и методов
Я могу создать объект Device12345. И мое устройство будет с ним синхронизироваться и все такое.
Но Сейчас хочу включать много таких устройств и так лень их прописывать.
Хочется чего то такого:
Устройство включилось первый раз - вошло в сеть послало GET запрос на какой то скрипт(сценарий типа NewDevice) и передало свой номер(рандомный 54321) и айпи.
А скрипт создал уже в системе новый объект такого класса - Device54321 . Ну и дальше оно работает само собой.
Опять же что бы не лезьб в устройство не смореть какой айпи оно получило... Включил, указал свой вайфай - усе поехало!
Я понимаю что могу в базу просто написать и все такое - но лень - наверно уже как то кем то такое реализовано ведь?
Думал MQTT отправлять в какой то топик - но как то костылевато...
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 27
- Зарегистрирован: Ср дек 05, 2012 10:58 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Создать новый объект класса из сценария
ОГОНЬ!
Это именно то что мне и надо. Я знал что есть метод Надо бы код с шторм бросить чтоб проще ориентироваться было...
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Создать новый объект класса из сценария
Можно поподробнее об этом? Распишите от и до. Что и как это работает. Какие устройства добавляются. Это может пригодиться другим.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 27
- Зарегистрирован: Ср дек 05, 2012 10:58 am
- Благодарил (а): 0
- Поблагодарили: 1 раз
Re: Создать новый объект класса из сценария
Конечно!
Все просто есть у меня устройства разные . но все по сути однотипные просто выполняют разные роли. на Esp
Есть у них класс - вот он
Я хочу добавить новое устройство.
Ранее я вынужден был включить его,
зайти в созданную им сеть
прописать настройки на свою сеть вот так :
А потом когда он перезагрузится искать его на роутере в ДХСП а посе ручонками создавать ему обьект класса.
А теперь же все куда проще
Когда оно включится и поняло что у него есть настройка на мою сеть :
Оно дергает посылку кипАлайв, вот так
Если keepalive ему ответил единицей - то все норм работаем как обычно порой шлем ему приветы.
А если он ничего не ответил то объекта нету - создадим его методом который любезно сообщил XOR.
Примерно вот так :
Ну тут надо прибраться в коде да и немаловажно добавить чтобы он айпи передавал. Еще допишу.
Но один фиг они теперь знают друг друга и я могу уже оперировать объектом в мажордоме чтобы говорить этому девайсику что делать.
Ну вообще тут в соседней ветке мне предлагают перейти на тасмоту или еспизи. я конечо прошью пару девайсов. обязательно. Но почему то изобретение велосипеда у меня в крови...
Все просто есть у меня устройства разные . но все по сути однотипные просто выполняют разные роли. на Esp
Есть у них класс - вот он
Я хочу добавить новое устройство.
Ранее я вынужден был включить его,
зайти в созданную им сеть
прописать настройки на свою сеть вот так :
А потом когда он перезагрузится искать его на роутере в ДХСП а посе ручонками создавать ему обьект класса.
А теперь же все куда проще
Когда оно включится и поняло что у него есть настройка на мою сеть :
Код: Выделить всё
if (ssidFromEprom != 0) {
// соединяемся с известными сетями
connectToAP2();
// Проверяем есть ли мы в мажердоме
testOrCreateObject();
} else {
// или создаем свою сеть
setUpAP();
}
Код: Выделить всё
void testOrCreateObject() {
String ansver;
ansver = SendToServer("keepalive", "alive", 1); // отправим сообщение что мы живы посмотрим ответ.
Serial.println("Send Alive signal");
Serial.println(ansver);
if (ansver.toInt() == 1) {
Serial.println("Sensor's object is created. Alive updated");
} else {
ansver = CreateServerObject(contNameFromEprom);
Serial.println("Send Create Server Object");
Serial.println(ansver);
}
}
А если он ничего не ответил то объекта нету - создадим его методом который любезно сообщил XOR.
Примерно вот так :
Код: Выделить всё
String CreateServerObject(String whVName) {
Serial.println("");
String station, getData, Link;
String host1 = "";
host1 = ip1byte;
host1 += ".";
host1 += ip2byte;
host1 += ".";
host1 += ip3byte;
host1 += ".";
host1 += ip4byte;
char charVar[sizeof(host1)];
host1.toCharArray(charVar, sizeof(charVar) + 1);
const char * host = charVar; // ip or dns
Serial.println("Create Server Object");
HTTPClient http;
//http://10.170.1.121/objects/?script=AddNewDevice&id=334455
getData = "?script=AddNewDevice";
getData += "&id=";
getData += whVName;
Serial.println(whVName);
Link = "http://";
Link += String(host) ;
Link += "/objects/" + getData;
Serial.println(Link);
http.begin(Link); //Specify request destination
int httpCode = http.GET(); //Send the request
String payload = http.getString(); //Get the response payload
Serial.println(httpCode); //Print HTTP return code
Serial.println(payload); //Print request response payload
http.end(); //Close connection
delay(50);
return payload;
}
Но один фиг они теперь знают друг друга и я могу уже оперировать объектом в мажордоме чтобы говорить этому девайсику что делать.
Ну вообще тут в соседней ветке мне предлагают перейти на тасмоту или еспизи. я конечо прошью пару девайсов. обязательно. Но почему то изобретение велосипеда у меня в крови...