rdmtc / RedMatic

Node-RED packaged as Addon for the Homematic CCU3 and RaspberryMatic đŸ€č‍♂
Apache License 2.0
533 stars 47 forks source link

node-red 2.x upgrade #534

Open Darkman1900 opened 2 years ago

Darkman1900 commented 2 years ago

Hi, is there a way to upgrade to node-red 2.x? Now I have the first nodes that are not working anymore. node-red-contrib-simpletime@2.10.3 node-red-contrib-telegrambot@11.2.3 Thank you

Edit: Thx Tscherno for the hint We tried to build of the new version (Node-red v2.2) and it worked - only Node-RED process control in Raspberrymatic is showing the wrong state Thx - hope there will be a official upgrade in the next days

Tscherno commented 2 years ago

I just saw that Hobbyquaker did a change just 18 days ago with NodeRed 2.1.5 👍

Meishop commented 2 years ago

Hi, I can add to the list: node-red-contrib-zigbee2mqtt@2.0.5 It is also not working anymore after upgrading it...I hope the update of redmatic is approaching soon... How can I manually upgrade to node-red v2.2? Thanks a lot.

Tscherno commented 2 years ago

Not for the faint of the heart, but i built a release for the prerelease: https://github.com/Tscherno/RedMatic-1/releases

dibadodo commented 2 years ago

Hello,

A update of redmatic would be nice. I have got some problems with different package because of old environment. For now my entire flow are disabled because of a update of one package. The package was deinstalled and can't be installed again. The maintainer says that the reason is old json.

see https://github.com/windkh/node-red-contrib-telegrambot/issues/235

