ioBroker / ioBroker.admin

user interface for configuration and administration
https://iobroker.net
MIT License
271 stars 78 forks source link

Instance namespace and id not passed to jsonCustom functions #1323

Closed Pmant closed 2 years ago

Pmant commented 2 years ago

Is your feature request related to a problem? Please describe. Migrating mqtt-client adapter to current ioBroker APIs I discovered that jsonCustom functions can not access the instance namespace or id.

Describe the solution you'd like Functions inside jsonCustoms are already called with an instanceObj. However, it seems this object does not contain the instance id or any string the id could be derived from. In custom_m.html instance id could be derived from instanceObj._id. It would be nice to have ._id (adapter namespace) aswell as .instance (adapter id) added to instanceObj

GermanBluefox commented 2 years ago

Do you have use case for that?

GermanBluefox commented 2 years ago

I added '_instance' - instance number in 5.3.2

Pmant commented 2 years ago

Do you have use case for that?

Yes, I stumbled accross this while working on modernizing mqtt-client adapter. When converting ioBroker ids to MQTT topics under adapters namespace it needs to remove adapters own namespace from ids. For now this is done with a regex but this potentially also removes namespaces of other mqtt-client instances. This is not a big issue but I was surprised instanceObj did not contain the actual instance number.

Ty for the fix.

Pmant commented 2 years ago

Did not test but I think for using it in jsonCustom.json _instance needs to be added here aswell. https://github.com/ioBroker/ioBroker.admin/blob/5ba62e76cabd73c88e5459db54eb22586cad3cd1/src-rx/src/components/JsonConfigComponent/ConfigGeneric.js#L310

GermanBluefox commented 2 years ago

Custom has whole instanceObj and this object should have ._id in it.

Pmant commented 2 years ago

Except it does not, admin 5.3.1:

