@@ -4,7 +4,7 @@ defmodule FarmbotOS.Lua.DataManipulation do
44 """
55
66 alias FarmbotOS . { Asset , JSON }
7- alias FarmbotOS.Asset . { Device , FbosConfig , FirmwareConfig }
7+ alias FarmbotOS.Asset . { Repo , Tool , Device , FbosConfig , FirmwareConfig }
88 alias FarmbotOS.Lua.Util
99 alias FarmbotOS.Lua
1010 alias FarmbotOS.SysCalls.ResourceUpdate
@@ -100,7 +100,28 @@ defmodule FarmbotOS.Lua.DataManipulation do
100100
101101 def update_device ( [ table ] , lua ) do
102102 params = Map . new ( table )
103- _ = ResourceUpdate . update_resource ( "Device" , nil , params )
103+
104+ new_params =
105+ if Map . has_key? ( params , "mounted_tool_id" ) do
106+ if params [ "mounted_tool_id" ] == 0 do
107+ Map . put ( params , "mounted_tool_id" , nil )
108+ else
109+ tool_ids = Repo . all ( Tool ) |> Enum . map ( fn tool -> tool . id end )
110+
111+ if not Enum . member? ( tool_ids , params [ "mounted_tool_id" ] ) do
112+ FarmbotOS.Logger . error ( 3 , "Tool ID not found." )
113+
114+ Enum . filter ( params , fn { key , _value } -> key != "mounted_tool_id" end )
115+ |> Map . new ( )
116+ else
117+ params
118+ end
119+ end
120+ else
121+ params
122+ end
123+
124+ _ = ResourceUpdate . update_resource ( "Device" , nil , new_params )
104125 { [ true ] , lua }
105126 end
106127
@@ -158,6 +179,43 @@ defmodule FarmbotOS.Lua.DataManipulation do
158179 { [ Util . map_to_table ( firmware_config ) ] , lua }
159180 end
160181
182+ def get_tool ( [ params ] , lua ) do
183+ map = Util . lua_to_elixir ( params )
184+
185+ tool_id = Map . get ( map , "id" )
186+ tool_name = Map . get ( map , "name" )
187+ tool_params = % { }
188+
189+ tool_params =
190+ if tool_id do
191+ Map . put ( tool_params , :id , tool_id )
192+ else
193+ tool_params
194+ end
195+
196+ tool_params =
197+ if tool_name do
198+ Map . put ( tool_params , :name , tool_name )
199+ else
200+ tool_params
201+ end
202+
203+ tool = Asset . get_tool ( tool_params )
204+
205+ tool_result =
206+ if tool do
207+ % {
208+ id: tool . id ,
209+ name: tool . name ,
210+ flow_rate_ml_per_s: tool . flow_rate_ml_per_s
211+ }
212+ else
213+ nil
214+ end
215+
216+ { [ tool_result ] , lua }
217+ end
218+
161219 def new_sensor_reading ( [ table ] , lua ) do
162220 table
163221 |> Enum . map ( fn
0 commit comments