So I have now to decide to delete a lot of nodes from config or stay with disabled all flows until a new version, from package or node red, is available. :( Some Weeks ago I have had similar problem with other package. But this maintainer have make a new package with compatibility for old node red versions.

Regards

Darkman1900 commented 2 years ago

Hello,

A update of redmatic would be nice. I have got some problems with different package because of old environment. For now my entire flow are disabled because of a update of one package. The package was deinstalled and can't be installed again. The maintainer says that the reason is old json.

see windkh/node-red-contrib-telegrambot#235

So I have now to decide to delete a lot of nodes from config or stay with disabled all flows until a new version, from package or node red, is available. :( Some Weeks ago I have had similar problem with other package. But this maintainer have make a new package with compatibility for old node red versions.

Regards

You can install or uninstall packages via SSH console: go to path (normally the path for your nodes) and use npm installer:

cd /usr/local/addons/redmatic/var

npm install --save --no-package-lock --global-style --save-prefix="~" --production <paket-name>
npm uninstall --no-package-lock --global-style --save-prefix="~" --production <paket-name>

in your case:

cd /usr/local/addons/redmatic/var
npm install --no-package-lock --global-style --no-audit --no-update-notifier --no-fund --save --save-prefix=~ --production node-red-contrib-telegrambot@11.2.0

should bring back a running version - make a backup before Hope that helps Best regards Michael

tobilindner commented 2 years ago

Hi Michael.

I tried your suggestions, but get some EROFS errors.

This code

cd /usr/local/addons/redmatic/var
npm remove --no-package-lock --no-audit --no-update-notifier --no-fund --save node-red-contrib-telegrambot

leads to

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

Unhandled rejection Error: EROFS: read-only file system, mkdir '/root/.npm'

npm ERR! cb() never called!

npm ERR! This is an error with npm itself. Please report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

Have you had the same issue? Best regards, Tobi

Darkman1900 commented 2 years ago
cd /usr/local/addons/redmatic/var
npm install --no-package-lock --global-style --no-audit --no-update-notifier --no-fund --save --save-prefix=~ --production node-red-contrib-telegrambot@11.2.0

Try install not remove

tobilindner commented 2 years ago

Hi Michael.

First of all, thanks for your quick response. I am using the CCU3 and logged in via SSH with the root user.

Unfortunatelly, I get the same error when trying to install: grafik

I first tried to uninstall/remove, because according the "package.json" file the newest version (node-red-contrib-telegrambot@11.2.3) is currently installed but can not uninstalled via RedMatic/NodeRed, because it is not shown within the installed nodes list.

Seems that I have to wait till a new RedMatic version with NodeRed >2.1.x is released...

Best, Tobi

dehsgr commented 2 years ago

@tobilindner before node-red commands you should make your filesystem writable via

mount -o remount,rw /

Afterwards you should make it readonly again via

mount -o remount,r /

mschoenel commented 2 years ago

Not for the faint of the heart, but i built a release for the prerelease:

https://github.com/Tscherno/RedMatic-1/releases

Does it works? What are your further steps? Would you release the 8.0 with the node red 2.0 version?

gungam commented 2 years ago

well... i think i have to find a cheap rpi4 to run nodered on ...

andesse commented 2 years ago

I would also really appreciate an update. Quite a lot contribs that can't be installed :/

zapfs commented 2 years ago

Redmatic is a great installation in Homematic environment. Please upgrade to the newest version. So many users will be happy to get an actual environment without the need to install a separate instance for nodered.

totti1171 commented 2 years ago

Was kann die Gemeinde tun? Wie können wir unterstĂŒtzen?

andesse commented 2 years ago

Es reicht auch Node-Red! Die Zusatzpakete kann sich ja jeder nach Bedarf installieren. Ist dann vielleicht weniger Arbeit.

totti1171 commented 2 years ago

tja.... inzwischen wird es immer schwieriger redmatic am laufen zu halten.

Ich wĂ€re dankbar, fĂŒr einen Hinweis, ob ich mich umorientieren muss.

andesse commented 2 years ago

tja.... inzwischen wird es immer schwieriger redmatic am laufen zu halten.

Ich wĂ€re dankbar, fĂŒr einen Hinweis, ob ich mich umorientieren muss.

WĂŒrde ich auch drum bitten @hobbyquaker Ist das addon tot? Wie kann man helfen?, kann man zb commits fĂŒr die Doku machen?

Wie Zeitintensiv ist ein Upgrade?

Tscherno commented 2 years ago

Ich ziehe einen Schlussstrich und migriere alles auf NodeRed integriert in Home Assistant. Dort entsteht gerade auch ganz aktuell ein neue Homematic Integration. ZusÀtzlich gibt es schon lÀnger Raspberrymatic als Addon zum Installieren innerhalb von Home Assistant.

andesse commented 2 years ago

@Tscherno ich auch. Ich hab mir heute nen Tinkerboard 2S bestellt... da lÀuft NodeRed dann alleine drauf. Durch die Aufteilung der Raspberrymatic und NodeRed auf 2 Tinkerboard hoffe ich vielleicht sogar um einen ganz kleinen Performance Anstieg beider Systeme :P

StephanStS commented 1 year ago

Guter Hinweis mit der Migration auf ein "Standard-Node-RED". Danke. Ich habe ein paar Node-RED-Instanzen bei mir laufen, die meisten unter DietPi (weil schlank und schnell), da lĂ€uft alles glatt. Der Zugriff auf die Homematic klappt dabei sehr gut. Ich kann die Migration nur empfehlen. Das soll jetzt keine Kritik an RedMatic sein, ich kann nachvollziehen, wie aufwĂ€ndig eine stĂ€ndige "HinterherAktualisiererei" anderer integrierter Softwareteile mit dem jeweiligen Anwender-Gemecker sein kann. Man ist da stark von außen getrieben und kann nur noch reagieren. Insofern dennoch vielen Dank an RedMatic.

andesse commented 1 year ago

Hab’s am laufen und lĂ€uft schneller als vorher. Irgendwie entlastet es auch die Raspberrymatic hab ich das GefĂŒhl.

F41125E8-A632-4854-AF26-4190AAE1CEE3

Tonitom commented 1 year ago

Guter Hinweis mit der Migration auf ein "Standard-Node-RED". Danke. Ich habe ein paar Node-RED-Instanzen bei mir laufen, die meisten unter DietPi (weil schlank und schnell), da lĂ€uft alles glatt. Der Zugriff auf die Homematic klappt dabei sehr gut. Ich kann die Migration nur empfehlen. Das soll jetzt keine Kritik an RedMatic sein, ich kann nachvollziehen, wie aufwĂ€ndig eine stĂ€ndige "HinterherAktualisiererei" anderer integrierter Softwareteile mit dem jeweiligen Anwender-Gemecker sein kann. Man ist da stark von außen getrieben und kann nur noch reagieren. Insofern dennoch vielen Dank an RedMatic.

Hi, ich habe fĂŒr kurze Zeit Node-Red auf meiner Synology DS920+ in einem Docker Container laufen lassen. Ich hatte das GefĂŒhl, dass das Homematic Plugin das ganze System in die Knie gezwungen hat.

Hab ich da etwas verbummelt, oder gibt es noch mehr mit dieser Erfahrung?

andesse commented 1 year ago

@Tonitom nein, da hast Du nichts verbummelt. Bei mir lief die Raspi mit RedMatic Addon extrem trĂ€ge. Jetzt wo beide Systeme getrennt auf Tinkerboard laufen, ist es gefĂŒhlt ein ganzes StĂŒck schneller.

GnomiBerlin commented 1 year ago

ggf. als Entscheidungshilfe zu der oben angesprochenen Migration und den Beobachtungen.

Ich habe Homematic als piVCCU auf einem Raspberry laufen und bisher auch RedMatic verwendet.

Nun habe ich auf dem gleichen Pi einen weiteren lxc Container erstellt und dort Node-Red 3.x installiert (incl. mount des Memory-Sticks fĂŒr Chart Daten etc. Ablage zur Schonung der Pi-SD-Karte) . Dann alle Flows von RedMatic exportiert und in Node-Red importiert. Nicht ĂŒbernommene Passwörter und Einstellungen in wenigen Nodes wieder eingegeben bzw. angepasst (neue IP Adresse/neuer Pfad fĂŒr Node-Red Web ZugĂ€nge) und alles lief problemlos. Nebeneffekt: Homematic CCU3 (piVCCU) startet VIEL schneller durch und das Backup der Homematic ist auch rasend schnell.

PS: Ich finde die Arbeiten von @hobbyquaker auch sehr gut, aber die UnabhÀngigkeit von eigenstÀndiger SW mit eigenem Lebenszyklus und damit unabhÀngiger Pflege hat doch Vorteile.

Tonitom commented 1 year ago

Hm, das ist vielleicht der richtige Weg. Performanz Probleme zwischen CCU3 und Node-Red gibt es keine?

Nebenfrage: Warum nicht gleich auf eine SSD installiert?

drMaxxi commented 1 year ago

Hi, welchen node nutzt ihr in nodered um euch mit der CCU zu verbinden?

ptweety commented 1 year ago

Derzeit noch node-red-contrib-ccu. Ich bin aber dabei einen eigen node zu entwickeln, um zukĂŒnftig via CCU-Jack die Anbindung zu machen.

djiwondee commented 1 year ago

Derzeit noch node-red-contrib-ccu

dto. Das ist auch von @hobbyquaker. Denke, dass hier die Zukunft auch eher ungewiss ist.

Mein Favorit wĂ€re zukĂŒnftig ein MQTT-Client auf der CCU. Habe mich aber noch nicht umgeschaut, was dafĂŒr in Frage kommt.

ptweety commented 1 year ago

Naja, wie geschrieben wÀre das der CCU-Jack direkt als Addon auf der CCU oder extern im Docker

GnomiBerlin commented 1 year ago

@drMaxxi: nehme auch node-red-contrib-ccu was ohne Probleme lĂ€uft @Tonitom: Performance Probleme habe ich nie beobachtet (auch vor RedMatic). SSD: ich will den Pi so verbrauchsoptimiert wie möglich verwenden. Ich brauche keine schnelle Bootgeschwindigkeit und fĂŒr die wenigen Daten zur Zwischenablage reicht ein alter Stick. @djiwondee: warum erst auf MQTT und dann zu Node-Red. Ich möchte immer so wenig wie möglich Instanzen wegen Pflege und VerfĂŒgbarkeit im Spiel haben. MQTT verwende ich zwischen Node-Red und anderen Komponenten, wĂŒrde es aber nie zur CCU nehmen, wenn es nicht nötig wĂ€re. Ohne Message Broker (Mosquitto o.Ă€.) ginge sonst nichts zwischen Node-Red und CCU. @ptweety: Eine Ă€hnliche Meinung hĂ€tte ich zu CCU-Jack via Docker. Außerdem sind die CCU und Node-Red meine Logikschichten fĂŒr funktionale AblĂ€ufe zwischen allen Komponenten. Warum sollte in CCU-Jack eine dritte Instanz mit Pflege installiert werden. Welchen Vorteil bringt das? Aber das ist alles nur meine Meinung und ggf. habe ich ja auch nicht alle Aspekte verstanden. .

djiwondee commented 1 year ago

@ptweety

CCU-Jack direkt als Addon auf der CCU

Oh das ist cool! Habe ich zwar einen Berg Arbeit fĂŒr die Umstellung meiner aktuell 53 Homematic-Devices im Haus. Aber das wird sich lohnen.

ptweety commented 1 year ago

@GnomiBerlin :

@drMaxxi: nehme auch node-red-contrib-ccu was ohne Probleme lÀuft

"Noch" lÀuft es mit node-red-contrib-ccu. Aber wie weiter oben schon erklÀrt, wird dieser node auch absehbar nicht mehr gepflegt. Du steckst damit in der gleichen "Sackgasse", wie mit RedMatic.

@djiwondee: warum erst auf MQTT und dann zu Node-Red. Ich möchte immer so wenig wie möglich Instanzen wegen Pflege und VerfĂŒgbarkeit im Spiel haben. MQTT verwende ich zwischen Node-Red und anderen Komponenten, wĂŒrde es aber nie zur CCU nehmen, wenn es nicht nötig wĂ€re. Ohne Message Broker (Mosquitto o.Ă€.) ginge sonst nichts zwischen Node-Red und CCU.

CCU-Jack ist nicht nur MQTT-Client, sondern auch ein MQTT-Broker und kann sogar als MQTT-Bridge agieren. Damit brauchst du also keinen weiteren Broker.

@ptweety: Eine Ă€hnliche Meinung hĂ€tte ich zu CCU-Jack via Docker. Außerdem sind die CCU und Node-Red meine Logikschichten fĂŒr funktionale AblĂ€ufe zwischen allen Komponenten. Warum sollte in CCU-Jack eine dritte Instanz mit Pflege installiert werden. Welchen Vorteil bringt das?

CCU-Jack ganz allgemein ersetzt die bisherige Anbindung externer Applikationen ĂŒber xml-api oder rpc durch eine REST-API und Benachrichtigung per MQTT. Damit wird die Anbindung generischer und mit deutlich besser verbreiteten Technologien erreicht.

CCU-Jack als Addon auf einer CCU bringt zusÀtzliche Funktionen mit, wie etwa virtuelle GerÀte (Àhnlich zu CUxD), welche dann direkt aus MQTT-Nachrtichten von Shellies oder Tasmota-GerÀten angesprochen werden können

Aber das ist alles nur meine Meinung und ggf. habe ich ja auch nicht alle Aspekte verstanden.

Vielleicht hilft dir das obige ja weiter ...

Sineos commented 1 year ago

Mein Smart-Home besteht aus:

Mein Setup der Wahl:

Ginge genauso mit Homeassistant statt Iobroker. Iobroker hat mir persönlich am Ende besser gefallen. Mein einziger "Wermutstropfen" ist dass die NR Instanz innerhalb Iobroker lĂ€uft. Die hĂ€tte ich noch gerne gĂ€nzlich eigenstĂ€ndig (war aber zu faul, alles ĂŒber MQTT zu biegen).

ptweety commented 1 year ago

@ptweety

CCU-Jack direkt als Addon auf der CCU

Oh das ist cool! Habe ich zwar einen Berg Arbeit fĂŒr die Umstellung meiner aktuell 53 Homematic-Devices im Haus. Aber das wird sich lohnen.

Vielleicht kann dir dieser Flow dabei etwas helfen, den ich fĂŒr die Anbindung des CCU-Jack an Node-Red verwende und Daten zwischen speichere, um letztlich MQTT-Nachrichten mit Anreicherung an InfluxDB zu senden.

Bildschirmfoto 2022-09-21 um 17 21 45

Eine kleine Anleitung zur Konfiguration ist im Jack Cache zu finden. ZusÀtzlich muss noch in den inject nodes jeweils der Adresse des Funkmoduls statt FUNKMODUL eingetragen werden.

CCU-Jack Cache

Mit diesem Knoten werden eingehende MQTT-Nachrichten des CCU-Jack um weitere Informationen zu dem jeweiligen

angereichert. Aus der ursprĂŒnglichen Nachricht msg wird das msg.topic zur Identifikation der benötigten Informationen herangezogen, zerlegt und in einzelne Abfragen an den CCU-Jack umgewandelt. Die Antworten werden fĂŒr eine festgelegte Zeit zwischengespeichert und bei einer spĂ€teren Abfrage ggfs. genutzt.

Konfiguration

Im Start-Tab kann die Konfiguration eingetragen werden:

const config = {
    cache: 'jack-cache',   // Name im globalen Kontext
    proto: 'http',
    ip: 'ccu-jack.local',
    port: 2121,
    user: 'user',
    password: 'password',
    key: `-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----`,
    cert: `-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----`,
}

Details

[
    {
        "id": "2d752ee6.b38eda",
        "type": "influxdb out",
        "z": "c097cad3.926648",
        "influxdb": "",
        "name": "influxdb/redmatic",
        "measurement": "",
        "precision": "",
        "retentionPolicy": "",
        "database": "",
        "precisionV18FluxV20": "ns",
        "retentionPolicyV18Flux": "",
        "org": "ptweety-net",
        "bucket": "nodered",
        "x": 690,
        "y": 200,
        "wires": []
    },
    {
        "id": "de8a48e1.1f4a18",
        "type": "comment",
        "z": "c097cad3.926648",
        "name": "Duty Cycle und Events an influxdb leiten",
        "info": "Dieser Flow\n\n* fragt in Intervallen \nvon 30 Sekunden den Duty Cycle des \nersten Funk-Interfaces des BidCos-RF\nSchnittstellenprozess (\"rfd\") per RPC ab\n* nimmt jedes Event der CCU\n\nund leitet diesen an influxdb weiter.",
        "x": 200,
        "y": 160,
        "wires": []
    },
    {
        "id": "2cd26313f07a36cf",
        "type": "function",
        "z": "c097cad3.926648",
        "name": "Jack Cache",
        "func": "const jackAPI = context.get('util').jackAPI;\nconst getLinks = context.get('util').getLinks;\n\nconst hasProperty = (object, propertyName) => {\n    return Object.prototype.hasOwnProperty.call(object, propertyName);\n}\n\n/**\n * status: indicate working state\n */\nnode.status({\n    fill: 'yellow',\n    shape: 'dot',\n    text: 'working',\n});\n\n/**\n * cache: add root, domains & vendor/config information\n */\nconst root = await jackAPI('/', 1000 * 60 * 60 * 24); // 1d\n\nif (root) {\n    await Promise.all(getLinks(root, 'domain').map(async (link) => {\n        const ret = await jackAPI(link.url, 1000 * 60 * 60 * 4); // 4h\n    }));\n}\n\nconst config = await jackAPI('/~vendor/config/~pv', 1000 * 60 * 60 * 4); // 4h\n\n/**\n * msg: split, analyze and add additional data (either from cache or api call)\n */\n\nlet message = {}\nlet ids = msg.topic.split('/');\n\nswitch (ids[0]) {\n    case 'device': {\n        // mqtt topic example: device/status/${device}/${channel}/${datapoint}\n        \n        const req = [\n            { url: `/device/${ids[2]}`,                     ttl: 1000 * 60 * 60 * 2 }, // 2h\n            { url: `/device/${ids[2]}/${ids[3]}`,           ttl: 1000 * 60 * 60 * 1 }, // 1h\n            { url: `/device/${ids[2]}/${ids[3]}/${ids[4]}`, ttl: 1000 * 60 * 10 }]; // 10min\n            \n        const [device, channel, datapoint] = await Promise.all(req.map( (line) => {\n            return jackAPI(line.url, line.ttl);\n        }));\n\n        setTimeout(() => {let self = node; self.status({})}, 1000);\n        return ( hasProperty(device, 'type') &&\n                hasProperty(channel, 'type') &&\n                hasProperty(datapoint, 'id')\n        ) ? {\n            topic: msg.topic,\n            measurement: device.type.charAt(0).toUpperCase()\n                + device.type.charAt(1).toLowerCase()\n                + device.type.slice(2)\n                + '/' + datapoint.id,\n            payload: [{\n                payload: msg.payload.v\n            },{\n                ccu: config.v.CCU.Address,\n                iface: device.interfaceType,\n                device: device.address,\n                deviceName: device.title.charAt(0).toUpperCase()\n                    + device.title.charAt(1).toLowerCase()\n                    + device.title.slice(2),\n                deviceType: device.type.charAt(0).toUpperCase()\n                    + device.type.charAt(1).toLowerCase()\n                    + device.type.slice(2),\n                channel: channel.address,\n                channelName: channel.title,\n                channelType: channel.type,\n                channelIndex: channel.index,\n                room: channel['~links'].filter( it => it.rel == 'room').map(x => x.title)[0],\n                function: channel['~links'].filter( it => it.rel == 'function').map(x => x.title)[0],\n            }]\n        } : {};\n        //break;\n    }\n    default: {\n        setTimeout(() => {let self = node; self.status({})}, 1000);\n        return msg;\n    }\n}\n\n/**\n * status: return to state\n */\nsetTimeout(() => {let self = node; self.status({})}, 1000);\n\n/**\n * msg: output\n */\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "// Der Code hier wird ausgefĂŒhrt,\n// wenn der Node gestartet wird\n\n//node.status({\n//    fill: 'blue',\n//    shape: 'dot',\n//    text: 'configuration required',\n//}); // delete me\n            \nnode.status({\n    fill: 'green',\n    shape: 'dot',\n    text: 'configured',\n});\n\n// Please enter your <ip>, <user> & <password> below\n\n// IMPORTANT: if you use https on port 2122\n// please change <proto> & <port> as well\n// Also, you must include propper <key> & <cert>\n// This might be self-signed ones from ccu-jack\n\nconst config = {\n    cache: 'jack-cache',\n    proto: 'http',\n    ip: '192.168.1.2',\n    port: 2121,\n    user: 'mqtt',\n    password: '???',\n    key: `-----BEGIN RSA PRIVATE KEY-----\n\n-----END RSA PRIVATE KEY-----`,\n    cert: `-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----`,\n}\n\n// no changes below this comment required\n\n//context.set('jack', config);\n\nlet cache = context.get(config.cache) || {};\n\nconst util = {\n    jackAPI: async (url, ttl) => {\n        const ts = Date.now();\n        if ( !cache[url] || cache[url].ts < (ts - ttl) ) {\n            try {\n                const { data } = await axios.get(url, {\n                    baseURL: `${config.proto}://${config.ip}:${config.port}`,\n                    auth: { username: config.user, password: config.password },\n                    httpsAgent: new https.Agent({ rejectUnauthorized: false, key: config.key, cert: config.cert }),\n                }).catch((err) => {  }); // node.warn({ url: url, error: err, ...msg })\n                cache[url] = data || {};\n                cache[url].ts = ts;\n                cache[url].ttl = ttl;\n                context.set(config.cache, cache);\n                cache = context.get(config.cache);\n            } catch(error) {}\n        }\n        return cache[url] || {};\n    },\n\n    getLinks: (obj, rel, ...args) => {\n        let ret = [];\n\n        obj['~links']\n        .sort((a, b) => { return a.href.localeCompare(b.href) })\n        .filter( link => link.href !== '..')\n        .filter( link => link.href !== '$MASTER')\n        .filter( link => rel !== null ? link.rel === rel : true)\n        .forEach( (link, ind, arr) => {\n            ret.push({\n                url: args.length > 0 ? '/' + args[0] + '/' + link.href : '/' + link.href,\n                request: args.length > 1 ? args[1] : link.href,\n            });\n        })\n        \n        return ret;\n    }\n}\n\ncontext.set('util', util);",
        "finalize": "",
        "libs": [
            {
                "var": "axios",
                "module": "axios"
            },
            {
                "var": "https",
                "module": "https"
            }
        ],
        "x": 430,
        "y": 200,
        "wires": [
            [
                "dd5858b7f61dba08",
                "11c37ab62f2dea5f"
            ]
        ],
        "info": "## CCU-Jack Cache\n\nMit diesem Knoten werden eingehende MQTT-Nachrichten des [CCU-Jack](https://github.com/mdzio/ccu-jack) um weitere Informationen zu dem jeweiligen\n\n - GerĂ€t\n - Kanal\n - Datenpunkt\n \nangereichert. Aus der ursprĂŒnglichen Nachricht `msg` wird das `msg.topic` zur Identifikation der benötigten Informationen herangezogen, zerlegt und in einzelne Abfragen an den CCU-Jack umgewandelt. Die Antworten werden fĂŒr eine festgelegte Zeit zwischengespeichert und bei einer spĂ€teren Abfrage ggfs. genutzt.\n\n### Konfiguration\n\nIm **Start**-Tab kann die Konfiguration eingetragen werden:\n\n```\nconst config = {\n    cache: 'jack-cache',   // Name im globalen Kontext\n    proto: 'http',\n    ip: 'ccu-jack.local',\n    port: 2121,\n    user: 'user',\n    password: 'password',\n    key: `-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----`,\n    cert: `-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----`,\n}\n```\n\n\n### Details"
    },
    {
        "id": "dd5858b7f61dba08",
        "type": "debug",
        "z": "c097cad3.926648",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 590,
        "y": 240,
        "wires": []
    },
    {
        "id": "cdaba029be705fc7",
        "type": "inject",
        "z": "c097cad3.926648",
        "name": "getSubscriptions",
        "props": [
            {
                "p": "action",
                "v": "getSubscriptions",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 235,
        "y": 200,
        "wires": [
            [
                "40b6ab7ae51bffc4"
            ]
        ],
        "icon": "font-awesome/fa-question-circle",
        "l": false
    },
    {
        "id": "40b6ab7ae51bffc4",
        "type": "mqtt in",
        "z": "c097cad3.926648",
        "name": "",
        "topic": "",
        "qos": "2",
        "datatype": "json",
        "broker": "",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 1,
        "x": 295,
        "y": 200,
        "wires": [
            [
                "2cd26313f07a36cf"
            ]
        ],
        "l": false
    },
    {
        "id": "c70378a5128557c8",
        "type": "inject",
        "z": "c097cad3.926648",
        "name": "unsubscribe",
        "props": [
            {
                "p": "action",
                "v": "unsubscribe",
                "vt": "str"
            },
            {
                "p": "topic",
                "v": "[\"device/status/FUNKMODUL/0/+\",\"device/status/+/0/LOW_BAT\",\"device/status/+/0/OPERATING_VOLTAGE\",\"device/status/+/0/RSSI_DEVICE\",\"device/status/+/0/SABOTAGE\",\"device/status/+/0/UNREACH\",\"device/status/+/1/AVERAGE_ILLUMINATION\",\"device/status/+/1/CURRENT_ILLUMINATION\",\"device/status/+/1/HIGHEST_ILLUMINATION\",\"device/status/+/1/ILLUMINATION\",\"device/status/+/1/LOWEST_ILLUMINATION\",\"device/status/+/1/MOTION\",\"device/status/+/1/PRESENCE_DETECTION_STATE\",\"device/status/+/1/ACTIVE_PROFILE\",\"device/status/+/1/ACTUAL_TEMPERATURE\",\"device/status/+/1/BOOST_MODE\",\"device/status/+/1/CONTROL_MODE\",\"device/status/+/1/HUMIDITY\",\"device/status/+/1/LEVEL\",\"device/status/+/1/SET_POINT_MODE\",\"device/status/+/1/SET_POINT_TEMPERATURE\",\"device/status/+/1/STATE\",\"device/status/+/1/SWITCH_POINT_OCCURED\",\"device/status/+/1/WINDOW_STATE\"]",
                "vt": "json"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 165,
        "y": 200,
        "wires": [
            [
                "40b6ab7ae51bffc4"
            ]
        ],
        "icon": "font-awesome/fa-pause-circle",
        "l": false
    },
    {
        "id": "10733c3d52232cd5",
        "type": "inject",
        "z": "c097cad3.926648",
        "name": "subscribe",
        "props": [
            {
                "p": "action",
                "v": "subscribe",
                "vt": "str"
            },
            {
                "p": "topic",
                "v": "[\"device/status/FUNKMODUL/0/+\",\"device/status/+/0/LOW_BAT\",\"device/status/+/0/OPERATING_VOLTAGE\",\"device/status/+/0/RSSI_DEVICE\",\"device/status/+/0/SABOTAGE\",\"device/status/+/0/UNREACH\",\"device/status/+/1/AVERAGE_ILLUMINATION\",\"device/status/+/1/CURRENT_ILLUMINATION\",\"device/status/+/1/HIGHEST_ILLUMINATION\",\"device/status/+/1/ILLUMINATION\",\"device/status/+/1/LOWEST_ILLUMINATION\",\"device/status/+/1/MOTION\",\"device/status/+/1/PRESENCE_DETECTION_STATE\",\"device/status/+/1/ACTIVE_PROFILE\",\"device/status/+/1/ACTUAL_TEMPERATURE\",\"device/status/+/1/BOOST_MODE\",\"device/status/+/1/CONTROL_MODE\",\"device/status/+/1/HUMIDITY\",\"device/status/+/1/LEVEL\",\"device/status/+/1/SET_POINT_MODE\",\"device/status/+/1/SET_POINT_TEMPERATURE\",\"device/status/+/1/STATE\",\"device/status/+/1/SWITCH_POINT_OCCURED\",\"device/status/+/1/WINDOW_STATE\"]",
                "vt": "json"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "",
        "x": 95,
        "y": 200,
        "wires": [
            [
                "40b6ab7ae51bffc4"
            ]
        ],
        "icon": "font-awesome/fa-play-circle",
        "l": false
    },
    {
        "id": "11c37ab62f2dea5f",
        "type": "switch",
        "z": "c097cad3.926648",
        "name": "",
        "property": "measurement",
        "propertyType": "msg",
        "rules": [
            {
                "t": "nnull"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 555,
        "y": 200,
        "wires": [
            [
                "2d752ee6.b38eda"
            ]
        ],
        "l": false
    }
]
drMaxxi commented 1 year ago

@GnomiBerlin :

@drMaxxi: nehme auch node-red-contrib-ccu was ohne Probleme lÀuft

Leider ist auch das nicht mehr aktuell und kennt einige Geraete nicht. Habe gerade openHAB beim Testen, was auch nicht problemlos funktioniert. HomeAssistant habe ich auch aufgegeben, da die nodered Integration auch veraltet ist.

GnomiBerlin commented 1 year ago

@drMaxxi das hatte ich noch nicht. Was wĂ€re ein Beispiel fĂŒr ein nicht unterstĂŒtztes GerĂ€t?

drMaxxi commented 1 year ago

Ich weiss es leider nicht mehr. Es war aber der Grund warum ich begonnen habe die Alternativen zu testen. Leider habe ich bisher keine zuverlĂ€ssige gefunden. Kennt von euch jemand eine Lösung, welche idealerweise nicht von nur einer oder wenigen Personen (dies ist keine Kritik, sondern ich möchte nicht noch mal alles umprogrammieren muessen wenn es gleich wie mit redmatic geht) zur VerfĂŒgung gestellt wird?

Denis1983 commented 2 months ago

Not for the faint of the heart, but i built a release for the prerelease: https://github.com/Tscherno/RedMatic-1/releases @Tscherno How to install/update it?