Видео управления реле из консоли Апельсинки и о муках выбора https://youtu.be/WdOBJn7erZU
Для управления реле в системе MajorDoMo предусмотрен класс Relays в котором необходимо создать объекты, каждый объект это одно реле, в системе по умолчанию уже имеется объект Switch1. У класса Relays имеются методы, которые наследуются объектам класса Relays, то есть методы Relays будут выполняться во всех объектах если в объекте данные метод не переопределен.
Методы класса Relays
Методы объекта Switch1, наследуемые от класса Relays, то есть метод выполняется в классе Relays
Преимущество использования методов в классе состоит в том, что не надо для каждого объекта использовать свой метод и прописывать в каждом методе объекта свой код, что упрощает разработку.
Вот так выглядят методы Объекта Switch1 если методы отличаются от аналогичных методов класса
и в дереве Классов и Объектов
Но для отправки команд на управление реле у разных объектов будут разные команды и по этому необходимо каждому объекту прописать свою команду, в статье Умный дом. клацкаем светом. я уже рассказывал как это делать, однако описанные варианты на мой взгляд неудобны. В случае если Вы решили использовать команды управления реле через методы объектов, то в методах turnOff И turnOn пишем команды управления реле.
Если у Вас реле подключены к GPIO или UART Апельсинки то код будет аналогичный коду из консоли описанный в статье OrangePi PC работаем с GPIO, UART и i2c, только необходимо добавить команду вызова exec, и получается следующий код для GPIO:
Код: Выделить всё
exec ("gpio -1 write 29 1");
Код: Выделить всё
exec ("gpio -1 write 29 0");
Код: Выделить всё
exec ("echo 1103 > /dev/ttyS3");
Код: Выделить всё
exec ("echo 1003 > /dev/ttyS3");
Однако при большом количестве реле на мой взгляд не удобно прописывать данный код в методах объектов, по этому обработку мы будем делать в сценарии. Так же из-за того, что при работе с uart портом во время посылке данных в порт порт становиться занятым, то способ обработки в сценарии scene_switch описанный с статье Умный дом. клацкаем светом. не подходит, поскольку команды будут отсылаться на все реле не зависимо изменилось состояние реле или нет и соответственно после отсылки первой команды в UART порт вторая не может послать в UART порт поскольку он становиться ещё занятым. Я пробовал при стандартной скорости порта 9600, возможно при другой скорости порта такой проблемы не будет. Однако обработка описанная в статье по моему мнению неправильная поскольку повторно посылает состояние реле даже если оно не изменилось.
Для того, чтобы сценарий scene_switch обрабатывал только события конкретного объекта нам надо в этот сценарий передать имя этого объекта, для получения имени объекта используем команду $this->object_title и запуск скрипта с передачей параметра - имени объекта будет выглядеть следующим образом:
Код: Выделить всё
runScript("scene_switch",array("nameobj"=>$this->object_title))
Теперь создаем сценарий scene_switch
Код: Выделить всё
$n = $params['nameobj']; //получаем имя объекта
//нажата кнопка Switch1
if ($n == "Switch1") {
if (getGlobal("Switch1.status")==1) {
exec ("gpio -1 write 29 0");
} else {
exec ("gpio -1 write 29 1");
}
}
//нажата кнопка Switch2
if ($n == "Switch2") {
if (getGlobal("Switch2.status")==1) {
exec ("echo 1003 > /dev/ttyS3");
} else {
exec ("echo 1103 > /dev/ttyS3");
}
}
Как сделать кнопки в сценах или меню, а так же включать через различные пульты описано в статье Умный дом. Клацкаем светом.
Источник