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.
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
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.
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.
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.
Redigera IF-satsen genom att klicka på den.
Mata in ett lämpligt namn och välj sträng som datatyp och mata in "1.0" för scen 1.
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.
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.
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.
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.
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
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.
Slutligen måste vi ansluta flödena från IF-satsen till åtgärderna
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.
I flödets översikt kan vi nu se flödet vi skapade och viss information om det.
Vi kan se att det har verkställts 0 gånger, nu försöker vi trycka på knappen.
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:
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.
Kommentarer
0 kommentarer
logga in för att lämna en kommentar.