Mal wieder virtuelle Geräte - jetzt aber richtig!

Im Template Node muss die Ausgabe als Json erfolgen nicht als String.
Das musst du noch ändern damit es funktioniert.

1 „Gefällt mir“

Das hat funktioniert, danke.

1 „Gefällt mir“

Guten Morgen liebe Community,

weiter geht es im Bereich virtuelle homee mit Node Red :wink:

Ich möchte gerne einen Aqara Türsensor (Zigbee - ZHA) auslesen und an einem virtuellen homee übergeben. Leider finde ich nur Flows mit Zigbee2MQTT und nicht mit ZHA.

Könnte man mir da weiterhelfen? Danke.

Müsste ähnlich funktionieren wie die Anbindung des Plugs.
Ich hab meine Sensoren über Deconz angebunden. Weiß nicht, ob Dir das etwas hilft.

Hi, bin kein Profi aber habe auch mit dem Flow Zigbee2MQTT gestartet und dann ein bisschen geschaut wie es bei anderen Flows so funktioniert und habe ein wenig probiert. Es gibt sicher noch bessere Lösungen :blush: Seit einigen Wochen habe ich so mein Briefschlitz smart gemacht :sweat_smile:

image

[
    {
        "id": "0bb9e26a19bfcc62",
        "type": "tab",
        "label": "Briefkasten",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "b531390969788c5f",
        "type": "ioBroker in",
        "z": "0bb9e26a19bfcc62",
        "name": "Is open",
        "topic": "zigbee.0.00158d0008a7585d.opened",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "fireOnStart": "false",
        "outFormat": "MQTT",
        "x": 130,
        "y": 120,
        "wires": [
            [
                "438d5a6a9c15603c"
            ]
        ]
    },
    {
        "id": "727ea782b11f425c",
        "type": "homeeDevice",
        "z": "0bb9e26a19bfcc62",
        "virtual-homee": "",
        "name": "Briefkasten",
        "nodeId": "441",
        "showNodeId": false,
        "profile": "2000",
        "icon": "nodeicon_sunsail",
        "attributes": [
            {
                "type": 195,
                "state": 1,
                "instance": 0,
                "minimum": 0,
                "maximum": 5,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "data": "",
                "name": "",
                "unit": "V",
                "step_value": 1,
                "editable": 0,
                "last_changed": 1679085119,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "options": [],
                "id": "443",
                "node_id": "441"
            },
            {
                "type": 8,
                "state": 1,
                "instance": 0,
                "minimum": 0,
                "maximum": 100,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "data": "",
                "name": "",
                "unit": "%25",
                "step_value": 1,
                "editable": 0,
                "last_changed": 1679085160,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "options": [],
                "id": "444",
                "node_id": "441"
            },
            {
                "type": 10,
                "state": 1,
                "instance": 0,
                "minimum": 0,
                "maximum": 2,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "data": "",
                "name": "Briefeinwurf",
                "unit": "n%2Fa",
                "step_value": 1,
                "editable": 0,
                "last_changed": 1679083164,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "options": [],
                "id": "461",
                "node_id": "441"
            },
            {
                "type": 33,
                "state": 1,
                "instance": 0,
                "minimum": 1,
                "maximum": 4,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "data": "",
                "name": "",
                "unit": "n%2Fa",
                "step_value": 1,
                "editable": 0,
                "last_changed": 1679084562,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "options": [],
                "id": "462",
                "node_id": "441"
            }
        ],
        "statusTemplate": "",
        "x": 750,
        "y": 120,
        "wires": [
            []
        ]
    },
    {
        "id": "438d5a6a9c15603c",
        "type": "change",
        "z": "0bb9e26a19bfcc62",
        "name": "close true",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "true",
                "fromt": "bool",
                "to": "2",
                "tot": "num"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "false",
                "fromt": "bool",
                "to": "0",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 300,
        "y": 120,
        "wires": [
            [
                "1faed43dd3a1fc33"
            ]
        ]
    },
    {
        "id": "1faed43dd3a1fc33",
        "type": "function",
        "z": "0bb9e26a19bfcc62",
        "name": "open button pressed",
        "func": "node.send({\n            payload:{\n                        \"attribute\":{\n                                    \"id\":461,\n                                    \"value\": msg.payload\n                                    }\n                    }\n})",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 520,
        "y": 120,
        "wires": [
            [
                "727ea782b11f425c"
            ]
        ]
    },
    {
        "id": "25b1b84f14460974",
        "type": "function",
        "z": "0bb9e26a19bfcc62",
        "name": "Link Quality",
        "func": "var siglevel = parseInt(msg.payload);\n\n// Verbindungsqualität umrechnen\nif (siglevel < 10) {\n   siglevel = 0\n}\nelse if (siglevel < 20) {\n    siglevel = 1\n}\nelse if (siglevel < 40) {\n    siglevel = 2\n}\nelse if (siglevel < 60) {\n    siglevel = 3\n}\nelse {\n    siglevel = 4\n}\nmsg.payload = {\"attribute\":{\"id\":462, \"value\": siglevel}};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 450,
        "y": 260,
        "wires": [
            [
                "727ea782b11f425c"
            ]
        ]
    },
    {
        "id": "44af758c3977dac6",
        "type": "ioBroker in",
        "z": "0bb9e26a19bfcc62",
        "name": "Link quality",
        "topic": "zigbee.0.00158d0008a7585d.link_quality",
        "payloadType": "value",
        "onlyack": "",
        "func": "rbe",
        "gap": "",
        "x": 210,
        "y": 260,
        "wires": [
            [
                "25b1b84f14460974"
            ]
        ]
    },
    {
        "id": "0af080fbaaf4555a",
        "type": "ioBroker in",
        "z": "0bb9e26a19bfcc62",
        "name": "Battery voltage",
        "topic": "zigbee.0.00158d0008a7585d.voltage",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "fireOnStart": "false",
        "outFormat": "MQTT",
        "x": 220,
        "y": 340,
        "wires": [
            [
                "cdeb489eefdc88ec"
            ]
        ]
    },
    {
        "id": "cdeb489eefdc88ec",
        "type": "template",
        "z": "0bb9e26a19bfcc62",
        "name": "Verbrauch",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "{\"attribute\":{\"id\":443,\"value\":{{payload}}}}",
        "output": "json",
        "x": 450,
        "y": 340,
        "wires": [
            [
                "727ea782b11f425c"
            ]
        ]
    },
    {
        "id": "01a194c40be95dbb",
        "type": "ioBroker in",
        "z": "0bb9e26a19bfcc62",
        "name": "Battery percent",
        "topic": "zigbee.0.00158d0008a7585d.battery",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "fireOnStart": "false",
        "outFormat": "MQTT",
        "x": 200,
        "y": 400,
        "wires": [
            [
                "b6481ae2d6f26909"
            ]
        ]
    },
    {
        "id": "b6481ae2d6f26909",
        "type": "function",
        "z": "0bb9e26a19bfcc62",
        "name": "Battery",
        "func": "var batlevel = parseInt(msg.payload);\nmsg.payload = {\"attribute\":{\"id\":444, \"value\": batlevel}};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 440,
        "y": 400,
        "wires": [
            [
                "727ea782b11f425c"
            ]
        ]
    }
]
1 „Gefällt mir“

