Hva har du automatisert i dag?

Her er den.
Den er nok ikke perfeksjonert, jeg er ikke voldsomt dreven i TP. Men den løser det jeg ønsker :slight_smile:

Du må erstatte “TIBBER_TOKEN” med din egen API key fra Tibber, du finner den ved å logge inn her: Tibber Developer

{
  "Id": "6CSKL7ssAXI3pOP",
  "ClassId": "hf1Ysemo50f5Fam",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2021-08-23T22:02:03.755877004+02:00",
  "UpdatedAt": "2021-11-28T00:19:23.01432227+01:00",
  "Name": "Tibber: Hente prisinfo, hver time",
  "Group": "variables",
  "Description": "Kaller Tibber API og henter stømpris og prisnivå hver hele time.",
  "Nodes": [
    {
      "Id": "1",
      "Type": "time_trigger",
      "Label": "1min past each our",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comment": "1 * * * *",
            "Comments": "",
            "Expression": "1 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 43,
        "y": 226
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "2",
      "Type": "rest_action",
      "Label": "Get Energy Price Level from Tibber",
      "SuccessTransition": "25",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Auth": {
          "ClientID": "",
          "ClientSecret": "",
          "Enabled": false,
          "GrantType": "password",
          "Password": "",
          "Scope": "",
          "Url": "http://",
          "Username": ""
        },
        "Headers": [
          {
            "Name": "Content-type",
            "Value": "application/json"
          },
          {
            "Name": "Authorization",
            "Value": "TIBBER_TOKEN"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt level}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "Level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.current.level",
            "PathType": "json",
            "TargetVariableName": "energy_level",
            "TargetVariableType": "string",
            "UpdateTriggerMessage": false
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 109,
        "y": 417
      },
      "TypeAlias": "HTTP msg"
    },
    {
      "Id": "25",
      "Type": "transform",
      "Label": "transform tibber",
      "SuccessTransition": "26",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "energy_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "energylevel_output",
        "TargetVariableType": "str_map",
        "Template": "    {\n      \"message_en\": \"Tibber pricelevel is now: {{ .Variable }}\",\n      \"message_no\": \"Tibber prisnivå er nå: {{ .Variable }}\",\n      \"sender\": \"flow\"\n    }",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 214,
        "y": 599
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "26",
      "Type": "action",
      "Label": "Publish timeline",
      "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": "--",
            "message_no": "--",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "energylevel_output",
        "VariableType": "str_map",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 305,
        "y": 812
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "27",
      "Type": "time_trigger",
      "Label": "2min past each our",
      "SuccessTransition": "28",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comment": "2 * * * *",
            "Comments": "",
            "Expression": "4 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 375,
        "y": 239
      },
      "TypeAlias": "Time trigger"
    },
    {
      "Id": "28",
      "Type": "rest_action",
      "Label": "Get Energy Price from Tibber",
      "SuccessTransition": "31",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Auth": {
          "ClientID": "",
          "ClientSecret": "",
          "Enabled": false,
          "GrantType": "password",
          "Password": "",
          "Scope": "",
          "Url": "http://",
          "Username": ""
        },
        "Headers": [
          {
            "Name": "Content-type",
            "Value": "application/json"
          },
          {
            "Name": "Authorization",
            "Value": "TIBBER_TOKEN"
          }
        ],
        "LogResponse": true,
        "Method": "POST",
        "RequestPayloadType": "json",
        "RequestTemplate": "{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {current {total energy tax startsAt level}}}}}}\" }\n",
        "ResponseMapping": [
          {
            "IsVariableGlobal": true,
            "Name": "price_level",
            "Path": "$.data.viewer.homes[0].currentSubscription.priceInfo.current.total",
            "PathType": "json",
            "TargetVariableName": "price_level",
            "TargetVariableType": "float"
          }
        ],
        "Url": "https://api.tibber.com/v1-beta/gql"
      },
      "Ui": {
        "nodeType": "",
        "x": 417,
        "y": 427
      },
      "TypeAlias": "HTTP msg"
    },
    {
      "Id": "30",
      "Type": "action",
      "Label": "Publish timeline",
      "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": "--",
            "message_no": "--",
            "sender": "flow"
          },
          "ValueType": "str_map"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "energyprice_output",
        "VariableType": "string",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "timeline_action",
        "x": 584,
        "y": 815
      },
      "TypeAlias": "Timeline"
    },
    {
      "Id": "31",
      "Type": "transform",
      "Label": "transform tibber price",
      "SuccessTransition": "30",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "price_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "energyprice_output",
        "TargetVariableType": "str_map",
        "Template": "    {\n      \"message_en\": \"Tibber price is now: {{ .Variable }} NOK\",\n      \"message_no\": \"Tibber pris er nå: {{ .Variable }} NOK\",\n      \"sender\": \"flow\"\n    }",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 486,
        "y": 601
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "34",
      "Type": "transform",
      "Label": "Write price request to Influx",
      "SuccessTransition": "35",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": true,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": true,
        "LVariableName": "price_level",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "price_request_output",
        "TargetVariableType": "object",
        "Template": "{\n    \"proc_id\": 2,\n    \"bucket\": \"gen_default\",\n    \"dp\": [\n      {\n        \"name\": \"current_price\",\n        \"tags\": {},\n        \"fields\": {\n          \"val\": {{ .Variable }}\n        }\n      }\n    ]\n}",
        "TransformType": "template",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "x": 758,
        "y": 511
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "35",
      "Type": "action",
      "Label": "Write price to Influx",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:app/rn:ecollector/ad:1",
      "Service": "ecollector",
      "ServiceInterface": "cmd.tsdb.write_data_points",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": "object"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "price_request_output",
        "VariableType": "object",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 837,
        "y": 820
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "36",
      "Type": "time_trigger",
      "Label": "Every 3 min past hour",
      "SuccessTransition": "34",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultMsg": {
          "Value": "",
          "ValueType": ""
        },
        "Expressions": [
          {
            "Comments": "",
            "Expression": "3 * * * *",
            "Name": ""
          }
        ],
        "GenerateAstroTimeEvents": false,
        "Latitude": 0,
        "Longitude": 0,
        "SunriseTimeOffset": 0,
        "SunsetTimeOffset": 0
      },
      "Ui": {
        "nodeType": "",
        "x": 660,
        "y": 237
      },
      "TypeAlias": "Time trigger"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}
