Вернулся ещё раз погрызть Orvibo в целом и особенно выключатели.
Для начала я попробовал разобраться в файле orvibo.class.php
function setIRLearning($id) отрабатывает нормально. И потом мы получаем ответ, который обрабатывает function processMessage($buf, $remote_ip, $sock). Ответ приходит с кодом 6c73 и затем записывается в базу данных. Тут всё хорошо.
По образу и подобию работает и function setRFLearning($id). После её выполнения я никаких ругательств не замечаю. Смею предположить, что устройство всё таки уходит в режим ожидания RF кода от выключателя. Ответ так же должна поймать функция processMessage. Но в ней нет подобных указаний. Так же нет указаний для RF, подобно тому, как в логи пишется успешное подтверждения излучения IR.
Несколько раз в debmes я получал ошибку Unknown command: 7266. И действительно в функции processMessage нет условия для кода 7266. Что это был за код, я пока сказать не могу. Потом буду искать в Интернете. Возможно в нем ответ с полученным кодом выключателя, а возможно какое нибудь ругательство о неудаче.
Чтобы выключатель привязать к объекту в его андроид приложении, нужно сначала нажать кнопку включения света на выключателе и держать её пока не прозвучит одинарный писк. Потом сразу нужно в приложении нажать на нужный объект выключателя. При этом произойдет привязка выключателя к объекту, и выключатель подтвердит это двойным писком. Как видим, алгоритм обучения RF совершенно не похож на IR/
Самое печальное то, что я больше не получаю запись с кодом 7266. А следовательно не погу посмотреть что в этот момент было в ответе AllOne. Вот например, если включить IR обучение и ничего не записать, то получим следующее:
20:16:43 IR learning mode done from accf23298b8c
20:16:43 Ignoring result
Явно видно, что всё работает исправно. А при попытке загнать в RF обучение, в ответ вообще ничего нет. Даже неизвестного кода нету. Это наводит на мысль, что AllOne не заходит в режим обучения. А следовательно надо посмотреть на function setRFLearning($id)
Вторая тема:

Отдельно хочется обсудить указания метода, который должен запускаться при нажатии кнопки на AllOne. Тут есть неясность. А именно метод какого объекта?
Становится понятно только при анализе таблицы orvibodevices в базе данных и финальных действий функции processMessage строка примерно 640
Код: Выделить всё
if ($rec['LINKED_OBJECT'] && $rec['LINKED_METHOD_BUTTON']) {
$params=array();
$params['VALUE']=$rec['VALUE_IR'];
callMethod($rec['LINKED_OBJECT'].'.'.$rec['LINKED_METHOD_BUTTON'], $params);
}
Вероятно изначально у AllOne был только записан один объект 'LINKED_OBJECT', он и был взят за основу для метода кнопки. Но потом появился еще и 'LINKED_OBJECT_RF', и вот тогда получилась путаница.
Я бы вообще предложил не привязывать метод кнопки к IR объекту. Переименовать на веб страничке
Метод (Button pressed): в
Объект.Метод (Button pressed): Тогда в поле можно будет указать совершенно любой объект.метод, который будет выполнен при нажатии кнопки на AllOne. Код тогда надо заменить на
Код: Выделить всё
if ($rec['LINKED_METHOD_BUTTON']) {
$params=array();
$params['VALUE']=$rec['VALUE_IR'];
callMethod($rec['LINKED_METHOD_BUTTON'], $params);
}
Правда на счет необходимости передачи $params я тоже не уверен. Если уж передавать 'VALUE_IR', то тогда и 'VALUE_RF' тоже.