Интеграция Arduino в MajorDomo

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

Модератор: immortal

StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Интеграция Arduino в MajorDomo

Сообщение StryzhakA » Пн янв 25, 2016 9:24 am

Sturgeon писал(а):Так в том то и дело, что спросить пока ничего конкретного не могу, потому что к практике не перешел. А вот у StryzhakA вполне конкретный вопрос, который мне возможно и пригодится когда-нибудь.
Да я так еще и не разобрался во всем этом. Кстати у меня при запуске системы, все цыклы остановлены, может дело в етом? Подскажите хто нибудь как запустить все цыклы.
спасибо
StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Интеграция Arduino в MajorDomo

Сообщение StryzhakA » Пн янв 25, 2016 9:26 am

Если можно, може есть у кого и не жалко, какой нибудь один пример как создать обьект со свойствами которые меняються через гер-запросы, и один пример как настроить кнопку, которая включала реле через гет-запрос.
спасибо
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Интеграция Arduino в MajorDomo

Сообщение flair » Пн янв 25, 2016 9:41 am

StryzhakA писал(а): Подскажите хто нибудь как запустить все цыклы.
спасибо
в папке с MD есть файл start.bat - он все запускает
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Интеграция Arduino в MajorDomo

Сообщение flair » Пн янв 25, 2016 10:04 am

StryzhakA писал(а):Если можно, може есть у кого и не жалко, какой нибудь один пример как создать обьект со свойствами которые меняються через гер-запросы, и один пример как настроить кнопку, которая включала реле через гет-запрос.
спасибо
может можно по другому - я делал так.
1.панель управления
2.объекты - там жмем "Добавить новый класс"
3.на новой странице, выбираем - родительский класс - "keySensor", название - knop(например) - лучше латиницей -жмем добавить
4.сверху появились вкладки... - идем во вкладку объекты
5."Добавить новый объект"
6.название - knopka(например,учтите что в ГЕТЕ ниже именно это название) - класс - knop(или как вы его обозвали) - и жмем добавить.

теперь у нас есть knopka.status (статус это от родительского)

запрос выглядит так: GET ВАШ_IP_СЕРВЕРА/objects/?object=knopka&op=m&m=statusChanged&status=0
GET ВАШ_IP_СЕРВЕРА/objects/?object=knopka&op=m&m=statusChanged&status=1
1 и 0 - для примера
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Интеграция Arduino в MajorDomo

Сообщение flair » Пн янв 25, 2016 10:19 am

создаем кнопку - вернее пользуем ту что есть в начальном MD (если Вы ее удалили , скажите, напишу как вернуть в зад)))
1.идем в панель управления
2.потом меню управления
3.ищем там Switch 1 и редактируем его (символ карандаша)
4.там меняем - связанный объект - ставим knopka, свойство status, метод statusChanged
5. сценарий выбираем свой - тот который должен срабатывать по кнопке. И жмем сохранить!
или не выбираем - но кнопка и гет запрос будет менять - knopka.status
StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Интеграция Arduino в MajorDomo

Сообщение StryzhakA » Пн янв 25, 2016 1:49 pm

flair писал(а):
StryzhakA писал(а): Подскажите хто нибудь как запустить все цыклы.
спасибо
в папке с MD есть файл start.bat - он все запускает
а у меня Дебиан версия, start.bat -там наверное нет, подскажите пожалуйста как там запустить.
спасибо
StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Интеграция Arduino в MajorDomo

Сообщение StryzhakA » Пн янв 25, 2016 2:05 pm

flair писал(а):
StryzhakA писал(а):Если можно, може есть у кого и не жалко, какой нибудь один пример как создать обьект со свойствами которые меняються через гер-запросы, и один пример как настроить кнопку, которая включала реле через гет-запрос.
спасибо
может можно по другому - я делал так.
1.панель управления
2.объекты - там жмем "Добавить новый класс"
3.на новой странице, выбираем - родительский класс - "keySensor", название - knop(например) - лучше латиницей -жмем добавить
4.сверху появились вкладки... - идем во вкладку объекты
5."Добавить новый объект"
6.название - knopka(например,учтите что в ГЕТЕ ниже именно это название) - класс - knop(или как вы его обозвали) - и жмем добавить.

теперь у нас есть knopka.status (статус это от родительского)

запрос выглядит так: GET ВАШ_IP_СЕРВЕРА/objects/?object=knopka&op=m&m=statusChanged&status=0
GET ВАШ_IP_СЕРВЕРА/objects/?object=knopka&op=m&m=statusChanged&status=1
1 и 0 - для примера
скажите пожалуйста, ваш пример гет-запроса обусловлен самим МД или скетчем Ардуино, потому что по моей версии скетча, запрос выглядет так: http://xx.xx.xx.xx/command?46=ON
как мне в моем случае правильно прописать его в свойствах?
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Интеграция Arduino в MajorDomo

Сообщение flair » Пн янв 25, 2016 2:10 pm

дайте скетч посмотреть....
мой пример под мой скетч....
flair
Сообщения: 198
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Интеграция Arduino в MajorDomo

Сообщение flair » Пн янв 25, 2016 2:14 pm

