Мой дневник

16.10.2018

Работаем через серый ip gsm

Filed under: компьютеры — sae762 @ 09:57

Как я написал в прошлом посте, поставил gsm модем на orange pi zero. Думал, будет сервер в интернете… а вот фиг: провайдер выдает серый адрес и к нему снаружи нет доступа!

Пришлось курить гугл…

Картинку с вебкамеры получил с помощью motion: через веб-интерфейс прошу motion сделать snapshot, а затем загружаю его в dropbox )

curl -s -o /dev/null http://127.0.0.1:8080/0/action/snapshot

sleep 2

curl -X POST https://content.dropboxapi.com/2/files/upload \
 --header "Authorization: Bearer *** \ 
 --header "Dropbox-API-Arg: {\"path\": \"/camera1/pic1.jpg\",\"mode\": \"over
write\"}" \
 --header "Content-Type: application/octet-stream" \
 --data-binary @/var/lib/motion/lastsnap.jpg

Телеметрию и sms (см пред пост) отправляю через телеграм

#!/bin/bash
#https://www.shellhacks.com/ru/telegram-api-send-message-personal-notification-b
ot/

TOKEN=***
CHAT_ID=***
MESSAGE=$1
URL=”https://api.telegram.org/bot$TOKEN/sendMessage”

curl -s -X POST $URL -d chat_id=$CHAT_ID -d text=”$MESSAGE”

Хотелось подключить mqtt, но подзабыл адрес хорошего бесплатного сервиса.

И наконец, о доступе к консоли… оказывается, в сети есть бесплатный ssh на месяц! (ssh-ext.service для systemctl, что с этим делать хакеры поймут ))

[Unit]
Description=Keeps a tunnel to ‘remote.example.com’ open
After=network.target

[Service]
User=root
ExecStart=/usr/bin/sshpass -p ‘PASSWORD’ ssh -v -o “ServerAliveInterval=10″ -o ”
ServerAliveCountMax=2″ -p 443 -R 8822:127.0.0.1:22 -N -C USERNAME@s4-30.
sshservers.us
Restart=always
RestartSec=20

[Install]
WantedBy=multi-user.target

Если sim card стоит в модеме, но нужны sms

Filed under: компьютеры — sae762 @ 09:33

Давным давно пришлось мне поставить в телефон новую симку. А на старую идут смски от всяких логинов и подтверждений… в общем пришлось собрать небольшого робота, который отправлял смс в телеграм через IFTTT (см мою предыдущую статью)

Теперь понадобилась sim карта для gsm-модема в orange pi zero. Не покупать же новую 😉 Вставил свою старую симку, пополнил баланс, подключил интернет через ModemManager (отдельная история)… а как теперь ловить смс??

Оказалось, sms приходят в модем, посмотреть список можно:

mmcli -m 0 –messaging-list-sms

и далее прочитать:

mmcli -s /org/freedesktop/ModemManager1/SMS/18

Таким образом, нужно всего лишь запилить небольшой скрипт и подцепить его к crontab (к сожалению, по событию не получается: ModemManager не генерирует событие при получении sms). Итак, скрипт:

#!/bin/bash
sms=””

