...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<Def Name="EnvInfo"> <Number Name="Temperature"/> <Number Name="Humidity"/> <Number Name="Light"/> <Number Name="Pressure"/> <Number Name="SoilMoisture"/> <Number Name="Wind"/> <String Name="LastUpdatedByProvider"/> </Def> <Def Name="BoundingBox"> <GeoLocation Name="Vertex1"/> <GeoLocation Name="Vertex2"/> <GeoLocation Name="Vertex3"/> <GeoLocation Name="Vertex4"/> </Def> <Def Name="GeoLocation"> <Number Name="latitude"/> <Number Name="longitude"/> </Def> <DataModel <DataModel Name="Greenhouse"> <Sid Name="GreenhouseID"/> <String Name="GreenhouseName"/> <GeoLocation Name="Location"/> <String Name="LocationName"/> <BoundingBox Name="Boundary"/> <Integer Name="LaneCount"/> <Double Name="LaneWidth"/> <Double Name="ZoneLength"/> <Integer Name="ZoneInLane"/> <Integer Name="ZoneCount"/> <Double Name="GHLength"/> <Double Name="GHWidth"/> <EnvInfo Name="ExternalEnv"/> <EnvInfo Name="InternalEnv"/> <String Name="VentOnOffState"/> <String Name="FansOnOffState"/> <Boolean Name="SunnyDay"/> <Boolean <Boolean Name="Running" default="false"/> <!-- true / false --> </DataModel> <ThingModel Name="Heater"> <Sid Name="HeaterID"/> <String Name="OnOffState"/> <Integer Name="HeatingLevel"/> </ThingModel> |
Pipeline Macros
- Execute Internal Query
- Schedule and UnSchedule TQL Code
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<Macro Name="SetGHCurrentTemp"> <Argument> <TempSensorId></TempSensorId> <GreenhouseID></GreenhouseID> </Argument> <Result> <Log Message="*********Calculating Temperature..."/> <executeQuery> <QueryString> <Query> <Query> <Find> <Find> <Greenhouse> <Greenhouse> <GreenhouseID>[:$Macro.Argument.GreenhouseID:]</GreenhouseID> </Greenhouse> </Find> </Query> </QueryString> </executeQuery> <if condition="$Response.Message.Value/Find/Status eq 'Success'"> <then> <SetLocalData key="CurrentTemp"> <Value>[:$Response.Message.Value.Find.Result.Greenhouse.ExternalEnv.Temperature:]</Value> </SetLocalData> <SetLocalData key="GHCurrentTemp"> <Value>[:$Response.Message.Value.Find.Result.Greenhouse.InternalEnv.Temperature:]</Value> </SetLocalData> <SetLocalData key="Vent"> <Value>[:$Response.Message.Value.Find.Result.Greenhouse.VentOnOffState:]</Value> </SetLocalData> <SetLocalData key="Fans">> <Value>[:$Response.Message.Value.Find.Result.Greenhouse.FansOnOffState:]</Value> </SetLocalData> <SetLocalData key="SunnyDay"> <Value>[:$Response.Message.Value.Find.Result.Greenhouse.SunnyDay:]</Value> </SetLocalData> <executeQuery> <QueryString> <QueryString> <Query> <Query> <Find> <Find> <Heater> <Heater> <ZoneID ne=''/> <OnOffState eq='On'/> </Heater> </Find> </Query> </QueryString> </executeQuery> <Javascript> <resp> <Include>$Response.Message.Value</Include> </resp> var resultList = resp.Find; var heaterLevels = []; var heaterLevelsSum = 0; for each (var result in resultList.iterEntries("Result")){ var heaters = result.getValue(); heaterLevels.push(heaters.Heater.HeatingLevel); heaterLevelsSum = heaterLevelsSum + heaters.Heater.HeatingLevel; } var GHTempAdj = 0; if([:$LocalData.SunnyDay:]){ GHTempAdj = Math.pow((100/([:$LocalData.CurrentTemp:]+237.1)), 3) * 100;; }else{ GHTempAdj = Math.pow((100/([:$LocalData.CurrentTemp:]+237.1)), 3) * 60; } var GHBaseTemp = [:$LocalData.CurrentTemp:] + GHTempAdj; var TempVentImp = ([:$LocalData.CurrentTemp:] - [:$LocalData.GHCurrentTemp:]) * 0.03; var HeaterEffectRatio = heaterLevelsSum / 90; var TempHeaterImp = HeaterEffectRatio * (Math.sqrt(Math.max(0,(45-[:$LocalData.GHCurrentTemp:])))); var GHCurrentTemp = GHBaseTemp + TempVentImp + TempHeaterImp; sffContext.execute("SetContextData","key","GHCurrentTemp","value",GHCurrentTemp); </Javascript> <executeQuery> <QueryString> <Query> <Find format="Version"> <TempSensor> <TempSensor> <sensorId>[:$Macro.Argument.TempSensorId:]</sensorId> </TempSensor> </Find> <SetResponseData> <Key>Message.Value.Find.Result.TempSensor.TempValue.Value</Key> <Value>[:$ContextData.GHCurrentTemp:]</Value> </SetResponseData> <Save> <from>Result</from> <Include>$Response.Message.Value.Find</Include> </Save> </Query> </QueryString> </executeQuery> <executeQuery> <QueryString> <Query> <Find format="Version">> <Greenhouse> <GreenhouseID>[:$Macro.Argument.GreenhouseID:]</GreenhouseID> </Greenhouse> </Find> <SetResponseData> <Key>Message.Value.Find.Result.Greenhouse.InternalEnv.Temperature.Value</Key> <Value>[:$ContextData.GHCurrentTemp:]</Value> </SetResponseData> <Save> <from>Result</from> <Include>$Response.Message.Value.Find</Include> </Save> </Query> </QueryString> </executeQuery> </then> </if> </Result> </Macro> |
Queries
Let's start writing some queries to create and read the data.
...