{
    "common": {
        "name": "mqtt-client",
        "title": "MQTT client",
        "titleLang": {
            "en": "MQTT client",
            "de": "MQTT-Client",
            "ru": "MQTT Клиент",
            "pt": "Cliente MQTT",
            "nl": "MQTT-klant",
            "fr": "Client MQTT",
            "it": "Client MQTT",
            "es": "Cliente MQTT",
            "pl": "Klient MQTT",
            "zh-cn": "MQTT客户端"
        },
        "desc": {
            "en": "Syncing with MQTT Brokers",
            "de": "Synchronisierung mit MQTT-Brokern",
            "ru": "Синхронизация с брокерами MQTT",
            "pt": "Sincronização com corretores da MQTT",
            "nl": "Synchroniseren met MQTT-makelaars",
            "fr": "Synchronisation avec les courtiers MQTT",
            "it": "Sincronizzazione con i broker MQTT",
            "es": "Sincronización con intermediarios MQTT",
            "pl": "Synchronizacja z brokerami MQTT",
            "zh-cn": "与MQTT经纪人同步"
        },
        "version": "1.6.0",
        "news": {
            "1.5.0": {
                "en": "IMPORTANT: This adapter now required at least js-controller 3.3.x\nFix crash cases",
                "de": "WICHTIG: Dieser Adapter benötigt jetzt mindestens js-controller 3.3.x\nAbsturzfälle beheben",
                "ru": "ВАЖНО: для этого адаптера теперь требуется как минимум js-controller 3.3.x\nИсправить случаи сбоев",
                "pt": "IMPORTANTE: Este adaptador agora exigia pelo menos js-controller 3.3.x\nCorrigir casos de falha",
                "nl": "BELANGRIJK: voor deze adapter was nu minimaal js-controller 3.3.x . vereist\nCrashgevallen oplossen",
                "fr": "IMPORTANT : Cet adaptateur nécessite désormais au moins js-controller 3.3.x\nRésoudre les cas de crash",
                "it": "IMPORTANTE: questo adattatore ora richiedeva almeno js-controller 3.3.x\nRisolvi i casi di crash",
                "es": "IMPORTANTE: este adaptador ahora requiere al menos js-controller 3.3.x\nSolucionar casos de bloqueo",
                "pl": "WAŻNE: Ten adapter wymaga teraz przynajmniej kontrolera js 3.3.x\nNapraw przypadki awarii",
                "zh-cn": "重要提示:此适配器现在至少需要 js-controller 3.3.x\n修复崩溃案例"
            },
            "1.4.0": {
                "en": "IMPORTANT: This adapter now required at least js-controller 2.0.0\njs-controller 3.3 optimizations\nUnpublish expired states\nOnly handle stat values if state exists",
                "de": "WICHTIG: Dieser Adapter benötigt jetzt mindestens js-controller 2.0.0\njs-Controller 3.3 Optimierungen\nVeröffentlichung abgelaufener Staaten rückgängig machen\nBehandeln Sie Statistikwerte nur, wenn der Zustand existiert",
                "ru": "ВАЖНО: для этого адаптера теперь требуется как минимум js-controller 2.0.0.\njs-controller 3.3 оптимизации\nОтменить публикацию состояний с истекшим сроком действия\nОбрабатывать значения статистики, только если состояние существует",
                "pt": "IMPORTANTE: Este adaptador agora requer pelo menos js-controller 2.0.0\nOtimizações do js-controller 3.3\nCancelar a publicação de estados expirados\nSó lida com valores estatísticos se o estado existir",
                "nl": "BELANGRIJK: voor deze adapter was nu minimaal js-controller 2.0.0 . vereist\njs-controller 3.3 optimalisaties\nPublicatie van verlopen status ongedaan maken\nAlleen stat-waarden verwerken als de status bestaat",
                "fr": "IMPORTANT : cet adaptateur nécessite désormais au moins js-controller 2.0.0\njs-controller 3.3 optimisations\nAnnuler la publication des états expirés\nNe gérer les valeurs statistiques que si l'état existe",
                "it": "IMPORTANTE: questo adattatore ora richiede almeno js-controller 2.0.0\nottimizzazioni js-controller 3.3\nAnnulla pubblicazione stati scaduti\nGestire i valori stat solo se lo stato esiste",
                "es": "IMPORTANTE: este adaptador ahora requiere al menos js-controller 2.0.0\nOptimizaciones de js-controller 3.3\nAnular la publicación de estados caducados\nSolo maneja valores de estadísticas si el estado existe",
                "pl": "WAŻNE: Ten adapter wymaga teraz co najmniej kontrolera js 2.0.0\njs-controller 3.3 optymalizacje\nCofnij publikację stanów, które wygasły\nObsługuj tylko wartości statystyk, jeśli stan istnieje",
                "zh-cn": "重要提示:此适配器现在至少需要 js-controller 2.0.0\njs-controller 3.3 优化\n取消发布过期状态\n如果状态存在,则仅处理统计值"
            },
            "1.3.2": {
                "en": "Added support of admin5",
                "de": "Unterstützung von admin5 hinzugefügt",
                "ru": "Добавлена поддержка admin5",
                "pt": "Adicionado suporte de admin5",
                "nl": "Ondersteuning toegevoegd voor admin5",
                "fr": "Ajout de la prise en charge d'admin5",
                "it": "Aggiunto supporto di admin5",
                "es": "Soporte agregado de admin5",
                "pl": "Dodano obsługę admin5",
                "zh-cn": "增加了对admin5的支持"
            },
            "1.3.1": {
                "en": "mqtt package moved back to 2.x",
                "de": "Das mqtt-Paket wurde auf 2.x zurückgesetzt",
                "ru": "пакет mqtt перенесен обратно в 2.x",
                "pt": "Pacote mqtt retornado para 2.x",
                "nl": "mqtt-pakket verplaatst naar 2.x",
                "fr": "le package mqtt est revenu à 2.x",
                "it": "Il pacchetto mqtt è tornato alla 2.x",
                "es": "El paquete mqtt regresó a 2.x",
                "pl": "pakiet mqtt został przeniesiony z powrotem do wersji 2.x",
                "zh-cn": "mqtt软件包移回了2.x"
            },
            "1.2.1": {
                "en": "Support of js-controller 2.0 was added",
                "de": "Unterstützung von js-controller 2.0 wurde hinzugefügt",
                "ru": "Добавлена поддержка js-controller 2.0",
                "pt": "Suporte do js-controller 2.0 foi adicionado",
                "nl": "Ondersteuning van js-controller 2.0 is toegevoegd",
                "fr": "Le support de js-controller 2.0 a été ajouté",
                "it": "È stato aggiunto il supporto di js-controller 2.0",
                "es": "Se agregó soporte de js-controller 2.0",
                "pl": "Dodano obsługę js-kontrolera 2.0",
                "zh-cn": "添加了对js-controller 2.0的支持"
            },
            "1.1.1": {
                "en": "small fixes",
                "de": "kleine Ausbesserungen",
                "ru": "небольшие исправления",
                "pt": "pequenas correções",
                "nl": "kleine reparaties",
                "fr": "petites corrections",
                "it": "piccole correzioni",
                "es": "pequeñas correcciones",
                "pl": "drobne poprawki",
                "zh-cn": "小修正"
            },
            "1.1.0": {
                "en": "Translations\nUpdate of MQTT module",
                "de": "Übersetzungen\nUpdate des MQTT-Moduls",
                "ru": "Переводы\nОбновление модуля MQTT",
                "pt": "Traduções\nAtualização do módulo MQTT",
                "nl": "vertaalwerk\nUpdate van de MQTT-module",
                "fr": "Traductions\nMise à jour du module MQTT",
                "it": "Traduzioni\nAggiornamento del modulo MQTT",
                "es": "Traducciones\nActualización del módulo MQTT",
                "pl": "Tłumaczenia\n",
                "zh-cn": "翻译\n"
            },
            "1.6.0": {
                "en": "add option to select protocol version\nadd websocket support\npublish values once on enabling publishing\nUpgrade to MQTT version 4 (resolves many connection issues)\nfix LWT documentation\noptionally publish a message when disconnecting gracefully",
                "de": "Option hinzufügen, um die Protokollversion auszuwählen\nWebsocket-Unterstützung hinzufügen\nveröffentlichen Sie Werte einmal beim Aktivieren der Veröffentlichung\nUpgrade auf MQTT Version 4 (behebt viele Verbindungsprobleme)\nLWT-Dokumentation korrigiert\nVeröffentlichen Sie optional eine Nachricht, wenn Sie die Verbindung ordnungsgemäß trennen",
                "ru": "добавить опцию для выбора версии протокола\nдобавить поддержку вебсокетов\nопубликовать значения один раз при включении публикации\nОбновление до MQTT версии 4 (решает многие проблемы с подключением)\nисправить документацию LWT\nопционально опубликовать сообщение при изящном отключении",
                "pt": "adicionar opção para selecionar a versão do protocolo\nadicionar suporte a websocket\npublicar valores uma vez ao habilitar a publicação\nAtualize para o MQTT versão 4 (resolve muitos problemas de conexão)\ncorrigir a documentação do LWT\nopcionalmente, publique uma mensagem ao desconectar normalmente",
                "nl": "optie toevoegen om protocolversie te selecteren\nwebsocket-ondersteuning toevoegen\nwaarden eenmalig publiceren bij het inschakelen van publicatie\nUpgrade naar MQTT versie 4 (lost veel verbindingsproblemen op)\nLWT-documentatie repareren\noptioneel een bericht publiceren bij het netjes loskoppelen",
                "fr": "ajouter une option pour sélectionner la version du protocole\najouter la prise en charge des websockets\npublier les valeurs une fois lors de l'activation de la publication\nMise à niveau vers MQTT version 4 (résout de nombreux problèmes de connexion)\ncorriger la documentation LWT\néventuellement publier un message lors de la déconnexion gracieuse",
                "it": "aggiungi l'opzione per selezionare la versione del protocollo\naggiungi il supporto per WebSocket\npubblicare i valori una volta all'abilitazione della pubblicazione\nAggiornamento a MQTT versione 4 (risolve molti problemi di connessione)\ncorreggere la documentazione LWT\nfacoltativamente, pubblicare un messaggio durante la disconnessione regolare",
                "es": "agregar opción para seleccionar la versión del protocolo\nañadir soporte websocket\npublicar valores una vez al habilitar la publicación\nActualice a MQTT versión 4 (resuelve muchos problemas de conexión)\ncorregir la documentación de LWT\nopcionalmente, publique un mensaje cuando se desconecte correctamente",
                "pl": "dodaj opcję wyboru wersji protokołu\ndodaj obsługę gniazda sieciowego\nopublikuj wartości raz po włączeniu publikowania\nUaktualnij do MQTT w wersji 4 (rozwiązuje wiele problemów z połączeniem)\nnaprawić dokumentację LWT\nopcjonalnie opublikuj wiadomość przy wdzięcznym rozłączeniu",
                "zh-cn": "添加选项以选择协议版本\n添加 websocket 支持\n在启用发布时发布值一次\n升级到 MQTT 版本 4(解决了许多连接问题)\n修复 LWT 文档\n可以选择在正常断开连接时发布消息"
            }
        },
        "authors": [
            "Pmant <patrickmo@gmx.de>",
            "algar42 <igor.aleschenkov@gmail.com>"
        ],
        "keywords": [
            "mqtt",
            "syncing",
            "data"
        ],
        "license": "MIT",
        "platform": "Javascript/Node.js",
        "icon": "mqtt-client.png",
        "enabled": true,
        "extIcon": "https://raw.githubusercontent.com/Pmant/ioBroker.mqtt-client/master/admin/mqtt-client.png",
        "readme": "https://github.com/Pmant/ioBroker.mqtt-client/blob/master/README.md",
        "loglevel": "debug",
        "mode": "daemon",
        "type": "protocols",
        "preserveSettings": "custom",
        "compact": true,
        "materialize": true,
        "messagebox": true,
        "supportCustoms": true,
        "supportStopInstance": true,
        "dependencies": [
            {
                "js-controller": ">=3.3.0"
            }
        ],
        "plugins": {
            "sentry": {
                "dsn": "https://0bce9946ef3348dc9ef31ee6442370f2@sentry.iobroker.net/142"
            }
        },
        "adminUI": {
            "custom": "json",
            "config": "materialize"
        },
        "connectionType": "local",
        "dataSource": "push",
        "tier": 2,
        "installedFrom": "iobroker.mqtt-client@1.6.0",
        "installedVersion": "1.6.0",
        "host": "pi4home",
        "logLevel": "info"
    },
    "native": {
        "host": "192.168.0.15",
        "port": "1883",
        "ssl": false,
        "clientId": "pi4home",
        "username": "",
        "password": "",
        "onConnectTopic": "clients/iobroker/online",
        "onConnectMessage": "true",
        "lastWillTopic": "clients/iobroker/online",
        "lastWillMessage": "false",
        "subscriptions": "pi4home/clients/#",
        "reconnectPeriod": 30000,
        "outbox": "pi4home",
        "inbox": "",
        "enabled": false,
        "publish": false,
        "pubChangesOnly": false,
        "pubAsObject": false,
        "qos": 0,
        "retain": false,
        "subscribe": false,
        "subChangesOnly": false,
        "subAsObject": false,
        "subQos": 0,
        "setAck": true,
        "onDisconnectTopic": "clients/iobroker/online",
        "onDisconnectMessage": "false",
        "rejectUnauthorized": true,
        "websocket": false,
        "mqttVersion": "4"
    }
}
GermanBluefox commented 2 years ago

I added _id to instanceObj: https://github.com/ioBroker/ioBroker.admin/commit/7ef0ebde5d1ea065edf4b9c6ea3141d3228af73b