Найти в Дзене
AEHA Laba120

LABA 120 - самодельный Веб сервер на телефоне под Андроид, проект для мит апп инвентор 2, С исходником и обзором полетов

Вид на экране телефона Вид В браузере на мониторе компа
Для примера выводить будем информацию о состоянии
батареи устройства и параметры сотовой сети
как то код оператора ID сотовой вышки и номер позиции сотовой ячейки
так как апп инвертор "MIt App Inventor 2" напрямую не поддерживает
эти операции в проекте используются расширения от сторонних разработчиков
App Inventor Thunkable Extensions
com.KIO4_SimpleWebServer.aix
com.puravidaapps.TaifunTM.aix
com.puravidaapps.TaifunBattery.aix
ни чего секретного, они бесплатны и легко скачиваются компонент веб сервера SimpleWebServer.aix прост как
ситцевые трусы, может транслировать в сеть сайт из файла расположенного
на флешке, или из текстовой переменной.
мне не удалось прикрутить картинку тегом
< img src="/ws.png" > ни так <img src="/sdcard/ws.png" >
и таблицу стилей
< link rel='stylesheet' type="text/css" href='/user.css' >
хотя стили можно задать непосредственно в тегах сайта
а вот с картинками - придется перекодировать их в Base64
Оглавление

Вот оно и случилось, этот энтузиаст
-Juan Antonio Villalpando KIO4.COM сделал компонент для апп инвертор,
"MIt App Inventor 2"
если быть точным, или аналогичной среды
Thunkable



Эти обе среды на данный момент работают одинаково
отличия только в графическом оформлении, проект из одной среды
запросто открывается в другой

Вид на экране телефона

-2

Вид В браузере на мониторе компа

Для примера выводить будем информацию о состоянии
батареи устройства и параметры сотовой сети
как то код оператора
ID сотовой вышки и номер позиции сотовой ячейки

так как апп инвертор "MIt App Inventor 2" напрямую не поддерживает
эти операции в проекте используются расширения от сторонних разработчиков

App Inventor Thunkable Extensions

com.KIO4_SimpleWebServer.aix
com.puravidaapps.TaifunTM.aix
com.puravidaapps.TaifunBattery.aix


ни чего секретного, они бесплатны и легко скачиваются

-3

компонент веб сервера SimpleWebServer.aix прост как
ситцевые трусы, может транслировать в сеть сайт из файла расположенного
на флешке, или из текстовой переменной.

мне не удалось прикрутить картинку тегом
< img src="/ws.png" > ни так <img src="/sdcard/ws.png" >

и таблицу стилей

< link rel='stylesheet' type="text/css" href='/user.css' >

хотя стили можно задать непосредственно в тегах сайта
а вот с картинками - придется перекодировать их в
Base64

получится примерно так

<img src="data:image/gif;base64,R0lGODlhDQAMANUAAFRVVtHd74S192aZzHqVuLq0rvf39+zr6bXI4qizwufdz5WhsmSt/5rC+r3Ezm1zeJiSjmum8tzm9bvZ/6bB5a6qpn+t5dvVzZK88+v8/7vg/7DJ4P/99V5gY8zMzObm5ofD/6zQ/3Fua8fX69fm+vDy9OPi4czh/4SXrJLC/////+7u7Wmt/87f9oG2/5Oku5mZmf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUADEALAAAAAANAAwAAAZTwJhwSIwhDsUixZEkWhLNYeQVjYUYBIVKSCKeGIOCymCISTATISsCu5RKW1VAkHKBUBDToRxTcUYNGhsdFR8GW0IqJS0ZDyIrh0kqCwBIVR4eTUEAOw==" />

и размещать это прямо в коде страницы.

А если еще и картинку прорисовывать из программы телефона

в зависимости от ситуации , то ваще полный интерактив

==============================================

это не работает
<a href='/sdcard/ws.png'> Скачать ws.png </a>
<a href='/sdcard/main.htm'> На главную </a>

так же не удалась попытка, перейти на другую страницу, и скачать по ссылке файл
================================================

Наверно для многих не секрет что на телефонах имеется
несколько сетевых устройств. Это сама сотовая сеть
и
WiFi. Если сотовая сеть находится в мировой паутине
без посредников. То
WiFi обращается туда через -

