Работа с JSON со стороны Arduino

  #include <ArduinoJson.h> StaticJsonDocument<500> doc; // Количество элементов в дереве json doc[«type»]=1; //Добавляем значение поле type и значение «1» doc[«numOfPins»]=6; // То же самое // А вот тут интереснее. Создаем массив векторов «pin». В каждом векторе может // быть сколько угодно пар JsonArray pinTypes = doc.createNestedArray(«pin»); Прописываем значения для каждого элемента массива. pinTypes[0][«type»]=»INPUT»; pinTypes[0][«name»]=»D3″; pinTypes[0][«value»]=String(digitalRead(0)); // А здесь зачем конвертить в String ? Не знаю. Но когда парсится массив, то //QT не может по-человечески вытащить это значение. А из String легко. pinTypes[1][«type»]=»RESERVED»; pinTypes[1][«name»]=»TX»; pinTypes[1][«value»]=0; // И так далее String jsonDoc; // Библиотека может серилизовать прямо в поток, например //  serializeJson(doc, Serial); Но мне нужно писать по-хитрому, serializeJson(doc, jsonDoc); // Поэтому создаем временную переменную и… server.send(200, «text/html», jsonDoc); // отправляем ее клиенту.

Потек кран (очередной раз)

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

IMG_20200314_172622 IMG_20200314_172802 IMG_20200314_172903 IMG_20200314_173434

ssh по ключам

генерируем приватный и публичный ключи
ssh-keygen -t rsa
на сервере добавляем публичный ключ в файл authorized_keys находящийся в домашнем каталоге пользователя которого хотим пускать по ключам в подкаталоге .ssh
cat id_rsa.pub >> authorized_keys
/etc/ssh/sshd_config
PubkeyAuthentication yes
для far manager и winscp используем ключ в формате putty, с помощью puttygen импортируем приватный ключ id_rsa и сохраняем его (save private key)

для использования приватного ключа id_rsa при работе с git добавляем в «C:\Program Files\Git\etc\ssh\ssh_config»
Host 192.168.1.205
   Identityfile "F:\JOB\FSK\CDS\.ssh\id_rsa"

Установка расширения Google Chrome без публикации в интернет-магазине Chrome

Публикацию отклонили, воевать не хочется, расширение бесплатное и необходима только одна (две) установки.

Уважаемый разработчик!
Ваш продукт для Google Chrome (название: "WAFriends", идентификатор: cpjembijgjehhiakijmcdjbncingfdip) нарушил наши правила и был удален из сервиса "Интернет-магазин Chrome".
Ваш продукт нарушает следующий раздел документа "правила программы":
"Спам и размещение в магазине"
Отсутствуют описание объекта в соответствующем поле, значки или скриншоты. Кроме того, объект вызывает подозрения.

1) Если расширение было установлено через "Загрузить распакованное расширение" удаляем.
2) Жмем "Упаковать расширение", выбираем каталог с расширением (ключ не нужен), в итоге появляются два файла zzzz.crx и zzzz.pem 
3) Устанавливаем zzzz.crx посредством drag-and-dropping на страницу расширений chrome://extensions
4) После перезагрузки браузера расширение будет отключено "Unsupported extensions disabled" 
5) Вносим (добавляем) ИД расширения в белый список, ИД на странице расширений отображается не полностью, потому ищем по наименованию каталога
C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\Extensions\koajdlofjfmhmlblclllndnhmjedpnjd
6) Перезагружаем браузер, на странице расширений видим надпись "Этим браузером управляет ваша организация."

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallWhitelist]
"1"="llndpnjdkoajdldnhofjfmhmlblclmje"
"2"="koajdlofjfmhmlblclllndnhmjedpnjd"
Безымянный2 wafriends.crx wafriends.reg

Permission denied (publickey,gssapi-keyex,gssapi-with-mic)


ssh -v -i /root/test_keys/id_dsa test@test.test
...
debug1: Skipping ssh-dss key /root/test_keys/id_dsa - not in PubkeyAcceptedKeyTypes
...
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

ssh -i /root/test_keys/id_dsa test@fortest.host -o "PubkeyAcceptedKeyTypes +ssh-dss"
The new openssh version — 7.0+ does not support DSA keys anymore

Download and merge HTTP Live Streaming .ts files

Скачиваем и собираем кусочки видео и отдельно аудио файлов (в данном случае их там тысячи, в m3u8) в один с подготовкой к проигрыванию стандартным элементом <video> html5

/usr/local/bin/ffmpeg -copyts -i "https://media-store-n.ru/api/v1/buckets/hls.webinar.ru/objects/56547.audio.128kbps.master.m3u8" -copyts -i "https://media-store-n.ru/api/v1/buckets/hls.webinar.ru/objects/56547.video.720p.master.m3u8" -muxpreload 0 -muxdelay 0 -vcodec copy -acodec mp3 -af "aresample=async=1000" -movflags faststart "/usr/local/www/nginx-mneti/dv/loaded/56547.mp4"
(ссылки нерабочие)

пытаемся избавиться от рассинхронизации видео и звука, -copyts -muxpreload 0 -muxdelay 0 -af «aresample=async=1000»
видео поток просто копируем, звук конвертируем в -acodec mp3
подготавливаем к просмотру html5 элементом video, -movflags faststart

http streamed MP4 video seekable with php-frm and nginx

Видео проигрывается, заставим работать быструю перемотку (без скачивания всего файла)
Воспользуемся возможностями нгинкса, именно он будет обрабатывать заголовки с «Content-Range»

    <video width="80%" height="80%" controls autoplay>
      <source src="https://www.mneti.ru/dv/loaded/getmp4.php?vid=<?= intval($_GET['vid']??0) ?>" type="video/mp4">
      Your browser does not support the video tag.
    </video>
часть содержимого getmp4.php, что-то там анализируем в php и если все ок, отдаем полный контроль по отдаче фала в nginx

$file = intval($_GET['vid']??0) . '.mp4';
header("Content-Type: video/mp4");
header( 'X-Accel-Buffering: no' ); //avoid nginx buffering.
header("X-Accel-Redirect: /stream_video/$file");
exit;    
настройка реального расположения файлов nginx.conf

    location /stream_video {
        internal;
        alias /var/www/video;
    }

Драйвер двигателей для WeMos D1

WeMos_Driver WeMos_Driver2 Wemos D1 работает на 3,3 В. Большинство драйверов двигателей для Arduino используют 5В логику. Поэтому чтобы не городить согласование логики можно использовать WEMOS I2C Dual Motor Driver.  Про него хорошо написано здесь и здесь Здесь ссылка на GITHUB откуда можно скачать библиотеку для работы с шилдом. I2C адрес 0x30 (по умолчанию), но можно изменить на 0x2D, 0x2E, 0x2F используя перемычки AD0, AD1 на обратной стороне платы модуля. Допускается использовать двигатели с рабочим напряжением от 4,5 до 13,5 В и номинальным током до 1,2 А.