Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Возможности JavaScript для управления hardware-объектом (https://javascript.ru/forum/misc/1162-vozmozhnosti-javascript-dlya-upravleniya-hardware-obektom.html)

AZbest 17.04.2008 16:35

Возможности JavaScript для управления hardware-объектом
 
Поскольку на форуме javascript.ru тусуются самые крутые гуру по web-программированию, хочу задать вам свой вопрос. Сразу скажу, что я не web-программист, я занимаюсь разработкой электронной аппаратуры и firmware к ней.

Так вот, как любое современное оборудование моя "железка" собирается управлятся через web-интерфейс. Принципиально всё ясно - я завожу на своём микроконтроллере (это такой слабенький процессор) tcp-сервер, обрабатываю http-запросы и выдаю код странички. В самом простом случае это уже получилось.

Далее, мне нужно обновлять web-страничку при изменении состоянии моего устройства. Пишу java-скрипт, по тайм-ауту обновляющий страничку (или её часть), тоесть отсылающий запрос моему серверу и постоянно отвлекающий мой микроконтроллер от решения его задач. Вопрос: а может ли web-сервер по своей инициативе обновить данные на web-страничке пользователя? То есть изменить их на страничке тогда, когда они действительно изменились, а не заставлять браузер постоянно себя опрашивать.

Второй вопрос - передача данных от браузера к микроконтроллеру. Пользователь расставляет на страничке галочки, выбирает конфигурацию и нажимает кнопку "Передать". Что получит сервер? Строку вида "http://javascript.ru/forum/newthread.php?do=postthread&f=3"? То есть придется разбирать все эти ?do=&? А может ли java-скрипт сформировать серверу сообщение, понятное для микропроцессора, типа 7E 87 F6 00 0A?

В общем, цель такая - разгрузить микроконтроллер устройства и возложить высокоуровневые задачи на компьютер клиента.

vandy 17.04.2008 17:26

Первый вопрос - нет.
Второй вопрос - напишите функцию кодирования ваших данных, но результат кодирования вам все равно придется передавать на сервер как параметр. Встречный вопрос - вы хотите, чтобы ваш МП можно было программировать через строку броузера? Т.е. вам безопасность не важна?

AZbest 17.04.2008 18:02

Цитата:

Сообщение от vandy
вы хотите, чтобы ваш МП можно было программировать через строку броузера?

Надо-бы сделать авторизацию. Понимаю.

Цитата:

Сообщение от vandy
результат кодирования вам все равно придется передавать на сервер как параметр

Поясните пожалуста, как эти параметры передаются на сервер. В теле http-запроса? Или как строка URL? Если в теле запроса, то можно его перекодировать на стороне клиента, а не разбирать микроконтроллером. Не так ли?

Где бы про все это почитать?

vandy 17.04.2008 18:39

Почитать о JS можно хоть на этом сайте в разделах "Статьи" и "Книги".

Но мой совет, если хотите получить хороший продукт, надо составить ТЗ и заказать разработку у JS-программера. Выйдет намного быстрее и качественне.

vandy 17.04.2008 18:43

Если вы будете посылать запрос как POST, то параметр будет в теле запроса, если через адресную строку (GET), то в URL

Цитата:

Если в теле запроса, то можно его перекодировать на стороне клиента, а не разбирать микроконтроллером.
Поясните

AZbest 18.04.2008 09:00

Я как раз и составляю ТЗ, чтобы самому ясно представлять как можно решить эту задачу. Чтобы получилось то, что хочу я, а не то, что смог программист.

Цитата:

Сообщение от vandy
Поясните

Поясняю. Задумано, что браузер пошлет POST-запрос, предварительно обработанный Java-скриптом. Скрипт должен перекодировать данные из HTML-формы в удобную для МП форму типа "заголовок, кол-во байт, код объекта, код свойства, значение".

Я вижу здесь один недостаток организационного характера. Не получится просто нанять JS-программиста для выполнения работы и потом отпустить. Ведь добавление нового параметра, доступного для конфигурирования в моем устройстве, потребует добавления этого же параметра в перекодирующем скрипте. Короче, этот программер у нас кормится будет, а мы от него зависеть. Просто незнаю как быть. Может научить МП разбирать HTML-формы? А уж дописать или изменить эти формы я и сам смогу.

Правильно рассуждаю?

Gvozd 18.04.2008 09:37

к вопросу о передаче данных по инициативе сервера
http://javascript.ru/ajax/server-push
а насчот последнго, можно обучить не МП разбирать формы, а JS из набора полей "заголовок, кол-во байт, код объекта, код свойства, значение" формировать запрос удобной для МП структуры.
Тогда, при условии не изменности структуры запросов, при добавлении новой команды достаточно просто добавить типовую формочку, с переопределенным полем(hidden-типа, например)

vandy 18.04.2008 10:23

совсем не обязательно кормить программера, Gvozd предложил хорошую идею и вполне реализуемую.

AZbest 18.04.2008 10:48

Насчет взаимодействия с сервером - все прояснилось. Проблема превратилась в задачу, которую решают известными методами.

Ещё хотел узнать - может ли скрипт вести журнал событий и сохранять его на диск? Или просто писать log в отдельное окно браузера, которое при желании можно сохранить (главное нужно запретить пользователю его закрыть, чтобы не потерять историю событий).

vandy 18.04.2008 10:51

А рассказать, как говорится, для будующих поколений?

AZbest 18.04.2008 15:57

Нельзя ни на диск сохранить, ни незакрываемое окно породить...
Короче, песочница...

Gvozd 19.04.2008 02:45

Если нету строгой привязки, чтоб было полностью ВЕБ, то для записи можно попробовать две технологии:
1)HTA. позволяет добавив парочку тегов сделать из обычной HTML-страницы некоторое подобие десктопного приложения. насколько помнится, с расширинными правами.точно не уверен
2)WSH.позволяет запускать скрипты написанные на JScript(!!!!) с правами системы. позволяет наворотить много чего(от настройки системы, до работы с файлами).
Обе технологии являются приблудой исключительно мелкомягких.таким образом о кросбраузерности/платформенности не идет и речи.
в принципе, если количество операторов и рабочих мест ограничено, решение может и сойти.
Также есть другое лучшее решение))))
организовать логирование средствами сервера.
кстати, еще идея.
ппоставить между TCP-сервером и браузером дополнительный HTTP-сервер, с каким-либо скриптовым языком(PHP, PErl...), и на него повесить задачу обработки полей полей получаемых из браузера, и формирование машино-ориентированного запроса, логирование и т.д. ПО моему я видел что-то подобное у Nvidia, или у кого еще. хотя меня такое решение как конечного пользователя взбесило, ибо мне нафик не нужен лишний ВЕБ-сервер на МОЕМ компе))))))
ЗЫ. извините что сумбурно. время позднее а идеи прут))))
если нужны пояснения, спрашивайте

