LINUX.ORG.RU

Разбор вывода команды и запись результатов в файл.

 


0

3

Хочу поинтересоваться у уважаемых присутствующих Гуру каким инструментом они порекомендуют решать вот такую задачу. Мне в голову несколько вариантов приходит, но затрудняюсь с выбором.

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

qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength

Не понимаю зачем было форматировать именно так,но что есть то есть. Ввыод такой:

[/dev/cdc-wdm0] Successfully got signal strength
Current:
        Network 'lte': '-73 dBm'
RSSI:
        Network 'lte': '-73 dBm'
ECIO:
        Network 'lte': '-2.5 dBm'
IO: '-106 dBm'
SINR (8): '9.0 dB'
RSRQ:
        Network 'lte': '-8 dB'
SNR:
        Network 'lte': '7.0 dB'
RSRP:
        Network 'lte': '-101 dBm'

Её можно запускать раз в несколько секунд и вот такое получать. Хочется писать это в одну строчку в CSV файл для целей последующего построения графиков например в программе grace. Чтобы в файле строчка выглядела так:

-73,-2.5,-106,9.0,-8,7.0,-101

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



Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от wandrien

Так ведь специализации в линуксе разные бывают. Я вот только что сделал полноценный одноплатный комп из «морально устаревшего» роутера. Под микроскопом припаял ему аппаратную консоль и usb,преобразователь для питания usb прикошачил,в прошивке device tree поправил чтобы usb увиделось. Буду очередной радиомодем подключать к нему (по usb) и видеокамеру наблюдательную (по eth). Модем перепрошил чтобы он был именно модемом а не маршрутизатором со своим внутренним NAT. От привязки к оператору избавил. Прикольно что и в роутере и в видеокамере и в модеме и в моем настольном компе - сплошные линуксы :)

А кто-то вот охренительные команды для sed писать умеет.

watchcat382
() автор топика
Ответ на: комментарий от gagarin0

какая же в итоге бездна между нами

Просто разные специализации. Вот если бы найти почему какой-нибудь SoC окирпичился и не грузится - то это ко мне.

watchcat382
() автор топика

Есть команда которая читает параметры сигнала из радиомодема

Может у него есть какой-нибудь конфиг/cli-параметры, чтобы выводил в нужном формате? Понятно, что yaml можно распарсить, как текст или обработать утилитами/ямл-модулями-различных_языков, но получить нужное в stdin без дополнительных телодвижений комфортней.

dmitry237 ★★★★★
()
Ответ на: комментарий от dmitry237

Может у него есть какой-нибудь конфиг/cli-параметры

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

получить нужное в stdin без дополнительных телодвижений комфортней.

Вот и я о том же.

А ведь задача сбора данных с какого-нибудь железа - достаточно частая. Например я собирал с контроллера своей домашней солнечной электростанции. Там modbus,пришлось на Си читалку написать с использованием libmodbus. Естественно сделал чтобы без перезапусков каждые несколько секунд работало,а однажды запустилось и читало. Но там мне надо было с конца февраля по начало ноября данные собирать - пока солнечная энергия поступает. Потом и озаботился написанием. В данном же случае статистику с радиомодема надо будет пособирать несколько дней сейчас и потом еще на майских праздниках когда дачники сюда в деревню набегут. А потом можно будет превратить это в графики и передать через знакомых технарям сотового оператора. Авось поймут причину почему здесь сеть периодически глючить начинает(устройства теряют регистрация в сети). Обычно это случается летом когда нагрузка больше. То идеально работает то по несколько раз в час обрывы связи.

watchcat382
() автор топика
Ответ на: комментарий от anonymous

При желании можно легко написать свою утилиту на си

Безусловно согласен. Но пока хочу обойтись решением попроще. Всё же писать на Си это не sed c awk запустить. Я для libmodbus писал сборщик данных - довольно долго возился пока отладил.

watchcat382
() автор топика

