Lese en verdi fra dimmer til variabel

Har forsøkt en del på dette og blir ikke klok på hvordan Thingsplex fungerer.

Jeg har en Heatit z-push bryter som jeg bruker for å aktivere en scene. Når jeg holder knapp 1 inne (1.2) trigges scenen, jeg kjører så en action for å lese dimmenivå og deretter en node for sette variabel DimLevel = input variable. Men da settes variabelen til 1.2 som er verdien av triggeren, ikke verdien som leses ut fra dimmeren i action-noden.

Noen som kan hjelpe meg et steg videre her?

En Action sender vel cmd.lvl.get_report til dimmeren, men lytter ikke på svaret. Derfor må du lage en Trigger som lytter på evt.lvl.report. Tror jeg, det er i alle fall sånn jeg har gjort det ved tidligere forsøk. Har dog stort sett endt opp med å lagre siste verdi i en variabel isteden.

1 Like

kan også bruke en receive node som er “wait for event”

1 Like

Er da slik at jeg først kjører en action med cmd.lvl.get og deretter en node wait for event hvor jeg da fanger opp evt.lvl.report og deretter en node for å putte denne i en variabel, eventuelt bruke verdien i en transform?

Målet er at denne scenen skal øke lysstyrken når jeg holder knappen inne på en heatit z-push.

Det stemmer. En enkelt node kan ikke både sende OG motta. I tillegg er det bare Trigger-noder som mottar.

Det er fordeler og ulemper med de to metodene nevnt over, men for nå burde du bruke Receive (Wait for event) og se om det funker for deg.

Jeg har et eksempel for “wait for event” node som kan deles når neste versjon av tpflow kommer :slight_smile:

@TorNeset Om du skal bruke en Heatit z-push for å dimme opp og dimme ned verdi, så kan du bare assosiere enheten til lys(ene) og virker da som en impuls-dimmer :slight_smile:

@espen - har vært innom assosiering, men samtidig bruker jeg knappen til både binær switcher og spotlys. Fikk ikke dette til å funke bra.

Synes for øvrig direkte assosiasjoner er noe herk fordi de er håpløse å finne tilbake til når logikken blir distribuert ut. Spesielt når en node ryker og må erstattes. Da må man huske eller være flink til å dokumentere oppsettet (jeg er ikke spesielt god på begge deler). Når man har det sentralt så er det mulig å finne raskt tilbake til hvordan det var satt opp og ikke minst justere virkemåte avhengig av moduser.

1 Like

@TorNeset Her er et eksempel jeg har laget på en enkel dimmer med bruk av Receive, til inspirasjon:

4 Likes

Tusen takk - akkurat hva jeg ønsket meg :star_struck::+1::clap:

Kan du dele koden @martinskre ? Jeg er på utkikk etter noe lignende for dimming av lys på kvelden. Har forsøkt å kjøre get_report etterfulgt av evt.lvt.report i en wait event, men får ikke satt variabelen min til rett verdi så skulle vært morsomt å sammenlignet oppsettet .

@stian Legger ved koden til slutt.

Jeg tror ikke det er så mye du vil få ut av koden angående wait event, men jeg har noen tanker om hva det kan være du opplever.

 
Noen devicer sender rett og slett aldri noen report tilbake. Dette kan du se i Message stream.

Åpne ett vindu med Message stream, og et annet vindu hvor du går inn i Thingsplex → Adapters → (din device) → Services og finner Get Report knappen for den servicen du ønsker å sjekke.
Når du trykker på den knappen så skjer det samme som når du bruker en Action node i flow. Da vil alt dukke opp i Message stream og du kan da se om devicen i det hele tatt sender en report tilbake.

Hvis devicen ikke gir deg noen report (og du er sikker på at det ikke er en nettverksfeil) kan det være andre metoder du kan bruke, avhengig av hva du ønsker å oppnå.

 
Et annet problem jeg har oppplevd er når flowen gjør noe uventet pga. ParallelExecution-instillingen. Hvis du f.eks. har ParallelExecution som keep_last er det ikke sikkert at wait event vil fungere optimalt (mer om parallell i denne tråden.) Dobbeltsjekk dette.

 
Koden:

