Hva har du automatisert i dag?

Satt opp 2 ikea plugger med astrour funksjon i huset, til frøkna sine plantelys (kommer flere plugger i bruk straks) slik at jeg slipper å se for mye på det kaldhvite lyset, samtidig som oasen (105 grønne planter and counting) får sine 12+timer med dette😅 orket bare ikke gå rundt i huset med disse på 24t i døgnet da hun aldri gikk for å slå det av selv.
Vurderer også videre om en automatisering heller skulle vært “ved bevegelse ikke oppdaget” slik at de aldri er på når jeg er i nærheten :rofl: :clown_face:

De er virkelig grell lysfarge på…

6 Likes

Ikke direkte automatisert - men har i den siste tiden flyttet programmer o.l som kjørte på Raspberry pi over på en Intel NUC med proxmox som OS. Med det OS’et kan man virtualisere flere virtuelle maskiner eller containere. Du setter opp en ny virtuell maskin eller container på få minutter fra nettleseren.

Har også i samme forbindelse byttet ut alt nettverksutstyr og gått over til Unifi (hvor controller software kjøres i en container på NUC’en). Med Unifi kan man enkelt lage flere nettverk (f.eks et eget til IoT utstyr), og sette opp brannmur regler for å sikre seg mot eventuelle svakheter i IoT enheter mot angrep på annet utstyr på samme nettverk.

Har også kjørende en container med PiHole (som gjør hele nettverket reklamefritt :star_struck:).
Pro tip: Sett opp VPN til hjemmenettverket ditt, så har man reklamefritt nett selv når en ikke er hjemme.
Når man er tilkoblet VPN har man også tilgang til enhetene på nettverket sitt - slik at tilgang til thingsplex, nodeRED osv er en lek selv om man ikke er hjemme.

4 Likes

Har lenge irritert meg over at temperaturen faller mye over natta og dagene vi er borte pga at vi har stor stue med åpen løsning mot kjøkken og gang, og det blir for lite bevegelse i lufta.
Vil ikke ha så høy viftestøy til vanlig, og da blir det til at den varme lufta blir stående rett under der varmepumpen er når vi ikke er hjemme, og det tar tid før vi får jevn varme i huset igjen (Utrolig hva en 1-åring og 5-åring hjelper med å få sirkulert lufta :laughing:).

Har derfor satt opp en flow som setter viftehastighet til medium når vi sover, og high når vi er borte, og synes det fungerer veldig bra :slight_smile:

3 Likes

Jeg har automatisert min Panasonic Varmepumpe som bruker appen Comfort Cloud. Så nå kan jeg justere temperaturen via FH Appen istedenfor (savner dog at vifte + modus er tilgjengelig i FH app)

Jeg har også lagt opp en automasjon for Verisure alarmen, når helsikring aktiveres settes FH i bortemodus og når den deaktiveres settes den i hjemmemodus + at sovemodus settes når skallsikring aktiveres. Kanskje jeg kommer til å legge til at feriemodus skal aktiveres når alarmen har helsikring om natta eller har vært aktivert i 2+ dager.

Hvis noen er interessert, så er Flow’en nedenfor, brukernavn og passord må legges til i “setting” inne på flow’en.