smslist=`mmcli -m 0 –messaging-list-sms | grep org | cut -d”(” -f1`
if (( ${#smslist}<10 )); then
echo “no sms”
exit
fi

for item in $smslist
do
a=`echo $item | cut -d”/” -f6`
b=`mmcli -s “$item” | grep text | cut -d”‘” -f2`
mmcli -m 0 –messaging-delete-sms=/org/freedesktop/ModemManager1/SMS/$a
sms+=$a”:”
sms+=”$b”
done

if (( ${#sms}>10 )); then
echo -e “$sms”
/opt/telegram/send.sh “$sms”
fi

Внимательный читатель обратит внимание, что потом делается с смс 😉 Но это уже другая история…

 

 

30.03.2018

Раздайте ваши файлы

Filed under: компьютеры — sae762 @ 23:31

Давно не писал )

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

1. получить хеш файла (не sha-1): rhash –btih <filename>
2. найти магнет-ссылку по хешу: https://btdig.com%5B/<hash>%5D
3. добавить ссылку в торрент-клиент
4. Переместить (move) torrent туда где лежит ваш файл, начтнется процесс его верификации и затем он начнет раздаваться

А чтобы хорошо раздавать торренты, нужно поставить правильные трекеры. Для transmission remote сделал небольшой скрипт:

#torrent id (number)
tn=4

#remove first 5 trackers
for (( a = 1; a < 5; a++ )) do
transmission-remote <host> –auth user:pass -t $tn -tr $a
done

#add trackers (всегда свежий лист на https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best_ip.txt)
for tr in \
udp://62.138.0.158:6969/announce \
udp://5.79.209.57:6969/announce \
udp://87.233.192.220:6969/announce \
udp://51.15.4.13:1337/announce \
udp://151.80.120.113:2710/announce
do
#echo $tr
transmission-remote <host> –auth user:pass -t $tn -td $tr
done

10.01.2018

SMS to Telegram and Google Doc

Наступил новый год, внезапно у нас разблокировали wordpress, а я тут как раз с новым проектом.

Screenshot_20180110-112508Сначала была симка.
Номер существовал давно, и была заведена на него куча всяких сервисов. Особенно подтверждения всяких финансовых операций.
Но тут появился новый провайдер, тарифный план и т.п., к тому же при поездках за границу не всегда удобно ловить смс-ки в роуминге. В общем, созрела мысль:
– оставлять нечто с сим-картой дома
– при поступлении смс перенаправлять их в интернет, в мессенджер.
Выбор мессенджера определялся его открытостью, тут telegram вне конкуренции. Однако, хотелось гибкости, поэтому решил ввести еще один “слой”. Есть такая система, IFTTT. Так что смс сначала идет в это облако, а уже там обрабатывается. Причем обработчиков можно создать несколько, например, отправлять в telegram и сохранять в google-документах.

ifttt

Кстати, тут уже можно остановиться: есть готовое приложение ifttt, оно наверное может ловить смс на оставшемся дома старом телефоне и отправлять его в сеть. Но на тот момент свободной сотки под рукой не оказалось, и я решил собрать свое устройство.

m590eНа алиэкспрессе приобрел модуль gsm, m590e. Хитрые китайцы продают “набор diy”, на деле же они где-то навыдирали б/у модулей и просто прикладывают к ним примитивную плату и пяток деталек. Выходит дешево, но паять smd-компоненты нужно хорошее увеличение. Тем не менее модуль запускается, в сети регистрируется. Будьте внимательны с питанием, при gsm-операциях потребление резко возрастает, я допаял еще конденсатор на 2000мкФ.

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

d1_mini_v2.3.0_1_16x9Но я пошел дальше. В качестве сервера взял модуль esp8266. Wifi в нем есть, serial как раз 3.3V, а поскольку взял модуль nodemcu, то получил micro-usb вход для питания и 5V вывод для подключения gsm-модуля.

Все бы хорошо, но serial порт в esp8266 всего один. По нему надо и программировать, и отлаживать, и работать с gsm… Весьма неудобно. В Arduino IDE есть библиотека SoftwareSerial, можно использовать ее, но при малейшей модификации кода нужно пересобирать и перезаливать всю прошивку. В общем, посмотрел я многие варианты, и остановился на Cesanta Mongoose OS с примитивной javascript-машиной.

Большим плюсом является возможность заливать только js-файлы, не пересобирая прошивку. Также имеется встроенный web и rpc – сервисы. А это значит, что программировать модуль можно не через usb/serial, а прямо по wifi сети!

mos

O Mongoose OS от Cesanta. Это не первый мой проект под этой системой. В целом мне нравится ее гибкость и функционал. Однако, хочу все же влить пару ложек дегтя в эту бочку меда. Вся система развивается, и части меняются полностью, так что через полгода приходится заново скачивать и изучать систему. Отсюда возникают проблемы с недостатком документации. И к большому сожалению, новая версия javascript-машины, mJS, настолько “оптимизирована”, что функционала явно не хватает. Например, не осталось функций работы со строками, типа indexOf или escape, что почти убивает возможности программирования на javascript. Форкнуть что ли проект пока не поздно… По крайней мере, прошивку и IDE точно надо сохранить.

IMG_20180110_103734Но вернемся к проекту. Подключил я модуль к RX,TX,Gnd и 5V, для запуска модема подключил пин модема Boot к выводу nodemcu D2… и нифига модем не запускается! Для начала оказалось, что D2 это вовсе не 2, а GPIO5 (а сначала на тестер грешил ))) читаем даташиты!). Затем, оказалось, что логического 3V мало, поэтому подтянул вывод boot на +5V через резистор 15K, а вывод D2 перевожу в режим INPUT, тогда и получаем достаточный для старта уровень.

Затем, оказалось, что передача данных в модем работает, а прием от модема – никак. Долго измерал уровни, подтягивал резистором… а оказалось, что нужно отключить обработчик rpc-комманд от порта. Прописал в conf0.conf uart: -1 и дело пошло на лад. Но времени потратил изрядно.

Затем, нужно дождаться от модема строки +PBREADY, и лишь после этого инициализировать его серией AT-команд для того чтобы он передавал по serial номер звонящего и текст смс. Однако в новой mJS нет нормальных функций задержки! delay просто затормаживает весь модуль. Выполнение javascript внутри обработчиков событий тоже имеет свои особенности. Словом, пришлось городить функцию, в которой внутренний счетчик определяет который раз она вызвана, и в зависимости от этого выполняет набор инструкций, а сама функция вызывается по таймеру. Ну и вообще пришлось поломать голову, так что “не ругайте программиста”… Код постараюсь выложить на github.

Для отладки и некоторых тестов в программу включил также примитивный telnet. Ведь консоль занята gsm-модемом. Вывод всей консольной информации туда все же не доходит, так что если в javascript ошибка, получаем “кирпичик”, который впрочем можно поднять через wifi rpc.

Добавил мониторинг модема. Теперь программа временами отправляет на модем “AT”, а обработчик ответа выставляет таймстамп последнего “ОК”. Если ответа нет, происходит повторное дерганье пина BOOT.

Много возни с кириллицей. Переключился на формат UCS2, получаю много цифр, перевести это в url-кодированный utf8 было непросто. Тем более что часть сообщения приходит в ascii, а функционал javascript в mjs обрезан до слез.

telneДобавил конфигурацию через веб-интерфейс. Фактически, взял готовый пример и добавил в него всего один параметр – ключ ifttt. По дизайну системы, просто так добавить поле в параметры нельзя. Нужно пересобрать всю прошивку, перегуглить кучу страниц, понять как правильно добавить поле… выкинуть все нафиг и записать ключ в неиспользуемый параметр.

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

Теперь я понимаю как Толстой писал вайнуимир.

Но в конце все более-менее получилось. Код выложу на github, однако есть несколько тонкостей в настройке модуля, так что повторение может быть не столь тривиальным…

12.12.2016

Windows на MacOS

Filed under: компьютеры — sae762 @ 09:07

Или пара слов о bootcamp

На днях попросили переустановить windows на macbook air. Хорошо что не начал нахрапом все сносить, сначала погуглил. Смутило то, что windows стоит всего на одном физическом разделе диска.

Оказывается, в макоси все предусмотрено, в том числе и винодовс по соседству. Правильный подход (bootcamp) состоит в следующем:

  • скачать образ windows в виде iso
  • зайти в macOS (опции загрузки появляются, если сразу после стартового звука нажать Options)
  • в приложениях найти bootcamp (bootcamp assistant или как-то так)
  • bootcamp берет скачанный iso, выделяет место для винды на диске, и строит загрузочную флешку с нужными парамерами
  • перегружайтесь и устанавливайте виндовс с созданной флешки
  • затем можно в настройках установить какую систему загружать по умолчанию

По мне так очень грамотно все сделали, разработчикам макоси риспект и уважуха )

BTW, если эта винда вдруг сломается (например, вы решите сжать весь виндовый диск ;)) с помощью этой же флешки можно “восстановить систему”.

 