Variabler:
  • dimLevel (float)
  • buttonHold (bool)
{
  "Id": "0YlOaE5BcZUI8Hq",
  "ClassId": "0YlOaE5BcZUI8Hq",
  "Author": "martinskre",
  "Version": 0,
  "CreatedAt": "2021-02-06T19:31:25.609853417+01:00",
  "UpdatedAt": "2021-02-06T19:45:47.287056236+01:00",
  "Name": "dimmer_eksempel",
  "Group": "eksempel",
  "Description": "",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "Lytter etter knappetrykk",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "ConnectorID": "",
        "InputVariableType": "",
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": null,
          "ValueType": ""
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": null
      },
      "Ui": {
        "nodeType": "",
        "x": 400,
        "y": 165
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "2",
      "Type": "if",
      "Label": "Knappen \"holdes inne\"",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "",
            "Operand": "eq",
            "RightVariable": {
              "Value": "1.2",
              "ValueType": "string"
            }
          }
        ],
        "FalseTransition": "3",
        "TrueTransition": "4"
      },
      "Ui": {
        "nodeType": "",
        "x": 285,
        "y": 340
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "3",
      "Type": "if",
      "Label": "Knappen er \"released\"",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "",
            "Operand": "eq",
            "RightVariable": {
              "Value": "1.3",
              "ValueType": "string"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "5"
      },
      "Ui": {
        "nodeType": "",
        "x": 530,
        "y": 340
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "4",
      "Type": "set_variable",
      "Label": "set [buttonHold] = true",
      "SuccessTransition": "6",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": true,
          "ValueType": "bool"
        },
        "Name": "buttonHold",
        "UpdateGlobal": false,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 290,
        "y": 525
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "5",
      "Type": "set_variable",
      "Label": "set [buttonHold] = false",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": false,
          "ValueType": "bool"
        },
        "Name": "buttonHold",
        "UpdateGlobal": false,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 535,
        "y": 525
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "6",
      "Type": "action",
      "Label": "Get level report",
      "SuccessTransition": "7",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": ""
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 290,
        "y": 700
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "7",
      "Type": "receive",
      "Label": "Receive level report",
      "SuccessTransition": "8",
      "TimeoutTransition": "9",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "RegisterAsVirtualService": false,
        "Timeout": 10,
        "ValueFilter": {
          "Value": "",
          "ValueType": "bool"
        },
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 400,
        "y": 880
      },
      "TypeAlias": "Wait event"
    },
    {
      "Id": "8",
      "Type": "set_variable",
      "Label": "[dimLevel] = inputvar",
      "SuccessTransition": "10",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": 0,
          "ValueType": ""
        },
        "Name": "",
        "UpdateGlobal": false,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 285,
        "y": 1070
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "9",
      "Type": "action",
      "Label": "Error: Dimmer is not responding...",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:time_owl/ad:1",
      "Service": "time_owl",
      "ServiceInterface": "cmd.timeline.set",
      "Config": {
        "DefaultValue": {
          "Value": {
            "message_en": "Error: Dimmer is not responding...",
            "message_no": "-",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 530,
        "y": 1070
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "10",
      "Type": "if",
      "Label": "if [buttonHold] == true",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "buttonHold",
            "Operand": "eq",
            "RightVariable": {
              "Value": true,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "11"
      },
      "Ui": {
        "nodeType": "",
        "x": 245,
        "y": 1245
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "11",
      "Type": "if",
      "Label": "if [dimLevel] < 100",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "dimLevel",
            "Operand": "lt",
            "RightVariable": {
              "Value": 100,
              "ValueType": "float"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "12"
      },
      "Ui": {
        "nodeType": "",
        "x": 250,
        "y": 1420
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "12",
      "Type": "transform",
      "Label": "Increment [dimLevel] +5",
      "SuccessTransition": "13",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "dimLevel + 5",
        "IsLVariableGlobal": false,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "LVariableName": "",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "dimLevel",
        "TargetVariableType": "float",
        "Template": "",
        "TransformType": "calc",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 250,
        "y": 1595
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "13",
      "Type": "action",
      "Label": "Set dimmer to [dimLevel]",
      "SuccessTransition": "14",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": ""
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 250,
        "y": 1775
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "14",
      "Type": "wait",
      "Label": "Dimmer speed",
      "SuccessTransition": "10",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 50,
      "Ui": {
        "nodeType": "",
        "x": 250,
        "y": 1950
      },
      "TypeAlias": "Delay"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}

Hmm, det er noe du gjør anderledes enn meg, for jeg får ikke satt variablene mine korrekt… Har du mulighet til å se på koden min hva som blir feil?

{
  "Id": "FaY0vf6GOH7Wvam",
  "ClassId": "FaY0vf6GOH7Wvam",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2021-02-06T14:53:21.226075164+01:00",
  "UpdatedAt": "2021-02-07T16:44:54.842680421+01:00",
  "Name": "dimme ned lys steg",
  "Group": "1",
  "Description": "dimme ned lys stegvis på kveld",
  "Nodes": [
    {
      "Id": "3",
      "Type": "vinc_trigger",
      "Label": "Home event trigger",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "shortcut",
        "IsValueFilterEnabled": false,
        "Timeout": 0,
        "ValueFilter": "3"
      },
      "Ui": {
        "nodeType": "",
        "x": 428,
        "y": 217
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "4",
      "Type": "action",
      "Label": "Get level report",
      "SuccessTransition": "13",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:out_lvl_switch/ad:17_0",
      "Service": "out_lvl_switch",
      "ServiceInterface": "cmd.lvl.get_report",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": "null"
        },
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 439,
        "y": 429
      },
      "TypeAlias": "Action",
      "LastValue": "3"
    },
    {
      "Id": "7",
      "Type": "transform",
      "Label": "dimLevel - 20 ",
      "SuccessTransition": "14",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "dimLevel-20",
        "IsRVariableGlobal": false,
        "LVariableName": "",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "light",
        "TargetVariableType": "int",
        "Template": "",
        "TransformType": "calc",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 430,
        "y": 964
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "12",
      "Type": "set_variable",
      "Label": "set variable",
      "SuccessTransition": "7",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": 0,
          "ValueType": ""
        },
        "Name": "dimLevel",
        "UpdateGlobal": false,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 438,
        "y": 813
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "13",
      "Type": "receive",
      "Label": "get dimValue",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:out_lvl_switch/ad:17_0",
      "Service": "out_lvl_switch",
      "ServiceInterface": "evt.lvl.report",
      "SuccessTransition": "12",
      "ErrorTransition": "",
      "Config": {
        "Timeout": 120,
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {},
        "RegisterAsVirtualService": false,
        "LookupServiceNameAndLocation": false,
        "ValueFilter": {
          "Value": "",
          "ValueType": "int"
        },
        "IsValueFilterEnabled": false
      },
      "Ui": {
        "x": 431,
        "y": 619,
        "nodeType": ""
      },
      "TypeAlias": "Wait event"
    },
    {
      "Id": "14",
      "Type": "action",
      "Label": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:out_lvl_switch/ad:17_0",
      "Service": "out_lvl_switch",
      "ServiceInterface": "cmd.lvl.set",
      "SuccessTransition": "",
      "ErrorTransition": "",
      "Config": {
        "VariableName": "dimLevel",
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {},
        "ResponseToTopic": "",
        "DefaultValue": {
          "Value": "",
          "ValueType": "int"
        },
        "VariableType": "int"
      },
      "Ui": {
        "x": 438,
        "y": 1190,
        "nodeType": ""
      },
      "TypeAlias": "Action"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "keep_first"
}

@stian Eneste jeg kan se er at Transform-noden har en feil. Der har du Target variable (Result) satt til variabelen “light” hvor den i forhold til resten burde vært “dimLevel”.

Har du husket å faktisk lage variabelen? Gå inn på en Set variable node og trykk deretter på Add for å lage lokale variabler.