Я даже понимаю тех кто предлагает каждые несколько секунд перезапускать длинные конвейеры из программ или для такой мелочи аж целый парсер yaml использовать. По всей видимости у них компы монстрообразные с десятками ядер и сотнями мегов памяти,а также и электричества киловатты доступны. Там конечно незаметно лишней нагрузки от неоптимального способа решения задачи. А у меня тут - полностью автономный дом и компы работают от солнечной энергии когда она есть и от генератора с двс на пропане когда нет. Причем пропан этот сюда надо доставлять с несколькими ручными погрузками. Поэтому у меня за последние полтора десятка лет что я тут живу выработался безусловный рефлекс электричество экономить и не создавать лишнюю нагрузку на комп там где этого можно избежать. Чтобы он меньше кушал. Да и сам комп далеко не так монстрообразен как у нынешних профессиональных программистов. Так что если есть возможность сэкономить джоули за счет несоответствия unix way - то я буду несоответствовать и экономить. Я вообще люблю поручать всякие «локальные» задачи всяким одноплатникам, сделаным из чего угодно - два «морально устаревших» роутера, линукс в модулях видеокамер, тоже «морально устаревшая» телеприставка Mele A2000G, ну и так далее. Например мало кто знает,что в многих выброшеных видеокамерах от охранного наблюдения можно найти линуксовый комп на чем-нибудь типа Hi3516AV300. И даже если у такой камеры умер видеосенсор или пришел в негодность объектив то там остался комп с 128М памяти, eth,rs232 и часто usb. Иногда еще к i2c припаяться можно. И кушает этот комп всего-то миллиампер 150. Вобщем - линуксов вокруг много больше чем кажется при взгляде на десктопы:) И их можно успешно использовать.

watchcat382
() автор топика
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от watchcat382

создавать лишнюю нагрузку на комп там где этого можно избежать

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

gagarin0
()
Ответ на: комментарий от watchcat382

и не создавать лишнюю нагрузку на комп

А вы можете выразить эту информацию в числах? Желательно в деньгах. В стиле «запускаем нечитаемую лапшу на sed’е, тратим столько энергии, а на «целый парсер yaml» уходит столько энергии, что в перспетикве даёт разницу в N копеек в месяц"»? Просто интересно.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

А вы можете выразить эту информацию в числах?

Вообще-то как раз недавно искал электронный счетчик энергии за недорого,но чтобы интерфейс был которым его можно к компу подключить. Но нужен такой чтобы небольшие расходы энергии хорошо измерял. Если промышленные счетчики,у них есть интерфейс,но они для очень больших расходов. А на маленькие расходы - без интерфейса,да еще народ в обзорах жалуется на точность. А заняться измерением энергоэффективности всяких компов хочется. С этим не всё так просто как многим кажется. Я когда линуксу управление питанием настраивал - просто через цифровой амперметр комп подключал и смотрел что на что влияет. Но это всё же не счетчик.

Ну и также замечу что решение простых задач явно неэффективными средствами оскорбляет моё чувство технической эстетики. А то жалуемся что линуксовый софт не в меру разжирел,а сами вывод из 14 строчек yaml-парсером разбираем.

watchcat382
() автор топика
Ответ на: комментарий от gagarin0

Я даже ожидать не мог что кто-то для разбора 14 строчек предложит аж целый yaml-парсер. Тем более что как показал эксперимент с вышеприведенным кодом на питоне - за этим парсером всё равно доделывать надо.

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

Я видимо расширю ваш кругозор тем, что «data processing» можно осуществлять на другом более мощном железе, а с «слабенького одполатника» брать только данные

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от gagarin0

Так data processing и будет на настольном компе после того как собранный одноплатником csv файл будет на него скачан. Я же не собираюсь графики одноплатником рисовать.

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

Я вам явно напишу порядок действий, если вы так обеспокоены нагрузкой на «одноплатник»

  1. Отсылайте сырые данные с одноплатника на «мощный» компьютер

  2. На мощном компьютере, преобразуйте эти данные в подходящий вам формат и рисуйте какие угодно графики

gagarin0
()
Ответ на: комментарий от zimniy

что может быть дороже чем

qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength | nc x.x.x.x 1234 

или

qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength > /dev/tcp/x.x.x.x/1234

?

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 3)
Ответ на: комментарий от anonymous

Походу дела все к этому идет, только не JSON, а CSV

ОП сильный программист на С и ему не будет труда поменять строчки вот здесь

https://github.com/abferm/libqmi/blob/master/src/qmicli/qmicli-nas.c

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

gagarin0
()
ssam -e '{
	d
	3, x/''[^'']*''/ g/dB/ x/-?[0-9]+(\.[0-9]+)?/ {
		t $
		$ a/,/
	}
}'
  1. d удаляет всё содержимое
  2. 3, определяет адрес для следующей команды (с третьей строки до конца)
  3. x/''[^'']*''/ создаёт цикл по всем срезам в кавычках. '' - это способ записать одинарную кавычку в шелле.
  4. g/dB/ - это условие наличия dB в текущем срезе
  5. x/-?[0-9]+(\.[0-9]+)?/ создаёт цикл по всем числам в текущем срезе в кавычках. Здесь можно пошаманить с определением числа.
  6. t $ записывает число в конец
  7. $ a/,/ добавляет запятую в конец

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

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 3)
Ответ на: комментарий от watchcat382

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

оскорбляет моё чувство технической эстетики.

