Инструменты пользователя

Инструменты сайта


iot:software:node-red:flows:network_monitoring

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
iot:software:node-red:flows:network_monitoring [2021/12/26 21:55]
Николай Солошин Версия 2.0
iot:software:node-red:flows:network_monitoring [2022/02/16 21:20] (текущий)
Николай Солошин ↷ Операцией перемещения обновлены ссылки
Строка 4: Строка 4:
 ====== Мониторинг локальной сети в Node-RED ====== ====== Мониторинг локальной сети в Node-RED ======
  
-Небольшой поток для мониторинга произвольных устройств в локальной сети или Интернете **версия 2.0**, полностью переосмысленная и переписанная -- меньше ложных срабатываний((Для беспроводных устройств оптимальным оказалось 3 дополнительных цикла с задержкой 10 секунд.)), меньше обращений к базе данных, более компактная, линейная и логичная! В общем, конфетка, а не... то, что было((Можно простить, т.к. это практические первое, что я когда-то собрал на Node-RED.)). LOL+Небольшой поток для мониторинга произвольных устройств в локальной сети или Интернете **версия 2.x**, полностью переосмысленная и переписанная -- меньше ложных срабатываний((Для беспроводных устройств оптимальным оказалось 3 дополнительных цикла с задержкой 10 секунд.)), меньше обращений к базе данных, более компактная, линейная и логичная! В общем, конфетка, а не... то, что было((Можно простить, т.к. это практические первое, что я когда-то собрал на Node-RED.)). LOL
  
-:!: Архивные версии [[iot:node-red:flows:network_monitoring?rev=1638922322|1.0]], [[iot:node-red:flows:network_monitoring?rev=1640356134|1.1]].+:!: Архивные версии [[iot:software:node-red:flows:network_monitoring?rev=1638922322|1.0]], [[iot:software:node-red:flows:network_monitoring?rev=1640356134|1.1]], [[iot:software:node-red:flows:network_monitoring?rev=1640519728|2.0]].
  
 ===== Нестандартные узлы ===== ===== Нестандартные узлы =====
Строка 18: Строка 18:
 ===== Дополнительные подпотоки ===== ===== Дополнительные подпотоки =====
  
-  * [[iot:node-red:subflows:sendmail|Отправка почты]]+  * [[iot:software:node-red:subflows:sendmail|Отправка почты]]
  
 Этот подпоток входит в состав кода ниже и загружать отдельно его не надо! Этот подпоток входит в состав кода ниже и загружать отдельно его не надо!
Строка 26: Строка 26:
 Цепочка запускается автоматически каждую минуту((Настраивается в узле "Автозапуск".)), при необходимости или каком-то сбое, можно запустить вручную. Далее из базы данных читаются все устройства, проверяются командой ping и записываются результаты в БД. Если есть устройства, которые не ответили, они попадают в цикл с заданным числом витков и временем между попытками((Настраивается в узле "Ввод настроек".)). Прочие устройства ожидают завершения всех циклов, после чего все сообщения собираются в одно, которое и передается дальше. Цепочка запускается автоматически каждую минуту((Настраивается в узле "Автозапуск".)), при необходимости или каком-то сбое, можно запустить вручную. Далее из базы данных читаются все устройства, проверяются командой ping и записываются результаты в БД. Если есть устройства, которые не ответили, они попадают в цикл с заданным числом витков и временем между попытками((Настраивается в узле "Ввод настроек".)). Прочие устройства ожидают завершения всех циклов, после чего все сообщения собираются в одно, которое и передается дальше.
  
-{{:iot:node-red:flows:nm2.png?nolink|}}+{{iot:software:node-red:flows:nm3.1.png?nolink|}}
  
 Далее подсчитывается количество тех или иных статусов(("Умерло", "ожило", "мертвое" и "живое" устройство.)) и сообщение вновь разбивается на части для объединения по статусам и сортировки. В конце, если необходимо((Есть устройства со статусами "умерло" или "ожило".)), формируется и отправляется письмо. Далее подсчитывается количество тех или иных статусов(("Умерло", "ожило", "мертвое" и "живое" устройство.)) и сообщение вновь разбивается на части для объединения по статусам и сортировки. В конце, если необходимо((Есть устройства со статусами "умерло" или "ожило".)), формируется и отправляется письмо.
  