StryzhakA писал(а):
а у меня Дебиан версия, start.bat -там наверное нет, подскажите пожалуйста как там запустить.
спасибо
http://majordomo.smartliving.ru/Main/SetupLinux
в этой инструкции есть пункт как прописать старт главного цикла
StryzhakA
Сообщения: 97
Зарегистрирован: Сб янв 23, 2016 3:57 pm
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Интеграция Arduino в MajorDomo

Сообщение StryzhakA » Пн янв 25, 2016 2:36 pm

flair писал(а):дайте скетч посмотреть....
мой пример под мой скетч....
command_t const gCommandTable[COMMAND_TABLE_SIZE] = {
// {"LED", commandsLed, },
{"HELP", commandsHelp, }, // Выводит список комманд (вызов http://xx.xx.xx.xx/command?8=HELP )
{"ON", commandsOn, }, // Устанавливает "1" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=ON )
{"OFF", commandsOff, }, // Устанавливает "0" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=OFF )
{"STATUS", commandsStatus, }, // Получить состояние цифрового порта (1 или 0) (вызов http://xx.xx.xx.xx/command?8=STATUS ),
// если вместо номера порта передать ALL (вызов http://xx.xx.xx.xx/command?ALL=STATUS ), то получим состояние всех портов (Пример вывода P3=0;P4=0;P5=0;P6=0;P7=0;P8=1;P9=1;)
{"TEMP", commandsTemp, }, // Получить температуры цифрового датчика (также влажность) (вызов http://xx.xx.xx.xx/command?8=TEMP ),
{"CLICK", commandsClick, }, // Кратковременная "1" на порту 1сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=CLICK )
{"LCLICK", commandsLClick, }, // Кратковременная "1" на порту 3сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=LCLICK )
{NULL, NULL }
};

void cliProcessCommand(WebServer &server)
{
int bCommandFound = false;
int idx;

gParamValue = strtol(gParamBuffer, NULL, 0); // Convert the parameter to an integer value. If the parameter is empty, gParamValue becomes 0.
for (idx = 0; gCommandTable[idx].name != NULL; idx++) { // Search for the command in the command table until it is found or the end of the table is reached. If the command is found, break out of the loop.
if (strcmp(gCommandTable[idx].name, gCommandBuffer) == 0) {
bCommandFound = true;
break;
}
}

if (bCommandFound == true) { // Если команда найдена (в массиве команд), то выполняем ее. Если нет - игнорируем
(*gCommandTable[idx].function)(server);
}
else { // Command not found
server.print("ERROR: Command not found");
}
}


/**********************************************************************************************************************/
/* Обработчики команд */

void commandsOn(WebServer &server) {
if ((gParamValue=46) && (RelayPumpStatusNow == 0)) {
RelayPumpStatusNow = !RelayPumpStatusNow;
}
else if ((gParamValue=47) && (RelayConvStatusNow == 0)) {
RelayConvStatusNow = !RelayConvStatusNow;
}
else ErrorMessage(server);
}

void commandsOff(WebServer &server) {
if ((gParamValue=46) && (RelayPumpStatusNow == 1) && PumpPrior == 0) {
RelayPumpStatusNow = !RelayPumpStatusNow;
}
else if ((gParamValue=47) && (RelayConvStatusNow == 1)) {
RelayConvStatusNow = !RelayConvStatusNow;
}
else ErrorMessage(server);
}

void commandsClick(WebServer &server) {
if (gParamValue>=startPin && gParamValue<=endPin) {
digitalWrite(gParamValue,HIGH);
delay(delayClick);
digitalWrite(gParamValue,LOW);
} else ErrorMessage(server);
}

void commandsLClick(WebServer &server) {
if (gParamValue>=startPin && gParamValue<=endPin) {
digitalWrite(gParamValue,HIGH);
delay(delayLClick);
digitalWrite(gParamValue,LOW);
} else ErrorMessage(server);
}

void commandsStatus(WebServer &server) {
if (strcmp(gParamBuffer, "ALL") == 0) { // выдать состояние всех пинов
for(int i=startPin;i<=endPin;i++) {
int st=digitalRead(i);
char my_st[5];
itoa(st,my_st,10);
server.print("P");
server.print(i);
server.print("=");
server.print(my_st);
server.print(";");
}
} else { // выдать состояние только 1 пина
if (gParamValue>=startPin && gParamValue<=endPin) {
server.print("P");
server.print(gParamValue);
server.print("=");
server.print(digitalRead(gParamValue));
} else ErrorMessage(server);
}
}
void commandsTemp(WebServer &server) {
float t1 = sens.readTemperature(44);
float h1 = sens.readHumidity(44);
delay(1000);
float t2 = sens.readTemperature(45);
float h2 = sens.readHumidity(45);
delay(1000);
if (gParamValue>= 44 && gParamValue<= 45) {
server.print("<hr>Temp=");
server.print(sens.readTemperature (gParamValue));
server.print("<hr>Humidity=");
server.print(sens.readHumidity(gParamValue));
}
else ErrorMessage(server);
}

void commandsHelp(WebServer &server) {
int idx;
for (idx = 0; gCommandTable[idx].name != NULL; idx++) {
server.print(gCommandTable[idx].name);
server.print("<br>");
}
}
За это сообщение автора StryzhakA поблагодарил:
Stryzhak (Пн авг 22, 2022 4:46 pm)
Рейтинг: 1.16%
Ответить