* точку доступа
* маршрутизатор
* роутер

(
нужное подчеркнуть)

Такое построение сети имеет некоторые ограничения
И если точка доступа не ваша, а типа общественная,
то ограничения эти труднопреодолимые, есть конечно методы
Можно поломать или договориться.

В своем роутере понадобиться настроить проброску портов

-4

Настройка портов на ASUS

Trigger Port - это когда внешний запрос может пройти
на устройство в сети с указанным ип IP

эта тема избитая, наверно нет смысла переписывать из
других источников

У этой красоты есть еще один момент, В мировой паутине,
ИП "IP" много - красивых, и разных. Так который из них нужный?
Для точки доступа, можно заказать у провайдера статичный ип
который не будет меняться никогда. За это возьмут несколько денег

Для мобильного интернета такая услуга тоже предоставляется операторами.
Вот только что нашел

инфа старая
Настройка статического IP-адреса на МТС
Плата за активацию: 100 рублей;
Абонентская плата: 5 рублей в ежедневном формате;
Плата за отключение опции: отсутствует
.

прогресс на лицо цены смехотворные

Для тех парней, которым важнее не цена а принципы
Есть вариант использование бесплатного (на момент написания)
сервиса Dynamic DNS на
http://dnsip.ru/
Регистрация проста, сами разберетесь

В результате получите доменной имя типа такого -
"ваше название".hldns.ru

Тогда ваш андроид сайт -
http://"ваше название".hldns.ru:8080

порт
8080 это для обращения к устройству которое работает в сети через ГПРС "GPRS"

или
"3G" - кому как нравится.

При работе через
Wifi и точку доступа, для внешних обращений
порт будет - какой настроите, внутри домашней сети,
все тот же
8080, пока не известно как это изменить.

Теперь, по этому доменному имени можно обращаться с любого девайса из
любой точки мира!

После смены
IP в сети, а это случается -

* после перезагрузки роутера
* при перемещении телефона от вышки к вышке
* Просто время от времени

Новый IP необходимо передать на сервис
http://dnsip.ru/
Обновление доменного имени займет несколько минут.
Что вероятно для GPRS существенное препятствие,
ибо там
IP меняется при перемещении аппарата весьма часто.

В зависимости от модели на телефона
поведение программы в фоновом режиме может быть разным
На
Алкател (alkatel) 4034D, после погашения экрана
и ухода аппарата в спячку веб сайт не перестает работать
но скорость его работы снижается, не удобно но не смертельно

Уход в спячку можно предотвратить выставив в настройках телефона
- не выключать экран, при подключенной зарядке.

на других аппаратах смотрите сами, отчет о проведенных тестах
приветствуется

Описание блоков программы

-5

