make firmware commands block
This commit is contained in:
parent
3069e5c3db
commit
9171d38bfa
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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."
|
||||
|
|
Loading…
Reference in a new issue