17.10.2016

Только GRUB2

Filed under: компьютеры — sae762 @ 15:38

только хардкор… 😉

Перебрал несколько вариантов syslinux, extlinux итп, но зачем, если можно сделать единообразно и универсально?

Итак, простой метод создания универсальной загрузочной флешки USB для загрузки как в legacy bios, так и UEFI:

  1. Для grub2 нужен небольшой раздел для загрузчика, 1М достаточно, поэтому gdisk /dev/sdc и создаем: 1) 1M type 0xEF02 (именно так) и 2) на ваш вкус, обычно вся остальная флешка type 0x0700
  2. Форматируем только второй раздел, первый будет использован grub-ом и не монтируется
  3. Монтируем mount /dev/sdc2 /boot  (именно так, туда grub2 по умолчанию пишет свои файлы, наверное можно определить в команде, но проще примонтировать в /boot)
  4. Ставим grub2 для legacy bios: grub2-install –target=i386-pc [–removable]  /dev/sdc (опция removable тут кажется не нужна, но я ставил)
  5. Ставим grub2 для efi: grub2-install –target=x86_64-efi –efi-directory=/boot –removable  /dev/sdc
  6. Получилось на диске /dev/sdc две папки: EFI с загрузчиком grub2-64 и grub2 c модулями для grub-64 и grub-32.
  7. В папку /grub2 прописываем файлик grub.cfg, мне кажется удобно прописать лишь одну строку “configfile /grub.cfg” а уже в корне расположить большой конфиг для разных систем

 