4 Likes

Ikke automatisert noe, men montert en galaxy tab i gangen med kalender, værvarsel og futurehome :slight_smile:
Trenger bare darkmode på futurehome nå


6 Likes

Kult!

Er det så enkelt som to apper side-by-side på en Android tablet, eller er det et grensesnitt du kan justere på og “bygge” som du vil?

Futurehome appen er åpnet i pop-up view også ligger kalender og værvarsel som widgets på start skjermen :slight_smile: Kan også kjøre splitscreen, men da får man bare to apper samtidig, og jeg fant ingen måte å få både Yr og Kalender i samme app :slight_smile:

3 Likes

Tøft. Hvor er strømtilførsel?

Kjøpte en holder med plass til lader (https://smarthomemount.com/)
Bak boksen har jeg en vanlig skjultboks med en usb strømtilførsel inni :slight_smile:

3 Likes

I did some heat control work on an Adax oven in order to automate a quite unpredictable situation. My daughter (20) follows no regular schedule - part time shift work, school, (almost) boyfriend, and general active social live made it so we were wasting a lot of heat, especially when she opened the window at night while the heat was on directly under the window.

I wanted to make it so she doesn’t have to think about heater control, but that normal actions control what happens.

Solution is:

Use Adax app to turn the heater off while in Adax’s away mode at 24:00, and then off again in Adax’s sleep mode at 03:00 (in case she overrides it or comes home very late). Back on at 21 degrees at 12:00. I do this because she opens her window to get it cold in the room at night.

If she opens the window, it reduces the temp to 5 degrees (not off due to FH app limitations), and it goes back to the set temperature when the window is closed.

I set up a virtual button based on the tobias sleep mode to show if Julia is home. If she’s “home” then it is set at 21 degrees until 22:00, when it reduces to 19 degrees. If she’s not home then, it reduces the temp to 18 degrees, waits 60 minutes, and then goes to 12 degrees. The temperatures selected match her habits - for example if she’s home at 2200, she’s usually under the covers with phone or TV. If she’s not home, 18 keeps it from getting too cold, but if she’s not home by 2300, then it’s practically off and she mostly just going to bed after work or “socializing.”

There’s a Philips dimmer switch that she can hit to turn the virtual “Julia Home” switch on or off, and it’s by her bed, so when she hits it it turns on the lights, sets the temp to 21 (regardless of time), and then off turns off the light and temp to 12 degrees.

and here’s the “Julia Home Mode” button and actions.

2 Likes

Får opp denne feilmeldingen i loggen når jeg prøver å importere den: «can’t unnmarshal imported flow 1. Err: unexpected end of JOSN input” Hva betyr det?

Lenge siden noe har vært postet i denne tråden.
Litt synd egentlig, for jeg tror det mange kule løsninger rundt omkring.
Jeg har lenge gått å irritert meg over manglende mulighet til å få varsel dersom det blir strømbrudd på f.eks kjøkkenet mens man er borte.
Kom dermed etter litt tenking, på en god ide.
Jeg hadde en dør/vindu sensor liggende i støvet. Fjernet magnetsensoren fra denne og loddet på et 5v relé, som er koblet til strøm via en mobillader.
Voila! Sensoren er lukket når den får strøm, og åpen dersom strømmen er borte.
Laget en enkel flow som sender push-varsel dersom strømbrudd :slight_smile:
Hadde vært ekstra kult å kunne velge ‘strømdetektor’ på sensoret og at denne hadde dukket opp under ‘sikkerhet’ i appen, men det blir vel vanskelig eller? @espen

Relé har jeg funnet her: 1-polet DIL-relé 5 V DC - Releer | Kjell.com
Boks her: Innbyggingsboks 82x51x32 mm - Elektronikkbokser | Kjell.com




2 Likes

Hei, @KetilH :smiley:
Skikkelig kult prosjekt og veldig gøy at du blåser liv i denne tråden igjen!
Oppfordrer alle kloke smarthoder der ute til å poste sine løsninger også. Dette kan være til stor inspirasjon for både brukere og oss i Futurehome.
Det hadde også vært gøy å se noen bilder av prosjektet ditt, Ketil.

Når det kommer til å velge egen enhetstype på denne så blir det dessverre litt vanskelig. Det krever at vi legger til ny type i kjerneprogramvaren, designer ikoner, legger inn en gitt funksjonalitet osv.

1 Like

Skal få tatt noen bilder :+1:
Har også forståelse for dette med enhetstype

1 Like

Jrg brukte astrofunksjonen jeg styrer utelysene med til å lagre global variabel til true når det er mørkt og false når det er lyst slik at jeg kan aktivere kveldscene når jeg trykker home forutsatt at det er mørkt ute. Sparer meg et ekstra trykk hvis jeg kommer hjem etter solnedgang

Har også laget en liten fiffig en på yale dørlås slik at den låses ved aktivering av sleep, gjør ingenting ved når huset står i hjemme, men ved away, sleep eller vacation vil døra låses automatisk når jeg lukker den. Nå mangler bare geofencing egentlig :blush:

4 Likes

Dørlåsautomasjon

{
  "Id": "4Wa8el1bYlbZoBz",
  "ClassId": "4Wa8el1bYlbZoBz",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2022-10-06T23:06:33.28086582+02:00",
  "UpdatedAt": "2022-11-04T20:58:45.992172981+01:00",
  "Name": "dørlås",
  "Group": "door",
  "Description": "låser på nattmodus og hvis døra lukkes ved borte/ferie",
  "Nodes": [
    {
      "Id": "1",
      "Type": "vinc_trigger",
      "Label": "Home event sleep",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "mode",
        "IsValueFilterEnabled": true,
        "Timeout": 0,
        "ValueFilter": "sleep"
      },
      "Ui": {
        "nodeType": "",
        "x": 317,
        "y": 177
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "2",
      "Type": "action",
      "Label": "doorman lock",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:zigbee/ad:1/sv:door_lock/ad:9_1",
      "Service": "door_lock",
      "ServiceInterface": "cmd.lock.set",
      "Config": {
        "DefaultValue": {
          "Value": true,
          "ValueType": "bool"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 267,
        "y": 360
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "3",
      "Type": "trigger",
      "Label": "Doorman closes",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zigbee/ad:1/sv:door_lock/ad:9_1",
      "Service": "door_lock",
      "ServiceInterface": "evt.open.report",
      "Config": {
        "IsValueFilterEnabled": true,
        "LookupServiceNameAndLocation": false,
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": false,
          "ValueType": "bool"
        },
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 683,
        "y": 185
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "4",
      "Type": "if",
      "Label": "Home mode sleep, away or vacation",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "away",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "vacation",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "sleep",
              "ValueType": "string"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "2"
      },
      "Ui": {
        "nodeType": "",
        "x": 669,
        "y": 361
      },
      "TypeAlias": "If condition"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}

Her er hjemmemodus automasjon (må kanskje opprette context/global variabel på nytt)

{
  "Id": "ksThgOmFPxXIByE",
  "ClassId": "ksThgOmFPxXIByE",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2022-10-22T19:41:24.132309199+02:00",
  "UpdatedAt": "2022-10-29T13:33:52.803099311+02:00",
  "Name": "dør trigger",
  "Group": "door",
  "Description": "Trigger home event når døra låses opp",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "Ytterdør låses opp",
      "SuccessTransition": "9",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zigbee/ad:1/sv:alarm_lock/ad:9_1",
      "Service": "alarm_lock",
      "ServiceInterface": "evt.alarm.report",
      "Config": {
        "ConnectorID": "",
        "InputVariableType": "",
        "IsValueFilterEnabled": true,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": "{     \"event\": \"door_opened\",     \"status\": \"activ\"   }",
          "ValueType": "str_map"
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": null
      },
      "Ui": {
        "nodeType": "",
        "x": 868,
        "y": 235
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "2",
      "Type": "vinc_trigger",
      "Label": "Away trigger",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "mode",
        "IsValueFilterEnabled": true,
        "Timeout": 0,
        "ValueFilter": "away"
      },
      "Ui": {
        "nodeType": "",
        "x": 284,
        "y": 239
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "3",
      "Type": "vinc_trigger",
      "Label": "Vacation trigger",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "mode",
        "IsValueFilterEnabled": true,
        "Timeout": 0,
        "ValueFilter": "vacation"
      },
      "Ui": {
        "nodeType": "",
        "x": 15,
        "y": 244
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "4",
      "Type": "wait",
      "Label": "10 min",
      "SuccessTransition": "5",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 600000,
      "Ui": {
        "nodeType": "",
        "x": 136,
        "y": 460
      },
      "TypeAlias": "Delay"
    },
    {
      "Id": "5",
      "Type": "set_variable",
      "Label": "borte i over 10 min (true)",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": true,
          "ValueType": "bool"
        },
        "IsVariableInMemory": false,
        "Name": "Borte 10 min",
        "UpdateGlobal": true,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 132,
        "y": 627
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "6",
      "Type": "vinc_trigger",
      "Label": "Home trigger",
      "SuccessTransition": "7",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "mode",
        "IsValueFilterEnabled": true,
        "Timeout": 0,
        "ValueFilter": "home"
      },
      "Ui": {
        "nodeType": "",
        "x": 556,
        "y": 235
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "7",
      "Type": "wait",
      "Label": "10 sec",
      "SuccessTransition": "8",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 10000,
      "Ui": {
        "nodeType": "",
        "x": 562,
        "y": 460
      },
      "TypeAlias": "Delay"
    },
    {
      "Id": "8",
      "Type": "set_variable",
      "Label": "borte i over 10 min (false)",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": false,
          "ValueType": "bool"
        },
        "IsVariableInMemory": false,
        "Name": "Borte 10 min",
        "UpdateGlobal": true,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 567,
        "y": 629
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "9",
      "Type": "if",
      "Label": "Borte i over 10 min (true)",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "Borte 10 min",
            "Operand": "eq",
            "RightVariable": {
              "Value": true,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "12"
      },
      "Ui": {
        "nodeType": "",
        "x": 867,
        "y": 454
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "11",
      "Type": "trigger",
      "Label": "Ytterdør åpen",
      "SuccessTransition": "9",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zigbee/ad:1/sv:door_lock/ad:9_1",
      "Service": "door_lock",
      "ServiceInterface": "evt.open.report",
      "Config": {
        "IsValueFilterEnabled": true,
        "LookupServiceNameAndLocation": false,
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": true,
          "ValueType": "bool"
        },
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 1121,
        "y": 236
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "12",
      "Type": "action",
      "Label": "Aktiverer hjemme",
      "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": 869,
        "y": 643
      },
      "TypeAlias": "Home mode"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}
2 Likes

I dag har eg laga ein enkel flow som sender push-varsel når det vert oppdaga unormalt forbruksmønster frå Tibber/HAN målar. Caset er som følgjer:
Eg har ei bergvarmepupe som leverer temperert vann til gulvvarmesløyfer. Dessuten forvarmar den vatnet inn til vamtvannsberedar, og leverer “kaldtvann” til dusj og badekar. Systemet har 6,3kW elektrisk varmekolbe som backup. Flowen oppdagar når effekten i sikringsskapet stig med eit inkrement på meir enn 6kW frå ein Tibber-rapport til den neste, og er såleis i stand til å varsla umiddelbart ved indikasjon om feil eller sub-optimal drift av systemet. Denne kjem garantert til å spara meg mykje straum i vinter!

3 Likes

Eg har også laga ein flow i Node Red, denne deaktiverer portane på Unifi-switchen i stova slik at nettverkstilgangen (Smart-TV på LAN og Altibox på VLAN 101) vert begrensa til barne TV-tid, og etter leggetid. Lar seg overstyra via http-request frå Tasker app på mobilen.

Edit: Gløymte nesten denne, som automatisk slår av TVen (via Samsung Smartthings) når eg aktiverer Sleep, Away eller Vacation frå Futurehome modeswitch


Denne er forsåvidt overkommelig nok til at eg tør å legga ut litt kode uten nødvendigvis å bli oversvømt av supporthenvendelsar av den grunn:
Switch node 1
kode
Funksjonsnoden:

if ((msg.payload.val.cmd === "set") && (msg.payload.val.component === "mode")) {
    {
        msg.payload = {value: 0},
        msg.topic= "switch"
    }
}
return msg;

Swich node 2
switch2

5 Likes

Drar opp denne tråden igjen, inspirasjon er alltid gøy!

Har laget meg en automasjon i TP som styrer etter strømpris, og velger ulike snarveier basert på 10% over, under eller mellom -9-9% av dagens snitt. Snarveiene styrer varmekabler, som kan magasinere en god del varme, en avfukter og et lys som bytter mellom rødt, gult og grønt for å vise familien strømprisen denne timen.
Kan legges til flere prosenter, for eksempel for peek eller ekstremt billig, eller andre produkter etter behov.
Har kjørt denne automasjonen siden før jul og opplever at den funker veldig fint. Temperaturer styres via snarveier i appen, så må ikke inn i TP for å justere på de.

{
  "Author": "AndreasS",
  "Name": "Styring av strøm - Spotpris",
  "Group": "energy_price",
  "Description": "Strømstyring",
  "Nodes": [
    {
      "Id": "d24a2e18-51f4-4c28-90a6-82a49fb4ad1f",
      "Type": "trigger",
      "Label": "Get energy_price 24h",
      "SuccessTransition": "1",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:app/rn:energy_guard/ad:1",
      "Service": "energy_price",
      "ServiceInterface": "evt.energy_price.report",
      "Config": {
        "InputVariableType": null,
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": null,
          "ValueType": null
        },
        "ValueJPath": null,
        "ValueJPathResultType": null,
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": null,
          "nodeId": null,
          "nodeName": "energy",
          "nodeType": "energy"
        },
        "x": 100,
        "y": 200
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "1",
      "Type": "transform",
      "Label": "get average",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": false,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": false,
        "LVariableName": "",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "",
        "TargetVariableType": "",
        "Template": "",
        "TransformType": "jpath",
        "ValueMapping": [],
        "XPathMapping": [
          {
            "Path": "$.average",
            "TargetVariableName": "average",
            "TargetVariableType": "int",
            "UpdateInputVariable": false
          }
        ]
      },
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": null,
          "nodeId": null,
          "nodeName": "value",
          "nodeType": "energy"
        },
        "x": 100,
        "y": 400
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "2",
      "Type": "trigger",
      "Label": "Get energy_price 1h",
      "SuccessTransition": "3",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:app/rn:energy_guard/ad:1",
      "Service": "energy_price",
      "ServiceInterface": "evt.energy_price.report",
      "Config": {
        "InputVariableType": null,
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": null,
          "ValueType": null
        },
        "ValueJPath": null,
        "ValueJPathResultType": null,
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": null,
          "nodeId": null,
          "nodeName": "energy",
          "nodeType": "energy"
        },
        "x": 500,
        "y": 200
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "3",
      "Type": "transform",
      "Label": "get price",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "",
        "IsLVariableGlobal": false,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": false,
        "LVariableName": "",
        "RValue": {
          "Value": 0,
          "ValueType": "int"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "",
        "TargetVariableType": "",
        "Template": "",
        "TransformType": "jpath",
        "ValueMapping": [],
        "XPathMapping": [
          {
            "Path": "$.price",
            "TargetVariableName": "price",
            "TargetVariableType": "int",
            "UpdateInputVariable": false
          }
        ]
      },
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": null,
          "nodeId": null,
          "nodeName": "value",
          "nodeType": "energy"
        },
        "x": 500,
        "y": 400
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "4",
      "Type": "wait",
      "Label": "Wait 1s for variable",
      "SuccessTransition": "5",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 1000,
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": null,
          "nodeId": null,
          "nodeName": "wait",
          "nodeType": "energy"
        },
        "x": 500,
        "y": 700
      },
      "TypeAlias": "Delay"
    },
    {
      "Id": "5",
      "Type": "transform",
      "Label": "price / average * 100",
      "SuccessTransition": "6",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": "(price / average) * 100",
        "IsLVariableGlobal": false,
        "IsRVariableGlobal": false,
        "IsTargetVariableGlobal": false,
        "IsTargetVariableInMemory": false,
        "LVariableName": "average",
        "RValue": {
          "Value": 0,
          "ValueType": "float"
        },
        "RVariableName": "",
        "Rtype": "var",
        "TargetVariableName": "difference",
        "TargetVariableType": "float",
        "Template": "",
        "TransformType": "calc",
        "ValueMapping": [],
        "XPathMapping": []
      },
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": {
            "flow_part": "main",
            "node_type": "transform_calc",
            "threshold": 0.05
          },
          "nodeId": null,
          "nodeName": "value",
          "nodeType": "energy"
        },
        "x": 500,
        "y": 900
      },
      "TypeAlias": "Transform"
    },
    {
      "Id": "6",
      "Type": "if",
      "Label": "< 90",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "difference",
            "Operand": "lt",
            "RightVariable": {
              "Value": 90,
              "ValueType": "float"
            }
          }
        ],
        "FalseTransition": "67089530",
        "TrueTransition": "67089531"
      },
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": {
            "flow_part": "main",
            "node_type": "if_diff"
          },
          "nodeId": null,
          "nodeName": "If",
          "nodeType": "If"
        },
        "x": 500,
        "y": 1100
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "67089530",
      "Type": "if",
      "Label": "> 110",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "difference",
            "Operand": "gt",
            "RightVariable": {
              "Value": 110,
              "ValueType": "float"
            }
          }
        ],
        "FalseTransition": "67089532",
        "TrueTransition": "67089533"
      },
      "Ui": {
        "nodeType": "",
        "papp": {
          "customValues": {
            "flow_part": "main",
            "node_type": "if_diff"
          },
          "nodeId": null,
          "nodeName": "If",
          "nodeType": "If"
        },
        "x": 725,
        "y": 1100
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "67089531",
      "Type": "if",
      "Label": "is home, sleep or away",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "home",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "sleep",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "away",
              "ValueType": "string"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "67089534"
      },
      "Ui": {
        "nodeType": "",
        "x": 497,
        "y": 1292
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "67089532",
      "Type": "if",
      "Label": "is home, sleep or away",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "home",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "sleep",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "away",
              "ValueType": "string"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "67089536"
      },
      "Ui": {
        "nodeType": "",
        "x": 967,
        "y": 1288
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "67089533",
      "Type": "if",
      "Label": "is home, sleep or away",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "home",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "sleep",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "away",
              "ValueType": "string"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "67089535"
      },
      "Ui": {
        "nodeType": "",
        "x": 728,
        "y": 1292
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "67089534",
      "Type": "action",
      "Label": "Run: Lav pris",
      "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": "shortcut",
            "id": 3,
            "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": 491,
        "y": 1444
      },
      "TypeAlias": "Home mode"
    },
    {
      "Id": "67089535",
      "Type": "action",
      "Label": "Run: Høy pris",
      "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": "shortcut",
            "id": 1,
            "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": 722,
        "y": 1439
      },
      "TypeAlias": "Home mode"
    },
    {
      "Id": "67089536",
      "Type": "action",
      "Label": "Run: Normal pris",
      "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": "shortcut",
            "id": 2,
            "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": 965,
        "y": 1437
      },
      "TypeAlias": "Home mode"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}
