Collecting multiple values - cflurin/node-red-contrib-dsm GitHub Wiki

Often you have to collect multiple values before you can control devices or generally go ahead with the flow. Although node-red offers several ways to achieve this task using the dsm node can be an alternativ solution.

multi-values-7 2

Configuration

{
    "currentState": "empty",
    "states": {
        "empty": {
            "setData": "filling"
        },
        "filling": {
            "setData": "filling",
            "getData": "empty"
        }
    },
    "data": {
        "indoor": 0,
        "outdoor": 0
    },
    "methods": {
        "setData": "sm.data[msg.payload.name]=msg.payload.value;output=false;",
        "getData": "msg.payload=RED.util.cloneMessage(sm.data);sm.data.indoor=0;sm.data.outdoor=0;output=true;"
    }
}

Flow

[{"id":"48905e8f.4fe55","type":"inject","z":"57ef434a.058a6c","name":"indoor","topic":"setData","payload":"{\"name\": \"indoor\", \"value\": 20.5}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":4080,"wires":["c4e4f5d.9ae6508"](/cflurin/node-red-contrib-dsm/wiki/"c4e4f5d.9ae6508")},{"id":"a14c136c.5d301","type":"inject","z":"57ef434a.058a6c","name":"getData","topic":"getData","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":4160,"wires":["c4e4f5d.9ae6508"](/cflurin/node-red-contrib-dsm/wiki/"c4e4f5d.9ae6508")},{"id":"c4e4f5d.9ae6508","type":"dsm","z":"57ef434a.058a6c","name":"multiple values","sm_config":"{\n    \"currentState\": \"empty\",\n    \"states\": {\n        \"empty\": {\n            \"setData\": \"filling\"\n        },\n        \"filling\": {\n            \"setData\": \"filling\",\n            \"getData\": \"empty\"\n        }\n    },\n    \"data\": {\n        \"indoor\": 0,\n        \"outdoor\": 0\n    },\n    \"methods\": {\n        \"setData\": \"sm.data[msg.payload.name]=msg.payload.value;output=false;\",\n        \"getData\": \"msg.payload=RED.util.cloneMessage(sm.data);sm.data.indoor=0;sm.data.outdoor=0;output=true;\"\n    }\n}\n","x":310,"y":4120,"wires":["838c9686.359db8"](/cflurin/node-red-contrib-dsm/wiki/"838c9686.359db8")},{"id":"3c5e9f76.98b9","type":"inject","z":"57ef434a.058a6c","name":"outdoor","topic":"setData","payload":"{\"name\": \"outdoor\", \"value\": 27.2}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":4120,"wires":["c4e4f5d.9ae6508"](/cflurin/node-red-contrib-dsm/wiki/"c4e4f5d.9ae6508")},{"id":"838c9686.359db8","type":"debug","z":"57ef434a.058a6c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","x":490,"y":4120,"wires":[]}]