12.10.2016

Linux for Chuwi Hi10

Filed under: компьютеры — sae762 @ 11:11

Продолжаю воевать с Chuwi Hi10

Поскольку определенный прогресс достигнут, решил создать специальную страницу

Linux for Chuwi Hi10

 

29.08.2016

Chuwi hi10 bios reset

Filed under: компьютеры — sae762 @ 10:51

При ковырянии в настройках bios возможна ситуация, когда видео перестает инициализироваться. Получаем рабочий планшет, но без экрана и hdmi. Выручает метод сброса в стандартные настрорйки “вслепую”:

  • выключаем, как понять что выключился – вопрос непростой, у меня например лампочка на хабе немного меняет интенсивность…
  • включаем и жмем много раз Del
  • нажимаем 1 раз Left затем 7 раз Down и 2 раза Enter
  • если попали в нужный пункт, сразу моргнет подсветка экрана
  • можно выключить и снова включить – экран заработает

Затем нужно снова зайти в bios, включить режим show all items, и в south bridge выставить SDIO SSD

Ну и какой же пост без картинки…

hi10-bios-screenв PCI mode, иначе wifi не запустится.

29.06.2016

Если нужно com.google.android.maps

Filed under: компьютеры — sae762 @ 16:38

Откопал на Stackexchange, на всякий случай сохраню

I had the similar problem on a real device. After a loot of googling I found this answer

fixing missing shared library. It turns out that on some custom roms the comp.google.android.map library is missing, you have to install it manually.

  • download googleapps
  • extract two files
  • system/etc/permissions/com.google.android.maps.xml
  • system/framework/com.google.android.maps.jar
  • remount the /system filesystem rw (mount -o rw,remount /system)
  • copy the files in
  • do a chmod 644 on them
  • reboot

20.05.2016

kernel 4.6 & rtl8723bs

Filed under: компьютеры — sae762 @ 14:28

Решил поставить новое ядро.

Чтобы не собирать модуль для wifi отдельно, интегрировал его в ядро, в данном случае в drivers/misc:

  • скопировал rtl8723bs-master в /drivers/misc/
  • добавил описание в misc/Kconfig ‘source “drivers/misc/rtl8723bs-master/Kconfig”‘
  • добавил в misc/Makefile  ‘obj-$(CONFIG_RTL8723BS) += rtl8723bs-master/’

В make menuconfig модуль появился, выбрал его, но получил ошибку

drivers/misc/rtl8723bs-master/os_dep/os_intfs.c: In function rtw_init_netdev:
drivers/misc/rtl8723bs-master/os_dep/os_intfs.c:567:9: error: “struct net_device” has no member named “wireless_handlers”

Практика показывает, что не обьявлен параметр CONFIG_WIRELESS_EXT. Что интересно, в описании /net/wireless/Kconfig он есть, но без описания и в меню не появляется. Добавил в Kconfig:

config WIRELESS_EXT
bool “EXT”Появился пункт меню EXT, его также отметил, и модуль собрался!Проверим в работе…

 

Next Page »