Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. node-red Скрипты (flows)
    6. Node-RED примеры, решения и и вопросы. Общая тема по Node-RED

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Node-RED примеры, решения и и вопросы. Общая тема по Node-RED

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Sergey777 last edited by

      Привет всем! Я столнулся со схожей проблемой, что в сообщении выше.

      Я тут приводил такой пример: viewtopic.php?f=48&t=11969#p152942 ,там всё работало, пока я не обновил iobroker.

      Суть в чём:

      Имею такую конструкцию
      5574_0001154796fuck.png

      ! [ { "id": "58ad33b2.fabb1c", "type": "http request", "z": "f9e33a52.dacda8", "name": "", "method": "POST", "ret": "txt", "url": "http://192.168.1.2:5000/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=\"QERFWrtrg4t5\"&payload={\"text\": \"кирилица\"}", "tls": "", "x": 490, "y": 1200, "wires": [ [ "27422c15.fd50d4" ] ] }, { "id": "27422c15.fd50d4", "type": "debug", "z": "f9e33a52.dacda8", "name": "Door Sensor Status", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "x": 720, "y": 1200, "wires": [] }, { "id": "626ece3b.a16df", "type": "inject", "z": "f9e33a52.dacda8", "name": "", "topic": "", "payload": "true", "payloadType": "str", "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "x": 290, "y": 1200, "wires": [ [ "58ad33b2.fabb1c" ] ] } ] !
      Тут на сервер отправляется сообщение методом POST. Так вот, если в сообщении содержится кириллица, то вылетает ошибка, и ничего не отправляется.

      log:

      ! ````
      |node-red.0|2019-01-27 22:12:01.260|error|at processImmediate [as _immediateCallback] (timers.js:745:5)|
      |---|---|---|---|
      |node-red.0|2019-01-27 22:12:01.260|error|at tryOnImmediate (timers.js:768:5)|
      |node-red.0|2019-01-27 22:12:01.260|error|at runCallback (timers.js:810:20)|
      |node-red.0|2019-01-27 22:12:01.260|error|at Immediate. <anonymous>(/opt/iobroker/node_modules/request/request.js:578:7)|
      |node-red.0|2019-01-27 22:12:01.260|error|at end (/opt/iobroker/node_modules/request/request.js:549:18)|
      |node-red.0|2019-01-27 22:12:01.260|error|at Request.write (/opt/iobroker/node_modules/request/request.js:1497:10)|
      |node-red.0|2019-01-27 22:12:01.260|error|at Request.start (/opt/iobroker/node_modules/request/request.js:751:32)|
      |node-red.0|2019-01-27 22:12:01.260|error|at Object.request (http.js:39:10)|
      |node-red.0|2019-01-27 22:12:01.260|error|at new ClientRequest (_http_client.js:137:13)|
      |node-red.0|2019-01-27 22:12:01.260|error|27 Jan 22:12:01 - [error] [http request:TEST DOOR] TypeError: Request path contains unescaped characters|</anonymous>

      
      Debug messages
      
      >! ````
      msg : error
      "TypeError: Request path contains unescaped characters"
      msg.payload : string[247]
      "TypeError: Request path contains unescaped characters : http://192.168.1.2:5000/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token="QERFWrtrg4t5"&payload={"text": "кирилица"}"
      >! ````
      Если писать латинскими символами, то всё работает.
      
      P.S. ioBroker стоит на малине, раньше ставил образ 2017 года, на нём всё работало. Но система посыпалась, поставил новый образ, и теперь не работает с кириллицей. Мне кажется, что не хватает каких-то кодировок в системе и Node-RED тут не при чём.
      
      Подкиньте идей, пожалуйста.
      
      ****<size size="150">******************************************************</size>****
      
      P.P.S.
      
      Нашёл решение - предварительно перекодируем сообщение функцией encodeURIComponent()
       ![5574_cyrillicmessage.png](/assets/uploads/files/5574_cyrillicmessage.png) 
      

      msg.CyrillicMessage = encodeURIComponent('Привет Мир');
      return msg;

      И "Привет Мир" превращается в "%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%9C%D0%B8%D1%80", а это уже прокатывает, отправка сообщений кириллицей работает.
      
      Вот полный код, url до сервера, естественно, изменён, каждый вбивает свой собственный:
      
      >! ````
      [
          {
              "id": "20b1742.e00da8c",
              "type": "http request",
              "z": "64e8a21a.233f3c",
              "name": "",
              "method": "POST",
              "ret": "txt",
              "url": "http://192.168.1.2:5000/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token=%22TvDtggrtGr%22&payload={\"text\": \"{{{CyrillicMessage}}}\"}",
              "tls": "",
              "x": 830,
              "y": 160,
              "wires": [
                  [
                      "9039465f.edbf18"
                  ]
              ]
          },
          {
              "id": "9039465f.edbf18",
              "type": "debug",
              "z": "64e8a21a.233f3c",
              "name": "Door Sensor Status",
              "active": true,
              "tosidebar": true,
              "console": false,
              "tostatus": true,
              "complete": "payload",
              "x": 1040,
              "y": 160,
              "wires": []
          },
          {
              "id": "ae787e2c.09a418",
              "type": "inject",
              "z": "64e8a21a.233f3c",
              "name": "",
              "topic": "",
              "payload": "true",
              "payloadType": "str",
              "repeat": "",
              "crontab": "",
              "once": false,
              "onceDelay": 0.1,
              "x": 450,
              "y": 160,
              "wires": [
                  [
                      "8ec1277c.0cdf2"
                  ]
              ]
          },
          {
              "id": "8ec1277c.0cdf2",
              "type": "function",
              "z": "64e8a21a.233f3c",
              "name": "Текст сообщения",
              "func": "msg.CyrillicMessage = encodeURIComponent('Привет Мир');\nreturn msg;",
              "outputs": 1,
              "noerr": 0,
              "x": 630,
              "y": 160,
              "wires": [
                  [
                      "c6325ef1.f616b",
                      "20b1742.e00da8c"
                  ]
              ]
          },
          {
              "id": "c6325ef1.f616b",
              "type": "debug",
              "z": "64e8a21a.233f3c",
              "name": "",
              "active": true,
              "tosidebar": true,
              "console": false,
              "tostatus": true,
              "complete": "CyrillicMessage",
              "x": 860,
              "y": 100,
              "wires": []
          }
      ]
      >! ````
      1 Reply Last reply Reply Quote 0
      • A
        Anrikigai last edited by

        Только начал осваивать Node-Red, и сразу вопросы:

        1. Можно ли в функции определить исходную команду, а не только источник?
          Скажем, при получении сигнала от кубика Rotate Left нужно некий параметр уменьшить, а по Rotate Right увеличить.
          Сейчас у меня после ioBroker in с событием Rotate right идет Change, в котором true меняется на 1, и анаогично Rotate left -> Change, меняющий true на -1.
          Оба этих события сходятся в одну функцию, которая соответственно меняет громкость, яркость, что угодно.
          Но по идее промежуточные Change не очень нужны. Можно сразу с Rotate Left и Rotate Right на эту функцию сигнал подать. Да, в обоих случаях будет true, но наверняка же в этой функции можно определить, было это вызвано поворотм влево или вправо?
          Собственно аналогично отделять одинарное нажатие кнопки от двойного и т.п....

        2. Нажатие кнопки у меня приводит к последовательному приходу событий от нее true и сразу false.
          Я придумал 2 способа очистки. Switch, который пропускает только true. И Delay, в котором при выборе Rate Limit | All messages появляется пункт drop intermediate messages.
          Результат одинаковый. Что эффективнее? Может еще получше вариант есть?

        3. Как использовать ioBroker get node? Расположена в группе function. Насколько я понимаю, в отличие от ioBroker in node, посылающей сообщение дальше, get позволяет узнать текущее состояние. Но как? Что подать ей на вход и что на выход?
          Скажем, сейчас я In node направляю на сохранение переменной во flow (скажем, параметр dimmer), и потом его использую. Но лучше же опрашивать статус, когда понадобится, а не подписываться на него?
          Ну или хотя бы в коде функции как опросить произвольный параметр...

        4. Можно ли из функции на Node-Red пройтись по всем датчикам (в моем случае подключены через Xiaomi Gateway 2) и, к примеру, проверить заряд их батрейки?
          Ну а дальше либо вывести "аварийные" датчики, либо записать 0/1 в дополнительное поле каждого сенсора (к примеру, BatteryStatus) и указывать его в Metro плитках (они автоматически перекрашиваются в зависимости от "ID статуса"

        1 Reply Last reply Reply Quote 0
        • O
          OlegJktu last edited by OlegJktu

          1. если в обьектах нет, то без вариантов. Можно еще конечно лог глянуть. Только дебаг нужно включить.
            1.1) возможно через usb-zigbee свиток драйвер отдает больше.

          2. Я думаю без разницы.

          3. На JS такое видел. На Node-red по моему только руками (ну или js засунуть в кубик). js пример есть на форуме, но он тоже не идеальный - там отдает id объекта - это не человеко читаемо.

          4. Нужно мне самому попробовать на выходных,
            ioBroker get node - точно будет красиво попробовать засунуть в Node-red dash реле-выключатель (но визуализаций на iobroker больше пяти, так что...)

          1 Reply Last reply Reply Quote 0
          • No Name
            No Name last edited by No Name

            Управление broadlink кнопкой xiaomi (драйвер zigbee). Исправил flow выше. Здесь нужен таймер и switch должен быть таким:
            photo_2019-07-06_19-46-48.jpg

            Снимок.PNG

            [
            {
            "id": "cf416abd.c92158",
            "type": "tab",
            "label": "Broadlink_STATUS",
            "disabled": false,
            "info": ""
            },
            {
            "id": "5dae1e2f.960c38",
            "type": "ioBroker out",
            "z": "cf416abd.c92158",
            "name": "Sonoff_POW_2",
            "topic": "sonoff.0.Sonoff_POW_2_A02EBD.POWER",
            "ack": "false",
            "autoCreate": "false",
            "x": 1700,
            "y": 880,
            "wires": []
            },
            {
            "id": "b8e33699.63a34",
            "type": "ioBroker in",
            "z": "cf416abd.c92158",
            "name": "Tap twice",
            "topic": "zigbee.0.00158d00029bbb6c.tap",
            "payloadType": "value",
            "onlyack": "",
            "func": "all",
            "gap": "",
            "x": 100,
            "y": 460,
            "wires": [
            [
            "864b8892.25f1a"
            ]
            ]
            },
            {
            "id": "80c6e025.1825e8",
            "type": "switch",
            "z": "cf416abd.c92158",
            "name": "Broadlink включен?",
            "property": "Broadlink_STATUS",
            "propertyType": "flow",
            "rules": [
            {
            "t": "eq",
            "v": "false",
            "vt": "str"
            },
            {
            "t": "eq",
            "v": "true",
            "vt": "str"
            }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 2,
            "x": 540,
            "y": 460,
            "wires": [
            [
            "aff64449.5b9498"
            ],
            [
            "3b2d8770.0222c8"
            ]
            ]
            },
            {
            "id": "aff64449.5b9498",
            "type": "change",
            "z": "cf416abd.c92158",
            "name": "Включаем Broadlink",
            "rules": [
            {
            "t": "set",
            "p": "payload",
            "pt": "msg",
            "to": "true",
            "tot": "bool"
            }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 860,
            "y": 400,
            "wires": [
            [
            "9ea4024f.45e7d",
            "b50086c9.ce0408"
            ]
            ]
            },
            {
            "id": "3b2d8770.0222c8",
            "type": "change",
            "z": "cf416abd.c92158",
            "name": "Отключаем Broadlink",
            "rules": [
            {
            "t": "set",
            "p": "payload",
            "pt": "msg",
            "to": "false",
            "tot": "bool"
            }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 820,
            "y": 520,
            "wires": [
            [
            "a4d8b0b.c5ed45",
            "58937c89.b8335c"
            ]
            ]
            },
            {
            "id": "9ea4024f.45e7d",
            "type": "SP2",
            "z": "cf416abd.c92158",
            "name": "Bathoom",
            "device": "6a792cc8.2a6eac",
            "action": "setState",
            "state": "true",
            "x": 1100,
            "y": 440,
            "wires": [
            []
            ]
            },
            {
            "id": "a4d8b0b.c5ed45",
            "type": "SP2",
            "z": "cf416abd.c92158",
            "name": "Bathoom",
            "device": "6a792cc8.2a6eac",
            "action": "setState",
            "state": "false",
            "x": 1100,
            "y": 520,
            "wires": [
            []
            ]
            },
            {
            "id": "864b8892.25f1a",
            "type": "switch",
            "z": "cf416abd.c92158",
            "name": "Берём только true",
            "property": "payload",
            "propertyType": "msg",
            "rules": [
            {
            "t": "eq",
            "v": "true",
            "vt": "str"
            }
            ],
            "checkall": "true",
            "repair": false,
            "outputs": 1,
            "x": 290,
            "y": 460,
            "wires": [
            [
            "80c6e025.1825e8"
            ]
            ]
            },
            {
            "id": "58937c89.b8335c",
            "type": "debug",
            "z": "cf416abd.c92158",
            "name": "Отключаем",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "payload",
            "x": 1110,
            "y": 600,
            "wires": []
            },
            {
            "id": "b50086c9.ce0408",
            "type": "debug",
            "z": "cf416abd.c92158",
            "name": "Включаем",
            "active": true,
            "tosidebar": true,
            "console": false,
            "tostatus": false,
            "complete": "payload",
            "x": 1190,
            "y": 380,
            "wires": []
            },
            {
            "id": "ba2cb790.e57ee",
            "type": "SP2",
            "z": "cf416abd.c92158",
            "name": "Bathoom",
            "device": "6a792cc8.2a6eac",
            "action": "getState",
            "state": "true",
            "x": 380,
            "y": 300,
            "wires": [
            [
            "60e40fa1.b78738"
            ]
            ]
            },
            {
            "id": "60e40fa1.b78738",
            "type": "switch",
            "z": "cf416abd.c92158",
            "name": "Передаём статус broadlink",
            "property": "payload.state",
            "propertyType": "msg",
            "rules": [
            {
            "t": "true"
            },
            {
            "t": "false"
            }
            ],
            "checkall": "false",
            "repair": false,
            "outputs": 2,
            "x": 600,
            "y": 300,
            "wires": [
            [
            "1be7b90d.421cf7"
            ],
            [
            "6bb3ee18.8728d8"
            ]
            ]
            },
            {
            "id": "1be7b90d.421cf7",
            "type": "change",
            "z": "cf416abd.c92158",
            "name": "Broadlink ON",
            "rules": [
            {
            "t": "set",
            "p": "Broadlink_STATUS",
            "pt": "flow",
            "to": "true",
            "tot": "str"
            }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 890,
            "y": 220,
            "wires": [
            []
            ]
            },
            {
            "id": "6bb3ee18.8728d8",
            "type": "change",
            "z": "cf416abd.c92158",
            "name": "Broadlink OFF",
            "rules": [
            {
            "t": "set",
            "p": "Broadlink_STATUS",
            "pt": "flow",
            "to": "false",
            "tot": "str"
            }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 960,
            "y": 340,
            "wires": [
            []
            ]
            },
            {
            "id": "12b779f5.16f1a6",
            "type": "comment",
            "z": "cf416abd.c92158",
            "name": "Тут логика работы",
            "info": "",
            "x": 450,
            "y": 380,
            "wires": []
            },
            {
            "id": "74adb82d.c4c64",
            "type": "comment",
            "z": "cf416abd.c92158",
            "name": "Тут определяем состояние реле Broadlink",
            "info": "",
            "x": 490,
            "y": 220,
            "wires": []
            },
            {
            "id": "eb30ea3d.afc17",
            "type": "inject",
            "z": "cf416abd.c92158",
            "name": "",
            "topic": "",
            "payload": "",
            "payloadType": "date",
            "repeat": "1",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "x": 170,
            "y": 300,
            "wires": [
            [
            "ba2cb790.e57ee"
            ]
            ]
            },
            {
            "id": "743f811.46788",
            "type": "bigtimer",
            "z": "cf416abd.c92158",
            "outtopic": "",
            "outpayload1": "",
            "outpayload2": "",
            "name": "Big Timer",
            "comment": "",
            "lat": "",
            "lon": "",
            "starttime": 5001,
            "endtime": 1425,
            "starttime2": 0,
            "endtime2": 0,
            "startoff": 0,
            "endoff": 0,
            "startoff2": 0,
            "endoff2": 0,
            "offs": 0,
            "outtext1": "",
            "outtext2": "",
            "timeout": 1440,
            "sun": true,
            "mon": true,
            "tue": true,
            "wed": true,
            "thu": true,
            "fri": true,
            "sat": true,
            "jan": true,
            "feb": true,
            "mar": true,
            "apr": true,
            "may": true,
            "jun": true,
            "jul": true,
            "aug": true,
            "sep": true,
            "oct": true,
            "nov": true,
            "dec": true,
            "day1": 0,
            "month1": 0,
            "day2": 0,
            "month2": 0,
            "day3": 0,
            "month3": 0,
            "day4": 0,
            "month4": 0,
            "day5": 0,
            "month5": 0,
            "day6": 0,
            "month6": 0,
            "d1": 0,
            "w1": 0,
            "d2": 0,
            "w2": 0,
            "d3": 0,
            "w3": 0,
            "d4": 0,
            "w4": 0,
            "d5": 0,
            "w5": 0,
            "d6": 0,
            "w6": 0,
            "xday1": 0,
            "xmonth1": 0,
            "xday2": 0,
            "xmonth2": 0,
            "xday3": 0,
            "xmonth3": 0,
            "xday4": 0,
            "xmonth4": 0,
            "xday5": 0,
            "xmonth5": 0,
            "xday6": 0,
            "xmonth6": 0,
            "xd1": 0,
            "xw1": 0,
            "xd2": 0,
            "xw2": 0,
            "xd3": 0,
            "xw3": 0,
            "xd4": 0,
            "xw4": 0,
            "xd5": 0,
            "xw5": 0,
            "xd6": 0,
            "xw6": 0,
            "suspend": false,
            "random": false,
            "repeat": true,
            "atstart": true,
            "odd": false,
            "even": false,
            "x": 80,
            "y": 160,
            "wires": [
            [],
            [],
            []
            ]
            },
            {
            "id": "6a792cc8.2a6eac",
            "type": "sp2device",
            "z": "",
            "mac": "78-0F-77-17-8D-49",
            "host": "192.168.1.5"
            }
            ]

            1 Reply Last reply Reply Quote 0
            • N
              notturno last edited by

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

              1 Reply Last reply Reply Quote 0
              • O
                OlegJktu last edited by

                Было такое выше обсуждалось.
                Нод-Ред не хранит значения, поэтому логика с переменными при старте может подвисать.

                1. можно задать логику при старте. Для этого нужно поставить доп кубик. Таких есть 2 или 3.

                Вот тут я добавил кубик задающий логику при старте
                https://forum.iobroker.net/post/149786

                1. можно хранить переменные этой логике где-то за пределами Нод-Ред.
                  Я храню в переменных IoBroker.
                1 Reply Last reply Reply Quote 0
                • O
                  OlegJktu last edited by

                  Важнач информация для всех использующих Node-red из под IoBroker.
                  Дополнительные паллеты (кубики и пр) нужно устанавливать из вебморды IoBroker (а не из вебморды Node-red).
                  Иначе возможны проблемы при обновлении.

                  1 Reply Last reply Reply Quote 0
                  • O
                    OlegJktu last edited by

                    Wiki переведенная на русский язык
                    (Если не пускает используйте режим инкогнито в браузере)
                    http://146.185.179.211/wiki/Node-RED:Содержание

                    1 Reply Last reply Reply Quote 0
                    • S
                      Sergey777 last edited by

                      Столкнулся с не тривиальной задачей. Нода onvif получает из IP камеры скриншот, этот скрин можно отобразить в ноде image. Мне нужно эту картинку отослать как webhook, для этого нужно картинку выгрузить в хранилище (на сервер) и потом дать http ссылку на неё. Как эту полученную в base64 картинку выгрузить на http сайт?

                      1 Reply Last reply Reply Quote 0
                      • R
                        romus last edited by

                        Камрады, а можете дать простой примерчик с кнопкой Xiaomi и группой ламп Yeelight на одно короткое нажатие сделать вкл/выкл.
                        Заранее спасибо!

                        1 Reply Last reply Reply Quote 0
                        • O
                          OlegJktu last edited by

                          есть в теме примеры. в самом начале.

                          N 1 Reply Last reply Reply Quote 0
                          • N
                            Namaste @OlegJktu last edited by

                            Подскажите, плз.
                            Есть датчик движения, есть датчик открытия двери.
                            Когда срабатывает датчик движения, нужно включать свет, но при условии, что в течении последних 3 минут открывалась дверь.

                            1 Reply Last reply Reply Quote 0
                            • O
                              OlegJktu last edited by

                              Нужно ввести каким нибудь образом доп состояние и проверять его.

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              845
                              Online

                              31.7k
                              Users

                              79.9k
                              Topics

                              1.3m
                              Posts

                              16
                              85
                              70457
                              Loading More Posts
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes
                              Reply
                              • Reply as topic
                              Log in to reply
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              The ioBroker Community 2014-2023
                              logo