Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Benutzeravatar
Psi
Beiträge: 512
Registriert: 09.08.2018, 19:58
Wohnort: Nürnberg
Hat sich bedankt: 27 Mal
Danksagung erhalten: 90 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von Psi » 29.01.2023, 13:29

Pre-built binaries sind immer so ne Sache. Gibt einfach zu viel Versionen und Architekturen in Kombination

Benutzeravatar
Baxxy
Beiträge: 10789
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2208 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von Baxxy » 11.02.2023, 13:32

Da ich langsam Gefallen an NodeRed finde habe ich mal eine Frage zur "get value" - Node.
Dieser Node gibt bei jeder eingehenden Message den aktuellen zwischengespeicherten Zustand eines Datenpunktes oder einer CCU Systemvariable aus.
Worauf bezieht sich das zwischengespeichert?
Auf einen Zwischenspeicher in NodeRed oder auf den ReGa-Status der Zentrale.

Konkreter, was mach "get value" wenn ich es "antriggere"?
  • holt es sich den in der ReGa gespeicherten Wert von der Zentrale
  • oder holt es den Wert aus einem Zwischenspeicher in NodeRed.


Benutzeravatar
Baxxy
Beiträge: 10789
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2208 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von Baxxy » 11.02.2023, 14:05

Ok, nächste Frage: :wink:

Wie kann ich aktiv einen Status / Wert "holen"?

Dachte mir ich nehme die "script" - Node, welche ja einen Ausgang hat.
Nur wie schaffe ich es da am Ausgang den Wert auszugeben?
Ist irgendwie schlecht bis gar nicht dokumentiert.

Beispiel:

Code: Alles auswählen

var SV_Wert = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("A_SV_Zahl").Value();
Gibt mittels Debug nur:

Code: Alles auswählen

11.2.2023, 14:03:36node: debug 36
192.168.1.26/ReGaHSS : msg.payload : string[0]
""
Oder ist das gar nicht vorgesehen?

Benutzeravatar
Henke
Beiträge: 1521
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 140 Mal
Danksagung erhalten: 306 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von Henke » 11.02.2023, 14:36

Vergiss ganz schnell diese Node und generell auch eigentlich Scripte unter Node Red.

Den Wert brauchst du nicht, da die Werte in NodeRed durch Events immer aktuell gehalten werden.
.State wird nichts anderes liefern als die Value Node.
Also ein Inject vor die Value-Node und dahinter eine debug Ausgabe. Fertig

Zurück zu der Scripte Node. Diese ist nicht für mehrere Aufrufe geeignet und müsste mit üblen Timern versehen werden. Habe ich mir lange genug die Zähne dran ausgebrochen. Für die wenigen Scripts, die ich noch brauche, habe ich eine Node, die diese über http ausführt und die Ergebnisse, wenn möglich, direkt in JSON umwandelt. Die kannst du gerne haben, aber, wie gesagt, der Weg ist es eigentlich ohne Scripte auszukommen.

Benutzeravatar
Baxxy
Beiträge: 10789
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2208 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von Baxxy » 11.02.2023, 15:09

Verstehe.
  • Beim NodeRed Start werden alle Values einmalig ausgelesen und innerhalb NodeRed gecached.
  • Bei Events (sofern auf der Zentrale aktiv) wird der NR Cache (des jeweiligen Datenpunktes) geupdated und ich kann den gecached'en Status mittels "get value" abfragen.
  • SysVars werden durch das Polling zyklisch eingelesen und gecached (und beim NR Start).
Passt soweit.

Die SysVars brauche ich in NR "eigentlich" nicht, daher ist das Polling aus.
Ergo stimmt der gecached'e Staus in NR nicht wenn sich die SysVar geändert hat.

