System Info

Адаптер, чтобы получить (или установить) данные из систем или веб

Текущий релиз
1.3.0
Разработчик
ioBroker community, mcm1957
Лицензия
MIT

Считывает (и записывает) информацию из системы(систем).

Адаптер обрабатывает (системную) информацию из собственных или чужих систем и веб-источников.

Оно генерирует состояния на основе информации, полученной различными методами.

  • Команды, выполняемые в операционной системе.

  • Файлы для чтения на локальных или подключенных системах.

  • Результаты с веб-страниц или API

  • Инструменты и команды Nodejs

  • Команды и файлы работают в обоих направлениях, что означает, что вы также можете записывать информацию в систему.

  • Это позволяет получать доступ к выводам GPIO на Raspberry Pi или Orange Pi и записывать на них данные, а также управлять зелеными или красными светодиодами на Raspberry Pi/Open Pi.

  • Это также позволяет получать/устанавливать некоторую системную информацию, доступную через /sys в Lunux.

  • Используется раздел «системная информация», который работает в Windows и Linux.

Он обрабатывает текстовые, HTML, JSON и XML-данные с помощью специальных механизмов запросов.

Примечание

  • Я хотел бы выразить благодарность некоторым модулям в интернете, которые я использовал или реализовал в собственном коде. Адаптер использует некоторые внешние модули, такие как cheerio , systeminformation и node-schedule, в том виде, в котором они есть. Он также был вдохновлен кодом из JSONPath и scrape-it, но их код не использовался напрямую, а был переписан для других целей.

