TP Flow - Futurehome reglermotor

  • Uppdaterad

Denna guide kommer att visa dig grunderna i Futurehomes regelmotor för utvecklare.

För att använda TP flow måste du installera Thingsplex och TPFlow från Futurehome-appens butik. Följ den här guiden för att konfigurera den.

Varning: Regelmotorn är ett mycket kraftfullt verktyg. Du bör använda den med omsorg eftersom det potentiellt kan fördröja ditt system om det används felaktigt med slingor eller liknande.

mceclip0.png

 

I exemplet nedan kommer vi att skapa ett exempelflöde som använder Z-Wave-scener för att utlösa en genväg.

Skapa ett nytt flöde

mceclip1.png

Mata in ett lämpligt namn och en beskrivning. Om du vill att flödet ska vara en del av en speciell grupp av flöden lägger du till ett lämpligt namn för kategorin eller använder ett redan befintligt gruppnamn.

mceclip2.png

I bilden ovan kan du se början av ett nytt flöde. Det finns ett tomt flödeskort för utlösare, klicka på det för att redigera det.

mceclip3.png

Välj rummet som enheten är placerad i, välj enheten och välj sedan tjänsten scene_ctrl och evt.scene.report .

Enheten vi använder som exempel är en Heatit tryckknapp 2. Den har två scener, nämligen scen 1 för knapp 1 och scene 2 för knapp 2. Vi vill skapa ett flöde som kan göra något baserat på båda knapparna.

Nästa steg är att skapa en IF-sats.
Ideaboard_-_2019-10-08T104351.415.jpg

Redigera IF-satsen genom att klicka på den.

mceclip4.png

Mata in ett lämpligt namn och välj sträng som datatyp och mata in "1.0" för scen 1.

Ideaboard_-_2019-10-08T104813.805.jpg

Om du är osäker på enheten och formatet på scennumret kan du utlösa scenen genom att trycka på knappen fysiskt. Kontrollera sedan Thingsplex Message stream och du kan se formatet på meddelandet.Ideaboard_-_2019-10-08T105158.754.jpg

Anledningen till att vi klonade den första scenens IF-sats var för att vi vill ställa in vad den andra knappen också bör göra. På den andra knappen byter vi etikettnamn och inmatningscen 2.0 som är för knapp 2.

mceclip6.png

Sammanfoga sedan flödena genom att koppla samman den gröna pricken som är utmatningen med den blåa pricken som är inmatningen på IF-satsens flöde. Sammankoppla också en linje från den gula pricken på IF-satsen. Detta är flödets rutt som den bör ta om IF-satsen inte är uppfylld, sammankoppla den till ingången till nästa IF-sats som är scen 2.0.

mceclip7.png

 

I nästa steg kommer vi att skapa åtgärden för vad som faktiskt ska hända baserat på den scentyp som skickas. I exemplet kommer vi att ha scen 1 som utlöser en genväg och vi kommer att ha scen 2 som ställer in ett läge.

Först lägger vi till den första åtgärden som är en läges- och genvägsåtgärd.

Ideaboard_-_2019-10-08T110223.309.jpg

Vi väljer åtgärden, matar in ett namn, väljer genväg och sedan väljer vi genvägen som vi vill köra när scen 1.0 skickas. Slutligen kommer vi att duplicera åtgärden för att ställa in åtgärden för scen 2.0

Ideaboard_-_2019-10-08T110626.645.jpg

För åtgärden för scen 2.0 vill vi ställa in sovläge. Välj åtgärden för att utlösa läget, mata in ett namn för etiketten och stäng sedan.

Ideaboard_-_2019-10-08T111154.343.jpg

Slutligen måste vi ansluta flödena från IF-satsen till åtgärderna

Ideaboard_-_2019-10-08T111612.325.jpg

Det är allt, nu har vi ett flöde som antingen utlöser en genväg eller ställer in ett läge beroende på vilken scen som aktiveras på en fjärrkontroll till Heatit-tryckknapp.

Ideaboard_-_2019-10-08T111804.303.jpg

I flödets översikt kan vi nu se flödet vi skapade och viss information om det.

mceclip8.png

Vi kan se att det har verkställts 0 gånger, nu försöker vi trycka på knappen.

mceclip9.png

Som vi kan se har flödet utförts 1 gång efter att ha tryckt på knappen.

Här är flödet vi skapade som ett flöde du kan importera i din Thingsplex Flow-redigerares importfunktion.

{
"Id": "NuCRKTdH7y4aX6x",
"ClassId": "NuCRKTdH7y4aX6x",
"Author": "",
"Version": 0,
"CreatedAt": "2019-10-08T10:15:52.465761518+02:00",
"UpdatedAt": "2019-10-08T10:15:52.465761518+02:00",
"Name": "Shortcut button",
"Group": "",
"Description": "Shortcut - scene trigger",
"Nodes": [
{
"Id": "1",
"Type": "trigger",
"Label": "Heatit push button scene",
"SuccessTransition": "2",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "pt:j1/mt:evt/rt:dev/rn:zw/ad:1/sv:scene_ctrl/ad:155_0",
"Service": "scene_ctrl",
"ServiceInterface": "evt.scene.report",
"Config": {
"InputVariableType": "",
"IsValueFilterEnabled": false,
"LookupServiceNameAndLocation": false,
"RegisterAsVirtualService": false,
"Timeout": 0,
"ValueFilter": {
"Value": null,
"ValueType": "string"
},
"ValueJPath": "",
"ValueJPathResultType": "",
"VirtualServiceGroup": "",
"VirtualServiceProps": null
},
"Ui": {
"nodeType": "",
"x": 70,
"y": 170
}
},
{
"Id": "2",
"Type": "if",
"Label": "Scene 1.0",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "",
"Operand": "eq",
"RightVariable": {
"Value": "1.0",
"ValueType": "string"
}
}
],
"FalseTransition": "3",
"TrueTransition": "4"
},
"Ui": {
"nodeType": "",
"x": 48,
"y": 343
}
},
{
"Id": "3",
"Type": "if",
"Label": "Scene 2.0",
"SuccessTransition": "",
"TimeoutTransition": "",
"ErrorTransition": "",
"Address": "",
"Service": "",
"ServiceInterface": "",
"Config": {
"Expression": [
{
"BooleanOperator": "",
"LeftVariableIsGlobal": false,
"LeftVariableName": "",
"Operand": "eq",
"RightVariable": {
"Value": "2.0",
"ValueType": "string"
}
}
],
"FalseTransition": "",
"TrueTransition": "5"
},
"Ui": {
"nodeType": "",
"x": 259,
"y": 341
}
},
{
"Id": "4",
"Type": "action",
"Label": "Trigger kveldskos",
"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": 5,
"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": 99,
"y": 533
}
},
{
"Id": "5",
"Type": "action",
"Label": "Set sleep mode",
"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": 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": 329,
"y": 533
}
}
]
}


För att importera den gör du bara följande:

Ideaboard_-_2019-10-08T112906.921.jpg

Thingsplex-flowmotorn är en kraftfull reglermotor med många möjligheter. Dokumentationen kommer att fortsätta att utvecklas över tid, under tiden uppmuntrar vi alla utvecklare och tinkerers att börja leka runt och lära sig mer om Flowmotorn.

 

Var denna artikel till hjälp?

3 av 4 tyckte detta var till hjälp

Har du fler frågor? Skicka en förfrågan

Kommentarer

0 kommentarer

logga in för att lämna en kommentar.