3 Likes

Dei siste dagane har eg satt opp Grafana og lagde nokre ganske kule dashboards for å ha bedre kontroll på energi og klima. Her er det hovedsaklig sensordata frå Netatmo og Tibber via playgrounds men om de ser nøye etter er også pådraget på ventilasjonsanlegget indikert med grafikk, og det er mulig å sjå korleis CO2 nivået responderer på dette. (Ventilasjonsanlegget er igjen styrt via hjemmemodus via Smart implant.)

3 Likes

Dørlåsautomasjoner

{
  "Id": "ksThgOmFPxXIByE",
  "ClassId": "ksThgOmFPxXIByE",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2022-10-22T19:41:24.132309199+02:00",
  "UpdatedAt": "2023-11-05T21:52:30.502055702+01:00",
  "Name": "dør trigger",
  "Group": "door",
  "Description": "Trigger home event når døra låses opp",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "Ytterdør låses opp",
      "SuccessTransition": "9",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zigbee/ad:1/sv:alarm_lock/ad:9_1",
      "Service": "alarm_lock",
      "ServiceInterface": "evt.alarm.report",
      "Config": {
        "ConnectorID": "",
        "InputVariableType": "",
        "IsValueFilterEnabled": true,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": "{     \"event\": \"door_opened\",     \"status\": \"activ\"   }",
          "ValueType": "str_map"
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": null
      },
      "Ui": {
        "nodeType": "",
        "x": 868,
        "y": 235
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "2",
      "Type": "vinc_trigger",
      "Label": "Away trigger",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "mode",
        "IsValueFilterEnabled": true,
        "Timeout": 0,
        "ValueFilter": "away"
      },
      "Ui": {
        "nodeType": "",
        "x": 284,
        "y": 239
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "3",
      "Type": "vinc_trigger",
      "Label": "Vacation trigger",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "mode",
        "IsValueFilterEnabled": true,
        "Timeout": 0,
        "ValueFilter": "vacation"
      },
      "Ui": {
        "nodeType": "",
        "x": 15,
        "y": 244
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "4",
      "Type": "wait",
      "Label": "10 min",
      "SuccessTransition": "5",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 600000,
      "Ui": {
        "nodeType": "",
        "x": 136,
        "y": 460
      },
      "TypeAlias": "Delay"
    },
    {
      "Id": "5",
      "Type": "set_variable",
      "Label": "borte i over 10 min (true)",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": true,
          "ValueType": "bool"
        },
        "IsVariableInMemory": false,
        "Name": "Borte 10 min",
        "UpdateGlobal": true,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 132,
        "y": 627
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "6",
      "Type": "vinc_trigger",
      "Label": "Home trigger",
      "SuccessTransition": "7",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "mode",
        "IsValueFilterEnabled": true,
        "Timeout": 0,
        "ValueFilter": "home"
      },
      "Ui": {
        "nodeType": "",
        "x": 556,
        "y": 235
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "7",
      "Type": "wait",
      "Label": "10 sec",
      "SuccessTransition": "8",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 10000,
      "Ui": {
        "nodeType": "",
        "x": 562,
        "y": 460
      },
      "TypeAlias": "Delay"
    },
    {
      "Id": "8",
      "Type": "set_variable",
      "Label": "borte i over 10 min (false)",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": false,
          "ValueType": "bool"
        },
        "IsVariableInMemory": false,
        "Name": "Borte 10 min",
        "UpdateGlobal": true,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 567,
        "y": 629
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "9",
      "Type": "if",
      "Label": "Borte i over 10 min (true)",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "Borte 10 min",
            "Operand": "eq",
            "RightVariable": {
              "Value": true,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "12"
      },
      "Ui": {
        "nodeType": "",
        "x": 867,
        "y": 454
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "11",
      "Type": "trigger",
      "Label": "Ytterdør åpen",
      "SuccessTransition": "9",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zigbee/ad:1/sv:door_lock/ad:9_1",
      "Service": "door_lock",
      "ServiceInterface": "evt.open.report",
      "Config": {
        "IsValueFilterEnabled": true,
        "LookupServiceNameAndLocation": false,
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": true,
          "ValueType": "bool"
        },
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 1121,
        "y": 236
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "12",
      "Type": "action",
      "Label": "Aktiverer hjemme",
      "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": 869,
        "y": 643
      },
      "TypeAlias": "Home mode"
    },
    {
      "Id": "13",
      "Type": "trigger",
      "Label": "Doorman closes",
      "SuccessTransition": "14",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zigbee/ad:1/sv:door_lock/ad:9_1",
      "Service": "door_lock",
      "ServiceInterface": "evt.open.report",
      "Config": {
        "IsValueFilterEnabled": true,
        "LookupServiceNameAndLocation": false,
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": false,
          "ValueType": "bool"
        },
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 455,
        "y": 802
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "14",
      "Type": "if",
      "Label": "sleep/away/vacation",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "sleep",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "or",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "away",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "vacation",
              "ValueType": "string"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "15"
      },
      "Ui": {
        "nodeType": "",
        "x": 426,
        "y": 961
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "15",
      "Type": "action",
      "Label": "lås dør",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:zigbee/ad:1/sv:door_lock/ad:9_1",
      "Service": "door_lock",
      "ServiceInterface": "cmd.lock.set",
      "Config": {
        "DefaultValue": {
          "Value": true,
          "ValueType": "bool"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 166,
        "y": 963
      },
      "TypeAlias": "Action"
    },
    {
      "Id": "16",
      "Type": "vinc_trigger",
      "Label": "Home event sleep",
      "SuccessTransition": "15",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "EventType": "mode",
        "IsValueFilterEnabled": true,
        "Timeout": 0,
        "ValueFilter": "sleep"
      },
      "Ui": {
        "nodeType": "",
        "x": 161,
        "y": 783
      },
      "TypeAlias": "Home event"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}