{
    "Id": "d76e6920-372f-11eb-80f7-61ab9f19a667",
    "ClassId": "d76e6920-372f-11eb-80f7-61ab9f19a667",
    "Author": "lostfields",
    "Version": 0,
    "CreatedAt": "2020-12-05T19:26:58.227115Z",
    "UpdatedAt": "2020-12-06T20:35:39.811106625+01:00",
    "Name": "verisure",
    "Group": "timer",
    "Description": "",
    "Nodes": [
      {
        "Id": "25",
        "Type": "action",
        "Label": "Run mode: sleep",
        "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": "sleep",
              "param": {},
              "requestId": 566
            },
            "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": {
          "nodeType": "",
          "papp": {
            "nodeId": "sleep",
            "nodeName": "modes",
            "nodeType": null
          },
          "x": 28,
          "y": 1153
        },
        "TypeAlias": "Action"
      },
      {
        "Id": "26",
        "Type": "time_trigger",
        "Label": "every minute",
        "SuccessTransition": "48",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "DefaultMsg": {
            "Value": "",
            "ValueType": ""
          },
          "Expressions": [
            {
              "Comments": "",
              "Expression": "*/1 * * * *",
              "Name": ""
            }
          ],
          "GenerateAstroTimeEvents": false,
          "Latitude": 0,
          "Longitude": 0,
          "SunriseTimeOffset": 0,
          "SunsetTimeOffset": 0
        },
        "Ui": {
          "nodeType": "",
          "x": 1634,
          "y": 115
        },
        "TypeAlias": "Time trigger"
      },
      {
        "Id": "27",
        "Type": "rest_action",
        "Label": "get installations",
        "SuccessTransition": "33",
        "TimeoutTransition": "",
        "ErrorTransition": "32",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Auth": {
            "ClientID": "",
            "ClientSecret": "",
            "Enabled": false,
            "GrantType": "basic",
            "Password": "",
            "Scope": "",
            "Url": "",
            "Username": ""
          },
          "Headers": [],
          "HeadersVariableName": "headers",
          "LogResponse": true,
          "Method": "GET",
          "RequestPayloadType": "json",
          "RequestTemplate": "",
          "ResponseMapping": [
            {
              "IsVariableGlobal": false,
              "Name": "",
              "Path": "$[0].giid",
              "PathType": "json",
              "TargetVariableName": "installation_giid",
              "TargetVariableType": "string"
            }
          ],
          "Url": "https://e-api02.verisure.com/xbn/2/installation/search?email={{ setting \"username\" }}"
        },
        "Ui": {
          "nodeType": "",
          "x": 1282,
          "y": 912
        },
        "TypeAlias": "HTTP msg"
      },
      {
        "Id": "28",
        "Type": "rest_action",
        "Label": "login",
        "SuccessTransition": "31",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Auth": {
            "ClientID": "",
            "ClientSecret": "",
            "Enabled": false,
            "GrantType": "password",
            "Password": "",
            "Scope": "",
            "Url": "http://",
            "Username": ""
          },
          "Headers": [],
          "HeadersVariableName": "headers_credentials",
          "LogResponse": true,
          "Method": "POST",
          "RequestPayloadType": "json",
          "RequestTemplate": "",
          "ResponseMapping": [
            {
              "IsVariableGlobal": false,
              "Name": "",
              "Path": "$.cookie",
              "PathType": "json",
              "TargetVariableName": "cookie",
              "TargetVariableType": "string",
              "UpdateTriggerMessage": false
            }
          ],
          "Url": "https://e-api02.verisure.com/xbn/2/cookie"
        },
        "Ui": {
          "nodeType": "",
          "x": 1287,
          "y": 579
        },
        "TypeAlias": "HTTP msg"
      },
      {
        "Id": "31",
        "Type": "transform",
        "Label": "set header",
        "SuccessTransition": "27",
        "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": "headers",
          "TargetVariableType": "str_map",
          "Template": "{\"Cookie\":\"vid={{ variable \"cookie\" false }}\", \"Content-Type\":\"application/json\", \"Accept\": \"application/json\"}",
          "TransformType": "template",
          "ValueMapping": [],
          "XPathMapping": []
        },
        "Ui": {
          "nodeType": "",
          "x": 1288,
          "y": 737
        },
        "TypeAlias": "Transform"
      },
      {
        "Id": "32",
        "Type": "rate_limit",
        "Label": "",
        "SuccessTransition": "53",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Action": "skip",
          "Limit": 1,
          "TimeInterval": 60
        },
        "Ui": {
          "nodeType": "",
          "x": 1490,
          "y": 1312
        },
        "TypeAlias": "Rate limit"
      },
      {
        "Id": "33",
        "Type": "rest_action",
        "Label": "get overview",
        "SuccessTransition": "37",
        "TimeoutTransition": "",
        "ErrorTransition": "32",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Auth": {
            "ClientID": "",
            "ClientSecret": "",
            "Enabled": false,
            "GrantType": "basic",
            "Password": "",
            "Scope": "",
            "Url": "",
            "Username": ""
          },
          "Headers": [],
          "HeadersVariableName": "headers",
          "LogResponse": false,
          "Method": "GET",
          "RequestPayloadType": "json",
          "RequestTemplate": "",
          "ResponseMapping": [
            {
              "IsVariableGlobal": false,
              "Name": "",
              "Path": "$.armState.statusType",
              "PathType": "json",
              "TargetVariableName": "current_armState_statusType",
              "TargetVariableType": "string"
            }
          ],
          "Url": "https://e-api02.verisure.com/xbn/2/installation/{{variable \"installation_giid\" false}}/overview"
        },
        "Ui": {
          "nodeType": "",
          "x": 1629,
          "y": 1075
        },
        "TypeAlias": "HTTP msg"
      },
      {
        "Id": "36",
        "Type": "if",
        "Label": "if alarm armed home",
        "SuccessTransition": "",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Expression": [
            {
              "BooleanOperator": "",
              "LeftVariableIsGlobal": false,
              "LeftVariableName": "current_armState_statusType",
              "Operand": "eq",
              "RightVariable": {
                "Value": "ARMED_HOME",
                "ValueType": "string"
              }
            }
          ],
          "FalseTransition": "",
          "TrueTransition": "50"
        },
        "Ui": {
          "nodeType": "",
          "x": 33,
          "y": 289
        },
        "TypeAlias": "If condition"
      },
      {
        "Id": "37",
        "Type": "if",
        "Label": "if alarm disarmed",
        "SuccessTransition": "",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Expression": [
            {
              "BooleanOperator": "",
              "LeftVariableIsGlobal": false,
              "LeftVariableName": "current_armState_statusType",
              "Operand": "eq",
              "RightVariable": {
                "Value": "DISARMED",
                "ValueType": "string"
              }
            }
          ],
          "FalseTransition": "39",
          "TrueTransition": "44"
        },
        "Ui": {
          "nodeType": "",
          "x": 955,
          "y": 109
        },
        "TypeAlias": "If condition"
      },
      {
        "Id": "38",
        "Type": "action",
        "Label": "Run mode: home",
        "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": 566
            },
            "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": {
          "nodeType": "",
          "papp": {
            "nodeId": "sleep",
            "nodeName": "modes",
            "nodeType": null
          },
          "x": 970,
          "y": 1157
        },
        "TypeAlias": "Action"
      },
      {
        "Id": "39",
        "Type": "if",
        "Label": "if alarm armed away",
        "SuccessTransition": "",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Expression": [
            {
              "BooleanOperator": "",
              "LeftVariableIsGlobal": false,
              "LeftVariableName": "current_armState_statusType",
              "Operand": "eq",
              "RightVariable": {
                "Value": "ARMED_AWAY",
                "ValueType": "string"
              }
            }
          ],
          "FalseTransition": "36",
          "TrueTransition": "45"
        },
        "Ui": {
          "nodeType": "",
          "x": 511,
          "y": 281
        },
        "TypeAlias": "If condition"
      },
      {
        "Id": "40",
        "Type": "action",
        "Label": "Run mode: away",
        "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": "away",
              "param": {},
              "requestId": 566
            },
            "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": {
          "nodeType": "",
          "papp": {
            "nodeId": "sleep",
            "nodeName": "modes",
            "nodeType": null
          },
          "x": 629,
          "y": 1152
        },
        "TypeAlias": "Action"
      },
      {
        "Id": "44",
        "Type": "if",
        "Label": "if mode home",
        "SuccessTransition": "",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "tpflow",
        "ServiceInterface": "",
        "Config": {
          "Expression": [
            {
              "BooleanOperator": "",
              "LeftVariableIsGlobal": true,
              "LeftVariableName": "fh.home.mode",
              "Operand": "eq",
              "RightVariable": {
                "Value": "home",
                "ValueType": "string"
              }
            }
          ],
          "FalseTransition": "38",
          "TrueTransition": ""
        },
        "Ui": {
          "nodeType": "",
          "papp": {
            "nodeId": "home",
            "nodeName": "If",
            "nodeType": "modeTrigger"
          },
          "x": 962,
          "y": 526
        },
        "TypeAlias": "If condition"
      },
      {
        "Id": "45",
        "Type": "if",
        "Label": "if mode away",
        "SuccessTransition": "",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "tpflow",
        "ServiceInterface": "",
        "Config": {
          "Expression": [
            {
              "BooleanOperator": "",
              "LeftVariableIsGlobal": true,
              "LeftVariableName": "fh.home.mode",
              "Operand": "eq",
              "RightVariable": {
                "Value": "away",
                "ValueType": "string"
              }
            }
          ],
          "FalseTransition": "40",
          "TrueTransition": ""
        },
        "Ui": {
          "nodeType": "",
          "papp": {
            "nodeId": "home",
            "nodeName": "If",
            "nodeType": "modeTrigger"
          },
          "x": 512,
          "y": 535
        },
        "TypeAlias": "If condition"
      },
      {
        "Id": "46",
        "Type": "if",
        "Label": "if installation_giid",
        "SuccessTransition": "",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Expression": [
            {
              "BooleanOperator": "",
              "LeftVariableIsGlobal": false,
              "LeftVariableName": "installation_giid_mapped",
              "Operand": "eq",
              "RightVariable": {
                "Value": "",
                "ValueType": "string"
              }
            }
          ],
          "FalseTransition": "33",
          "TrueTransition": "27"
        },
        "Ui": {
          "nodeType": "",
          "x": 1638,
          "y": 740
        },
        "TypeAlias": "If condition"
      },
      {
        "Id": "48",
        "Type": "transform",
        "Label": "installation_giid",
        "SuccessTransition": "46",
        "TimeoutTransition": "",
        "ErrorTransition": "46",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Expression": "",
          "IsRVariableGlobal": false,
          "LVariableName": "",
          "RValue": {
            "Value": "",
            "ValueType": "string"
          },
          "RVariableName": "",
          "Rtype": "var",
          "TargetVariableName": "installation_giid_mapped",
          "TargetVariableType": "string",
          "Template": "\"{{ variable \"installation_giid\" false }}\"",
          "TransformType": "template",
          "ValueMapping": [],
          "XPathMapping": []
        },
        "Ui": {
          "nodeType": "",
          "x": 1636,
          "y": 309
        },
        "TypeAlias": "Transform"
      },
      {
        "Id": "50",
        "Type": "if",
        "Label": "if mode home",
        "SuccessTransition": "",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Expression": [
            {
              "BooleanOperator": "",
              "LeftVariableIsGlobal": true,
              "LeftVariableName": "fh.home.mode",
              "Operand": "eq",
              "RightVariable": {
                "Value": "home",
                "ValueType": "string"
              }
            }
          ],
          "FalseTransition": "51",
          "TrueTransition": "52"
        },
        "Ui": {
          "nodeType": "",
          "x": 28,
          "y": 532
        },
        "TypeAlias": "If condition"
      },
      {
        "Id": "51",
        "Type": "iftime",
        "Label": "morning",
        "SuccessTransition": "44",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Expression": [
            {
              "Action": "a",
              "From": "05:00",
              "To": "06:00",
              "Weekday": "1"
            },
            {
              "Action": "a",
              "From": "05:00",
              "To": "06:00",
              "Weekday": "2"
            },
            {
              "Action": "a",
              "From": "05:00",
              "To": "06:00",
              "Weekday": "3"
            },
            {
              "Action": "a",
              "From": "05:00",
              "To": "06:00",
              "Weekday": "4"
            },
            {
              "Action": "a",
              "From": "05:00",
              "To": "06:00",
              "Weekday": "5"
            },
            {
              "Action": "a",
              "From": "06:00",
              "To": "07:00",
              "Weekday": "6"
            },
            {
              "Action": "a",
              "From": "06:00",
              "To": "07:00",
              "Weekday": "0"
            }
          ]
        },
        "Ui": {
          "nodeType": "",
          "x": 260,
          "y": 758
        },
        "TypeAlias": "Time filter"
      },
      {
        "Id": "52",
        "Type": "rate_limit",
        "Label": "",
        "SuccessTransition": "25",
        "TimeoutTransition": "",
        "ErrorTransition": "",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "Config": {
          "Action": "skip",
          "Limit": 1,
          "TimeInterval": 43200
        },
        "Ui": {
          "nodeType": "",
          "x": 30,
          "y": 756
        },
        "TypeAlias": "Rate limit"
      },
      {
        "Id": "53",
        "Type": "transform",
        "Label": "username & password",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "SuccessTransition": "54",
        "ErrorTransition": "",
        "Config": {
          "TargetVariableName": "credentials",
          "TargetVariableType": "object",
          "IsTargetVariableGlobal": false,
          "TransformType": "template",
          "Rtype": "var",
          "IsRVariableGlobal": false,
          "IsLVariableGlobal": false,
          "Expression": "",
          "RValue": {
            "ValueType": "int",
            "Value": 0
          },
          "RVariableName": "",
          "LVariableName": "",
          "ValueMapping": [],
          "XPathMapping": [],
          "Template": "{ \"username\": \"{{ setting \"username\" }}\", \"password\": \"{{ setting \"password\" }}\" }"
        },
        "Ui": {
          "x": 1281,
          "y": 116,
          "nodeType": ""
        },
        "TypeAlias": "Transform"
      },
      {
        "Id": "54",
        "Type": "exec",
        "Label": "base64 credentials",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "SuccessTransition": "55",
        "ErrorTransition": "",
        "Config": {
          "ExecType": "python",
          "Command": "",
          "ScriptBody": "import json\nimport sys\nimport base64\n\ninMsg=json.loads(sys.argv[1])\n\ndef credentials():\n   print('{}'.format(\n      base64.b64encode(\n         'CPE/{username}:{password}'.format(\n            username=inMsg[\"username\"],\n            password=inMsg[\"password\"]\n         ).encode('utf-8')\n      ).decode('utf-8')\n   ), end = '')\n\ncredentials()",
          "InputVariableName": "credentials",
          "IsInputVariableGlobal": false,
          "OutputVariableName": "credentials_base64",
          "IsOutputVariableGlobal": false,
          "IsOutputJson": false,
          "IsInputJson": true
        },
        "Ui": {
          "x": 1276,
          "y": 262,
          "nodeType": ""
        },
        "TypeAlias": "Run script"
      },
      {
        "Id": "55",
        "Type": "transform",
        "Label": "set credential header",
        "Address": "",
        "Service": "",
        "ServiceInterface": "",
        "SuccessTransition": "28",
        "ErrorTransition": "",
        "Config": {
          "TargetVariableName": "headers_credentials",
          "TargetVariableType": "str_map",
          "IsTargetVariableGlobal": false,
          "TransformType": "template",
          "Rtype": "var",
          "IsRVariableGlobal": false,
          "Expression": "",
          "RValue": {
            "ValueType": "int",
            "Value": 0
          },
          "RVariableName": "",
          "LVariableName": "",
          "ValueMapping": [],
          "XPathMapping": [],
          "Template": "{ \"Authorization\": \"Basic {{ variable \"credentials_base64\" false }}\", \"Accept\": \"application/json\" }"
        },
        "Ui": {
          "x": 1283,
          "y": 425,
          "nodeType": ""
        },
        "TypeAlias": "Transform"
      }
    ],
    "Settings": {
      "password": {
        "Value": "",
        "ValueType": "string",
        "Key": "password"
      },
      "username": {
        "Value": "",
        "ValueType": "string",
        "Key": "username"
      }
    },
    "IsDisabled": false,
    "IsDefault": false,
    "ParallelExecution": "keep_last"
  }