Аналогичный случай был у нас в полку. За давностию лет деталей не помню, но писал я роль для ансибла, которая хитрым образом должна была настраивать bind9. Там была какая-то заморочка, которую я решил наиболее прямым и топорным методом: на каждый запуск ansible (т.е. каждые 15 минут) конфиг перезаписывался и демон получал сигнал, чтобы его перечитать. Без разницы нужно это на самом деле или нет. Не самый эффективный способ, признаю. Эстетические чувства моего коллеги были оскорблены и он решил переделать. Потратил пол дня и часть вечера, написал свой модуль на питоне и там все технические ограничения обошёл, потому что может. И всё заработало гораздо лучше.

Но. а) работать забесплатно после оговоренного в контракте времени — это очень неправильно и должно быть порицаемо. И б) при зарплате девопса в €40 в час, он потратил на решение проблемы €160. Теоретически, более эффективный код экономит электроэнергию и сохраняет компании деньги. Так что спустя несколько тысяч лет непрерывной эксплуатации он бы несоменно вышел в плюс. Наверное. Тот стартап разорился через пол года, так что мы этого уже никогда не узнаем. Но это совсем другая история.

ugoday ★★★★★
()
Ответ на: комментарий от gagarin0

Отсылайте сырые данные с одноплатника на «мощный» компьютер

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

watchcat382
() автор топика
Ответ на: комментарий от zimniy

Тебе предлагают и csv на компе собирать, что имеет смысл.

Возможно. Надо посмотреть сколько будет накапливаться данных если их в csv не преобразовывать. Явно во много раз больше. Но если влезет в одноплатник то можно и так.

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

Я именно это и хотел делать - при включении настольного компа забирать на него данные в виде csv файлов

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

qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength

Мы уже на второй странице этого топика, который решается за 10 минут, вам было предложено 4 решение, но как оказалось что запускать sed/awk/jq это дорого, поэтому я вам еще раз опишу порядок действий

  1. Вывод команды qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength отсылаете по сети на мощный компьютер

  2. на мощном компьютере запускайте awk/sed/jq/python/ruby/ssam

  3. PROFIT

gagarin0
()
Ответ на: комментарий от anonymous

Добавить в эту программу возможность вывода в JSON, или хоть какого-нибудь другого структурированного.

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

watchcat382
() автор топика

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

Регулярные выражения можно скомпилировать и они будут работать за O(n). Детали.

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от ugoday

эффект находится ниже погрешности измерения

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

работать забесплатно после оговоренного в контракте времени — это очень неправильно

Это вы про бизнес. А у меня - хобби. Ну вот как раньше делали магнитофоны,усилки и цветомузыки (я тоже делал),то сейчас любители электроники копаются в компьютерах. Возится с одноплатниками, сделанным из всякого хлама типа роутеров,телеприставок,видеокамер и прочего подобного - интересно и не затратно так как не очень жалко если железка необратимо погибнет в процессе экспериментов. А линукс - он везде линукс. Когда я начинал в 90х с ним возиться то у меня на рабочем компе было существенно меньше памяти чем сейчас в модуле от видеокамеры:) Особенно круто если получается подпаяться к шинам i2c или spi - под них много всякого,например разные интересные датчики с которых,внимание,тоже можно собирать данные чтобы их потом анализировать(на большом компе). Например один из таких «мусорных» одноплатников у меня записывает температуру на улице и в доме каждый час. Благодаря ему я знаю что этой зимой самый жуткий мороз был всего -16 градусов. А лет десять назад еще и за 30 иногда бывали минимумы. Глобальное потепление в действии однако. Это наверно из-за тех кто использует не по делу монстрообразные компы и увеличивает этим разогрев планеты.

watchcat382
() автор топика
Ответ на: комментарий от gagarin0

вам было предложено 4 решение

Так оно и решено уже благодаря коллеге который выложил правильные скрипты для мониторинга UPS. Я уже и тему пометил как решенную. Но пообщаться-то на околокомпьютерные темы можно. А данные уже потихоньку собираются. Обнаружилось что этот промышленный радиомодем обновляет их быстро и может отдавать раз в секунду. И видно как сильно прыгает отношение сигнал/шум от хороших 20-24 dB до отвратительных 6.5-7 dB. Вот насобирается побольше - буду строить график в grace и смотреть нет ли насколько он [не]случайный.

watchcat382
() автор топика
Ответ на: комментарий от kaldeon

Спасибо за ссылку на интересную статью! Особенно что там про конечные автоматы - моя любимая тема в программировании так как для микроконтроллерных поделок пишу,а там им самое место.

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

А у меня - хобби.