Sieht doch soweit gut aus. Kann man aber alles durchaus in eine Funktion packen dann ist es übersichtlicher.
:+1:

2 „Gefällt mir“

Wasserzähler Opensprinkler in Homee per mqtt & nodered integrieren.
Ich habe meinen Bewässerungscomputer (Opensprinkler) per mqtt angemeldet.

Unter „opensprinkler/sensor/flow“ wirft er am Ende der Laufzeit die Gesamt Wassermenge aus:
{„count“:5,„volume“:5.00}

Ich möchte nun nur den Wert von count im Wasserzähler haben. Wie mache ich das?

{Attribute:{id:000,value:msg.payload.count}}

So nach dem Motto muss das dann aussehen.
Muss nur ordentlich formatiert werden.

Danke! Der Wert wird durchgereicht, aber nicht summiert.
Wie bekomme ich das kumuliert?

In der Funktion habe ich
var wert = parseFloat(msg.payload.count);
return { payload: { „attribute“: { „id“: 48, „value“: wert } } };
Homee node
image

Wann wird der Wert gesendet ?
Du kannst innerhalb der Funktion rechnen.
Dazu speicherst du den Wert in einem Speicher den du dann anrufst.
Dazu muss man natürlich genau wissen wann was gesendet wird.

Der Wert wird einmal gesendet, sobald das Ventil wieder geschlossen wird, also immer beim Beenden des Programms.

var a = flow.get("a")||0;
var b = msg.payload.count;
b = a+b;
flow.set("a",b);
return{payload: {"attribute":{"id":48,"value":b}}};

Schau dir das mal an @homesmarthome .

1 „Gefällt mir“

Hi, habe auch noch eine frage wo ich aktuell nicht weiter komme.
Habe zwei Geräte von IoBroker in Node-Red.
Wenn Gerät YA 20 ausgibt und Gerät WTT 5 ausgibt soll ein Virtueller Schalter umgelegt werden mit Value 1.
Es fehlt mir das wissen 2 Variablen anzulegen wo die Werte von Geräten kommen und um diese als Bedingung zu nutzen.
Ich habe schon was gebaut aber ich bekomme immer nur die eine Variable YA zum laufen. Denke ich bin hier auf dem falschen Weg unterwegs.
Vielleicht kann mir einer helfen :slight_smile:
Funktion:

var YA = parseInt(msg.payload);
var WTT = parseInt(msg.payload);

if (YA < 20) {
    YA = 0
}
else if  (YA >= 20 && YA <= 40 && WTT <= 10 && WTT >= 5) {
    YA = 1
}

Wie kommen denn die Werte an?
In einem Payload oder in mehreren Payload‘s.