Jetzt würde ich gerne den aktuellen Status einer einzigen SysVar haben wollen, also müsste ich:
  • A: das Polling aktivieren (Status für alle SysVars wird alle x Sekunden aktualisiert)
  • B: die "poll" Node triggern (Status für alle SysVars wird einmalig aktualisiert)
  • C: deine "http" - Node (anpassen und) testen um mir "den Einen" Status reinzuholen
Ich würde gerne mal C ausprobieren. :wink:

Benutzeravatar
Henke
Beiträge: 1521
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 140 Mal
Danksagung erhalten: 306 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von Henke » 11.02.2023, 16:00

Hmm und direkt die Problematik der Sysvars gefunden...

Also, ich empfehle dir jetzt direkt die Reißleine zu ziehen. ptweety ist nicht umsonst dabei eine Jack-Bridge aufzubauen und ich habe meine Nodes zum großen Teil schon daran angepasst.
Abgesehen von der Geschwindigkeit gibt es mit dem Jack das Polling Problem nicht mehr. Da sind mit MQTT gekennzeichnete Variablen in unter einer Sekunde da. Und wenn man da unbedingt sicher gehen müsste, so ist eine Abfrage über http auch einfach.
Ich teste mal wie ich die kompatiblen Nodes direkt an MQTT anbinden kann. Dann habe ich für dich eine saubere Grundstuktur mit der du so ziemlich alles hinbekommst...

http Script kommt per PN

Benutzeravatar
Baxxy
Beiträge: 10789
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2208 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von Baxxy » 11.02.2023, 16:26

Danke, gucke ich mir gleich mal an und versuche das für meinen Anwendungsfall zu adaptieren. :)

Wie geschrieben brauche ich die SysVars grundsätzlich nicht.
Nur halt den Status einer einzigen den ich bei Bedarf abrufen möchte.

Der Jack kocht auch nur mit Wasser und pollt alle paar Sekunden die ReGa um die SysVars einzulesen.
Das läuft dann zwar direkt auf der Zentrale, ist im Grunde aber nix anderes als aktives Polling durch NR. 8)

Benutzeravatar
Henke
Beiträge: 1521
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 140 Mal
Danksagung erhalten: 306 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von Henke » 11.02.2023, 17:02

Baxxy hat geschrieben:
11.02.2023, 16:26
Der Jack kocht auch nur mit Wasser und pollt alle paar Sekunden die ReGa um die SysVars einzulesen.
Da bin ich mir nicht sicher. Könnte sein, das er sich mit events eingeklinkt hat. Für pollen ist es zu schnell.

Eine Alternative über die JSON API:

Code: Alles auswählen

