Make sequence errors lock bot, don't start sequence if bot is locked.
This commit is contained in:
parent
abbdc7d813
commit
aa056a7a29
|
@ -151,6 +151,10 @@ defmodule Farmbot.BotState do
|
|||
end
|
||||
end
|
||||
|
||||
def locked? do
|
||||
GenStage.call(__MODULE__, :locked?)
|
||||
end
|
||||
|
||||
@doc "Set job progress."
|
||||
def set_job_progress(name, progress) do
|
||||
GenServer.call(__MODULE__, {:set_job_progress, name, progress})
|
||||
|
@ -234,6 +238,10 @@ defmodule Farmbot.BotState do
|
|||
{:noreply, [state], state}
|
||||
end
|
||||
|
||||
def handle_call(:locked?, _from, state) do
|
||||
{:reply, state.informational_settings.sync_status == :locked, [], state}
|
||||
end
|
||||
|
||||
def handle_call({:get_pin_value, pin}, _from, state) do
|
||||
case state.pins[pin] do
|
||||
nil ->
|
||||
|
|
|
@ -55,7 +55,7 @@ defmodule Farmbot.BotState.Transport.GenMQTT.Client do
|
|||
def on_connect(state) do
|
||||
GenMQTT.subscribe(self(), [{bot_topic(state.device), 0}])
|
||||
GenMQTT.subscribe(self(), [{sync_topic(state.device), 0}])
|
||||
Logger.info(3, "Connected to real time services.")
|
||||
Logger.success(3, "Connected to real time services.")
|
||||
|
||||
if state.cache do
|
||||
GenMQTT.publish(self(), status_topic(state.device), Poison.encode!(state.cache), 0, false)
|
||||
|
|
|
@ -7,7 +7,12 @@ defmodule Farmbot.CeleryScript.AST.Node.Sequence do
|
|||
def execute(%{version: _, is_outdated: _, label: name}, body, env) do
|
||||
Logger.busy 2, "[#{name}] - Sequence init."
|
||||
env = mutate_env(env)
|
||||
do_reduce(body, env, name)
|
||||
if Farmbot.BotState.locked? do
|
||||
Logger.error 1, "[#{name}] - Sequence failed. Bot is locked!"
|
||||
{:error, :locked, env}
|
||||
else
|
||||
do_reduce(body, env, name)
|
||||
end
|
||||
end
|
||||
|
||||
defp do_reduce([ast | rest], env, name) do
|
||||
|
@ -15,9 +20,10 @@ defmodule Farmbot.CeleryScript.AST.Node.Sequence do
|
|||
case Farmbot.CeleryScript.execute(ast, env) do
|
||||
{:ok, new_env} -> do_reduce(rest, new_env, name)
|
||||
{:error, reason, env} ->
|
||||
Logger.warn 3, "[#{name}] - Sequence failed. Locking bot!"
|
||||
Logger.warn 1, "[#{name}] - Sequence failed. Locking bot!"
|
||||
case Farmbot.Firmware.emergency_lock() do
|
||||
:ok -> :ok
|
||||
{:error, :emergency_lock} -> :ok
|
||||
{:error, reason} -> Logger.error 1, "Failed to lock the firmware! #{inspect reason}"
|
||||
end
|
||||
{:error, reason, env}
|
||||
|
|
|
@ -285,7 +285,7 @@ defmodule Farmbot.Firmware do
|
|||
maybe_cancel_timer(state.timer)
|
||||
Farmbot.BotState.set_busy(false)
|
||||
if state.current do
|
||||
GenServer.reply(state.current.from, {:error, :timeout})
|
||||
GenStage.reply(state.current.from, {:error, :timeout})
|
||||
{:informational_settings, %{busy: false}, %{state | current: nil, idle: true}}
|
||||
else
|
||||
{:informational_settings, %{busy: false}, %{state | idle: true}}
|
||||
|
|
Loading…
Reference in a new issue