ID Lock 150

Prøve å sette opp en flow basert på evt.lock.reoport
Denne sender tilbake et Object som ser slik ut:
{
“ctime”: “2020-10-29T21:21:01+0100”,
“props”: {
“timeout_s”: “254”,
“unsecured_desc”: “”
},
“serv”: “door_lock”,
“tags”: [],
“type”: “evt.lock.report”,
“val”: {
“bolt_is_locked”: false,
“door_is_closed”: false,
“is_secured”: false,
“latch_is_closed”: false
},
“val_t”: “bool_map”
}

Hvordan får jeg til å sette opp filtrering på f.eks val:{“is_secured”:true}
slik at den ikke trigger bare på evt.lock.report

Høyrest ut som det kan funka med ein transform node etterfulgt av if.

Hva er output’n til transforme noden? Ser den har en grønn og en rød output.
Og hva er orange og rød output på en triggernode?

Så langt eg forstår:

  • Grøn = normal
  • Oransje = timeout
  • Raud = feil

Du kan lese meir her:

1 Like

Men hva med transform noden? Setter man input = input, legger inn json strengen, og får ut resultatet av json filteret?

Her er en enkel kode som trigger på door event, og prøver å transformere objektet den får med json path. Men jeg får bare et objekt ut fra tranform noden, den får ikke gjort det om til f.eks string eller boolen.

Btw, hvor finner jeg dokumentasjonen?

{
  "Id": "xxx",
  "ClassId": "xxx",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2020-11-12T23:11:24.84426589+01:00",
  "UpdatedAt": "2020-11-12T23:11:24.84426589+01:00",
  "Name": "Test",
  "Group": "Door",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "Door event",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "xxx",
      "Service": "door_lock",
      "ServiceInterface": "evt.lock.report",
      "Config": {
        "InputVariableType": "",
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": null,
          "ValueType": ""
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": null
      },
      "Ui": {
        "x": 70,
        "y": 170,
        "nodeType": ""
      }
    },
    {
      "Id": "2",
      "Type": "transform",
      "Label": "var - is_secured",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "SuccessTransition": "",
      "ErrorTransition": "",
      "Config": {
        "TargetVariableName": "",
        "TargetVariableType": "",
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "TransformType": "jpath",
        "Rtype": "var",
        "IsRVariableGlobal": false,
        "IsLVariableGlobal": false,
        "Expression": "",
        "RValue": {
          "ValueType": "int",
          "Value": 0
        },
        "RVariableName": "",
        "LVariableName": "",
        "ValueMapping": [],
        "XPathMapping": [
          {
            "Path": "$.val.is_secured",
            "TargetVariableName": "",
            "TargetVariableType": "",
            "IsTargetVariableGlobal": false,
            "UpdateInputVariable": false
          }
        ],
        "Template": ""
      },
      "Ui": {
        "x": 70,
        "y": 324,
        "nodeType": ""
      }
    }
  ],
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": ""
}

Jepp,

JSON strengen blir då $.val.is_secured.

PS: Bruk gjerne Preformatted text når du legg ut kode på forumet så kan folk kopiera den…

2 Likes

Du set betingelsen i ein if-node, som her:

{
  "Id": "RwqEd8MBcK9d1qo",
  "ClassId": "xxx",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2020-11-12T23:24:12.102542533+01:00",
  "UpdatedAt": "2020-11-12T23:24:12.102542533+01:00",
  "Name": "Test",
  "Group": "Door",
  "Description": "",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "Door event",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "RwqEd8MBcK9d1qo",
      "Service": "door_lock",
      "ServiceInterface": "evt.lock.report",
      "Config": {
        "InputVariableType": "",
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": null,
          "ValueType": ""
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": null
      },
      "Ui": {
        "nodeType": "",
        "x": 153,
        "y": 189
      }
    },
    {
      "Id": "2",
      "Type": "transform",
      "Label": "var - is_secured",
      "SuccessTransition": "3",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": false,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "",
        "TargetVariableType": "",
        "Template": "",
        "TransformType": "jpath",
        "ValueMapping": [],
        "XPathMapping": [
          {
            "IsTargetVariableGlobal": false,
            "Path": "$.val.is_secured",
            "TargetVariableName": "",
            "TargetVariableType": "",
            "UpdateInputVariable": false
          }
        ]
      },
      "Ui": {
        "nodeType": "",
        "x": 191,
        "y": 381
      }
    },
    {
      "Id": "3",
      "Type": "if",
      "Label": "input=true",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "SuccessTransition": "",
      "ErrorTransition": "",
      "Config": {
        "TrueTransition": "4",
        "FalseTransition": "",
        "Expression": [
          {
            "Operand": "eq",
            "LeftVariableName": "",
            "LeftVariableIsGlobal": false,
            "RightVariable": {
              "Value": true,
              "ValueType": "bool"
            },
            "BooleanOperator": ""
          }
        ]
      },
      "Ui": {
        "x": 180,
        "y": 563,
        "nodeType": ""
      }
    },
    {
      "Id": "4",
      "Type": "action",
      "Label": "Push notification",
      "Address": "pt:j1/mt:evt/rt:app/rn:kind_owl/ad:1",
      "Service": "kind-owl",
      "ServiceInterface": "evt.notification.report",
      "SuccessTransition": "",
      "ErrorTransition": "",
      "Config": {
        "VariableName": "",
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {},
        "DefaultValue": {
          "Value": {
            "EventName": "custom",
            "MessageContent": "Hello world",
            "SiteId": "B5309129-E8BB-4CD2-9A04-056E7C47EDCA"
          },
          "ValueType": "object"
        }
      },
      "Ui": {
        "x": 152,
        "y": 738,
        "nodeType": "notification_action"
      }
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}
1 Like

