hdctl -- мониторинг, управление и автоматизация с помощью ПК (софт для Windows)
Petrovich69
Кандидат наук
Тверь
451 254
Отв.120 25 Мая 17, 14:16
makh, по RDP пишут, что Клиенты существуют практически для всех версий Windows (включая Windows CE, Phone и Mobile), Linux, FreeBSD, Mac OS X, iOS, Android, Symbian. Меня в качестве дальнейшего развития iOS интересует, но с использованием готового мобильного клиента. В теме msg31 описывался вариант использования свободной софтины для Умного дома - вот ее бы к hdctl как мобильный клиент подключить и будет счастие!
Отв.121 25 Мая 17, 14:48, через 32 мин
Petrovich69, пока можешь пользоваться
https://itunes.apple.com/...d692035811?mt=8
https://itunes.apple.com/...d692035811?mt=8
Petrovich69
Кандидат наук
Тверь
451 254
Отв.122 25 Мая 17, 15:02, через 14 мин
capsolo, ну да, как вариант для начала. Осталось только допилить внешее управление Ардуиной из hdctl. Кстати мопед не мой - это стандартный скетч Доступной автоматики. Пришло время под себя перепиливать и затачивать.
makh
Профессор
Sаmara
2.1K 1.1K
Отв.123 25 Мая 17, 20:36
Оно конечно разного сделать можно, тем более при наличии открытого протокола. Только как-то слабо представляю себе зачем. В своем контексте не вижу применения такому функционалу. Передавать управление на подключенное радиоканалом устройство религия не позволит. А удаленно посмотреть цифирьки с картинками можно и попроще как-нить придумать.
Petrovich69
Кандидат наук
Тверь
451 254
Отв.124 25 Мая 17, 20:46, через 10 мин
Управлять непосредственно процессом будет скетч в Ардуине автономно. На пк- дистанционный мониторинг, логгирование и визуализация процессов с возможностью ограниченного управления и аварийного останова + сервер для связи с мобильным приложением, чтобы не перегружать скетч. В мобильном приложении мониторинг основных параметров, сигнализация и аварийный останов.
makh
Профессор
Sаmara
2.1K 1.1K
Отв.125 25 Мая 17, 22:01
Ну не знаю. Непонятен мне профит этого покемонства.
Вобщем-то, TCP-сервер туда прикрутить можно просто и быстро. А реализацией протоколов поверх TCP пусть занимаются те, кому это надо. Имеющимися средствами, коих более чем достаточно. Записать в таком виде в 2do-список с минимальной приоритой?
Вобщем-то, TCP-сервер туда прикрутить можно просто и быстро. А реализацией протоколов поверх TCP пусть занимаются те, кому это надо. Имеющимися средствами, коих более чем достаточно. Записать в таком виде в 2do-список с минимальной приоритой?
Petrovich69
Кандидат наук
Тверь
451 254
Отв.126 25 Мая 17, 22:41, через 40 мин
в 2do-список с минимальной приоритойmakh, 25 Мая 17, 22:01Нужно! И приориту повысить!
сообщение удалено
Отв.127 30 Мая 17, 10:25
makh, я чет по-другому вышел из ситуации..Взял esp8266 за 300 рублев и поднял на ней телнет-уарт проксю. Ну и к ней девайсину по серийнику прикрутил. Теперь отладочную инфу вижу со всех подключенных уартов и имею возможность в любой из них ченить заслать. Теоретически думаю и хдцтл если на этот телнет подрубить должно все работать...
makh
Профессор
Sаmara
2.1K 1.1K
Отв.128 30 Мая 17, 13:04
capsolo, как-то я мутно изложил, проблема не с отладочной инфой, а с необходимостью рассчитать какие-то значения из данных, передаваемых ардуиной, и нарисовать их, таким образом, чтоб не озадачивать ардуину этими рассчетами и васче никак ее не трогать. Т.е. запускаю сервер, произвожу рассчеты, и выдаю полученные данные в виде такого же отчета, как передает ардуинка. Потом создаю новый коннекшн с оным сервером и получаю расчетные данные в рисовательном виде.
Поиграться можно и без ардуинки:
Поиграться можно и без ардуинки:
Отв.129 30 Мая 17, 13:34, через 30 мин
makh, теперь понял. Типа прокладка между дуней и конечным терминалом, которая вытворяет невообразимые вещи с данными с дуни и сует их конечному терминалу.
makh
Профессор
Sаmara
2.1K 1.1K
Отв.130 30 Мая 17, 15:29
Именно так. Причем конечный терминал может быть удаленный.
Petrovich69, так напиши http-сервер и поимей вышеописанный функционал на любой платформе в бровзере. Вытащить в песочницу битмапы графиков? .)
В мобильном приложении мониторинг основных параметров, сигнализация и аварийный остановPetrovich69, 25 Мая 17, 20:46
Petrovich69, так напиши http-сервер и поимей вышеописанный функционал на любой платформе в бровзере. Вытащить в песочницу битмапы графиков? .)
Petrovich69
Кандидат наук
Тверь
451 254
Отв.131 30 Мая 17, 15:40, через 11 мин
Вытащить в песочницу битмапы графиков?makh, 30 Мая 17, 15:29Желательно с примером.. В ближайшее время буду прикручивать ардуину по ТСР, а дальше с сервером и мобильным приложением сын обещал помочь разобраться - он радио- и интернет-станции удаленно поднимает и админит. Сказал что фигня вопрос, все получится!
makh
Профессор
Sаmara
2.1K 1.1K
Отв.132 01 Июня 17, 15:29
Пестня об экшнскрипте #2
дисплей-объекты просто некуда присунуть, напримерmakh, 27 Марта 17, 20:39Это я как-то скоропостижно сказанул. Простите кто может. На самом деле, очень даже есть куда.
В нашей песочнице самый старенький и простенький API флэшплеера 9-й версии. Потому-что полноценный SDK+JRE весит гиг, если не больше, паковать с out-of-the-box софтиной нереально. Тем не менее, если базового функционала не хватает для реализации хотелок, есть возможность попользоваться всеми благами air фреймворка версии 4.0 -- системными окнами, процессами, sqlite, дисплей-объектами, тисипи-серверами, UDP-сокетами, видеокамерами, сетевыми стримами, и прочая и прочая. Там много. Там есть удивительных свистоперделок.
с примеромPetrovich69, 30 Мая 17, 14:40В аттаче пример программы, которая умеет: читать-писать файлсистему; открыть системное окно, присунуть в него дисплей-объектов, дать им немножко жить своей жизнью; ну и, громко сказано, http-сервер.
На первой картинке скрин работы программы. В красных рамочках два функциональных блока, реализация которых потребует доработки песочницы, все остальное из коробки. Как сделаю -- вынесу в первое сообщение и распишу функционал на примерах. На второй картинке настройки для работы с документацией (runtime <=air-4, product none).
Но неудобно, жутко неудобно писать много букав в хоть и раскрашенном, но все же крайне примитивном текстовом редакторе. Чтобы руки не болели, надо брать специально заточенный IDE, который API знает и большую часть кода сам пишет, и расписывать событийно-объектную модель нужного уровня абстракции и портабельности уже по-серьезному. И подгружать мозги в песочницу таким же образом, как в примере из аттача.
makh
Профессор
Sаmara
2.1K 1.1K
Отв.133 05 Июня 17, 12:55
hdctl-0.1-patch-20170605
Итак, обещанное обновление. Исправлено несколько несущественных ошибок и добавлен новый функционал в програмной песочнице.
1. Можно пользоваться объектами из рантайма (air-4.0 framework), что радикально расширяет возможности программы.
2. Добавлена директива препроцессора source-path, позволяющая подключать пакеты исходников с файловой системы.
3. Добавлены опциональные пользовательские методы exit и close, вызываемые при окончании работы программы и закрытии окна консоли соответственно.
Таблетка тут -- http://hdc.hol.es/hdctl/hdctl-0.1-patch-20170605.zip, далее последует несколько постов с примерами использования всех этих благ по мотивам выше по ветке озвученных хотелок.
1. Можно пользоваться объектами из рантайма (air-4.0 framework), что радикально расширяет возможности программы.
2. Добавлена директива препроцессора source-path, позволяющая подключать пакеты исходников с файловой системы.
3. Добавлены опциональные пользовательские методы exit и close, вызываемые при окончании работы программы и закрытии окна консоли соответственно.
Таблетка тут -- http://hdc.hol.es/hdctl/hdctl-0.1-patch-20170605.zip, далее последует несколько постов с примерами использования всех этих благ по мотивам выше по ветке озвученных хотелок.
makh
Профессор
Sаmara
2.1K 1.1K
Отв.134 05 Июня 17, 13:19, через 25 мин
Програмный доступ к графикам
Предположим, что надо выдавать график по HTTP в бровзер, например.
Первым делом для этого надо создать конфигурацию графика, обычным образом, Graph->Create и т.д., настроив там список отображаемых источников данных и другие визуальные дела. Поскольку данный функционал есть в рантайме, берем оттуда готовое и пользуемся:
Первым делом для этого надо создать конфигурацию графика, обычным образом, Graph->Create и т.д., настроив там список отображаемых источников данных и другие визуальные дела. Поскольку данный функционал есть в рантайме, берем оттуда готовое и пользуемся:
import flash.utils.*;
var rrdgraph_cn_async:Function;
/**
* rrdgraph_cn_async (conf_name:String, start:String, end:String, width:uint, height:uint, output_handler:Function, ...args) : void
*
* @param conf_name имя [конфигурации] графика, из спиcка Graphs
* @param start начало отображаемого интервала времени, подробно о синтаксе в мануалах RRDTool
* @param end конец отображаемого интервала времени
* @param width ширина в пикселях
* @param height высота в пикселях
* @param output_handler обработчик результата, сюда выдаст бинарик PNG или ошибку
* @param ...args опциональные аргументы для передачи в output_handler
*/
function init()
{
rrdgraph_cn_async = getDefinition('rrdtool.util::rrdgraph_cn_async') as Function;
try {
// построить график из конфигурации G1, за последних пять минут, 500*300 пикселей,
// бинарик выдать в методу graph_output, туда же вторым аргументом выдать время начала операции
rrdgraph_cn_async('G1', -360, -1, 500, 300, graph_output, getTimer());
} catch (error) {
if (error.errorID == 1) print('нет такой конфигурации графика');
if (error.errorID == 2) print('нет ни одного DS [с включенным логом] в конфигурации графика');
}
return 0;
}
private function graph_output(out, time)
{
print('rrdgraph_cn_async done in ' + (getTimer() - time) + ' ms.');
if (out is ByteArray) // картинка PNG бинарик
{
print('size: ' + out.length + ' bytes.');
print('head: ' + String(out).substr(0, 4));
// далее делаем с бинариком что было задумано...
}
else print(out); // out is Error (rrdgraph stderror output)
}
makh
Профессор
Sаmara
2.1K 1.1K
Отв.135 05 Июня 17, 14:03, через 45 мин
Системные окошки и дисплей-объекты
С помощью объектов NativeWindow и NativeWindowInitOptions можно открыть системное окно и насовать в него всевозможной графики.
import flash.display.*;
import flash.events.*;
import flash.text.*;
var window, textfield, counter = 100, exit_flag;
function init()
{
// получаем нужные классы из рантайма
var NativeWindow = getDefinition('flash.display::NativeWindow');
var NativeWindowInitOptions = getDefinition('flash.display::NativeWindowInitOptions');
// создаем инстанцию окна
window = new NativeWindow(new NativeWindowInitOptions);
// подключаем обработчик события закрытия окна оператором
window.addEventListener(Event.CLOSE, window_close);
// задаем параметры окна
window.width = 400;
window.height = 200;
window.title = 'Окошко';
// задаем параметры корневого дисплей-объекта окна
window.stage.align = StageAlign.TOP_LEFT;
window.stage.scaleMode = StageScaleMode.NO_SCALE;
// добавляем туда несколько цветных прямоугольников
window.stage.addChild(new Bitmap(new BitmapData(100, 100, true, 0x8000ff00)));
window.stage.addChild(new Bitmap(new BitmapData(100, 100, true, 0x80ffff00))).x = 25;
window.stage.addChild(new Bitmap(new BitmapData(200, 100, true, 0x8000ffff))).x = 75;
// создаем, конфигурируем, и добавляем туда же динамическое текстовое поле
textfield = new TextField;
textfield.autoSize = TextFieldAutoSize.LEFT;
textfield.defaultTextFormat = new TextFormat('_typewriter', 100);
window.stage.addChild(textfield);
window.activate(); // открываем окно
return loop;
}
function loop ()
{
textfield.text = --counter;
return !exit_flag && counter ? loop : 0;
}
function window_close (event)
{
exit_flag = true; // преждевременным закрытием окна завершим работу программы
}
// можно было бы закрыть окно сразу после завершения программы (exit),
// но мы закроем его вместе с консолью (close), если не было закрыто ранее оператором
//function exit (code)
//{
// window.close();
//}
function close ()
{
window.removeEventListener(Event.CLOSE, window_close);
window.close();
}
makh
Профессор
Sаmara
2.1K 1.1K
Отв.136 05 Июня 17, 14:55, через 52 мин
Виртуальный контроллер
При необходимости поиметь в пригодном для рисования графиков виде некие рассчетные данные, например подкорректированные показания градусников, дельты, и т.д., можно применить следующий подход: написать тисипи-сервер, который будет генерировать стандартные отчеты с нужными данными, и стандартным же образом к нему подключиться. Чтоб не возиться с подключением градусников, для примера просто генерируем три ничего не значащих источника данных:
Скрин работы приведенного кода:
import flash.events.*;
var server, port = 5555, clients = [];
function init()
{
// получаем класс из рантайма
var ServerSocket = getDefinition('flash.net::ServerSocket');
// создаем и запускаем сервера
server = new ServerSocket;
server.bind(port);
server.listen();
server.addEventListener(Event.CONNECT, client_connect);
print(server + ' listening for incoming connections on TCP port ' + port);
heartbeat = 1000;
return loop;
}
function loop ()
{
// генерируем данные
var ts = new Date().time / 10000;
var s = Math.sin(ts), c = Math.cos(ts), t = Math.tan(s - c);
// посылаем отчет всем подключенным клиентам
report (s.toFixed(3), c.toFixed(3), t.toFixed(3));
return loop; // loop forever
}
function exit ()
{
// отключаем всех клиентов
for each (var client in clients) client.close();
try {
server.close(); // и останавливаем сервер
} catch (error) {
print(error);
}
}
private function report (sin, cos, tan)
{
for each (var client in clients)
{
client.writeUTFBytes('{SIN<' + sin + ' COS<' + cos + ' TAN<' + tan + '}');
client.flush();
}
}
private function client_connect (event)
{
var client = event.socket;
client.addEventListener(Event.CLOSE, client_close);
clients.push(client);
print('open client connection ' + client_info(client));
}
private function client_close (event)
{
var client = clients.splice(clients.indexOf(event.target), 1)[0];
client.removeEventListener(Event.CLOSE, client_close);
print('close client connection ' + client_info(client));
}
private function client_info (s)
{
return s.remoteAddress + ':' + s.remotePort + '->' + s.localAddress + ':' + s.localPort;
}
Скрин работы приведенного кода:
Viktor61
Новичок
Ростов
4 2
Отв.137 07 Июня 17, 16:51
Добрый день. Я делал систему мониторинга знакомому на русской SCADA системе, в качестве контроллера использовал ардуино нано, 3 датчики ds и один датчик давления аналоговый, связь с компьютером осуществлял по MODBUS, скаду использовал симплайт она на 16 тегов бесплатная. Плюсы: пишутся архивы (можно вывести за любой период времени как графики так и протокол), минимальная цена, видеокадры можно нарисовать любые, на ютубе есть видео (не знаю можно ли добавлять сюда ссылку). Мне кажется немного удобней будет и прикольно почти промышленный объект, картинку вроде загрузил
makh
Профессор
Sаmara
2.1K 1.1K
Отв.138 07 Июня 17, 17:59
почти промышленный объектViktor61, 07 Июня 17, 16:51Каждой задаче в своем контексте свое оптимальное решение. Тут попроще, и совсем бесплатно. Основная задача все-таки разработка и эксперименты. Чтоб на коленке из говна и палок, и быстро, без гимора с пользовательскими интерфейсами и неведомыми среднестатистическому пользователю промышленными IO, железом, и драйверами. При этом также пишутся архивы и строятся графики за любой период времени, а API также позволяет рисовать и анимировать нарисованное, пестни петь, сетью на любом уровне пользоваться, и т.д., вплоть до видеостримов, digital sound processing, и подгрузки своих шейдеров в графическое железо.
Кайл Брахловский
Бакалавр
Москва
53 4
Отв.139 07 Июня 17, 18:20, через 22 мин
Чтоб на коленке из говна и палок, и быстро, без гимора с пользовательскими интерфейсами и неведомыми среднестатистическому пользователю промышленными IO, железом, и драйверами.makh, 07 Июня 17, 17:59Вот эти листы с программным кодом Вы называете безгиморным говном с палками, да 99,99% самогонщиков под страхом смертной казни там ничего не разберут, причём никогда в жизни. Промышленный интерфейс заточен под то, чтобы технолог после ПТУ мог внедрить. А Ваш код двумя высшими и аспирантурой попахивает.
Это софт, теперь железо, ваши ардуины и прочие нано-говно платы, изготовлены с использованием бытовых микросхем работоспособность от 0 С, а страна у нас холодная кое-где в июне ещё на лыжах катаются. Вынесет такое говнопалочное уст-во самогонщик Нижнего-Тагила в гараж даже в +5, разумеется если ему кто-то вумный компильнёт этот аццкий код в экзешник, а оно раз и дуба даст. Тогда как промышленные микрухи от -10 чувствуют себя как чукчи в холодилнике (греются они там;) поскольку рассчитаны на работу от -20С.
Теперь про IO - фикивознает что Вы имели ввиду, если адреса, то от 1 до 255 сложновато конечно пальцев не хватает но осилить можно. Драйвера, нет там таких, упразднили их в 1979 году чтобы мозг рабочему народу не засерать, вместо них
те самые адреса с 1 по 255, а может 256 не суть важно больше пяти устройств в нашем деле и не надо. Так что все Ваши аргументы против я бы сказал эфимерны, от пиетета к слову промышленный
Вот, профессор в топку ваши ардуины, понимаю ИМХО ПТУ-шника профессоров не колышат, но всё таки зачем Вы себя мучаете как при старом режиме...