Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Еще раз о выключателе

Тема в разделе "Раздел для начинающих", создана пользователем anthony3d, 8 дек 2019.

  1. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    625
    Симпатии:
    73
    @anthony3d Не могу понять немножко странный код.
    в функции switchLED меняете значение переменной iCan на false и тут-же меняете iCan на true
    Код (Text):
    1.     function switchLED(chk) {
    2.       iCan = false;
    3.       if (chk.checked) {
    4.         ajaxLoad('LEDON');
    5.         switchState = true;
    6.       }
    7.       else {
    8.         ajaxLoad('LEDOFF');
    9.         switchState = false;
    10.       }
    11.       //console.log(switchState);
    12.       iCan = true;
    13.     }
    между присваиванием false и true вызываете ajaxLoad которая никак её iCan не использует.
    между присваиванием false и true проходит, я думаю, миллисекунда, может и меньше.

    Код (Text):
    1. window.setInterval(function(){
    2.       if (iCan) ajaxLoad('STATE');
    3.     }, 1000);
    устанавливаете интервал на выполнение ajaxLoad в случае если iCan равен true, он почти всегда такой, вероятность поймать значение false ничтожна мала.
    Если вы выключите esp на несколько секунд и на запросы ajax перестанут приходить ответы, очередной запрос подвиснет в ожидании, а установленный интервал будет раз секунду выполнять ajaxLoad и плодить новые подвисшие запросы.
     
  2. anthony3d

    anthony3d Новичок

    Сообщения:
    16
    Симпатии:
    0
    window.setInterval(function(){ — исполняется по таймеру.
    И хотя истинной мультизадачности тут нет, я на всякий случай запрещаю исполнение резидентной функции на время работы кода по событию.
    (Старая привычка)
     
  3. anthony3d

    anthony3d Новичок

    Сообщения:
    16
    Симпатии:
    0
    ̶И̶ ̶х̶о̶т̶я̶ ̶и̶с̶т̶и̶н̶н̶о̶й̶ ̶м̶у̶л̶ь̶т̶и̶з̶а̶д̶а̶ч̶н̶о̶с̶т̶и̶ ̶т̶у̶т̶ ̶н̶е̶т̶
    (UPD: Стоп! Я все время забываю, что это JavaScript, и он исполняется в браузере!
    Тогда тут и полная мультизадачность, и процессоры, и вот это вот всё..)
     
  4. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    625
    Симпатии:
    73
    Запрет на миллисекунду как то влияет на поведение? И как часто ловится эта ситуация, сработал интервал, и в этот-же момент инициировали очередной ajax запрос (не выполнили его, а только дали задание).
    Я вам об этом и говорю, когда один запрос ещё не завершен (если esp по разным причинам не ответил), вы интервалом начинаете следующий.
     
  5. anthony3d

    anthony3d Новичок

    Сообщения:
    16
    Симпатии:
    0
    Вот я и запрещаю интервал!
    А ошибки AJAX здесь остаются:
    ajaxRequest.onreadystatechange = function() {
    if(ajaxRequest.readyState == 4 && ajaxRequest.status==200) {
     
  6. anthony3d

    anthony3d Новичок

    Сообщения:
    16
    Симпатии:
    0
    Только мерзкая релюшка клацает при включении...
    Но это — аппаратный глюк ESP. Лечится только аппаратными же средствами.
    Как поборю — напишу.

    IMG_20191210_113157.jpg IMG_20191210_113207.jpg IMG_20191210_113544.jpg
     
  7. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    625
    Симпатии:
    73
    ;)))
    Вы выполняете асинхронный запрос:
    1. Задаете метод и url и асинхронный режим ajaxRequest.open("GET",ajaxURL,true);
    2. Устанавливаете обработчик изменения состояния обработки запроса ajaxRequest.onreadystatechange = function() { т.е. говорите браузеру, когда состояние обработки запроса изменится, выполни этот код.
    3. Говорите браузеру начинай запрос ajaxRequest.send();
    Время выполнение этих пунктов очень маленькое, какой смысл запрещать выполнение, ведь поймать это практически невозможно.
     
  8. anthony3d

    anthony3d Новичок

    Сообщения:
    16
    Симпатии:
    0
    Я же сказал — старая привычка. Возможно, вредная.

    А насчет «поймать ... практически невозможно», у меня есть пара историй, где невозможное оказалось возможным.

    1. 1989-й год. Вычислительный центр университета, класс ПЭВМ. MS-DOS 4.1
    Входит лаборант и громко рассказывает новость, прочитанную в журнале «Компьютер» (до интернетов новости шли медленно):
    «А вы знаете, что в DOS найден баг? Если запустить format /xxxxxx (шесть иксов), то команда без спроса и без экранного вывода начинает форматировать тот диск, на котором стоит.»
    Все в шоке, а одна студентка говорит: «Я — знаю. У меня однажды так получилось...».

    2. 1999-й год. Отдыхаю я с семьей в Ялте, в пансионате. И каждое утро мы выходим на набережную мимо невероятно крутого ресторана «К.Вальтер». Посетители этого ресторана, совершенно рафинированные граждане, как на старом фото — все в смокингах и бабочках, с тросточками (ну или мне так казалось). В окнах ресторана выставлены модели парусников, но не китайские, а настоящие, которые фанатики-моделисты делают, все как у реальных кораблей, только меньше в 32 раза. Охрана ресторана — какие-то нинзя, невидимые, в черных облегающих костюмах, стилизованных под пиджаки и брюки.
    Но однажды утром мы обнаружили, что корабли в окнах — поломаны. Потому что случилось невозможное: рафинированные в смокингах напились и буянили ночью, валились прямо на эти модели, да еще и рыгали, небось, при этом. И никакие нинзя им помешать не смогли.

    Поэтому лучше обработать вероятность исполнения функции по таймеру в неподходящий момент и предотвратить его.
     
  9. Encrypt

    Encrypt Новичок

    Сообщения:
    48
    Симпатии:
    0
    Оставлю это здесь noteskeeper.ru/720/
     
  10. anthony3d

    anthony3d Новичок

    Сообщения:
    16
    Симпатии:
    0
  11. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.102
    Симпатии:
    1.346
    У неактивного приложения javascript 'время' понятие расплывчатое. Зависит от эксплорера. Он вам вместо 5 секунд запросто сделает 100 при неактивности страницы...
     
  12. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.102
    Симпатии:
    1.346
    Давно решено: Progressive Web Apps (PWA) - функционируют как нативные приложения.
    Введение: PWA — это просто
     
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.102
    Симпатии:
    1.346
    Описываемая вами задача решается на BLE устройстве. Желательно с Mesh.
    По кнопке BLE устройство пробуждается (1..2 мс типичный старт генераторов и PLL в чипе, при потреблении 1..5 мА на данной стадии).
    Затем MCU смотрит это событие 'включения' или 'выключения' (короче разбирается что там случилось и зачем его пробудило) и передает маяк с выявленным состоянием (1..3 мс при 6..15 мА на данной стадии).
    В этой-же стадии ловит сигнал подтверждения приема...
    Всё - далее спит до изменения состояния кнопки (0.1 ..2 мкА на данной стадии, сильная зависимость от используемых элементов в цепи питания).
    Далее в зависимости от нужд доставки данных (подтверждения передачи), которое зависит от типа сети - если это mesh, то узел сети (привязанный к устройству с кнопкой) сам разберется с необходимостью дублирования и прочими заморочками передачи сигнала до шлюза к потребителю...
    У потребителя может стоять элементарное приложение PWA (всё умещается до 2-х страниц текста (пару десятков строк) с коментами на javascript).
    При этом не нарушается ни одна спецификация (стандарты), в отличии от использования TCP/IP на устройствах типа ESP, которые не в состоянии по причине малых ресурсов удовлетворить и 1% стандартов TCP/IP.
     
  14. lookingooder

    lookingooder Читатель

    Сообщения:
    66
    Симпатии:
    10
    Статья для несведующего вообще ни о чем, остальной интернет также пестрит "рекламой" PWA, но технической стороны не раскрывает... Создается впечатление, что это больше маркетинг, чем программироование (как минимум в настоящее время).
    Правильно ли я понял, что в Google создаются некие API или инструменты, которые облегчают написание приложений, исполняемых браузерами? И, да, пока что, вроде бы, только на Chrome...
     
  15. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.102
    Симпатии:
    1.346
    Для WEB BT/BLE не только на Chrome.
    А про остальное у вас сложилось неверное мнение. Приложение берет местные ресурсы, внешние сервера не обязательны. С внешних серверов HTTPS берутся стартовые картинки, сама страница, *.js файлы. Положите их в местную файловую систему (или типа в кеш броузера) и всё будет работать.
    О том что вам не разобраться и не найти примеров как всё это пишется, то тут беда рускоговорящей части. По законам у нас незя учиться новым вещам и технологиям - это не нужно управляющим...
    --------
    Для собственной сборки задачи ТС требуется (один из вариантов):
    1. Вот кнопка – TTP223 https://ru.aliexpress.com/af/TTP223.html?SearchText=TTP223&SortType=price_asc
    2. А это все необходимые мозги - https://ru.aliexpress.com/af/JDY%252d10.html?trafficChannel=af&SearchText=JDY-10&SortType=price_asc
    3. И батарейка на 3..3.6В - пусть CR2032.

    Есть мелкое “Но”. Используемый MCU в режиме сна кушает:
    1. TTP223 – 1.5uA, maximum 3.0uA
    2. TLSR8266 – в режиме сна (ожидания события кнопки) 0.7uA, maximum в зависимости от активных включенных устройств – может вы хотите чтобы он пробуждаляс от активности на USB, UART, прочих таймерах – тогда к 10..100 uA.
    3. Кривой электролит/(дешевая керамика) с али в питании – 1..10 uA.
    Итого, для реального приложения с кнопкой и нормально промытой(!) платой – 2..5 uA

    Для устройства выполняющего контроль кнопки считать пиковые просыпания на 5 мс с пару пиками (< 30% времени активности) в 30 мА нет смысла – такое событие происходит до 10 раз в день? :)

    У батарейки CR2032 емкость составляет примерно 210-240 мАч.

    200/0.003=66666.66666 часов. 7 лет? Не – саморазряд батареи больше…
     
  16. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.102
    Симпатии:
    1.346
  17. anthony3d

    anthony3d Новичок

    Сообщения:
    16
    Симпатии:
    0
    Знаете, есть такой способ быстро узнать что перед тобой за книга: открыть на случайной странице и прочесть случайный абзац. В большинстве случаев это мгновенно дает нужное представление.
    Вот, никогда не читал ничего из Мелвилла, даже не представляю о чем он писал.
    Беру с полки книжку жены, открываю на случайной странице и читаю:
    «В тот же день, едва стемнело и сменившиеся вахтенные спустились вниз, из кубрика послышался шум; двое предателей, трепеща, выбежали на палубу и осадили капитанскую каюту со словами, что они не осмеливаются оставаться вместе с остальными членами команды. Ни уговоры, ни пинки и затрещины не могли заставить их вернуться в кубрик; наконец, по их собственной просьбе, их поместили для сохранения их жизней в корабельный трюм.»
    Вижу добротный, как моряцкая рубаха, текст о приключениях на воде, бунте экипажа. Глянув соседний абзац, я увидел иностранные имена (Мелвилл, как-никак :) и упоминание китов. Китобои. Когда захочу простой романтики — почитаю.

    Захожу по указанной Вами ссылке. Вижу:
    «Это проксирующий слой между фронтэндом и бэкэндом, находящийся в браузере. Все запросы браузера идут через него. Данное разделение на два независимых слоя позволило сделать переход обычного веб сайта в PWA максимально простым.»
    Черт его знает!...

    Короче, если вдруг озадачусь фронтендом и бэкендом до такой степени, что мне потребуется проксирующий слой, попробую.
    Пока мне нужна кнопка.
    И я ее сделал :)

    (Извините, дружище, если задел Вас своими словами...)
     
  18. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.102
    Симпатии:
    1.346
    Это возникло от того, что рекламщики-спамеры используют его для вывода оповещений в Win10 и Android (может и в других - я особо этим не интересуюсь).
     
  19. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.102
    Симпатии:
    1.346
    Восприятие only 'Бытовое кухонное'?
    Чтобы в ESP появилось что-то, работающее по TCP/IP было затрачено не менее 1 года "первопроходцами".
    Arduino вышла получив уже всё готовое.
    Меня таким не задеть. Я знаю основной закон природы в этой сфере - толпа всегда выбирает худшее.
     
  20. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    10.102
    Симпатии:
    1.346
    Рассмотрите дальнейшее применение “сделанного”.

    Пока аналогия такова:

    Авто имеет четыре колеса. Если одно заменили на бревно/лом, впихнув между ступицей и аркой, то оно ещё может двигаться, даже разгоняется... Окружающим почему-то это не нравится – непонятно почему… Наверно описание плохое?

    Меняем второе на дубину/лом… Оба ведущих – что-то не едет…
     

Поделиться этой страницей