ioBroker / ioBroker.mqtt

Mqtt server and client for ioBroker.
MIT License
54 stars 29 forks source link

Bug Patterns #358

Closed crunchip77 closed 1 year ago

crunchip77 commented 1 year ago

Nach Upgrade des Js-Controllers v5 wurden im mqtt Adapter die Patterns angemeckert. siehe auch https://forum.iobroker.net/post/975387

` mqtt.0 | 2023-04-09 11:01:31.602 | error | Error The pattern "javascript.'" is not a valid ID pattern mqtt.0 | 2023-04-09 11:01:31.600 | error | ReplyError: Error The pattern "javascript.'" is not a valid ID pattern at parseError (/opt/iobroker/node_modules/redis-parser/lib/parser.js:179:12) at parseType (/opt/iobroker/node_modules/redis-parser/lib/parser.js:302:14) mqtt.0 | 2023-04-09 11:01:31.595 | error | unhandled promise rejection: Error The pattern "javascript.'" is not a valid ID pattern mqtt.0 | 2023-04-09 11:01:31.591 | error | Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). host.IoBroker-Server | 2023-04-09 11:01:31.582 | warn | States 127.0.0.1:54192 Error from InMemDB: Error: The pattern "javascript.'" is not a valid ID pattern at Object.pattern2RegEx (/opt/iobroker/node_modules/@iobroker/js-controller-common/src/lib/common/tools.ts:2388:15) at StatesInMemoryServer.handleSubscribe (/opt/iobroker/node_modules/@iobroker/db-base/src/lib/inMemFileDB.ts:324:59) at StatesInMemoryServer._subscribeForClient (/opt/iobroker/node_modules/@iobroker/db-states-file/src/lib/states/statesInMemFileDB.js:258:14) at RedisHandler. (/opt/iobroker/node_modules/@iobroker/db-states-jsonl/src/lib/states/statesInMemServerRedis.js:394:26) at RedisHandler.emit (node:events:513:28) at RedisHandler.emit (node:domain:489:12) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-base/src/lib/redisHandler.ts:209:37) at processImmediate (node:internal/timers:476:21)

mqtt.0 | 2023-04-09 10:59:59.900 | error | Error The pattern "'mqtt.0." is not a valid ID pattern mqtt.0 | 2023-04-09 10:59:59.898 | error | ReplyError: Error The pattern "'mqtt.0." is not a valid ID pattern at parseError (/opt/iobroker/node_modules/redis-parser/lib/parser.js:179:12) at parseType (/opt/iobroker/node_modules/redis-parser/lib/parser.js:302:14) mqtt.0 | 2023-04-09 10:59:59.894 | error | unhandled promise rejection: Error The pattern "'mqtt.0." is not a valid ID pattern mqtt.0 | 2023-04-09 10:59:59.889 | error | Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). host.IoBroker-Server | 2023-04-09 10:59:59.881 | warn | States 127.0.0.1:40676 Error from InMemDB: Error: The pattern "'mqtt.0." is not a valid ID pattern at Object.pattern2RegEx (/opt/iobroker/node_modules/@iobroker/js-controller-common/src/lib/common/tools.ts:2388:15) at StatesInMemoryServer.handleSubscribe (/opt/iobroker/node_modules/@iobroker/db-base/src/lib/inMemFileDB.ts:324:59) at StatesInMemoryServer._subscribeForClient (/opt/iobroker/node_modules/@iobroker/db-states-file/src/lib/states/statesInMemFileDB.js:258:14) at RedisHandler. (/opt/iobroker/node_modules/@iobroker/db-states-jsonl/src/lib/states/statesInMemServerRedis.js:394:26) at RedisHandler.emit (node:events:513:28) at RedisHandler.emit (node:domain:489:12) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-base/src/lib/redisHandler.ts:209:37) at processImmediate (node:internal/timers:476:21)

Apollon77 commented 1 year ago

Wie GENAU sieht denn die Konfig aus? Weil ich vermute eher das da irgendwo das ' als erstes Zeichen in dem Feld steht wo es nicht sein darf. Am besten mal UI zeigen UND das system.adapter.mqtt.0 objekt JSON

crunchip77 commented 1 year ago

@Apollon77 ursprünglich war es so eingetragen image hab das jetzt aber nochmal so eingetragen und nun kommt kein Fehler mehr meinst du dies?

{
  "_id": "system.adapter.mqtt",
  "type": "adapter",
  "common": {
    "name": "mqtt",
    "version": "4.1.1",
    "title": "MQTT Broker/Client",
    "titleLang": {
      "en": "MQTT Broker/Client",
      "de": "MQTT Broker/Client",
      "ru": "Брокер MQTT/Клиент",
      "pt": "MQTT Broker/Cliente",
      "nl": "MQTT-makelaar/klant",
      "fr": "Courtier MQTT/Client",
      "it": "Broker/Cliente MQTT",
      "es": "Agente MQTT/Cliente",
      "pl": "Broker/klient MQTT",
      "zh-cn": "MQTT经纪人/客户"
    },
    "desc": {
      "en": "This adapter allows to send and receive MQTT messages from ioBroker and to be a broker",
      "de": "Adapter ermöglicht eine Kommunikation mit dem MQTT broker und kann auch selbst ein broker/server sein",
      "ru": "Драйвер позволяет подключатся к MQTT брокерам, а также самому выступать в роли брокера",
      "pt": "Este adaptador permite enviar e receber mensagens MQTT da ioBroker e ser um corretor",
      "nl": "Met deze adapter kunt u MQTT-berichten van ioBroker verzenden en ontvangen en makelaar worden",
      "fr": "Cet adaptateur permet d'envoyer et de recevoir des messages MQTT de ioBroker et d'être un courtier",
      "it": "Questo adattatore consente di inviare e ricevere messaggi MQTT da ioBroker e di essere un broker",
      "es": "Este adaptador permite enviar y recibir mensajes MQTT de ioBroker y ser un intermediario",
      "pl": "Ten adapter umożliwia wysyłanie i odbieranie wiadomości MQTT od ioBroker i brokera",
      "zh-cn": "该适配器允许从ioBroker发送和接收MQTT消息并成为代理"
    },
    "authors": [
      "bluefox <dogafox@gmail.com>"
    ],
    "docs": {
      "en": "docs/en/mqtt.md",
      "ru": "docs/ru/mqtt.md"
    },
    "license": "MIT",
    "platform": "Javascript/Node.js",
    "mode": "daemon",
    "compact": true,
    "messagebox": true,
    "readme": "https://github.com/ioBroker/ioBroker.mqtt/blob/master/README.md",
    "loglevel": "info",
    "icon": "mqtt.png",
    "materialize": true,
    "keywords": [
      "notification",
      "MQTT",
      "message"
    ],
    "extIcon": "https://raw.githubusercontent.com/ioBroker/ioBroker.mqtt/master/admin/mqtt.png",
    "type": "protocols",
    "plugins": {
      "sentry": {
        "dsn": "https://40b55da1fb50459eab397fe8291e75fe@sentry.iobroker.net/91"
      }
    },
    "dependencies": [
      {
        "js-controller": ">=3.0.0"
      }
    ],
    "globalDependencies": [
      {
        "admin": ">=5.4.3"
      }
    ],
    "tier": 2,
    "connectionType": "local",
    "dataSource": "push",
    "adminUI": {
      "config": "json"
    },
    "messages": [
      {
        "condition": {
          "operand": "and",
          "rules": [
            "oldVersion<3.0.0",
            "newVersion>=3.0.0"
          ]
        },
        "title": {
          "en": "Re-enter the password after Update!",
          "de": "Passwort muss nach dem Update erneut eingegeben werden!",
          "ru": "Повторно введите пароль после обновления!",
          "pt": "Digite novamente a senha após Atualizar!",
          "nl": "Voer het wachtwoord opnieuw in na Update!",
          "fr": "Entrez à nouveau le mot de passe après la mise à jour !",
          "it": "Reinserire la password dopo l'aggiornamento!",
          "es": "Vuelva a ingresar la contraseña después de ¡Actualizar!",
          "pl": "Wprowadź hasło ponownie po aktualizacji!",
          "zh-cn": "更新后重新输入密码!"
        },
        "text": {
          "en": "After installing this update the password needs to be re-entered in the Instance-Settings!",
          "de": "Nach der Installation dieses Updates muss das Passwort in den Instanz-Einstellungen neu eingegeben werden!",
          "ru": "После установки этого обновления необходимо заново ввести пароль в Instance-Settings!",
          "pt": "Depois de instalar esta atualização, a senha precisa ser reinserida nas configurações da instância!",
          "nl": "Na het installeren van deze update moet het wachtwoord opnieuw worden ingevoerd in de Instance-Settings!",
          "fr": "Après avoir installé cette mise à jour, le mot de passe doit être ressaisi dans les paramètres de l'instance !",
          "it": "Dopo aver installato questo aggiornamento, è necessario reinserire la password nelle impostazioni dell'istanza!",
          "es": "¡Después de instalar esta actualización, la contraseña debe volver a ingresarse en la Configuración de instancia!",
          "pl": "Po zainstalowaniu tej aktualizacji hasło należy ponownie wprowadzić w ustawieniach instancji!",
          "zh-cn": "安装此更新后,需要在实例设置中重新输入密码!"
        },
        "level": "warn",
        "buttons": [
          "agree",
          "cancel"
        ]
      },
      {
        "condition": {
          "operand": "and",
          "rules": [
            "oldVersion<4.0.0",
            "newVersion>=4.0.0"
          ]
        },
        "title": {
          "en": "Subscription behavior changed",
          "de": "Abonnementverhalten geändert",
          "ru": "Поведение подписки изменилось",
          "pt": "Comportamento de assinatura alterado",
          "nl": "Abonnementsgedrag gewijzigd",
          "fr": "Le comportement d'abonnement a changé",
          "it": "Il comportamento dell'abbonamento è cambiato",
          "es": "Comportamiento de suscripción cambiado",
          "pl": "Zmieniono zachowanie subskrypcji",
          "zh-cn": "订阅行为已更改"
        },
        "text": {
          "en": "In client mode only the own \"mqtt.X.*\" states will be subscribed. In server mode with an empty \"publish\" setting, no states will be subscribed.",
          "de": "Im Client-Modus werden nur die eigenen \"mqtt.X.*\"-Zustände abonniert. Im Server-Modus mit einer leeren „Veröffentlichen“-Einstellung werden keine Zustände abonniert.",
          "ru": "В режиме клиента будут подписаны только собственные состояния \"mqtt.X.*\". В режиме сервера с пустой настройкой «публикация» никакие состояния не будут подписаны.",
          "pt": "No modo cliente, apenas os próprios estados \"mqtt.X.*\" serão inscritos. No modo de servidor com uma configuração \"publicar\" vazia, nenhum estado será inscrito.",
          "nl": "In client-modus worden alleen de eigen \"mqtt.X.*\"-statussen geabonneerd. In servermodus met een lege \"publish\"-instelling, worden geen staten geabonneerd.",
          "fr": "En mode client, seuls les propres états \"mqtt.X.*\" seront souscrits. En mode serveur avec un paramètre \"publier\" vide, aucun état ne sera souscrit.",
          "it": "In modalità client verranno sottoscritti solo i propri stati \"mqtt.X.*\". In modalità server con un'impostazione \"pubblica\" vuota, nessuno stato verrà sottoscritto.",
          "es": "En modo cliente sólo se suscribirán los propios estados \"mqtt.X.*\". En el modo de servidor con una configuración de \"publicación\" vacía, no se suscribirá ningún estado.",
          "pl": "W trybie klienta subskrybowane będą tylko własne stany \"mqtt.X.*\". W trybie serwera z pustym ustawieniem „publikuj”, żadne stany nie będą subskrybowane.",
          "zh-cn": "在客户端模式下,只会订阅自己的“mqtt.X.*”状态。在“发布”设置为空的服务器模式下,不会订阅任何状态。"
        },
        "level": "warn",
        "buttons": [
          "agree",
          "cancel"
        ]
      }
    ],
    "installedFrom": "iobroker.mqtt@4.1.1",
    "installedVersion": "4.1.1"
  },
  "native": {
    "type": "client",
    "clientId": "",
    "bind": "0.0.0.0",
    "port": 1883,
    "ssl": false,
    "rejectUnauthorized": true,
    "user": "",
    "pass": "",
    "url": "127.0.0.1",
    "patterns": "#",
    "onchange": true,
    "publishAllOnStart": true,
    "debug": false,
    "publish": "mqtt.0.*",
    "certPublic": "",
    "certPrivate": "",
    "certChained": "",
    "prefix": "",
    "forceCleanSession": "no",
    "sendAckToo": false,
    "sendStateObject": false,
    "webSocket": false,
    "maxTopicLength": 100,
    "publishOnSubscribe": true,
    "extraSet": false,
    "sendOnStartInterval": 2000,
    "sendInterval": 10,
    "keepalive": 1000,
    "reconnectPeriod": 10,
    "connectTimeout": 30,
    "persistent": false,
    "defaultQoS": 0,
    "retain": false,
    "retransmitInterval": 2000,
    "retransmitCount": 10,
    "storeClientsTime": 1440,
    "removePrefix": "",
    "ignoreNewObjects": false,
    "noRetain": false,
    "allBinaries": false
  },
  "from": "system.host.IoBroker.cli",
  "ts": 1679612690101,
  "acl": {
    "object": 1636,
    "owner": "system.user.admin",
    "ownerGroup": "system.group.administrator"
  },
  "protectedNative": [
    "pass"
  ],
  "encryptedNative": [
    "pass"
  ],
  "instanceObjects": [
    {
      "_id": "info",
      "type": "channel",
      "common": {
        "name": "Information"
      },
      "native": {}
    },
    {
      "_id": "info.connection",
      "type": "state",
      "common": {
        "role": "indicator.connected",
        "name": "connected client for MQTT",
        "type": "boolean",
        "read": true,
        "write": false,
        "def": false
      },
      "native": {}
    }
  ],
  "objects": [],
  "notifications": []
}
Apollon77 commented 1 year ago

early correct ... I mean system.adapter.mqtt.0 :-) So one level deeper. in the defaults it shows:

"publish": "mqtt.0.*",

which should not end up in this effect

crunchip77 commented 1 year ago

@Apollon77 ok, da steht aktuell "patterns": "mqtt/0/#,javascript/#",

was zuvor drin stand kann ich natürlich nicht mehr sagen, aber eine Vermutung hätte ich. Aus früheren Zeiten(2019), wurde es ja noch mit Komma getrennt als Text dort eingetragen, siehe Beispielbild image

kann sein das ich damals das Beispiel einfach markiert und reinkopiert hatte. Mit der neuen Gui das aber gar nicht mehr auffiel. Würde zumindest zur Fehlermeldung passen 'mqtt und javascript'

Apollon77 commented 1 year ago

Jupp damit hast du die einzelnen anführungszeichen wohl mit kopiert ... ehrlich ... das dürfte vorher noch nie getan haben. Würde es daher mal als "user fehler" zu machen