Каждый имеет право заниматься любой фигнёй, пока это не вредит окружающим. Вот ещё один вариант решения на repgrep и многострочном регулярном выражении:

➜  /tmp cat 1.txt | rg -U -e "(?s)Current:.*\'(.*) dBm\'\nRSSI:.*\'(.*) dBm\'\nECIO:.*\'(.*) dBm\'\nIO:.*\'(.*) dBm\'\nSINR.*\'(.*) dB\'\nRSRQ:.*\'(.*) dB\'\nSNR:.*\'(.*) dB\'\nRSRP:.*\'(.*) dBm\'" -r '$1,$2,$3,$4,$5,$6,$7,$8'
-73,-73,-2.5,-106,9.0,-8,7.0,-101

Допускает небольшие изменения формата данных. Главное, чтоб названия параметров и пробелы-кавычки в '-73 dBm' не менялись.

ugoday ★★★★★
()
Ответ на: комментарий от watchcat382

Явно во много раз больше.

Любой упаковщик в помощь: gzip, bzip2, zstd, легион их. Но это костыли.

qmicli выпускается под лицензией GPLv2+, исходники доступны, взять исходники и доработать их для вывода CSV — плёвое дело, сравнимое по сложности с написанием скриптов для разбора текущего вывода. А заодно засунуть туда цикл, чтобы не запускать экзешник раз в секунду.

debugger ★★★★★
()
Последнее исправление: debugger (всего исправлений: 1)
Ответ на: комментарий от gagarin0

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

Там, кстати, и правда работы на 10 минут, чтобы выкинуть все эти \t и \n. а учитывая что это для одноплатника, то обновлять не надо, залить один раз собранное и забыть. Хотя, на край, можно и патч нарисовать, чтобы при обновлениях патчить.

Loki13 ★★★★★
()
Ответ на: комментарий от watchcat382

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

Может вам самим собрать на каком-нить ADE7758, у нее SPI интерфейс и три фазы ток/напряжение. Хорошо подходит для щ0ччиков малых величин, мы на работе использовали их до 5А на фазу. Нужны только токовые трансы.

yaba ★★★
()
Ответ на: комментарий от yaba

Одноплатники и прочие маложручие компы питаются постоянным током. 5,12 или 19 вольт обычно. Вот сейчас пишу это с компа,сделаного из платы от разбитого моноблока Asus V241IC-R - у нее как раз 19 вольт питание. Поэтому используется DC-DC преобразователь из 12 в 19 чтобы напрямую от аккумуляторов домашней солнечной электростанции работало,без ненужных в данном случае преобразований 12->220->19.

Может вам самим собрать на каком-нить ADE7758

Просто собрать - не сложно. Китайцы вон делают и продают счетчики энергии для постоянного тока. Но собрать так чтобы оно достаточно точно меряло токи 0.5-2.5А при 19 вольтах - китайцам не удается. Не уверен что у меня,любителя,получится точнее чем у китайских профессионалов. Народ китайские изделия дорабатывает но сами же и говорят что результат всё равно так себе: https://www.youtube.com/watch?v=KiMR8GWKiP8

watchcat382
() автор топика
Ответ на: комментарий от anonymous

а 12->12 не проще?

Есть у китайцев и такое: https://aliexpress.ru/item/32897068247.html Напряжение на свинцово-кальциевых аккумуляторах меняется от 10.5 вольт (полностью разряжены) до 16.2 вольт в конце зарядки,под током. Если напрямую подключить то что требует 12 вольт то это много. Если то что хочет 19 - мало. Например осветительные светодиодные ленты при прямом подключении к аккумуляторам быстро деградируют. А электроника и вовсе может сдохнуть - например китайские модули «12-вольтовых» камер видеонаблюдения не переживают шестнадцати вольт,у них на плате дохнет их собственный преобразователь питания.

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

watchcat382
() автор топика
Ответ на: комментарий от anonymous

Сожжет дед дом

У меня в доме стоят несколько пожарных датчиков которые громко пищат даже от подгоревшей еды на плите. Я за пожарной безопасностью слежу. Обитателям городских квартир много хуже - их могут сжечь соседи-раздолбаи. И с этой угрозой ничего не сделать.

watchcat382
() автор топика
Ответ на: комментарий от watchcat382

Обитателям городских квартир много хуже - их могут сжечь соседи-раздолбаи.

Ну не все же соседи по человейнику маргиналы, да, бывает какая-нить бабушка забудет газег или не забудет… Чего теперь об этом каждый день думать? В ваших этих частных секторах свои «погремушки», которые городскому тоже вряд ли понравятся…

yaba ★★★
()
Ответ на: комментарий от frunobulax

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

watchcat382
() автор топика