Здесь объявляются глобальные переменные
текстовая переменная
Text - похоже это в данном проекте не используется
текстовая переменная
Meta - здесь теги Мета и неизменяемая часть нашего сайта
======================================
< html> <head >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Refresh" content="5">
<style type="text/css">
.d {border:1px solid #0F0025; }
.d1 { font-size: 105%; color: red ;}
.d2 { color: blue ;}
</style>
<title> LABA 120 - Новые горизонты < /title>
</head> <body> <br> <img src="/ws.png" alt='КАРТИНКА' title='четонету'>
<br>
<h1> Новые горизонты №1 </h1> <br>
</b>


======================================
числовая переменная
refresh_ip - счетчик времени для обновления внешнего IP
ибо, чаще чем раз в 5 минут там делать нечего

текстовая переменная
body - сюда блоком JOIN собирается весь сайт
который передается веб серверу для отправки

**********************************************
02

-6

Обработчик when Screen1.initialize
срабатывает при запуске приложения на Андроид девайсе
в нем:
KIO4_SimpleWebserver1.ServeText присваиваться переменная
в которой содержится весь сайт

метка
l_ip.text методом KIO4_SimpleWebserver1.GetIp
получает значение внутреннего
IP если выход в интернет происходит через WiFi и

точку доступа

При коннекте через
GPRS или 3G, тут будет
IP внешней сети

В компонент
Таймер устанавливаются параметры
Clock1.TimerAlwaysFires - True дословно
Таймер Всегда Срабатывает, вероятно всегда, но бля по разному

Clock1.TimerEnable = True, а что же еще?
Clock1.TimerInterval = 5000 , это пять секунд

в метку
l_cnt.text блоком TinyDB1.GetValue
считывается из базы приложения, значение счетчика
которое записывается туда при нажатии кнопки
STOP
для чего? да просто так
**********************************************
03

-7

процедура OUT_IP
в
label - l_staus.text заносится информация о том
что кнопка была нажата

свойству
Url компонент Web1 - присваивается адрес
на Бесплатный сервис
DDNS hldns.ru

метод
Web1.Get - выполняет запрос

При запросе специальной ссылки обновления система автоматически обновит на нашем
http://hldns.ru/update/"ваш ключ"

сервере Ваш
ip-адрес и максимум в течении 5 минут он станет доступен по имени.

Обработчик when
Web1.GotText
срабатывает когда компонент
Web1
получает ответ и заносит в метки

l_out_ip.Text - ваш внешний IP
l_sattus.Text - код ответа сервера

****************************
04

-8

Обработчик when TaifunBattery1 BatteryChanged
проверяет изменения в состоянии батареи устройства

и заносит в шесть штук
label
соответствующие значения

status, plugged, level, health, temperature, voltage
состояние, подключение, уровень, здоровье, температура, напряжение

особенно про здоровье клево сказано

ну и наконец вызывается процедура
SAVE

************************
05

-9

Обработчик when Clock1.Timer
срабатывает каждые 5 секунд, помните настройки таймера?
и вызывает процедуру
NET в которой с помощью подключаемого компонента
(App Inventor Thunkable Extensions ) TaifunTM1 снимается информация о
состоянии сотовой сети у самого компонента
TaifunTM1 функций много, в данном проекте
используется только три из них

в метку
ll1.text = заносится TaifunTM1.CellID, - ID сотовой вышки
ll2.text = заносится TaifunTM1.Lac - Значение сотовой позиции
ll3.text = заносится TaifunTM1.NetworkOperator - Информация о сотовом операторе

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

в метки
ll4.text - текущая дата
ll5.text - текущее время

это для того, чтобы не путаться, к какому периоду относятся
полученные данные


************************
06
Есть большая картинка

-10

и напоследок самое сладкое, процедура SAVE
которая по таймеру выполняется каждые 5 секунд

в начале текстовая метка
l_cnt в ней путем несложных математических операций

происходит инкремент числового
значения, это просто счетчик вызовов процедуры SAVE
и служит для того чтобы определить, а не повис наш
веб сервер, в месте с телефоном?

затем увеличивается глобальна переменная
REFRESH_IP
которая отмеряет положенные пять минут для обновления
IP на DynDns сервисе процедурой OUT_IP она описана выше

далее в глобальной переменной
BODY, конструкцией из блоков
JOIN собирается тело всего сайта.
Верхняя часть из переменной
META

затем передаваемая телеметрия вперемежку с тегами
HTML
разметки, и закрывающие теги по концовке

затем вся эта красота передается компоненту веб сервера

(App Inventor Thunkable Extensions )


KIO4_SimpleWebserver1.ServeText.text

автор этого расширения вероятно испанец, так что
встречается этот компонент и с названиями на испанском

пока не удалось, передать с
веб сервера на телефоне с андроид
картинку через тег
<img src="/ws.png" >
то есть с флешь аппарата, но есть возможность прописать путь к сетевой картинке,
< img src="http://aeha.narod.ru/ws.png" >
если уж без иллюстраций ни как не обойтись.

Естественно все чудеса которые творит на сайте разметка
HTML должна передаваться без проблем, JS JavaScript
также, ибо все это выполняется в браузере, и к
веб серверу
отношение имеет слабое

пока получилось вот такое
приложение , практически готовое
можно использовать для
мониторинга, температуры жд или авторефрижератора , с

указанием его текущего местоположения

Про проблему с картинками

Есть такой Extension SimpleBase64.aix

На верх в Оригинал статьи

СКАЧАТЬ

Вопросы можно задать

Сообщество в контакте

проект для мит апп инвентор 2 исходник WebServerBat.aia

WebServerBat.aia

Скачать WebServerBat.apk

WebServerBat.apk