Egen modus på barnerom

Er det andre som har “egen modus” for barnerom?
Jeg har laget en flow med virtuell enhet for å teste dette ut, da for å aktivere nattmodus for det rommet. Custom motion flowen sjekker om nattmodus står på for det rommet før den eventuelt slår på lyset. La også inn at dersom nattmodus blir satt for resten av huset, så slår den også på den virtuelle bryteren (via modus innstillinger), og slår den av ved å aktivere hjemmemodus(via modusinnstillinger).
Hvis dette blir en suksess så mulig jeg får opp en Heat-it Push 2 for å kontrollere den virtuelle enheten :slight_smile:

Selve motion flowen

Virtual device

Hvordan det ser ut i appen

2 Likes

Interessant konsept - dette med virtual device må eg tydeligvis sjekka ut nærmare :slightly_smiling_face: Er dette heile hensikten - å la deg kontrollera tp-variabler i appen?

Det er mange måter til samme løsning :sweat_smile:
Jeg bruker globale variabler, for det gjør det enkelt å sjekke “rom-modus” i en if node. Om jeg senere skulle basere annen styring på samme modus, så har jeg alltid variabelen :slight_smile:

Kort spørsmål jeg ikke får til å stemme. I flowen har du en bevegelsesensor som trigger og slår på lys, hvis Home mode og custom nightmode.
Litt avhengig av hvor sensoren står selvfølgelig.

Er det riktig?

i if noden står det:
If mode = home
AND
tobias_nightmode = false

så dersom hele huset er i sleep eller noe, vil ikke flowen fortsette.
dersom huset er i home og modus for rom er satt til sleep, vil heller ikke flowen fortsette

ser at hele teksten ikke kommer med på selve noden
image

Ahh…da blir det jo riktig.

Synd ikke ‘boblene’ utvider seg med teksten

Hvordan copy-paster jeg dette? :open_mouth:

Merker at jeg må sitte meg ned en kveld og 2 med thingsplex for å finne ut av hva som gjør hva, og hva variabler som setter hvilke funksjoner. Det virker ikke så vanskelig, så lenge en vet hva som er hva -da også inne på kortene, ikke bare IF false/true :slight_smile:

Skal legge ut source code :slight_smile:

1 Like

Går det an å få det beste frå to verdener? Dvs. at variabelen lar seg kontrollera i appen som ein device (med glidebrytarar både for boolske og tallverdiar), men samtidig er tilgjengelig i fleire flows samtidig, som ein global variabel? (Ref. mitt forslag Forslag: App-UI for å endre variabler (Context) - eg planlegg å legga dette inn som feature request, men om problemet lar seg løysa ved virtuelle devices så er det vel ikkje noko poeng…)

Kan du fortelle litt mer av hva du ønsker å oppnå?
Om en bryter (med slider) står i av posisjon, og den endres med slider så vil den slå på togglebryteren

Eg ser for meg mange muligheiter her, og har lista opp ein del av dei i linken. Her er ein testflow (basert på tobias_night_mode) for prosjektet eg held på med akkurat no:


Eg får opp antallet enheter har økt frå 49 til 50, men i lista får eg fortsatt berre opp dei 49 gamle einingane… :roll_eyes:
Kunne du ha lagt ut koden for tobias_night_mode, alternativt eit skjermbilde av innstillingane på trigger- og actionnoden?

Her er den virtuelle bryteren:

{
  "Id": "3r06fmz8hpYecui",
  "ClassId": "3r06fmz8hpYecui",
  "Author": "espenh.no",
  "Version": 0,
  "CreatedAt": "2020-08-25T20:54:08.994842751+02:00",
  "UpdatedAt": "2020-08-25T21:55:27.103354435+02:00",
  "Name": "tobias_night_mode",
  "Group": "tobias",
  "Description": "set tobias room to night mode",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "button",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:flow/ad:1/sv:out_bin_switch/ad:3r06fmz8hpYecui_0",
      "Service": "out_bin_switch",
      "ServiceInterface": "cmd.binary.set",
      "Config": {
        "InputVariableType": "",
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": true,
        "Timeout": 0,
        "ValueFilter": {
          "Value": null,
          "ValueType": "bool"
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": null
      },
      "Ui": {
        "nodeType": "",
        "x": 60,
        "y": 209
      }
    },
    {
      "Id": "2",
      "Type": "action",
      "Label": "send response",
      "SuccessTransition": "3",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:flow/ad:1/sv:out_bin_switch/ad:3r06fmz8hpYecui_0",
      "Service": "out_bin_switch",
      "ServiceInterface": "evt.binary.report",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": "bool"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 65,
        "y": 366
      }
    },
    {
      "Id": "3",
      "Type": "set_variable",
      "Label": "set global variable",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": 0,
          "ValueType": ""
        },
        "Name": "tobias_nightmode",
        "UpdateGlobal": true,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 72,
        "y": 536
      }
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}

