Hei
Er i gang med å utforske automasjoner i FH og TP, gøy når det funker, og irriterende når man ikke får det til å funke som tenkt
Har satt opp noen push notifikasjoner for temeratur og luftfuktighet, f.eks når luftfuktighet er >65%. Hvordan kan jeg unngå å få ny push notification hver gang det er en ny endring etter valgt verdi er oppnådd? Slik den er nå varsler den når luftfuktighet passerer 65%, og nytt varsel ved f.eks 65,2, 65,5, 65,8, 65,4, 65,2 osv.
Jeg kunne tenke meg å få melding når den passerer 65%, og så ikke høre noe mer før den har vært under, og overstiger valgt verdi igjen, eventuelt et nytt varsel ved f.eks 70%.
Forslag mottas med takk.
Sett en variabel til true etter push notifikasjon, og legg inn variabelen i en OR blokk etter trigger, i sammen med kriterie for nivå du måler og AND mellom disse. Da får du true ut av OR blokk, når du ikke har fått første push notifikasjon over angitt nivå. False utgangen av OR knytter du opp mot en set variabel blokk og setter variabelen du laget først i innlegget mitt, til false.
Kunne du forklart denne litt mer detaljert? Er en OR blokk det samme som en IF swich?
Blir ganske likt som flyten min for solskjerming. Der ønsker jeg at solskjermene går opp/ned basert på lysstyrke, men ikke dersom jeg har overstyrt dette selv. Det er løypen til venstre som er mest interessant her.
{
"Id": "l2cHuCaKM7ENiDM",
"ClassId": "l2cHuCaKM7ENiDM",
"Author": "",
"Version": 0,
"CreatedAt": "2022-03-15T21:15:09.937402033+01:00",
"UpdatedAt": "2022-05-26T20:45:45.189973564+02:00",
"Name": "Skjerming",
"Group": "Somfy",
"Description": "Skjerming fra lys",
"Nodes": [
{
"Id": "1",
"Type": "trigger",
"Label": "Lysstyrke ute",
"SuccessTransition": "6",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:evt/rt:dev/rn:somfy/ad:1/sv:sensor_lumin/ad:s1_0",
"Service": "sensor_lumin",
"ServiceInterface": "evt.sensor.report",
"Config": {
"ConnectorID": "",
"InputVariableType": "",
"IsValueFilterEnabled": false,
"LookupServiceNameAndLocation": false,
"PropFilterName": "",
"PropFilterValue": "",
"RegisterAsVirtualService": false,
"Timeout": 0,
"ValueFilter": {
"Value": null,
"ValueType": "float"
},
"ValueJPath": "",
"ValueJPathResultType": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": null
},
"Ui": {
"nodeType": "",
"x": 225,
"y": 166
},
"TypeAlias": "Trigger"
},
{
"Id": "2",
"Type": "if",
"Label": "If home",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": true,
"LeftVariableName": "fh.home.mode",
"Operand": "eq",
"RightVariable": {
"Value": "home",
"ValueType": "string"
}
}
],
"FalseTransition": "",
"TrueTransition": "3"
},
"Ui": {
"nodeType": "",
"x": 224,
"y": 509
},
"TypeAlias": "If condition"
},
{
"Id": "3",
"Type": "if",
"Label": "Lysstyrke > 20000",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "",
"Operand": "gt",
"RightVariable": {
"Value": 20000,
"ValueType": "float"
}
}
],
"FalseTransition": "7",
"TrueTransition": "5"
},
"Ui": {
"nodeType": "",
"x": 80,
"y": 689
},
"TypeAlias": "If condition"
},
{
"Id": "4",
"Type": "set_variable",
"Label": "Set screen_down",
"SuccessTransition": "13",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": true,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "screen_down",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 72,
"y": 1038
},
"TypeAlias": "Set variable"
},
{
"Id": "5",
"Type": "if",
"Label": "If not screen_down",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "screen_down",
"Operand": "eq",
"RightVariable": {
"Value": false,
"ValueType": "bool"
}
}
],
"FalseTransition": "",
"TrueTransition": "4"
},
"Ui": {
"nodeType": "",
"x": 76,
"y": 868
},
"TypeAlias": "If condition"
},
{
"Id": "6",
"Type": "set_variable",
"Label": "Set last_lumin_outside",
"SuccessTransition": "2",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": 0,
"ValueType": ""
},
"IsVariableInMemory": false,
"Name": "last_lumin_outside",
"UpdateGlobal": true,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 220,
"y": 338
},
"TypeAlias": "Set variable"
},
{
"Id": "7",
"Type": "if",
"Label": "Lysstyrke < 10000",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "",
"Operand": "lt",
"RightVariable": {
"Value": 10000,
"ValueType": "float"
}
}
],
"FalseTransition": "",
"TrueTransition": "9"
},
"Ui": {
"nodeType": "",
"x": 338,
"y": 688
},
"TypeAlias": "If condition"
},
{
"Id": "8",
"Type": "set_variable",
"Label": "Set screen_up",
"SuccessTransition": "14",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": true,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "screen_up",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 335,
"y": 1038
},
"TypeAlias": "Set variable"
},
{
"Id": "9",
"Type": "if",
"Label": "If not screen_up",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "screen_up",
"Operand": "eq",
"RightVariable": {
"Value": false,
"ValueType": "bool"
}
}
],
"FalseTransition": "",
"TrueTransition": "8"
},
"Ui": {
"nodeType": "",
"x": 341,
"y": 863
},
"TypeAlias": "If condition"
},
{
"Id": "10",
"Type": "vinc_trigger",
"Label": "Home event trigger",
"SuccessTransition": "11",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"EventType": "mode",
"IsValueFilterEnabled": false,
"Timeout": 0,
"ValueFilter": ""
},
"Ui": {
"nodeType": "",
"x": 677,
"y": 163
},
"TypeAlias": "Home event"
},
{
"Id": "11",
"Type": "set_variable",
"Label": "Unset screen_down",
"SuccessTransition": "12",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": false,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "screen_down",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 671,
"y": 335
},
"TypeAlias": "Set variable"
},
{
"Id": "12",
"Type": "set_variable",
"Label": "Unset screen_up",
"SuccessTransition": "29",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": false,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "screen_up",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 672,
"y": 519
},
"TypeAlias": "Set variable"
},
{
"Id": "13",
"Type": "set_variable",
"Label": "Unset screen_up",
"SuccessTransition": "15",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": false,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "screen_up",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 71,
"y": 1221
},
"TypeAlias": "Set variable"
},
{
"Id": "14",
"Type": "set_variable",
"Label": "Unset screen_down",
"SuccessTransition": "17",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": false,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "screen_down",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 330,
"y": 1219
},
"TypeAlias": "Set variable"
},
{
"Id": "15",
"Type": "action",
"Label": "Lukk venstre solskjerm",
"SuccessTransition": "16",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:dev/rn:somfy/ad:1/sv:out_lvl_switch/ad:e1_0",
"Service": "out_lvl_switch",
"ServiceInterface": "cmd.lvl.set",
"Config": {
"DefaultValue": {
"Value": 0,
"ValueType": "int"
},
"IsVariableGlobal": false,
"Props": {},
"RegisterAsVirtualService": false,
"ResponseToTopic": "",
"VariableName": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 65,
"y": 1395
},
"TypeAlias": "Action"
},
{
"Id": "16",
"Type": "action",
"Label": "Lukk høyre solskjerm",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:dev/rn:somfy/ad:1/sv:out_lvl_switch/ad:e2_0",
"Service": "out_lvl_switch",
"ServiceInterface": "cmd.lvl.set",
"Config": {
"DefaultValue": {
"Value": 0,
"ValueType": "int"
},
"IsVariableGlobal": false,
"Props": {},
"RegisterAsVirtualService": false,
"ResponseToTopic": "",
"VariableName": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 59,
"y": 1576
},
"TypeAlias": "Action"
},
{
"Id": "17",
"Type": "action",
"Label": "Åpne venstre solskjerm",
"SuccessTransition": "18",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:dev/rn:somfy/ad:1/sv:out_lvl_switch/ad:e1_0",
"Service": "out_lvl_switch",
"ServiceInterface": "cmd.lvl.set",
"Config": {
"DefaultValue": {
"Value": 100,
"ValueType": "int"
},
"IsVariableGlobal": false,
"Props": {},
"RegisterAsVirtualService": false,
"ResponseToTopic": "",
"VariableName": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 333,
"y": 1396
},
"TypeAlias": "Action"
},
{
"Id": "18",
"Type": "action",
"Label": "Åpne høyre solskjerm",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:dev/rn:somfy/ad:1/sv:out_lvl_switch/ad:e2_0",
"Service": "out_lvl_switch",
"ServiceInterface": "cmd.lvl.set",
"Config": {
"DefaultValue": {
"Value": 100,
"ValueType": "int"
},
"IsVariableGlobal": false,
"Props": {},
"RegisterAsVirtualService": false,
"ResponseToTopic": "",
"VariableName": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 330,
"y": 1571
},
"TypeAlias": "Action"
},
{
"Id": "19",
"Type": "trigger",
"Label": "Lysstyrke fremside",
"SuccessTransition": "20",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_lumin/ad:23_0",
"Service": "sensor_lumin",
"ServiceInterface": "evt.sensor.report",
"Config": {
"IsValueFilterEnabled": false,
"LookupServiceNameAndLocation": false,
"RegisterAsVirtualService": false,
"Timeout": 0,
"ValueFilter": {
"Value": "",
"ValueType": "float"
},
"VirtualServiceGroup": "ch_0",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 1138,
"y": 159
},
"TypeAlias": "Trigger"
},
{
"Id": "20",
"Type": "if",
"Label": "If home",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": true,
"LeftVariableName": "fh.home.mode",
"Operand": "eq",
"RightVariable": {
"Value": "home",
"ValueType": "string"
}
}
],
"FalseTransition": "",
"TrueTransition": "21"
},
"Ui": {
"nodeType": "",
"x": 1134,
"y": 334
},
"TypeAlias": "If condition"
},
{
"Id": "21",
"Type": "if",
"Label": "Lysstyrke over 10000",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "",
"Operand": "gt",
"RightVariable": {
"Value": 10000,
"ValueType": "float"
}
}
],
"FalseTransition": "22",
"TrueTransition": "32"
},
"Ui": {
"nodeType": "",
"x": 1001,
"y": 529
},
"TypeAlias": "If condition"
},
{
"Id": "22",
"Type": "if",
"Label": "Lysstyrke under 200",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "",
"Operand": "lt",
"RightVariable": {
"Value": 200,
"ValueType": "float"
}
}
],
"FalseTransition": "",
"TrueTransition": "31"
},
"Ui": {
"nodeType": "",
"x": 1257,
"y": 530
},
"TypeAlias": "If condition"
},
{
"Id": "23",
"Type": "action",
"Label": "Gardin foran ned",
"SuccessTransition": "25",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:dev/rn:conbee/ad:1/sv:out_lvl_switch/ad:l3_0",
"Service": "out_lvl_switch",
"ServiceInterface": "cmd.lvl.set",
"Config": {
"DefaultValue": {
"Value": 0,
"ValueType": "int"
},
"IsVariableGlobal": false,
"Props": {},
"RegisterAsVirtualService": false,
"ResponseToTopic": "",
"VariableName": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 986,
"y": 911
},
"TypeAlias": "Action"
},
{
"Id": "24",
"Type": "action",
"Label": "Gardin foran opp",
"SuccessTransition": "27",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:dev/rn:conbee/ad:1/sv:out_lvl_switch/ad:l3_0",
"Service": "out_lvl_switch",
"ServiceInterface": "cmd.lvl.set",
"Config": {
"DefaultValue": {
"Value": 100,
"ValueType": "int"
},
"IsVariableGlobal": false,
"Props": {},
"RegisterAsVirtualService": false,
"ResponseToTopic": "",
"VariableName": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 1251,
"y": 911
},
"TypeAlias": "Action"
},
{
"Id": "25",
"Type": "set_variable",
"Label": "Set front_curtain_down",
"SuccessTransition": "28",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": true,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "front_curtain_down",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 990,
"y": 1082
},
"TypeAlias": "Set variable"
},
{
"Id": "26",
"Type": "set_variable",
"Label": "Unset front_curtain_down",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": false,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "front_curtain_down",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 1246,
"y": 1265
},
"TypeAlias": "Set variable"
},
{
"Id": "27",
"Type": "set_variable",
"Label": "Set front_curtain_up",
"SuccessTransition": "26",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": true,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "front_curtain_up",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 1251,
"y": 1083
},
"TypeAlias": "Set variable"
},
{
"Id": "28",
"Type": "set_variable",
"Label": "Unset front_curtain_up",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": false,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "front_curtain_up",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 991,
"y": 1268
},
"TypeAlias": "Set variable"
},
{
"Id": "29",
"Type": "set_variable",
"Label": "Unset front_curtain_up",
"SuccessTransition": "30",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": false,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "front_curtain_up",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 668,
"y": 694
},
"TypeAlias": "Set variable"
},
{
"Id": "30",
"Type": "set_variable",
"Label": "Unset front_curtain_down",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultValue": {
"Value": false,
"ValueType": "bool"
},
"IsVariableInMemory": false,
"Name": "front_curtain_down",
"UpdateGlobal": false,
"UpdateInputMsg": false
},
"Ui": {
"nodeType": "",
"x": 662,
"y": 862
},
"TypeAlias": "Set variable"
},
{
"Id": "31",
"Type": "if",
"Label": "If not front_curtain_up",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "front_curtain_up",
"Operand": "eq",
"RightVariable": {
"Value": false,
"ValueType": "bool"
}
}
],
"FalseTransition": "",
"TrueTransition": "24"
},
"Ui": {
"nodeType": "",
"x": 1255,
"y": 729
},
"TypeAlias": "If condition"
},
{
"Id": "32",
"Type": "if",
"Label": "If not front_curtain_down",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "front_curtain_down",
"Operand": "eq",
"RightVariable": {
"Value": false,
"ValueType": "bool"
}
}
],
"FalseTransition": "",
"TrueTransition": "23"
},
"Ui": {
"nodeType": "",
"x": 990,
"y": 728
},
"TypeAlias": "If condition"
}
],
"Settings": null,
"IsDisabled": false,
"IsDefault": false,
"ParallelExecution": "parallel"
}
Hei! Fant du ut av denne? Nettopp laget en automasjon som skal gi meg push-varsel når strømforbruket overstiger verdi 4999. Push funker, men jeg får push hvert sekund. Kunne heller tenkt meg å få push hver halvtime den er over verdien eller bare 1 varsel hver gang den overstiger verdien…
{
"Id": "0d70ba40-b5ab-11ed-ad26-b716cb863d77",
"ClassId": "0d70ba40-b5ab-11ed-ad26-b716cb863d77",
"Author": "jallaj@hotmail.com",
"Version": 0,
"CreatedAt": "2023-02-26T07:56:18.788829Z",
"UpdatedAt": "2023-02-26T08:56:18.885093502+01:00",
"Name": "når watt verdien av Tibber Pulse HAN er høyere enn 4999W",
"Group": "sensor_wattage",
"Description": "Kjør snarvei: Høyt strømforbruk! ",
"Nodes": [
{
"Id": "33",
"Type": "trigger",
"Label": "når watt verdien av Tibber Pulse HAN er høyere enn 4999W",
"SuccessTransition": "34",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:evt/rt:dev/rn:tibber/ad:1/sv:meter_elec/ad:09d3d280-3399-4ef2-a82f-a94409f92e65",
"Service": "meter_elec",
"ServiceInterface": "evt.meter.report",
"Config": {
"InputVariableType": null,
"IsValueFilterEnabled": false,
"LookupServiceNameAndLocation": false,
"PropFilterName": "unit",
"PropFilterValue": "W",
"RegisterAsVirtualService": false,
"Timeout": null,
"ValueFilter": {
"Value": null,
"ValueType": null
},
"ValueJPath": null,
"ValueJPathResultType": null,
"VirtualServiceGroup": "ch_0",
"VirtualServiceProps": {}
},
"Ui": {
"papp": {
"customValues": null,
"nodeId": "14",
"nodeName": "wattage",
"nodeType": "wattage"
},
"x": 491,
"y": 200,
"nodeType": ""
},
"TypeAlias": "Trigger",
"LastValue": "2099 W"
},
{
"Id": "34",
"Type": "if",
"Label": "",
"SuccessTransition": "35",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "tpflow",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "",
"Operand": "gt",
"RightVariable": {
"Value": 4999,
"ValueType": "float"
}
}
],
"FalseTransition": "",
"TrueTransition": "35"
},
"Ui": {
"papp": {
"customValues": null,
"nodeId": null,
"nodeName": "If",
"nodeType": "wattage"
},
"x": 646,
"y": 365,
"nodeType": ""
},
"TypeAlias": "If condition"
},
{
"Id": "35",
"Type": "action",
"Label": "Kjør snarvei: Høyt strømforbruk!",
"SuccessTransition": "36",
"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": "shortcut",
"id": 1,
"param": {},
"requestId": 882
},
"ValueType": "object"
},
"IsVariableGlobal": null,
"Props": null,
"RegisterAsVirtualService": false,
"ResponseToTopic": "pt:j1/mt:rsp/rt:app/rn:tpflow/ad:1",
"VariableName": null,
"VirtualServiceGroup": null,
"VirtualServiceProps": null
},
"Ui": {
"papp": {
"customValues": null,
"nodeId": "1",
"nodeName": "shortcuts",
"nodeType": null
},
"x": 411,
"y": 510,
"nodeType": ""
},
"TypeAlias": "Action"
},
{
"Id": "36",
"Type": "action",
"Label": "NB! Høyt strømforbruk!",
"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": "NB! Høyt strømforbruk!",
"SiteId": "d4bf02cb-6d54-476c-8106-61c1f9806262"
},
"ValueType": "object"
}
},
"Ui": {
"x": 551,
"y": 698,
"nodeType": "notification_action"
},
"TypeAlias": "Notification"
}
],
"Settings": null,
"IsDisabled": false,
"IsDefault": false,
"ParallelExecution": "parallel"
}
Dette er en variant jeg fikk av en eller annen her inne, den gir varsel dersom gitt verdi har vart i 10 minutter.
Men her kan det trikses med tider og verdier
{
"Id": "k9cdj1GKQm2cH9i",
"ClassId": "k9cdj1GKQm2cH9i",
"Author": "",
"Version": 0,
"CreatedAt": "2021-11-20T23:36:39.530778611+01:00",
"UpdatedAt": "2022-10-01T09:26:55.3946281+02:00",
"Name": "Total power monitor",
"Group": "energy",
"Description": "Continuously monitors power usage. ",
"Nodes": [
{
"Id": "1",
"Type": "trigger",
"Label": "Test trigger",
"SuccessTransition": "4",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:dev/rn:flow/ad:1/sv:out_bin_switch/ad:k9cdj1GKQm2cH9i_0",
"Service": "out_bin_switch",
"ServiceInterface": "cmd.binary.set",
"Config": {
"ConnectorID": "",
"InputVariableType": "",
"IsValueFilterEnabled": false,
"LookupServiceNameAndLocation": false,
"PropFilterName": "",
"PropFilterValue": "",
"RegisterAsVirtualService": false,
"Timeout": 0,
"ValueFilter": {
"Value": null,
"ValueType": "bool"
},
"ValueJPath": "",
"ValueJPathResultType": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": null
},
"Ui": {
"nodeType": "",
"x": 363,
"y": 194
},
"TypeAlias": "Trigger"
},
{
"Id": "2",
"Type": "time_trigger",
"Label": "Every 10 min",
"SuccessTransition": "4",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"DefaultMsg": {
"Value": "",
"ValueType": ""
},
"Expressions": [
{
"Comments": "",
"Expression": "@every 10m",
"Name": ""
}
],
"GenerateAstroTimeEvents": false,
"Latitude": 0,
"Longitude": 0,
"SunriseTimeOffset": 0,
"SunsetTimeOffset": 0
},
"Ui": {
"nodeType": "",
"x": 622,
"y": 188
},
"TypeAlias": "Time trigger"
},
{
"Id": "3",
"Type": "action",
"Label": "Query average power usage ",
"SuccessTransition": "9",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:cmd/rt:app/rn:ecollector/ad:1",
"Service": "ecollector",
"ServiceInterface": "cmd.tsdb.query",
"Config": {
"DefaultValue": {
"Value": "",
"ValueType": ""
},
"IsVariableGlobal": false,
"Props": {},
"RegisterAsVirtualService": false,
"ResponseToTopic": "pt:j1/mt:rsp/rt:app/rn:tpflow/ad:power_monitor",
"VariableName": "power_query",
"VariableType": "str_map",
"VirtualServiceGroup": "",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 496,
"y": 633
},
"TypeAlias": "Action"
},
{
"Id": "4",
"Type": "transform",
"Label": "Create power query",
"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": "power_query",
"TargetVariableType": "str_map",
"Template": "{\n \"proc_id\": \"1\",\n \"query\":\"SELECT mean(\\\"value\\\") AS \\\"mean_value\\\" FROM \\\"gen_raw\\\".\\\"electricity_meter_power\\\" WHERE time > now()-10m AND \\\"dev_id\\\"='{{ setting \"han.dev_id\" }}'\"\n}",
"TransformType": "template",
"ValueMapping": [],
"XPathMapping": []
},
"Ui": {
"nodeType": "",
"x": 512,
"y": 404
},
"TypeAlias": "Transform"
},
{
"Id": "6",
"Type": "transform",
"Label": "Extract average power",
"SuccessTransition": "11",
"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,
"IsTargetVariableInMemory": true,
"Path": "$Results[0].Series[0].values[0][1]",
"TargetVariableName": "average_power",
"TargetVariableType": "float",
"UpdateInputVariable": false
}
]
},
"Ui": {
"nodeType": "",
"x": 479,
"y": 1066
},
"TypeAlias": "Transform"
},
{
"Id": "9",
"Type": "receive",
"Label": "Wait for power report",
"SuccessTransition": "6",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:rsp/rt:app/rn:tpflow/ad:power_monitor",
"Service": "ecollector",
"ServiceInterface": "evt.tsdb.query_report",
"Config": {
"IsValueFilterEnabled": false,
"LookupServiceNameAndLocation": false,
"RegisterAsVirtualService": false,
"Timeout": 120,
"ValueFilter": {
"Value": "",
"ValueType": "bool"
},
"VirtualServiceGroup": "ch_0",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "",
"x": 491,
"y": 841
},
"TypeAlias": "Wait event"
},
{
"Id": "11",
"Type": "iftime",
"Label": "Define peek hours",
"SuccessTransition": "13",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"Action": "a",
"From": "00:00",
"To": "23:59",
"Weekday": "1"
},
{
"Action": "a",
"From": "00:00",
"To": "23:59",
"Weekday": "2"
},
{
"Action": "a",
"From": "00:00",
"To": "23:59",
"Weekday": "3"
},
{
"Action": "a",
"From": "00:00",
"To": "23:59",
"Weekday": "4"
},
{
"Action": "a",
"From": "00:00",
"To": "23:59",
"Weekday": "5"
},
{
"Action": "a",
"From": "00:00",
"To": "23:59",
"Weekday": "6"
},
{
"Action": "a",
"From": "00:00",
"To": "23:59",
"Weekday": "0"
}
]
},
"Ui": {
"nodeType": "",
"x": 456,
"y": 1260
},
"TypeAlias": "Time filter"
},
{
"Id": "12",
"Type": "action",
"Label": "High power usage during peek hour ",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:evt/rt:app/rn:kind_owl/ad:1",
"Service": "kind-owl",
"ServiceInterface": "evt.notification.report",
"Config": {
"DefaultValue": {
"Value": {
"EventName": "custom",
"MessageContent": "Reduce power usage",
"SiteId": ""
},
"ValueType": "object"
},
"IsVariableGlobal": false,
"Props": {},
"RegisterAsVirtualService": false,
"VariableName": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": {}
},
"Ui": {
"nodeType": "notification_action",
"x": 402,
"y": 1664
},
"TypeAlias": "Notification"
},
{
"Id": "13",
"Type": "if",
"Label": "Set power limit",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableName": "",
"Operand": "gt",
"RightVariable": {
"Value": 5000,
"ValueType": "float"
}
}
],
"FalseTransition": "",
"TrueTransition": "12"
},
"Ui": {
"nodeType": "",
"x": 425,
"y": 1461
},
"TypeAlias": "If condition"
}
],
"Settings": {
"han.dev_id": {
"Value": "180",
"ValueType": "string"
}
},
"IsDisabled": true,
"IsDefault": false,
"ParallelExecution": "parallel"
}
Alternativt kan du også sette en wait-node på slutten av flowen hvor du spesifiserer tid den skal “sove”, og endre at flow skal “keep_first instance” i stedet for parallel (Dette kan endres ved å klikke på pensel ikonet opp med tittelen av flowen).
Da unngår du at snarvei og notifikasjon kjøres hver gang den mottar rapport fra Tibber HAN (som er relativt ofte).
Det finnes også mer avanserte måter å gjøre det på med variabler om du ønsker å dykke ned i det også. F.eks at du lager en flow_variabel med “reacted_on” eller noe sånt som er en bool. Så ved første gang den overgår og kjører snarvei, så oppdateres variabelen til true, og if noden må da filtere ut at variabelen er false. Så må du også legge inn noe logikk som “resetter” variabelen tilbake, f.eks tid eller en mye lavere rapportert verdi.
Takk for tips. Jo enklere, jo bedre for min del
Blir dette korrekt satt opp eller mangler det noe på slutten her?
Ser du har fjernet action for å kjøre snarvei, så den flowen du har laget nå vil kun gi deg push varsling, men ser ellers riktig ut
Aha - takk! Jeg ønsker i grunn en notifikasjon i timeline og en push, så jeg opprettet en snarvei bare for å få den inn i Thingsplex, snarveien i seg selv er tom.
Hvis jeg skjønner riktig nå da, så trenger jeg egentlig ikke delay-noden, kun rate limit-node mellom if- og notifikasjon-nodes;
Da tror jeg at jeg nå har stilt inn at x-antall watt skal utløse push og timeline notifikasjon hvert 4 min (240 seconds, bare for å teste) så lenge den er over nivået jeg har satt som x-faktor.
Hva gjør egentlig de forskjellige flow-innstillingene?
Parallel vil kjøre events mottatt på trigger noden i parallel.
Keep already running instance and skip new instance, kan brukes f.eks som eksempelet over der du venter på noe eller ønsker å agere kun på første event.
Keep new instance and abort already instance brukes f.eks i “når det er bevegelse slå på lyset” flows. Da vil du at “timeren” for når det automatisk skal slås av resettes dersom det oppdages en ny bevegelse.