Shaman 14.10.2008 19:49

PHP имхо тут ни к чему - это совершенно ненужное усложнение задачи.

Я так понимаю, что:
1. Есть устройство со слабеньким процессором, умеющее быть простейшим http сервером.
2. Есть браузер клиента.

Разобрать GET/POST вручную - не так уж и трудно, подробно это описано тут:
http://www.codenet.ru/webmast/php/HTTP-POST.php

Можно упростить задачу микропроцессора: Берем форму. Простейшими яваскрипт - операциями собираем из ее данных удобный микропроцессору блок кода, формируем из этого блока еще одно поле формы, напр. с атрибутом hidden. Далее скармливаем микропроцессору этот блок - вычленить один блок данных естественно легче, чем шарахаться по всем данным, собирая по кускам нужные. Лишние поля игнорируются.
Это реализовывается буквально парой команд, если вы способны написать работающий веб-сервер, вы с ними легко разберетесь.

Причем сей яваскрипт - может быть легко настраиваемым, и работать по принципу перебора полей. Как визуальные редакторы, которые просто на textarea вешаются.

Сохранить лог на диск - дайте пользователю скачать его. Ему придется нажать кнопочку, не более.

А динамичное получение параметров - можно сделать на основе inframe - и перегружать их, например раз в несколько минут. Причем, можно один из них - сделать диспетчером. Который будет перегружаться по таймеру, и заставлять остальные - перегружаться по мере изменения параметров.

уж простите, что несколько сумбурно, просто куча неизвестных - мощность МП, размеры устройства, наличие ПЗУ и РАМ и т.п. Но главное - что яваскрипт прост, и прощает многие ошибки. Поэтому я думаю, вам легко удастся реализовать то, о чем вы говорите.

Gvozd 14.10.2008 20:45

Уважаемый Shaman
Обратите внимание на таймстмпы топика.
она уже давно мертва)

alexKniaz 26.10.2008 11:04

Не знаю в тему, ли, но я на vb6 и inpout32.dll написал прогу, у которой в окно грузится html-пага на моём компе, а програма при попытке переход смотрит адрес.
Идея такова, что в адрес пишется что-то вроде
index.html?out:adress=880&value=10& для выброса данных в порт (запрос надеюсь понятен?).
или
index.html?input:adress=880& для ввода, после чего, прога, распарсив запрос, кидает данные в файл port_data.tmp.html в одной папке с прогой и html-файлом. А дальше на этот файл можно натравить FileSystemObjects или iframe.
Запросы пага также отсылает через iframe. Всё пашет.
Прога тута (с исходниками) - http://rapidshare.com/files/157633764/prog.zip.html

alt5000 27.10.2008 11:21

Кстати, а зачем запрос в нужном виде формировать на стороне клиента? Вполне можно это поручить и серверу. И естественно не методом POST :)

alexKniaz 27.10.2008 23:12

сервер мощностью мягко говоря не отличается, да и на нём это вроде как сложнее.

alt5000 28.10.2008 11:41

Ну, да, в принципе. То есть у Вас основная задача - это сформировать понятный сигнал и отправить/принять его? А по логу я думаю это элементарно, но зачем вАм лог на стороне клиента, типа его история :)

alexKniaz 28.10.2008 17:43

Цитата:

А по логу я думаю это элементарно...
Лог можно сделать под IE с помощью FSO. В других браузерах тоже такая весчь была, но конечно, по-другому.
Цитата:

но зачем вАм лог на стороне клиента, типа его история
У микрух не очень большая память, а вешать внешнюю память только из-за лога не каждый захочет (я один из таких лентяев :))
Цитата:

То есть у Вас основная задача - это сформировать понятный сигнал и отправить/принять его?
Нет. Главная задача - что бы девайс пахал. А в виду низких вычислительных можностей приходится для этого экономить на всём и даж писать на ассемблере:(

alexKniaz 28.10.2008 17:45

И даже сервер писать на ассемблере....;)


Часовой пояс GMT +3, время: 19:44.