Men jeg får ikke til å bruke en IF node pga at den returnerer et objekt, ikke en variabel.

2020-11-15 19:28:34.878 debug flow ------Flow Door locked started , num of instances = 1 -----------
2020-11-15 19:28:34.879 debug flow Next node id = 2
2020-11-15 19:28:34.88 info fnode Executing Node . Name = var - is_secured
2020-11-15 19:28:34.881 info fnode Transform type = jpath
2020-11-15 19:28:34.881 info fnode Doing XPATH transformation
2020-11-15 19:28:34.882 info fnode Extracted value : true
2020-11-15 19:28:34.883 debug flow Next node id = 3
2020-11-15 19:28:34.884 error flow Node executed with error . Doing error transition to . Error : shqsFPJJMUZCqsu Right and left of expression have different types
2020-11-15 19:28:34.884 debug flow Next node id =
2020-11-15 19:28:34.898 debug flow ------Flow Door locked completed , num of instances = 0 -----------

OK, kva med å prøva å lagra utputten frå transform noden i ein eigendefinert variabel i staden for inputvariabelen, og relatera if-betingelsen til denne istaden?

Edit: Har prøvd mitt eige forslag på TRW sin kode, men får det ikkje til. Ser ut som TRW har rett i at det er eit objekt - korleis konverterer ein til bool så ein kan bruka det i ein if-setning?

Den henter bare ut verdien og ikke hvilken type det er (string/bool/int osv). Det blir satt i transformnode 2. Mulig det skal være mulig å gjøre det i første node, men fikk det ikke til her og nå.

Kan du prøve denne? :slightly_smiling_face: Du må kun endre adressen på trigger noden. Fra 39_0 til addressen på din lås på Advanced service binding

Denne setter hjemmemodus om døren blir låst opp i bortemodus :slight_smile:

{
  "Id": "re5yNE05vMXqe5W",
  "ClassId": "g2FQ08dkJWoHuun",
  "Author": "espenh.no",
  "Version": 0,
  "CreatedAt": "2020-07-24T22:36:18.507632407+02:00",
  "UpdatedAt": "2020-07-24T22:36:18.507632407+02:00",
  "Name": "home if door is unlocked in away",
  "Group": "doorlock_test",
  "Description": "home if door is unlocked in away",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "doorlock",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:door_lock/ad:39_0",
      "Service": "door_lock",
      "ServiceInterface": "evt.lock.report",
      "Config": {
        "InputVariableType": "",
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": null,
          "ValueType": ""
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": null
      },
      "Ui": {
        "nodeType": "",
        "x": 153,
        "y": 199
      }
    },
    {
      "Id": "2",
      "Type": "transform",
      "Label": "extract value",
      "SuccessTransition": "3",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": false,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "",
        "TargetVariableType": "",
        "Template": "",
        "TransformType": "jpath",
        "ValueMapping": [],
        "XPathMapping": [
          {
            "IsTargetVariableGlobal": false,
            "Path": "$.val.is_secured",
            "TargetVariableName": "",
            "TargetVariableType": "",
            "UpdateInputVariable": false
          }
        ]
      },
      "Ui": {
        "nodeType": "",
        "x": 177,
        "y": 364
      }
    },
    {
      "Id": "3",
      "Type": "transform",
      "Label": "generate variable",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": false,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "is_secured",
        "TargetVariableType": "bool",
        "Template": "{{.Variable}}",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 246,
        "y": 558
      }
    },
    {
      "Id": "4",
      "Type": "if",
      "Label": "if is_secured is false and mode is away",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "and",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "is_secured",
            "Operand": "eq",
            "RightVariable": {
              "Value": false,
              "ValueType": "bool"
            }
          },
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "away",
              "ValueType": "string"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "5"
      },
      "Ui": {
        "nodeType": "",
        "x": 288,
        "y": 740
      }
    },
    {
      "Id": "5",
      "Type": "action",
      "Label": "Home action",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:vinculum/ad:1",
      "Service": "vinculum",
      "ServiceInterface": "cmd.pd7.request",
      "Config": {
        "DefaultValue": {
          "Value": {
            "cmd": "set",
            "component": "mode",
            "id": "home",
            "param": {},
            "requestId": 1
          },
          "ValueType": "object"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "pt:j1/mt:rsp/rt:app/rn:tpflow/ad:1",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "vinc_action",
        "x": 322,
        "y": 895
      }
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "keep_first"
}

Om det ikke virker; prøv å opprett en variabel med navn is_secured & type bool

2 Likes

Hei Espen.

Jeg har lagt inn spørsmål om tilsvarende før, og du svarte. Men jeg ble aldri klok på det uansett. Forstår at man må transformere svare til en bolansk verdi, men ditt forslag her fungerer ikke for. Kan du utdype mer hvordan gå frem for å lage riktig verdi ut av første transformasjon i transformasjon 2. Jeg ønsker å skru på lyset når døren låses opp.

Så: Hvor kan jeg les meg mer opp om programmeringen bak? Programmeringsspråket osv.

På forhånd takk for stødig og god support:-)

Vennlig hilsen

Magne

Kan du dele denne koden på nytt @espen ? Får ikke importert den