make firmware commands block

This commit is contained in:
connor rigby 2017-11-09 16:23:47 -08:00
parent 3069e5c3db
commit 9171d38bfa
4 changed files with 24 additions and 20 deletions

View file

@ -66,21 +66,24 @@ defmodule Farmbot.BotState.Transport.GenMQTT.Client do
def on_publish(["bot", _bot, "from_clients"], msg, state) do
spawn fn() ->
msg
|> Poison.decode!()
|> Farmbot.CeleryScript.AST.decode()
|> elem(1)
|> fn(ast) ->
Logger.debug 3, "received #{inspect Farmbot.CeleryScript.AST.encode(ast) |> elem(1)}"
ast
end.()
|> Farmbot.CeleryScript.execute()
with {:ok, ast} <- Farmbot.CeleryScript.AST.decode(msg) do
case Farmbot.CeleryScript.execute(ast) do
{:ok, _} -> :ok
{:error, reason} ->
Logger.error 1, "Failed to execute CeleryScript: #{inspect reason}"
end
else
{:error, reason} ->
Logger.error 1, "Failed to decode #{msg} as CeleryScript!"
{:error, reason}
end
end
{:ok, state}
end
def on_publish(["bot", _, "sync", ignore, _], _, state) when ignore in ["Log", "User", "Image"] do
def on_publish(["bot", _, "sync", ignore, _], _, state)
when ignore in ["Log", "User", "Image", "WebcamFeed"]
do
{:ok, state}
end

View file

@ -55,6 +55,7 @@ defmodule Farmbot.CeleryScript.AST do
def decode(binary) when is_binary(binary) do
case Poison.decode(binary, keys: :atoms) do
{:ok, map} -> decode(map)
{:error, :invalid, _} -> {:error, :unknown_binary}
{:error, _} -> {:error, :unknown_binary}
end
end

View file

@ -10,7 +10,7 @@ defmodule Farmbot.CeleryScript do
def execute(ast, env \\ struct(Macro.Env))
def execute(%AST{kind: kind, body: body, args: args} = ast, env) do
Logger.busy 3, "doing: #{inspect ast}"
# Logger.busy 3, "doing: #{inspect ast}"
maybe_log_comment(ast)
case kind.execute(args, body, env) do
{:ok, %Macro.Env{} = _env} = res -> res

View file

@ -26,7 +26,7 @@ defmodule Farmbot.Firmware do
@doc "Manually set an axis's current position to zero."
def zero(axis) do
GenStage.call(__MODULE__, {:zero, [axis]})
GenStage.call(__MODULE__, {:zero, [axis]}, :infinity)
end
@doc """
@ -34,12 +34,12 @@ defmodule Farmbot.Firmware do
For a list of paramaters see `Farmbot.Firmware.Gcode.Param`
"""
def update_param(param, val) do
GenStage.call(__MODULE__, {:update_param, [param, val]})
GenStage.call(__MODULE__, {:update_param, [param, val]}, :infinity)
end
@doc false
def read_all_params do
GenStage.call(__MODULE__, {:read_all_params, []})
GenStage.call(__MODULE__, {:read_all_params, []}, :infinity)
end
@doc """
@ -47,27 +47,27 @@ defmodule Farmbot.Firmware do
For a list of paramaters see `Farmbot.Firmware.Gcode.Param`
"""
def read_param(param) do
GenStage.call(__MODULE__, {:read_param, [param]})
GenStage.call(__MODULE__, {:read_param, [param]}, :infinity)
end
@doc "Emergency lock Farmbot."
def emergency_lock() do
GenStage.call(__MODULE__, {:emergency_lock, []})
GenStage.call(__MODULE__, {:emergency_lock, []}, :infinity)
end
@doc "Unlock Farmbot from Emergency state."
def emergency_unlock() do
GenStage.call(__MODULE__, {:emergency_unlock, []})
GenStage.call(__MODULE__, {:emergency_unlock, []}, :infinity)
end
@doc "Read a pin."
def read_pin(pin, mode) do
GenStage.call(__MODULE__, {:read_pin, [pin, mode]})
GenStage.call(__MODULE__, {:read_pin, [pin, mode]}, :infinity)
end
@doc "Write a pin."
def write_pin(pin, mode, value) do
GenStage.call(__MODULE__, {:write_pin, [pin, mode, value]})
GenStage.call(__MODULE__, {:write_pin, [pin, mode, value]}, :infinity)
end
@doc "Start the firmware services."