Считывает (и записывает) информацию из системы(систем).
Адаптер обрабатывает (системную) информацию из собственных или чужих систем и веб-источников.
Оно генерирует состояния на основе информации, полученной различными методами.
-
Команды, выполняемые в операционной системе.
-
Файлы для чтения на локальных или подключенных системах.
-
Результаты с веб-страниц или 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.