-{{:iot:node-red:flows:mails_examples.jpg?direct&1000|Примеры писем от мониторинга сети.}}+{{iot:software:node-red:flows:mails_examples.jpg?direct&1000|Примеры писем от мониторинга сети.}} 
 + 
 +=== История изменений === 
 + 
 +  * В **версии 2.1** добавлена отправка периодической сводки((По умолчанию раз в 6 часов.)) по недоступным хостам.
  
 ==== Создание таблицы ==== ==== Создание таблицы ====
Строка 385: Строка 389:
                 "p": "parts.index",                 "p": "parts.index",
                 "pt": "msg",                 "pt": "msg",
-                "to": "ping._id", +                "to": "ping._id - 1", 
-                "tot": "msg"+                "tot": "jsonata"
             },             },
             {             {
Строка 493: Строка 497:
         "reduceInitType": "num",         "reduceInitType": "num",
         "reduceFixup": "",         "reduceFixup": "",
-        "x": 500,+        "x": 480,
         "y": 340,         "y": 340,
         "wires": [         "wires": [
Строка 506: Строка 510:
         "type": "change",         "type": "change",
         "z": "bf63e9a3.a5b928",         "z": "bf63e9a3.a5b928",
-        "name": "Восстановление последовательности",+        "name": "Установка статусов",
         "rules": [         "rules": [
-            { 
-                "t": "move", 
-                "p": "ping", 
-                "pt": "msg", 
-                "to": "payload", 
-                "tot": "msg" 
-            }, 
             {             {
                 "t": "set",                 "t": "set",
-                "p": "parts.index",+                "p": "payload",
                 "pt": "msg",                 "pt": "msg",
-                "to": "ping._id -1",+                "to": "$type( payload ) = \"array\"ping : payload",
                 "tot": "jsonata"                 "tot": "jsonata"
-            }, 
-            { 
-                "t": "set", 
-                "p": "parts.count", 
-                "pt": "msg", 
-                "to": "parts.count", 
-                "tot": "flow" 
-            }, 
-            { 
-                "t": "set", 
-                "p": "parts.id", 
-                "pt": "msg", 
-                "to": "parts.id", 
-                "tot": "flow" 
             },             },
             {             {
Строка 549: Строка 532:
         "to": "",         "to": "",
         "reg": false,         "reg": false,
-        "x": 220,+        "x": 240,
         "y": 340,         "y": 340,
         "wires": [         "wires": [
Строка 831: Строка 814:
         "to": "",         "to": "",
         "reg": false,         "reg": false,
-        "x": 460+        "x": 700
-        "y": 640,+        "y": 700,
         "wires": [         "wires": [
             [             [
Строка 847: Строка 830:
             "65cbf7fe.7357d8"             "65cbf7fe.7357d8"
         ],         ],
-        "x": 295+        "x": 555
-        "y": 640,+        "y": 700,
         "wires": [         "wires": [
             [             [
Строка 1095: Строка 1078:
             {             {
                 "t": "jsonata_exp",                 "t": "jsonata_exp",
-                "v": "result.revived > 0 or result.died > 0",+                "v": "result.revived > 0 or result.died > 0 ) or ( result.dead > 0 and periodical = true)",
                 "vt": "jsonata"                 "vt": "jsonata"
             }             }
Строка 1172: Строка 1155:
                 "p": "topic",                 "p": "topic",
                 "pt": "msg",                 "pt": "msg",
-                "to": "\"Уведомление системы мониторинга от \" & $now( '[H01]:[m01]:[s01] [D01].[M01].[Y0001]', '+1000' ) & \"!\"",+                "to": "( periodical = true ? \"Сводка системы мониторинга от \" : \"Уведомление системы мониторинга от \" & $now( '[H01]:[m01]:[s01] [D01].[M01].[Y0001]', '+1000' ) & \"!\"",
                 "tot": "jsonata"                 "tot": "jsonata"
             },             },
Строка 1221: Строка 1204:
         ],         ],
         "info": "Сбросить метку `flow.status.run` и запустить поток. Полезно при сбоях, когда цепочка повисла в режиме ожидания."         "info": "Сбросить метку `flow.status.run` и запустить поток. Полезно при сбоях, когда цепочка повисла в режиме ожидания."
 +    },
 +    {
 +        "id": "d45c7cea.9b2c4",
 +        "type": "inject",
 +        "z": "bf63e9a3.a5b928",
 +        "name": "Периодическая сводка",
 +        "props": [
 +            {
 +                "p": "topic",
 +                "v": "\"SELECT _id, name, host, response, sent, cycles FROM \\\"\" & $flowContext( \"settings.table\" ) & \"\\\"\"",
 +                "vt": "jsonata"
 +            },
 +            {
 +                "p": "periodical",
 +                "v": "true",
 +                "vt": "bool"
 +            }
 +        ],
 +        "repeat": "21600",
 +        "crontab": "",
 +        "once": true,
 +        "onceDelay": "60",
 +        "topic": "",
 +        "payloadType": "str",
 +        "x": 170,
 +        "y": 640,
 +        "wires": [
 +            [
 +                "994ffc21.74839"
 +            ]
 +        ],
 +        "info": "Отправляется только, если есть \"мертвые\" устройства."
 +    },
 +    {
 +        "id": "994ffc21.74839",
 +        "type": "sqlite",
 +        "z": "bf63e9a3.a5b928",
 +        "mydb": "2bc4c6d.cf1f03a",
 +        "sqlquery": "msg.topic",
 +        "sql": "",
 +        "name": "Выборка устройств",
 +        "x": 440,
 +        "y": 640,
 +        "wires": [
 +            [
 +                "f97471ca.36e7d"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "f97471ca.36e7d",
 +        "type": "split",
 +        "z": "bf63e9a3.a5b928",
 +        "name": "Разделение пос-и",
 +        "splt": "\\n",
 +        "spltType": "str",
 +        "arraySplt": 1,
 +        "arraySpltType": "len",
 +        "stream": false,
 +        "addname": "",
 +        "x": 150,
 +        "y": 700,
 +        "wires": [
 +            [
 +                "a11064c5.7b4778"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "f9033d4c.c67e1",
 +        "type": "link in",
 +        "z": "bf63e9a3.a5b928",
 +        "name": "",
 +        "links": [
 +            "d76d9726.edb0b8"
 +        ],
 +        "x": 75,
 +        "y": 340,
 +        "wires": [
 +            [
 +                "8961f0c.35b121"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "d76d9726.edb0b8",
 +        "type": "link out",
 +        "z": "bf63e9a3.a5b928",
 +        "name": "",
 +        "links": [
 +            "f9033d4c.c67e1"
 +        ],
 +        "x": 495,
 +        "y": 700,
 +        "wires": []
 +    },
 +    {
 +        "id": "a11064c5.7b4778",
 +        "type": "change",
 +        "z": "bf63e9a3.a5b928",
 +        "name": "Подготовка св-в",
 +        "rules": [
 +            {
 +                "t": "set",
 +                "p": "payload.response",
 +                "pt": "msg",
 +                "to": "payload.response = 0 ? false : payload.response",
 +                "tot": "jsonata"
 +            },
 +            {
 +                "t": "move",
 +                "p": "payload.cycles",
 +                "pt": "msg",
 +                "to": "payload.count",
 +                "tot": "msg"
 +            }
 +        ],
 +        "action": "",
 +        "property": "",
 +        "from": "",
 +        "to": "",
 +        "reg": false,
 +        "x": 350,
 +        "y": 700,
 +        "wires": [
 +            [
 +                "d76d9726.edb0b8"
 +            ]
 +        ]
     },     },
     {     {
Последнее изменение: 2022/02/12 11:40 (внешнее изменение)