2 Likes

Jeg laget en helt enkel flow i dag, siden jeg fikk varsel fra tibber om unormal høy strømpris i morgen, 132øre/kWh.

Laget to snarveier, Høy strømpris, normal strømpris. Disse setter global variabel strømpris høy eller normal.

Denne trigger foreløpig blokkering av strøm til VVB og senker temperaturen i styrte gulv når variabelen = høy.

Så gjenstår det å se resultatet. :upside_down_face:

3 Likes

Et lite tips: Hvis du bruker node-red, så kan du få inn “price level” automatisk👍🏻 Jeg har testet det på VVB en stund nå, og det fungerer bra😊 tror ikke det er så veldig mye å spare på det, men alt hjelper jo på👍🏻

1 Like

Kjekt tips @lgrubbmo!
Er det fra tibber integrasjonen i NodeRED? Eller er det nordpool sin?

Her er forøvrig resultatet fra lastforskyvingen i dag og bildet under som gårsdagens referanse:

1 Like

Jeg bruker tibber integrasjonen ja😊
Hadde prisene variert så mye daglig, så hadde det blitt litt å spare på styringa ja😁

Vi har et eldre bad uten baderomsvifte. Åpner vinduet når vi dusjer, og glemmer noen ganger å stenge det så det blir stående åpent natta over, og får et iskaldt bad som resultat🙈
Har nå satt opp en flow som sender push varsel hvis vindu har stått åpent 45min, hvis ikke det stenges innen 15 min kommer nytt push varsel osv.
Ved aktivering av natt, borte eller feriemodus sendes det varsel uavhengig av hvor lenge det er siden det ble åpnet👍🏻

Håper nå at vi slipper iskaldt bad flere morgener :grin::joy:

3 Likes

Lyst til å dele denne flowen? :blush:

Selvfølgelig:)

{
  "Id": "RZkpMjqqct8va82",
  "ClassId": "RZkpMjqqct8va82",
  "Author": "lgrubbmo",
  "Version": 0,
  "CreatedAt": "2020-12-10T15:15:01.104436689+01:00",
  "UpdatedAt": "2020-12-10T15:36:45.066968198+01:00",
  "Name": "Vindu Bad",
  "Group": "Varsel",
  "Description": "Varsler om vindu er glemt åpent",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "Vindu bad",
      "SuccessTransition": "5",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_contact/ad:154_0",
      "Service": "sensor_contact",
      "ServiceInterface": "evt.open.report",
      "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": 190,
        "y": 150
      },
      "TypeAlias": "Trigger"
    },
    {
      "Id": "2",
      "Type": "if",
      "Label": "open/close",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "",
            "Operand": "eq",
            "RightVariable": {
              "Value": true,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "3"
      },
      "Ui": {
        "nodeType": "",
        "x": 162,
        "y": 496
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "3",
      "Type": "wait",
      "Label": "45 min",
      "SuccessTransition": "4",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 2700000,
      "Ui": {
        "nodeType": "",
        "x": 161,
        "y": 656
      },
      "TypeAlias": "Delay"
    },
    {
      "Id": "4",
      "Type": "action",
      "Label": "Push notification",
      "SuccessTransition": "9",
      "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": "Baderomsvindu er åpent!!",
            "SiteId": "059CDE55-3F6F-4384-9385-305BC3964806"
          },
          "ValueType": "object"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "notification_action",
        "x": 483,
        "y": 834
      },
      "TypeAlias": "Notification"
    },
    {
      "Id": "5",
      "Type": "set_variable",
      "Label": "",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": 0,
          "ValueType": ""
        },
        "Name": "Vindu Bad",
        "UpdateGlobal": false,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 174,
        "y": 325
      },
      "TypeAlias": "Set variable"
    },
    {
      "Id": "7",
      "Type": "if",
      "Label": "Vindu åpent?",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "Vindu Bad",
            "Operand": "eq",
            "RightVariable": {
              "Value": true,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "4"
      },
      "Ui": {
        "nodeType": "",
        "x": 607,
        "y": 491
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "8",
      "Type": "if",
      "Label": "fortsatt åpent?",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "Vindu Bad",
            "Operand": "eq",
            "RightVariable": {
              "Value": true,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "4"
      },
      "Ui": {
        "nodeType": "",
        "x": 476,
        "y": 1183
      },
      "TypeAlias": "If condition"
    },
    {
      "Id": "9",
      "Type": "wait",
      "Label": "15 min",
      "SuccessTransition": "8",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 900000,
      "Ui": {
        "nodeType": "",
        "x": 464,
        "y": 1014
      },
      "TypeAlias": "Delay"
    },
    {
      "Id": "10",
      "Type": "vinc_trigger",
      "Label": "Home event trigger",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "SuccessTransition": "11",
      "ErrorTransition": "",
      "Config": {
        "Timeout": 0,
        "ValueFilter": "",
        "IsValueFilterEnabled": false,
        "EventType": "mode"
      },
      "Ui": {
        "x": 615,
        "y": 158,
        "nodeType": ""
      },
      "TypeAlias": "Home event"
    },
    {
      "Id": "11",
      "Type": "if",
      "Label": "Natt/Ferie/Borte",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "SuccessTransition": "",
      "ErrorTransition": "",
      "Config": {
        "TrueTransition": "",
        "FalseTransition": "7",
        "Expression": [
          {
            "Operand": "eq",
            "LeftVariableName": "fh.home.mode",
            "LeftVariableIsGlobal": true,
            "RightVariable": {
              "Value": "home",
              "ValueType": "string"
            },
            "BooleanOperator": ""
          }
        ]
      },
      "Ui": {
        "x": 623,
        "y": 320,
        "nodeType": ""
      },
      "TypeAlias": "If condition"
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "keep_last"
}

Tusen takk :star_struck:

Hei. Ny til FH og har satt opp hele huset og garasjen. Totalt rundt 50 enheter. Skulle gjerne lært litt mer om automatisering og Thingsplex hvor jeg skjønner man kan gjøre enda mer enn hva som ligger default i appen. Ønsker blant annet å kunne få beskjed på telefonen når sistemann reiser og trykker på «bortemodus» på modusbryteren hvis noen har glemt å lukke en dør. Har Sensetive strips på alle dører.

Kan noen hjelpe meg med flow til dette? Finner lite informasjon om hvordan man egentlig bruker Thingsplex…

Dokumentasjon for Thingsplex og Flow kan finnes her; Thingsplex UI - docs

2 Likes

Burde være ganske rett frem. Les dokumentasjon og betydning av false/true på diverse sensorer osv på github.

Blir noenlunde slik vil jeg tro:

-home event (away)
IF (true)
Så alle sensorene på dører du mener skal være lukket og en false/true der og tror jeg (husker ikke, sjekke github)
Send push notification

Fruen har fått eget planterom - i den anledning er vekstlys under bordet styrt med develco zigbee plugg, ledstripene på 4000k er 24v, så kjøpte like godt en 30w ikea trådfri driver, og koblet dem på den, og google home er i hjørnet av bordet. Det som ikke er så synlig er et glasskap, med en 230V AC ledstripe limt rundt inni skapet, en vifte i bunn, og en USB luftfukter fra biltema. Disse forsynes av en forgrener, som er z-wave plugg på, slik at lys, fukter og vifte er på samtidig. Hun har også hengt opp to E27 vekstlys, som går på hver sin ikea plugg.

Alt dette er bunnet opp mot 2 scenebrytere, der den ene har 4 knapper. Den slår på lys under pulten, og resten i rommet hver for seg, og av såklart.
Videre står en scenebryter i stuen, som slår av/på alle lys utenom under pulten, OG 5stk ikea vekstlys på separate ikea plugger, i stuen :blush:

Taklyset er satt som eget rom, sammen med ovn/varmestyring slik at dette styres på bevegelse og temp mot et neo coolcam øye, uavhengig av resten.

9 Likes

Da har et av pappaperm prosjektene ferdigstilt :smiley: DIY Ambient Light til TV!
Styres av en RaspberryPi Zero og HDMI Capture “card”. RaspPi, strømplugg, hurtigkobling til LED stripe & USB hub er montert i egetdesignet boks som jeg 3D printet. Fornøyd med resultatet så langt, men litt småjusteringer gjenstår.
Satt opp kommunikasjon mellom software på RaspPi til Futurehome (virtual device) og Logitech Harmony via NodeRED.
D4107294-4A85-4CE1-BCBB-A0648DAD0E60 (1)





12 Likes

La oss få litt liv i denne tråden igjen :smiley:
Poster et “prosjekter” jeg har automatisert litt tilbake i tid, så blir ikke “idag” :sweat_smile:
forøvrig utvided jeg nylig med samme flow også for tørketrommel og oppvaskmaskin :slight_smile:

3 Likes

Custom notifications (egen app) som jeg også har testet ut;

Ser at det er mye opensource programmer som har integrert pushover, som gjør at man kan bruke den til flere andre prosjekter også - f.eks bruker jeg også pushover for notifikasjoner for 3D printeren :nerd_face:

3 Likes