Die Werte kommen direkt aus dem Gerät und dahinter habe ich die Funktion wie oben beschrieben. Nur weiß ich nicht wie ich den Wert von dem anderen Gerät mit rein bekomme.

image

Kommen die Werte aus einem Device oder aus zwei iobroker Node ?

Du musst die Werte separat speichern um beide dann in der Funktion nutzen zu können.

Du könntest auf das topic filtern und den payload dann in wine Flow oder global Variable speichern.

if ( msg.topic === "ya" ){
flow.set("ya", msg.payload);
}
else if (msg.topic === "wtt"){
flow.set("wtt",msg.payload);
}
var ya = flow.get("ya")||0;
var wtt = flow.get("wtt")||0;

Die Funktion muss dann von beiden Geräten getriggert werden.

1 „Gefällt mir“

Die Werte kommen von einem Device was bei Iobroker über den Zigbee Adapter verbunden ist.
Ich habe es jetzt mit einem neuen Flow und mit einfachen mitteln getestet und habe es hinbekommen :grin: Meine gewünschte Funktion ist da, kannst ja mal drüber schauen :slight_smile: Danke!!!

[
    {
        "id": "0331d71a0156cca2",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "c593fa8ed6d159ad",
        "type": "inject",
        "z": "0331d71a0156cca2",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "10",
        "payloadType": "num",
        "x": 190,
        "y": 80,
        "wires": [
            [
                "f674129b675fe767"
            ]
        ]
    },
    {
        "id": "819cbff5dcea3d1d",
        "type": "inject",
        "z": "0331d71a0156cca2",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "20",
        "payloadType": "num",
        "x": 190,
        "y": 160,
        "wires": [
            [
                "9689a488f5d352c2"
            ]
        ]
    },
    {
        "id": "f674129b675fe767",
        "type": "function",
        "z": "0331d71a0156cca2",
        "name": "A",
        "func": "flow.set(\"A\", msg.payload);\n\nvar A = flow.get(\"A\") || 0;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 390,
        "y": 80,
        "wires": [
            [
                "f9c71b2360065af5"
            ]
        ]
    },
    {
        "id": "9689a488f5d352c2",
        "type": "function",
        "z": "0331d71a0156cca2",
        "name": "B",
        "func": "flow.set(\"B\", msg.payload);\n\nvar B = flow.get(\"B\") || 0;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 390,
        "y": 160,
        "wires": [
            [
                "f9c71b2360065af5"
            ]
        ]
    },
    {
        "id": "f9c71b2360065af5",
        "type": "debug",
        "z": "0331d71a0156cca2",
        "name": "debug 24",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 560,
        "y": 120,
        "wires": []
    },
    {
        "id": "7bf852c0ae949147",
        "type": "function",
        "z": "0331d71a0156cca2",
        "name": "Vergleichen / Bedinungen",
        "func": "var A = flow.get(\"A\") || 0;\nvar B = flow.get(\"B\") || 0;\n\n\nif (B < 5) {\n   B = 0\n}\nelse if (B > 5 && A > 5) {\n    B = 1\n}\n\n\nmsg.payload = {\"attribute\":{\"id\":1111, \"value\": B}};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 350,
        "y": 300,
        "wires": [
            [
                "c0871a0fe0812e08"
            ]
        ]
    },
    {
        "id": "c0871a0fe0812e08",
        "type": "debug",
        "z": "0331d71a0156cca2",
        "name": "debug 25",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 560,
        "y": 300,
        "wires": []
    },
    {
        "id": "3a5037c6af7a4bb0",
        "type": "comment",
        "z": "0331d71a0156cca2",
        "name": "Variablen anlegen",
        "info": "",
        "x": 290,
        "y": 40,
        "wires": []
    },
    {
        "id": "3b1326057444cc0c",
        "type": "inject",
        "z": "0331d71a0156cca2",
        "name": "",
        "props": [],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 150,
        "y": 300,
        "wires": [
            [
                "7bf852c0ae949147"
            ]
        ]
    },
    {
        "id": "d39eedcee0ef670e",
        "type": "comment",
        "z": "0331d71a0156cca2",
        "name": "Variablen - Bedinungen mit einer Zahl",
        "info": "",
        "x": 330,
        "y": 260,
        "wires": []
    }
]
1 „Gefällt mir“

Viele Wege führen nach Rom.
Wichtig ist das du es hinbekommen und wieder was gelernt hast.
:+1::+1:

1 „Gefällt mir“

Vielen Vielen und noch mehr Dank! Eine großartige Hilfe!

Ich habe mir jetzt zwei virtuelle Wasseruhren gemacht. Last Run und Kumuliert.
Damit habe ich jetzt direkt im Homee eine einfache Kontrolle über meinen Wasserverbrauch aus der Zisterne für die Gartenbewässerung.

image

4 „Gefällt mir“

Sehr schick geworden.

Ich unterstütze gerne die homee User und diese Community denn nur so können wir uns weiter entwickeln und alles am laufen halten.

15 „Gefällt mir“