Конфигурация

  • Настройте параметры в конфигурации адаптера (увеличьте страницу).

  • Я сохранил здесь изображение примера конфигурации.

    • Первый пункт представляет собой список команд, которые будут выполняться (построчно) при запуске адаптера. Он может использоваться для настройки используемых портов GPIO.
    • Строки, начинающиеся с '# не выполняются
    • Если первый текст — 'debug! Это переводит адаптер в режим отладки, который отображает гораздо больше информации о том, что он пытается получить и что получает.
  • После настройки при запуске появляется список конфигураций для каждого источника данных, состоящий из:

    • Поле имени, которое может также включать

      • Если имя начинается с '- «Линия будет проигнорирована (отключена), как если бы расписания не было».
      • [*] ,[name, ...] ,[name/(value)] синтаксис
      • Без учета всего вышеперечисленного, название используется для создания состояния в его нынешнем виде.
      • Если[] используется где-то, имена вставляются здесь разными способами.
        • [*] Если возвращается несколько элементов, они вставляются в виде чисел. Пример:Meldung[] сгенерироватьMeldung0 -Meldung(n) если (n) элементов возвращены
        • [name1,name2, ...] создает именно такие имена (пример)System.Memory_[used, free, available] создаст три штата, названныхSystem.Memory_used, System.Memory_free, System.Memory_available )
        • [name/value] получает имя из свойства объекта.name (может быть другим) и стоимость недвижимостиvalue Можно использовать любое название свойства или значения.
        • [name/] Без значения имя будет взято изname и создать подсостояния для всех остальных свойств, найденных в этом объекте (пример).System.Network.[iface/] )
    • Онtype иsource источника информации, который может быть

      • file : Thesource Поле описывает имя файла, которое считывается.
      • exec : Thesource Поле описывает команду в одной строке, которая выполняется.
      • info : Thesource поле описывает одну строкуsysteminfo функция команды
      • web : Thesource Поле описывает URL-адрес веб-сайта, который считывается (или объект, описывающий доступ, это нужно будет задокументировать позже!).
      • Запросы кэшируются, если одновременно запрашивается несколько записей с одинаковым типом/исходным содержимым! Это означает, что если вы запланируете выполнение команды каждую минуту и извлечете из одной и той же команды два разных элемента данных, она будет выполнена только один раз, и многократно будет применяться только фильтр данных.
      • Это помогает избежать многократной загрузки одной и той же страницы, если вы хотите получить доступ к большему количеству элементов.
    • Параметр `regexp/filter` используется для описания способа фильтрации полученного текста, либо с помощью

      • Regexp в утверждении, где отдельные элементы необходимо окружить() . Пример:/lic\s+(\d+)K\s+(\d+)K\s+(\d+)/m искал бы текстlic затем пробелы, а затем цифры, заканчивающиеся наK Во всех строках он вернет 3 числа. Это используется вdf -BK Команда Linux, позволяющая отобразить размер смонтированной NFS-памяти, имя которой заканчивается на "lic".
      • JsonPath Утверждение. Я создал специальную версию JsonPath для выбора данных из JSON или любых объектов JavaScript.
        • Его синтаксис состоит из ряда селекторов, которые могут быть
        • name название объекта недвижимости
        • * Любой элемент этого объекта может представлять собой все свойства, или, если объект является массивом, то все элементы массива.
        • [(...)] оценивать... чтобы получить название объекта недвижимости, который будет выбран.@ будет использоваться в качестве заполнителя для текущего объекта и может быть использован в операторе eval.
        • [?(...)]Отфильтруйте элементы этого товара по ..., Пример:list[?(@.user == 'pi')] сначала выберет недвижимостьlist (который представляет собой массив) и фильтр, затем список, выбирая только те элементы списка, которые имеют.user установить наpi .
        • [!(...)] Возвращает вычисленное значение в виде нового элемента. Таким образом, вы можете вычислить собственные данные на основе найденных объектов.
        • [name1,name2,name3] выберет только эти названия объектов недвижимости.
        • [0] будет выбран только «первый» (или n-й) элемент или свойство
        • [start:end:step] возьмут элементы, начиная сstart и<end с использованиемstep Все поля должны быть заполнены цифрами или оставлены пустыми.start иend Может быть отрицательным, что означает, что звук исходит из конца. Пример:[1:-1:2] Взять каждый второй элемент, начиная со второго и заканчивая последним. Последний элемент будет...[-1::] Первые три будут[:3:] и последние 3 будут[-3::]
        • .. является рекурсивным селектором спуска, что означает, что..name Выберет название свойства в «любом отделе» объекта!
      • html WebObject query В случае парсинга HTML-кода я создал специальный инструмент для выбора элементов из веб-пакетов, аналогичный jQuery. Этот инструмент создает объект, который в конечном итоге парсится.JsonPath Документация будет предоставлена позже .
    • Онconvert вход может быть любым

      • json Для обработки данных в формате JSON в веб-записях это означает, что полученный текст будет обрабатываться непосредственно как JSON, а регулярное выражение/фильтр будут использоваться в качестве...JsonParse оператор/фильтр.
      • xml В случае с XML-данными это означает, что полученные данные будут преобразованы из XML в JSON и обработаны, как описано выше.
      • html Это сгенерируетcheerio объект, который затем ищется с помощью специального запроса WebObject.
      • number илиboolean Попытались бы преобразовать значение в числа или логические значения, где on — числа > 0, а также строки типа on или ein и true — значения возвращают true.
      • ... что-нибудь еще, например!parseInt(@) будет оценено и в этом случае вернет true, если значение равно0 или false, если значение является большим целым числом.
    • role/type Поле описывает тип поля ioBroker и может также называть единицу измерения. Обычный тип поля — текст или значение, отображаемое в функции convert.

      • json означает, что свойство поля берется из объекта.
      • number|MB Это позволит определить числовое поле с единицей измерения МБ (мегабайты).
    • Write Command Поле описывает операторы или выражения, которые будут использоваться для записи данных обратно в элемент. В данный момент это работает только для 'exec ' или 'file ' типов.

      • Дляexec Это командная строка, которая может включать в себя:@(...) Утверждения, которые будут оцениваться. Пример:gpio write 1 @(@ ? '0' : '1') перевести вgpio write 1 0 если утверждение верно и кgpio write 1 1 Если это неверно. Это управляет моими ИК-светодиодами, которые загораются, если контакт GPIO находится в «низком» состоянии (0).
      • Дляfile Это простое выражение `eval`, которое выполняется и записывается в файл. Пример:@ ? '1' : '0' Если значение истинно, будет написано «1», а если ложно — «0».
    • Последний — этоschedule Если поле пустое, операция вообще не выполняется! Все расписания, имеющие одинаковое значение, будут выполняться одновременно с использованием одного и того же кэша.

      • cron-syntax Вы можете использовать тот же синтаксис 'cron', что и oBroker в расписаниях JavaScript, который описан в node-schedule.
      • time-syntax Я создал специальный синтаксис времени.?:?(:?) что облегчает задачу
        • *:16 Запрос этих данных будет производиться на 15-й минуте каждого часа.
        • */2:1:1 Запрос на отправку каждые два часа, с первой минуты и первой секунды.
        • ?s ,?m ,?h Если знак вопроса (?) равен нулю, запрос будет выполняться каждые ? секунд, ?монет или ? часов. Невозможно указать несколько элементов одновременно!
      • Расписания группируются по одному и тому же времени; если вы опустите секунды, как в первом примере выше, каждому элементу будет присвоено определенное число, чтобы избежать использования одной и той же секунды для всех элементов. Это делается для того, чтобы не выполнять слишком много команд одновременно.

Changelog

WORK IN PROGRESS

  • (copilot) Adapter requires node.js >= 22 now
  • (copilot) Adapter requires admin >= 7.7.22 now
  • (copilot) Adapter requires admin >= 7.6.17 now

1.3.0 (2025-05-27)

  • (lfischer85) Creation and update of states has been fixed. [#214, #139]
  • (mcm1957) Adapter requires node.js >= 20, js-controller >= 6.0.11 and admin >= 6.17.14 now
  • (mcm1957) Dependencies have been updated

1.2.0 (2024-04-28)

  • (mcm1957) Adapter requires node.js >= 18 and js-controller >= 5 now
  • (mcm1957) Dependencies have been updated

1.1.0 (2023-09-08)

  • (mcm1957) Adapter requires node 16 or newer now
  • (mcm1957) Dependencies have been updated

1.0.0 (2023-07-13)

  • (mcm1957) changed: Testing has been changed to support node 16, 18 and 20
  • (mcm1957) changed: Dependencies have been updated
  • (mcm1957) changed: Code has been adapted to meet js-controller 5.x requirements

0.3.0

  • Added save and load config in admin screen

License

The MIT License (MIT)

Copyright (c) 2023-2026 iobroker-community-adapters iobroker-community-adapters@gmx.de
Copyright (c) 2017-2019, frankjoke frankjoke@hotmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.