Misc celeryscript fixes.
* reenable `find_home` checks. * add mech for only logging an error once. * fix `read_pin` bad pattern. * fix `send_message` pin pattern. * fix _if execution of `nothing`
This commit is contained in:
parent
d36116eb3d
commit
0d20d2a5b9
|
@ -161,10 +161,16 @@ defmodule Farmbot.BotState do
|
|||
GenStage.call(__MODULE__, {:get_pin_value, num})
|
||||
end
|
||||
|
||||
@doc "Get the bot's current position."
|
||||
def get_current_pos do
|
||||
GenStage.call(__MODULE__, :get_current_pos)
|
||||
end
|
||||
|
||||
@doc "Get a arduino param."
|
||||
def get_param(param) do
|
||||
GenStage.call(__MODULE__, {:get_param, param})
|
||||
end
|
||||
|
||||
@doc false
|
||||
def set_busy(bool) do
|
||||
GenStage.call(__MODULE__, {:set_busy, bool})
|
||||
|
@ -271,6 +277,10 @@ defmodule Farmbot.BotState do
|
|||
{:reply, state.location_data.position, [], state}
|
||||
end
|
||||
|
||||
def handle_call({:get_param, param}, _from, state) do
|
||||
{:reply, state.mcu_params[param], [], state}
|
||||
end
|
||||
|
||||
def handle_call({:set_job_progress, name, progress}, _from, state) do
|
||||
jobs = Map.put(state.jobs, name, progress)
|
||||
new_state = %{state | jobs: jobs}
|
||||
|
|
|
@ -6,7 +6,7 @@ defmodule Farmbot.CeleryScript.AST.Arg.Lhs do
|
|||
def decode("y"), do: {:ok, :y}
|
||||
def decode("z"), do: {:ok, :z}
|
||||
|
||||
def decode("pin" <> num), do: {:pin, String.to_integer(num)}
|
||||
def decode("pin" <> num), do: {:ok, {:pin, String.to_integer(num)}}
|
||||
|
||||
def decode(other), do: {:error, "unknown left hand side: #{inspect other}"}
|
||||
|
||||
|
|
|
@ -70,7 +70,6 @@ defmodule Farmbot.CeleryScript.AST do
|
|||
args = Map.new(str_args, &str_to_atom(&1))
|
||||
case decode(str_map["body"] || []) do
|
||||
{:ok, body} ->
|
||||
IO.puts ""
|
||||
%{kind: kind,
|
||||
args: args,
|
||||
body: body,
|
||||
|
|
|
@ -10,10 +10,9 @@ defmodule Farmbot.CeleryScript.AST.Node.FindHome do
|
|||
|
||||
def execute(%{speed: speed, axis: axis}, _, env) do
|
||||
env = mutate_env(env)
|
||||
case Farmbot.Firmware.find_home(axis, speed) do
|
||||
:ok -> {:ok, env}
|
||||
{:error, reason} -> {:error, reason, env}
|
||||
end
|
||||
ep = Farmbot.BotState.get_param(:"movement_enable_endpoints_#{axis}")
|
||||
ec = Farmbot.BotState.get_param(:"encoder_enabled_#{axis}")
|
||||
do_find_home(ep, ec, axis, speed, env)
|
||||
end
|
||||
|
||||
defp do_reduce([axis | rest], speed, env) do
|
||||
|
@ -26,4 +25,15 @@ defmodule Farmbot.CeleryScript.AST.Node.FindHome do
|
|||
defp do_reduce([], _, env) do
|
||||
{:ok, env}
|
||||
end
|
||||
|
||||
defp do_find_home(ep, ec, axis, speed, env)
|
||||
defp do_find_home(ep, ec, axis, _, env) when (ep == 0) or (ep == nil) or (ec == 0) or (ec == nil) do
|
||||
{:error, "Could not find home on #{axis} axis because endpoints and encoders are disabled.", env}
|
||||
end
|
||||
defp do_find_home(ep, ec, axis, speed, env) when ep == 1 or ec == 1 do
|
||||
case Farmbot.Firmware.find_home(axis, speed) do
|
||||
:ok -> {:ok, env}
|
||||
{:error, reason} -> {:error, reason, env}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,7 +6,7 @@ defmodule Farmbot.CeleryScript.AST.Node.ReadPin do
|
|||
def execute(%{pin_number: pin_num, pin_mode: mode}, _, env) do
|
||||
env = mutate_env(env)
|
||||
case Farmbot.Firmware.read_pin(pin_num, mode) do
|
||||
{:ok, _} -> {:ok, env}
|
||||
:ok -> {:ok, env}
|
||||
{:error, reason} -> {:error, reason, env}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -90,7 +90,7 @@ defmodule Farmbot.CeleryScript.AST.Node.SendMessage do
|
|||
|
||||
defp fetch_bindings do
|
||||
bot_state = Farmbot.BotState.force_state_push()
|
||||
pins = Enum.map(bot_state.pins, fn({pin, %{value: value}}) -> {:"pin_#{pin}", value} end)
|
||||
pins = Enum.map(bot_state.pins, fn({pin, %{value: value}}) -> {:"pin#{pin}", value} end)
|
||||
location = Enum.map(bot_state.location_data.position, fn({axis, val}) -> {axis, val} end)
|
||||
pins ++ location
|
||||
end
|
||||
|
|
|
@ -14,16 +14,27 @@ defmodule Farmbot.CeleryScript do
|
|||
maybe_log_comment(ast)
|
||||
case kind.execute(args, body, env) do
|
||||
{:ok, %Macro.Env{} = _env} = res -> res
|
||||
{:ok, %AST{}, %Macro.Env{} = env} -> {:ok, env}
|
||||
{:ok, %AST{} = ast} -> execute(ast, env)
|
||||
{:error, reason, env} ->
|
||||
Logger.error 2, "CS Failed: #{env.module} - #{inspect reason}"
|
||||
{:error, reason, env}
|
||||
# this stops messages from logging more than once in
|
||||
# sequences, rpc_request, etc.
|
||||
unless env.vars[:__errors__][env.module] do
|
||||
Logger.error 2, "CS Failed: [#{fe_kind(env.module)}] - #{inspect reason}"
|
||||
end
|
||||
new_env = %{env | vars: [{:__errors__, [{env.module, reason}| env.vars[:__errors__] || []]} | env.vars]}
|
||||
{:error, reason, new_env}
|
||||
end
|
||||
end
|
||||
|
||||
defp maybe_log_comment(%{comment: nil}), do: :ok
|
||||
defp maybe_log_comment(%AST{comment: comment} = _ast) do
|
||||
Logger.info 2, "[#{comment.kind}] - #{comment}"
|
||||
defp maybe_log_comment(%AST{comment: nil}), do: :ok
|
||||
defp maybe_log_comment(%AST{comment: comment} = ast) do
|
||||
Logger.info 2, "[#{fe_kind(ast.kind)}] - #{comment}"
|
||||
end
|
||||
|
||||
@doc "Get the more friendly name of this node."
|
||||
def fe_kind(kind) when is_atom(kind) do
|
||||
Module.split(kind) |> List.last() |> Macro.underscore()
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue