Mal wieder virtuelle Geräte - jetzt aber richtig!

Hier mal ein Gerät als Beispiel.
Habe hier nen heatit 4 Button mit Singlepress und Longpress abgebildet.

@SteffenTM warum sendest du den retrun in einer eckigen Klammer (array) , das brauchst du doch nur wenn du attributes also mehrere sendest.

Habe ich gar nicht drauf geachtet. Danke dir für den Hinweis. :wink:

1 „Gefällt mir“

Danke @Micha, aber irgendwie bekomm ich es immer noch nicht hin.

Könntest du dir den Flow mal ansehen?

[{"id":"6e8e535b.50250c","type":"tab","label":"IKEA TRADFRI ON/OFF","disabled":false,"info":""},{"id":"72b4bebc.43009","type":"mqtt in","z":"6e8e535b.50250c","name":"","topic":"zigbee2mqtt/0x14b457fffe7f3770","qos":"2","datatype":"auto","broker":"73320efc.b9ffe","x":230,"y":200,"wires":[["911c0f1a.bcbde","feb02178.cdbb3"]]},{"id":"911c0f1a.bcbde","type":"json","z":"6e8e535b.50250c","name":"","property":"payload","action":"","pretty":false,"x":490,"y":200,"wires":[["2ad12393.c8f65c"]]},{"id":"2ad12393.c8f65c","type":"function","z":"6e8e535b.50250c","name":"Filter Sensor","func":"var lq = Number(msg.payload.linkquality)\nvar action = msg.payload.action\n\nif(action == 'on'){\n    node.send({payload:{\"id\":2032,\"value\":1}})\n}\nelse if (action == 'off'){\n    node.send({payload:{\"id\":2033,\"value\":2}})\n}\nelse if (action == 'brightness_move_up'){\n    node.send({payload:{\"id\":2034,\"value\":1}})\n}\nelse if (action == 'brightness_move_down'){\n    node.send({payload:{\"id\":2035,\"value\":1}})\n}\n\nif(lq < 35){\n    node.send({payload:{\"id\":2031,\"value\":1}})\n}\nelse if(lq >= 35 && lq < 70){\n    node.send({payload:{\"id\":2031,\"value\":2}})\n}\nelse if(lq >= 70 && lq < 105){\n    node.send({payload:{\"id\":2031,\"value\":3}})\n}\nelse{\n    node.send({payload:{\"id\":2031,\"value\":4}})\n}\n\n//node.send({payload:{\"id\":2032,\"value\":1}})","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":200,"wires":[["ab245b77.e842d8","e9f26ef1.eb89d"]]},{"id":"ab245b77.e842d8","type":"homeeDevice","z":"6e8e535b.50250c","virtual-homee":"","name":"IKEA TRADFRI Switch","nodeId":"2030","showNodeId":false,"profile":"24","icon":"default","attributes":[{"instance":0,"minimum":0,"maximum":200,"current_value":0,"target_value":0,"last_value":0,"unit":"","step_value":1,"editable":0,"state":1,"last_changed":1572873723,"changed_by":1,"changed_by_id":0,"based_on":1,"data":"","id":2031,"type":33,"node_id":2030},{"state":1,"instance":0,"minimum":1,"maximum":2,"current_value":0,"target_value":0,"last_value":0,"data":"","unit":"n%2Fa","step_value":1,"editable":0,"last_changed":1608121354,"changed_by":1,"changed_by_id":0,"based_on":1,"options":[],"id":2032,"type":40,"node_id":2030},{"state":1,"instance":0,"minimum":1,"maximum":2,"current_value":0,"target_value":0,"last_value":0,"data":"","unit":"n%2Fa","step_value":1,"editable":0,"last_changed":1608152066,"changed_by":1,"changed_by_id":0,"based_on":1,"options":[],"id":2033,"type":40,"node_id":2030},{"state":1,"instance":0,"minimum":0,"maximum":1,"current_value":0,"target_value":0,"last_value":0,"data":"","unit":"n%2Fa","step_value":1,"editable":0,"last_changed":1608152072,"changed_by":1,"changed_by_id":0,"based_on":1,"options":[],"id":2034,"type":310,"node_id":2030},{"state":1,"instance":0,"minimum":0,"maximum":1,"current_value":0,"target_value":0,"last_value":0,"data":"","unit":"n%2Fa","step_value":1,"editable":0,"last_changed":1608152083,"changed_by":1,"changed_by_id":0,"based_on":1,"options":[],"id":2035,"type":310,"node_id":2030}],"statusTemplate":"","x":900,"y":200,"wires":[[]]},{"id":"e9f26ef1.eb89d","type":"debug","z":"6e8e535b.50250c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":870,"y":280,"wires":[]},{"id":"feb02178.cdbb3","type":"debug","z":"6e8e535b.50250c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":450,"y":280,"wires":[]},{"id":"73320efc.b9ffe","type":"mqtt-broker","z":"","name":"","broker":"192.168.178.50","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Vermute es liegt an meinem Function-Node.

In homee sieht das Gerät jetzt so aus:

Wenn ich den Button klicke sehe ich zwar die action im Debug-Node, aber keine Änderung in homee.

In der Webapp siehts so aus:

image

1 „Gefällt mir“

Ich kann mich auch per teamviewer draufschalten und dann schauen wir es uns gemeinsam an.
Geht allerdings dann erst morgen Abend.
Ich schaue mir deinen Flow gerne nochmal an.
Wichtig ist das du dem vhih Gerät auch wieder mitteilst das der Tastvorgang beendet ist.
Hierzu müsste ich genau wissen was der zigbee2mqtt in dem Moment sendet.

Normalerweise wird dir das tasten gesendet und das loslassen sowie longpress.
Das loslassen musst du immer nach dem Tasten und longpress senden, damit das Gerät wieder in den Ausgangszustand zurück geht.

Wie gesagt brauche ich da mehr Daten von der MQTT Schnittstelle.

1 „Gefällt mir“

Danke für das Angebot. Komm ich gerne drauf zurück wenn es so nicht klappt.

Also der MQTTT-Node liefert Folgendes:

  • Taster I gedrückt und losgelassen:
    info 2020-12-16 21:20:01: MQTT publish: topic ‚zigbee2mqtt/0x14b457fffe7f3770‘, payload ‚{„action“:„on“,„battery“:47,„click“:„on“,„linkquality“:0}‘

  • Danach Taster 2 gedrückt:
    info 2020-12-16 21:20:06: MQTT publish: topic ‚zigbee2mqtt/0x14b457fffe7f3770‘, payload ‚{„action“:„off“,„battery“:47,„click“:„off“,„linkquality“:0}‘

  • Danach Taster 1 gehalten und losgelassen:
    info 2020-12-16 21:20:11: MQTT publish: topic ‚zigbee2mqtt/0x14b457fffe7f3770‘, payload ‚{„action“:„brightness_move_up“,„action_rate“:83,„battery“:47,„click“:„brightness_up“,„linkquality“:131}‘
    info 2020-12-16 21:20:11: MQTT publish: topic ‚zigbee2mqtt/0x14b457fffe7f3770‘, payload ‚{„action“:„brightness_stop“,„battery“:47,„click“:„brightness_stop“,„linkquality“:0}‘

  • Danach Taster 2 gehalten und losgelassen:
    info 2020-12-16 21:20:14: MQTT publish: topic ‚zigbee2mqtt/0x14b457fffe7f3770‘, payload ‚{„action“:„brightness_move_down“,„action_rate“:83,„battery“:47,„click“:„brightness_down“,„linkquality“:0}‘
    info 2020-12-16 21:20:14: MQTT publish: topic ‚zigbee2mqtt/0x14b457fffe7f3770‘, payload ‚{„action“:„brightness_stop“,„battery“:47,„click“:„brightness_stop“,„linkquality“:0}‘

1 „Gefällt mir“

Was sendet Taste 1 und 2 beim loslassen nach dem shortpress.
Das steht da leider nicht.
Oder ist es tatsächlich der gleiche Wert ?

Nichts. Wenn ich Taste 1 drücke und direkt wieder loslasse wird action auf on gesetzt.
Bei Taste 2 wird action auf off gesetzt.

1 „Gefällt mir“

Okay das reicht mir als Angabe, dann muss man hier automatisch den Wert zurücksetzen lassen.
Schick mir mal das vhih Device per PN/Mail (json snippet).
Werde dir den Flow morgen mal gerade biegen.
VG Micha

1 „Gefällt mir“

Alles klar. PN ist raus.

Ich hab auch den EIndruck, dass der homee.Node ein Problem hat. Siehe Darstellung in den Screenshots:

iOS:

image

Webapp:

image

1 „Gefällt mir“

Das ist kein Problem und soweit richtig, da du nicht das loslassen an das node sendest.
Also alles okay mit dem Node.:+1:

2 „Gefällt mir“

Ok, verstehe.

Die Schalter ansich machen übrigens nen guten Eindruck. Die Teile werden für 5 € verkauft. Da kann man nix falsch machen.

1 „Gefällt mir“

@Masipulami
hier ist der Flow. Teste den mal bitte und gib mir ne Info ob es so passt.

[
    {
        "id": "72b4bebc.43009",
        "type": "mqtt in",
        "z": "6e8e535b.50250c",
        "name": "",
        "topic": "zigbee2mqtt/0x14b457fffe7f3770",
        "qos": "2",
        "datatype": "auto",
        "broker": "73320efc.b9ffe",
        "x": 150,
        "y": 200,
        "wires": [
            [
                "911c0f1a.bcbde"
            ]
        ]
    },
    {
        "id": "911c0f1a.bcbde",
        "type": "json",
        "z": "6e8e535b.50250c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 350,
        "y": 200,
        "wires": [
            [
                "2ad12393.c8f65c"
            ]
        ]
    },
    {
        "id": "2ad12393.c8f65c",
        "type": "function",
        "z": "6e8e535b.50250c",
        "name": "Filter Sensor",
        "func": "var lq = Number(msg.payload.linkquality)\nvar action = msg.payload.action\nif(lq < 35){value2 = 1}\n    else if (lq >= 35 && lq < 70){value2 = 2}\n        else if (lq >= 70 && lq < 105){value2 = 3}\n            else {value2 = 4 }\n\nif (action ==\"on\"||action ==\"off\"){\n    if(action == 'on'){id = 20320,value =1 }\n        else if (action == 'off'){id = 20330 , value =1}\n            return [{\n                payload:{\n                    \"attributes\":[{\n                        \"id\":id,\n                        \"value\":value \n                        },{\n                        \"id\":20310,\n                        \"value\":value2\n                        }]\n                    }\n                },{\n                payload:{\n                    \"attribute\":{\n                        \"id\":id,\n                        \"value\":2\n                        }\n                    }\n                }\n            ]\n}\nif (action == \"brightness_move_up\"|| action ==\"brightness_move_down\"){\n    if (action == 'brightness_move_up'){id = 20340, value =1}\n        else if (action == 'brightness_move_down'){id = 20350 , value = 1}\n        flow.set(\"lastid\",id);\n            return [{\n                payload:{\n                    \"attributes\":[{\n                    \"id\":id,\n                    \"value\":value \n                    },{\n                    \"id\":20310,\n                    \"value\":value2\n                    }]\n                }\n                },null\n            ]\n}\nif (action == \"brightness_stop\"){\n    return [{\n                payload:{\n                    \"attributes\":[{\n                    \"id\":flow.get(\"lastid\"),\n                    \"value\":0 \n                    },{\n                    \"id\":20310,\n                    \"value\":value2\n                    }]\n                }\n                },null\n            ]\n}",
        "outputs": 2,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "x": 530,
        "y": 200,
        "wires": [
            [
                "ab245b77.e842d8"
            ],
            [
                "bba6c2bb.fb667"
            ]
        ]
    },
    {
        "id": "ab245b77.e842d8",
        "type": "homeeDevice",
        "z": "6e8e535b.50250c",
        "virtual-homee": "",
        "name": "IKEA TRADFRI Switch",
        "nodeId": "20300",
        "showNodeId": false,
        "profile": "24",
        "icon": "default",
        "attributes": [
            {
                "instance": 0,
                "minimum": 0,
                "maximum": 200,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "unit": "",
                "step_value": 1,
                "editable": 0,
                "state": 1,
                "last_changed": 1572873723,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "data": "",
                "type": 33,
                "id": 20310,
                "node_id": 20300
            },
            {
                "state": 1,
                "instance": 0,
                "minimum": 1,
                "maximum": 2,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "data": "",
                "unit": "n%2Fa",
                "step_value": 1,
                "editable": 0,
                "last_changed": 1608121354,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "options": [],
                "type": 40,
                "id": 20320,
                "node_id": 20300
            },
            {
                "state": 1,
                "instance": 1,
                "minimum": 1,
                "maximum": 2,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "data": "",
                "unit": "n%2Fa",
                "step_value": 1,
                "editable": 0,
                "last_changed": 1608152066,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "options": [],
                "type": 40,
                "id": 20330,
                "node_id": 20300
            },
            {
                "state": 1,
                "instance": 0,
                "minimum": 0,
                "maximum": 2,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "data": "",
                "unit": "n%2Fa",
                "step_value": 1,
                "editable": 0,
                "last_changed": 1608152072,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "options": [],
                "type": 310,
                "id": 20340,
                "node_id": 20300
            },
            {
                "state": 1,
                "instance": 1,
                "minimum": 0,
                "maximum": 2,
                "current_value": 0,
                "target_value": 0,
                "last_value": 0,
                "data": "",
                "unit": "n%2Fa",
                "step_value": 1,
                "editable": 0,
                "last_changed": 1608152083,
                "changed_by": 1,
                "changed_by_id": 0,
                "based_on": 1,
                "options": [],
                "type": 310,
                "id": 20350,
                "node_id": 20300
            }
        ],
        "statusTemplate": "",
        "x": 800,
        "y": 160,
        "wires": [
            []
        ]
    },
    {
        "id": "bba6c2bb.fb667",
        "type": "delay",
        "z": "6e8e535b.50250c",
        "name": "",
        "pauseType": "delay",
        "timeout": "500",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 800,
        "y": 220,
        "wires": [
            [
                "ab245b77.e842d8"
            ]
        ]
    },
    {
        "id": "73320efc.b9ffe",
        "type": "mqtt-broker",
        "name": "",
        "broker": "192.168.178.50",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": false,
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    }
]
2 „Gefällt mir“

Vielen Dank @Micha. Das klappt super und genau wie ich es mir vorgestellt habe. :slight_smile:

Jetzt muss ich mein HG nur noch so hinbekommen, dass so lange gedimmt wird wie ich den Taster halte.

Da scheint noch was zu fehlen. Momentan wird immer nur 1% gedimmt.

1 „Gefällt mir“

Du musst das HG sich selber abspielen lassen und als Bedingung longpress.

Snowier dann so lange gesinnt bis du los lässt.
Alsternativ geht das auch über NR mit nem kleinen Flow.

1 „Gefällt mir“

Hm, wie meinst du das mit dem HG? Also mit dem selbst abspielen?

1 „Gefällt mir“

Abspiel Button als Auslöser und als Aktion musst du dann spiele HG ab wählen.

Hm, hast du ein Beispiel?

Ich kann bei den Aktionen das HG zwar selbst Auswählen, aber nur stoppen, deaktivieren oder aktivieren.

1 „Gefällt mir“

So meine ich das.

2 „Gefällt mir“

Jetzt hats geklappt. So hatte ich das auch.

Allerdings konnte ich bei den Aktionen das HG noch nicht abspielen.
Ich musste es erst einmal mit dem Auslöser „Abspielen“ abspeichern. Danach wieder bearbeiten und dann konnte ich bei den Aktionen auch „Abspielen“ auswählen.

Danke noch mal. :slight_smile:

Kann ich auch nen Doppelklick nutzen per HG?

1 „Gefällt mir“