Страница 2 из 3

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

Добавлено: Пн янв 25, 2016 9:24 am
StryzhakA
Sturgeon писал(а):Так в том то и дело, что спросить пока ничего конкретного не могу, потому что к практике не перешел. А вот у StryzhakA вполне конкретный вопрос, который мне возможно и пригодится когда-нибудь.
Да я так еще и не разобрался во всем этом. Кстати у меня при запуске системы, все цыклы остановлены, может дело в етом? Подскажите хто нибудь как запустить все цыклы.
спасибо

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

Добавлено: Пн янв 25, 2016 9:26 am
StryzhakA
Если можно, може есть у кого и не жалко, какой нибудь один пример как создать обьект со свойствами которые меняються через гер-запросы, и один пример как настроить кнопку, которая включала реле через гет-запрос.
спасибо

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

Добавлено: Пн янв 25, 2016 9:41 am
flair
StryzhakA писал(а): Подскажите хто нибудь как запустить все цыклы.
спасибо
в папке с MD есть файл start.bat - он все запускает

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

Добавлено: Пн янв 25, 2016 10:04 am
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 - для примера

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

Добавлено: Пн янв 25, 2016 10:19 am
flair
создаем кнопку - вернее пользуем ту что есть в начальном MD (если Вы ее удалили , скажите, напишу как вернуть в зад)))
1.идем в панель управления
2.потом меню управления
3.ищем там Switch 1 и редактируем его (символ карандаша)
4.там меняем - связанный объект - ставим knopka, свойство status, метод statusChanged
5. сценарий выбираем свой - тот который должен срабатывать по кнопке. И жмем сохранить!
или не выбираем - но кнопка и гет запрос будет менять - knopka.status

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

Добавлено: Пн янв 25, 2016 1:49 pm
StryzhakA
flair писал(а):
StryzhakA писал(а): Подскажите хто нибудь как запустить все цыклы.
спасибо
в папке с MD есть файл start.bat - он все запускает
а у меня Дебиан версия, start.bat -там наверное нет, подскажите пожалуйста как там запустить.
спасибо

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

Добавлено: Пн янв 25, 2016 2:05 pm
StryzhakA
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
как мне в моем случае правильно прописать его в свойствах?

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

Добавлено: Пн янв 25, 2016 2:10 pm
flair
дайте скетч посмотреть....
мой пример под мой скетч....

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

Добавлено: Пн янв 25, 2016 2:14 pm
flair
StryzhakA писал(а):
а у меня Дебиан версия, start.bat -там наверное нет, подскажите пожалуйста как там запустить.
спасибо
http://majordomo.smartliving.ru/Main/SetupLinux
в этой инструкции есть пункт как прописать старт главного цикла

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

Добавлено: Пн янв 25, 2016 2:36 pm
StryzhakA
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>");
}
}