[
    {
        "id": "bd870c74068928d1",
        "type": "template",
        "z": "5dee2bc3348f76ae",
        "name": "SysVar.get",
        "field": "payload",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{\n    \"version\": \"1.1\",\n    \"method\": \"SysVar.get\",\n    \"params\": {\n        \"_session_id_\": \"{{flow._session_id_}}\",\n        \"id\": \"{{sysvarNr}}\"\n    }\n}",
        "output": "json",
        "x": 1270,
        "y": 780,
        "wires": [
            [
                "7057b9c7ef4523e5",
                "eab3c4a91ecca8bd"
            ]
        ]
    },
    {
        "id": "8ea75d4d36ccb265",
        "type": "inject",
        "z": "5dee2bc3348f76ae",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "2",
        "topic": "",
        "payload": "A",
        "payloadType": "str",
        "x": 915,
        "y": 780,
        "wires": [
            [
                "e40b95638d94825a"
            ]
        ],
        "icon": "font-awesome/fa-play-circle",
        "l": false
    },
    {
        "id": "7057b9c7ef4523e5",
        "type": "http request",
        "z": "5dee2bc3348f76ae",
        "name": "",
        "method": "POST",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "http://127.0.0.0/api/homematic.cgi",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [
            {
                "keyType": "Content-Type",
                "keyValue": "",
                "valueType": "application/json",
                "valueValue": ""
            }
        ],
        "credentials": {},
        "x": 1290,
        "y": 720,
        "wires": [
            [
                "6ed5914604a5fdc0"
            ]
        ]
    },
    {
        "id": "885919931b1b3d8e",
        "type": "template",
        "z": "5dee2bc3348f76ae",
        "name": "Session.login",
        "field": "payload",
        "fieldType": "msg",
        "format": "json",
        "syntax": "mustache",
        "template": "{ \"version\": \"1.1\", \"method\": \"Session.login\", \"params\": { \"username\": \"\", \"password\": \"\" }}",
        "output": "json",
        "x": 1070,
        "y": 720,
        "wires": [
            [
                "7057b9c7ef4523e5"
            ]
        ]
    },
    {
        "id": "0e3256c197a9ad94",
        "type": "inject",
        "z": "5dee2bc3348f76ae",
        "name": "",
        "props": [
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "2",
        "topic": "Login",
        "x": 915,
        "y": 680,
        "wires": [
            [
                "dac33fe2ecc0e56c"
            ]
        ],
        "icon": "font-awesome/fa-play-circle",
        "l": false
    },
    {
        "id": "6ed5914604a5fdc0",
        "type": "switch",
        "z": "5dee2bc3348f76ae",
        "name": "",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "Login",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "SysVar.get",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1510,
        "y": 720,
        "wires": [
            [
                "a9aa35bd468f64de"
            ],
            [
                "dabc30eec55c82fd"
            ]
        ]
    },
    {
        "id": "a9aa35bd468f64de",
        "type": "change",
        "z": "5dee2bc3348f76ae",
        "name": "_session_id_",
        "rules": [
            {
                "t": "set",
                "p": "_session_id_",
                "pt": "flow",
                "to": "payload.result",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1690,
        "y": 720,
        "wires": [
            []
        ]
    },
    {
        "id": "dac33fe2ecc0e56c",
        "type": "change",
        "z": "5dee2bc3348f76ae",
        "name": "Login User/Pass",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Login",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "user",
                "pt": "msg",
                "to": "",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "passwort",
                "pt": "msg",
                "to": "",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1060,
        "y": 680,
        "wires": [
            [
                "885919931b1b3d8e"
            ]
        ]
    },
    {
        "id": "e40b95638d94825a",
        "type": "change",
        "z": "5dee2bc3348f76ae",
        "name": "SysVar.get 950",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "SysVar.get",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "sysvarNr",
                "pt": "msg",
                "to": "950",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1080,
        "y": 780,
        "wires": [
            [
                "bd870c74068928d1"
            ]
        ]
    },
    {
        "id": "dabc30eec55c82fd",
        "type": "debug",
        "z": "5dee2bc3348f76ae",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "counter",
        "x": 1615,
        "y": 800,
        "wires": [],
        "l": false
    },
    {
        "id": "eab3c4a91ecca8bd",
        "type": "debug",
        "z": "5dee2bc3348f76ae",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "counter",
        "x": 1455,
        "y": 800,
        "wires": [],
        "l": false
    }
]
Zuletzt geändert von Henke am 11.02.2023, 21:14, insgesamt 2-mal geändert.

ptweety
Beiträge: 522
Registriert: 07.01.2017, 16:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 66 Mal

Re: Ankündigung: @ptweety/node-red-contrib-ccu [beta-test]

Beitrag von ptweety » 11.02.2023, 20:29

Baxxy hat geschrieben:
11.02.2023, 14:05
Nur wie schaffe ich es da am Ausgang den Wert auszugeben?
Ist irgendwie schlecht bis gar nicht dokumentiert.
Ja, da sind insbesondere in der Doku noch ne Menge Baustellen.
Leider bin ich absolut Ahnungslos, wenn es um einige Funktionen der CCU geht und kann daher z.B. nichts gehaltvolles für den Bereich der Skripte schreiben. Aber ich nehme gerne Vorschläge dazu auf :)

Antworten

Zurück zu „RedMatic“