2 Likes

Prøver å ikke la denne tråden dø helt ut :sweat_smile:

Har ikke direkte automatisert noe - men har laget et script som muliggjør styring av lyset på kontoret direkte fra mac’en.
Jeg bruker en programvare som heter Alfred som er en Spotlight erstatter med flere muligheter. Jeg bruker denne til å videreformidle input verdiene (dimme %) til et Python script som kobler seg til på MQTT og sender meldingen deretter kobler fra.

Etter en stund så satte jeg inn en bevegelsessensor her på kontoret, men om jeg ble sittende veldig i ro, kunne det hende at lyset automatisk gikk av basert på bevegelses flowen. Da bestemte jeg meg for å utvide både bevegelses flowen, og scriptet til å også støtte “ignore”.
Dersom “ignore” (virtual device) er satt på så vil ikke lysene slås verken av eller på (men blir “resatt” til AV ved modusendring til “hjemme”).


Har du automatisert noe, eller ønsker å dele litt av ditt setup? Del gjerne en post i denne tråden - inspirasjon fra andre er alltid gull! :smiley:

3 Likes

Nå har jeg prøvd å bygge på en flow basert på @espen sin barnerom lys/bevegelse flow med inspirasjon fra hva andre har gjort.

Det er på badet, og det var to ting jeg var ikke fornøyd med. 1 - på sen natt (3-4 tiden) om jeg skulle bruke toalettet, lysene var får sterk, samtidig fruene ville ha det sterkere i morgentimene. 2 - om jeg ville ha det lysere eller dimmere manuelt, gikk det tilbake så snart jeg beveget meg.

Nå er det 3 triggere i to flow(er). To flow var nødvendig siden flow 1 kan ikke kjøres parallel med andre, og flow 2 kan ikke restartes (det feilet når jeg prøvde med et flow):

Flow 1:
1 - vanlig ved bevegelse
Flow 2:
2 - manuel forandring av lysnivå under 10% og over 90% vil sette en override variabel
3 - manuel av på lys og nullstiller override variabel.

Flow 1 er som før, men sjekker for override variabelen før den setter i gang med bevegelses del av flowen. Etter 5 minutter av ingen bevegelse, den nulstiller override variablen.

Det virker som den er stabil, men jeg har merket at om jeg skrur av lyset manuelt, det tar opp til cirka et minut for hue bevegelsessensor å gjensetter seg og vil skru på lysene automatisk igjen.


5 Likes