Her er bevegelse flowen:

{
  "Id": "69h3NQpUyAlHepH",
  "ClassId": "Nqo6aLFaaFoKgW7",
  "Author": "espenh.no",
  "Version": 0,
  "CreatedAt": "2020-08-25T21:28:41.471404094+02:00",
  "UpdatedAt": "2020-08-25T22:26:08.902725034+02:00",
  "Name": "sensor_presence automations - tobias",
  "Group": "sensor_presence",
  "Description": "",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "sensor_presence",
      "SuccessTransition": "8",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:sensor_presence/ad:29_0",
      "Service": "sensor_presence",
      "ServiceInterface": "evt.presence.report",
      "Config": {
        "InputVariableType": "",
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": false,
        "Timeout": 0,
        "ValueFilter": {
          "Value": true,
          "ValueType": ""
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": null
      },
      "Ui": {
        "nodeType": "",
        "x": 227,
        "y": 152
      }
    },
    {
      "Id": "2",
      "Type": "action",
      "Label": "out_lvl_switch ON (Last known value)",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:out_lvl_switch/ad:27_1",
      "Service": "out_lvl_switch",
      "ServiceInterface": "cmd.binary.set",
      "Config": {
        "DefaultValue": {
          "Value": true,
          "ValueType": "bool"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 58,
        "y": 731
      }
    },
    {
      "Id": "4",
      "Type": "wait",
      "Label": "wait 5 min",
      "SuccessTransition": "5",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": 300000,
      "Ui": {
        "nodeType": "",
        "x": 343,
        "y": 716
      }
    },
    {
      "Id": "5",
      "Type": "action",
      "Label": "out_lvl_switch OFF",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:zw/ad:1/sv:out_lvl_switch/ad:27_1",
      "Service": "out_lvl_switch",
      "ServiceInterface": "cmd.binary.set",
      "Config": {
        "DefaultValue": {
          "Value": false,
          "ValueType": "bool"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 340,
        "y": 871
      }
    },
    {
      "Id": "6",
      "Type": "if",
      "Label": "if presence = true",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "",
            "Operand": "eq",
            "RightVariable": {
              "Value": true,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "7",
        "TrueTransition": "2"
      },
      "Ui": {
        "nodeType": "",
        "x": 73,
        "y": 554
      }
    },
    {
      "Id": "7",
      "Type": "if",
      "Label": "if presence = false",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": false,
            "LeftVariableName": "",
            "Operand": "eq",
            "RightVariable": {
              "Value": false,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "4"
      },
      "Ui": {
        "nodeType": "",
        "x": 342,
        "y": 552
      }
    },
    {
      "Id": "8",
      "Type": "if",
      "Label": "if home & tobias_nightmode false",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "Expression": [
          {
            "BooleanOperator": "and",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "fh.home.mode",
            "Operand": "eq",
            "RightVariable": {
              "Value": "home",
              "ValueType": "string"
            }
          },
          {
            "BooleanOperator": "",
            "LeftVariableIsGlobal": true,
            "LeftVariableName": "tobias_nightmode",
            "Operand": "eq",
            "RightVariable": {
              "Value": false,
              "ValueType": "bool"
            }
          }
        ],
        "FalseTransition": "",
        "TrueTransition": "6"
      },
      "Ui": {
        "nodeType": "",
        "x": 220,
        "y": 316
      }
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "keep_last"
}

Takker @espen ! Har fått til tobias_night_mode :slight_smile: Så er spørsmålet om den også kan brukast til å setja ein variabel av type integer til ein verdi 0-100 i appen.

Har fått inn slider i appen ved å erstatta

og

med “out_lvl_switch” og “evt.lvl.report”, og ved å definera den globale variabelen som integer.

Etter at eg har definert type som “blinds” i appen ser det slik ut:


Mulig løysing: Kanskje det må definerast min. og max. verdiar for at slideren skal kunna setja ein verdi i riktig range - mulig det går an å setja som ein parameter?

{
  "Id": "1fg5DbUID19bSlB",
  "ClassId": "1fg5DbUID19bSlB",
  "Author": "",
  "Version": 0,
  "CreatedAt": "2020-08-28T22:52:56.066204155+02:00",
  "UpdatedAt": "2020-08-28T23:17:25.485434293+02:00",
  "Name": "Screens_setpoints",
  "Group": "lux",
  "Description": "Set a global variable of type int through app",
  "Nodes": [
    {
      "Id": "1",
      "Type": "trigger",
      "Label": "Virtual service",
      "SuccessTransition": "2",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:flow/ad:1/sv:out_lvl_switch/ad:1fg5DbUID19bSlB_0",
      "Service": "out_lvl_switch",
      "ServiceInterface": "cmd.lvl.set",
      "Config": {
        "InputVariableType": "",
        "IsValueFilterEnabled": false,
        "LookupServiceNameAndLocation": false,
        "PropFilterName": "",
        "PropFilterValue": "",
        "RegisterAsVirtualService": true,
        "Timeout": 0,
        "ValueFilter": {
          "Value": null,
          "ValueType": "int"
        },
        "ValueJPath": "",
        "ValueJPathResultType": "",
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 156,
        "y": 219
      }
    },
    {
      "Id": "2",
      "Type": "action",
      "Label": "set response",
      "SuccessTransition": "3",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "pt:j1/mt:cmd/rt:dev/rn:flow/ad:1/sv:out_lvl_switch/ad:1fg5DbUID19bSlB_0",
      "Service": "out_lvl_switch",
      "ServiceInterface": "evt.lvl.report",
      "Config": {
        "DefaultValue": {
          "Value": "",
          "ValueType": "int"
        },
        "IsVariableGlobal": false,
        "Props": {},
        "RegisterAsVirtualService": false,
        "ResponseToTopic": "",
        "VariableName": "",
        "VirtualServiceGroup": "ch_0",
        "VirtualServiceProps": {}
      },
      "Ui": {
        "nodeType": "",
        "x": 135,
        "y": 381
      }
    },
    {
      "Id": "3",
      "Type": "set_variable",
      "Label": "screens_setpoint(int)",
      "SuccessTransition": "",
      "TimeoutTransition": "",
      "ErrorTransition": "",
      "Address": "",
      "Service": "",
      "ServiceInterface": "",
      "Config": {
        "DefaultValue": {
          "Value": 0,
          "ValueType": ""
        },
        "Name": "screens_setpoint",
        "UpdateGlobal": true,
        "UpdateInputMsg": false
      },
      "Ui": {
        "nodeType": "",
        "x": 145,
        "y": 553
      }
    }
  ],
  "Settings": null,
  "IsDisabled": false,
  "IsDefault": false,
  "ParallelExecution": "parallel"
}
1 Like

Hei @espen. Kunne du laget en guide for virtuelle enheter og hvordan man knytter disse opp mot rom? Dette er jeg veldig interessert i

2 Likes

Har ikke en egen guide for det per nå, om du importerer flowen for virtuell bryter kan den inkluderes inn i fh appen ved å klikke på “register as device” som vist på punkt 1. Om du ønsker å fjerne den kan knapp 2 “unregister” benyttes;

Du vil da få en ny enhet (innstillinger - enheter - bla til bunnen), denne kan så legges i et rom - Du har da en virtuell bryter :smiley:

Det ser spennende ut. Jeg følger og ser om det er noe jeg kan ta i bruk.
Knappen du har laget i rommer gir høy WAF faktor og kan brukes til å redusere antall snarveier på hoved skjerm.

1 Like

Hei! Importerte inn “tobias_night_mode” men ser den ikkje i appen. Kva gjer eg galt?

For ordenskyld la eg inn variabelen “tobias_nightmode” før eg lagret og registrerte den som virtual device.

Du har nok gjort rett men Virtual devices går ikke å registrere inntil videre.
De har sagt det kommer en fiks

Hei. Beklageligvis er det en liten bug i registeringen av virtuelle enheter fra tpflow på nåværende versjon. Det jobbes med en fiks for dette.