Skip to content

Commit 96f8975

Browse files
authored
Merge pull request #1392 from FarmBot/rel-14.3.2
v14.3.2 Production Release
2 parents ffeb641 + 08f98f5 commit 96f8975

File tree

29 files changed

+234
-233
lines changed

29 files changed

+234
-233
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ RELEASE_NOTES
5454
*.pem
5555
*.db
5656
*.db-journal
57+
*.db-shm
5758
*.lua
5859
*screenlog*
5960
*.crashdump

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
# 14.3.2
4+
5+
* Refactor code that generates calendars for FarmEvent resources.
6+
* Routine dependency upgrades
7+
* Bug fix: FBOS crashes when pinbinding is set to SYNC / REBOOT.
8+
39
# 14.3.1
410

511
* Express firmware bugfix

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
14.3.1
1+
14.3.2

farmbot_core/Makefile

Lines changed: 0 additions & 48 deletions
This file was deleted.

farmbot_core/asset.dev.db-shm

-32 KB
Binary file not shown.

farmbot_core/c_src/build_calendar/build_calendar.c

Lines changed: 0 additions & 62 deletions
This file was deleted.

farmbot_core/hello

Lines changed: 0 additions & 1 deletion
This file was deleted.

farmbot_core/lib/farmbot_celery_script/scheduler.ex

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ defmodule FarmbotCeleryScript.Scheduler do
1919

2020
use GenServer
2121
require Logger
22+
require FarmbotCore.Logger
2223
alias FarmbotCeleryScript.{AST, Scheduler, StepRunner}
2324
alias Scheduler, as: State
2425

@@ -50,6 +51,8 @@ defmodule FarmbotCeleryScript.Scheduler do
5051
GenServer.start_link(__MODULE__, args, opts)
5152
end
5253

54+
FarmbotCore.Logger.report_termination()
55+
5356
def register(sch \\ __MODULE__) do
5457
state = :sys.get_state(sch)
5558
{:ok, _} = Registry.register(state.registry_name, :dispatch, self())
@@ -120,8 +123,8 @@ defmodule FarmbotCeleryScript.Scheduler do
120123
end
121124

122125
@impl true
123-
def handle_info({:DOWN, ref, :process, pid, _reason}, state) do
124-
Logger.debug("Scheduler monitor down: #{inspect(pid)}")
126+
def handle_info({:DOWN, ref, :process, pid, reason}, state) do
127+
Logger.info("Scheduler crash: #{inspect(reason)}")
125128

126129
state =
127130
state

farmbot_core/lib/farmbot_core/asset/farm_event.ex

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
defmodule FarmbotCore.Asset.FarmEvent do
2-
@moduledoc """
3-
"""
4-
52
use FarmbotCore.Asset.Schema, path: "/api/farm_events"
6-
alias FarmbotCore.Asset.FarmEvent.{BodyNode, Execution}
3+
alias FarmbotCore.Asset.FarmEvent.{
4+
BodyNode,
5+
Execution,
6+
Calendar
7+
}
78

89
schema "farm_events" do
910
field(:id, :id)
@@ -65,7 +66,6 @@ defmodule FarmbotCore.Asset.FarmEvent do
6566
|> validate_required([])
6667
end
6768

68-
@compile {:inline, [build_calendar: 2]}
6969
def build_calendar(%__MODULE__{executable_type: "Regimen"} = fe, _), do: [fe.start_time]
7070

7171
def build_calendar(%__MODULE__{time_unit: "never"} = fe, _), do: [fe.start_time]
@@ -77,31 +77,14 @@ defmodule FarmbotCore.Asset.FarmEvent do
7777

7878
repeat = fe.repeat
7979
repeat_frequency_seconds = time_unit_to_seconds(fe.time_unit)
80-
81-
do_build_calendar(
82-
current_time_seconds,
83-
start_time_seconds,
84-
end_time_seconds,
85-
repeat,
86-
repeat_frequency_seconds
87-
) |> Enum.map(&DateTime.from_unix!/1)
88-
end
89-
90-
def do_build_calendar(_, _, _, _, _), do: :erlang.nif_error("NIF Not loaded")
91-
92-
@on_load :load_nif
93-
def load_nif do
94-
require Logger
95-
nif_file = '#{:code.priv_dir(:farmbot_core)}/build_calendar'
96-
97-
case :erlang.load_nif(nif_file, 0) do
98-
:ok -> :ok
99-
{:error, {:reload, _}} -> :ok
100-
{:error, _reason} -> :ok
101-
end
80+
Calendar.new(current_time_seconds,
81+
end_time_seconds,
82+
repeat,
83+
repeat_frequency_seconds,
84+
start_time_seconds)
85+
|> Enum.map(&DateTime.from_unix!/1)
10286
end
10387

104-
@compile {:inline, [time_unit_to_seconds: 1]}
10588
defp time_unit_to_seconds("minutely"), do: 60
10689
defp time_unit_to_seconds("hourly"), do: 60 * 60
10790
defp time_unit_to_seconds("daily"), do: 60 * 60 * 24

farmbot_core/lib/farmbot_core/asset_workers/pin_binding_worker.ex

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PinBinding do
6868
def handle_cast(:trigger, %{pin_binding: %{special_action: nil} = pin_binding} = state) do
6969
case Asset.get_sequence(pin_binding.sequence_id) do
7070
%Sequence{name: name} = seq ->
71-
FarmbotCore.Logger.info(1, "#{pin_binding} triggered, executing #{name}")
71+
FarmbotCore.Logger.info(1, "#{inspect(pin_binding)} triggered, executing #{name}")
7272

7373
AST.decode(seq)
7474
|> execute(state)
@@ -83,7 +83,7 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PinBinding do
8383
:trigger,
8484
%{pin_binding: %{special_action: "emergency_lock"} = pin_binding} = state
8585
) do
86-
FarmbotCore.Logger.info(1, "#{pin_binding} triggered, executing Emergency Lock")
86+
FarmbotCore.Logger.info(1, "#{inspect(pin_binding)} triggered, executing Emergency Lock")
8787

8888
AST.Factory.new()
8989
|> AST.Factory.rpc_request("pin_binding.#{pin_binding.pin_num}")
@@ -95,7 +95,7 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PinBinding do
9595
:trigger,
9696
%{pin_binding: %{special_action: "emergency_unlock"} = pin_binding} = state
9797
) do
98-
FarmbotCore.Logger.info(1, "#{pin_binding} triggered, executing Emergency Unlock")
98+
FarmbotCore.Logger.info(1, "#{inspect(pin_binding)} triggered, executing Emergency Unlock")
9999

100100
AST.Factory.new()
101101
|> AST.Factory.rpc_request("pin_binding.#{pin_binding.pin_num}")
@@ -104,7 +104,7 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PinBinding do
104104
end
105105

106106
def handle_cast(:trigger, %{pin_binding: %{special_action: "power_off"} = pin_binding} = state) do
107-
FarmbotCore.Logger.info(1, "#{pin_binding} triggered, executing Power Off")
107+
FarmbotCore.Logger.info(1, "#{inspect(pin_binding)} triggered, executing Power Off")
108108

109109
AST.Factory.new()
110110
|> AST.Factory.rpc_request("pin_binding.#{pin_binding.pin_num}")
@@ -116,7 +116,7 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PinBinding do
116116
:trigger,
117117
%{pin_binding: %{special_action: "read_status"} = pin_binding} = state
118118
) do
119-
FarmbotCore.Logger.info(1, "#{pin_binding} triggered, executing Read Status")
119+
FarmbotCore.Logger.info(1, "#{inspect(pin_binding)} triggered, executing Read Status")
120120

121121
AST.Factory.new()
122122
|> AST.Factory.rpc_request("pin_binding.#{pin_binding.pin_num}")
@@ -125,25 +125,19 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PinBinding do
125125
end
126126

127127
def handle_cast(:trigger, %{pin_binding: %{special_action: "reboot"} = pin_binding} = state) do
128-
FarmbotCore.Logger.info(1, "#{pin_binding} triggered, executing Reboot")
129-
130-
AST.Factory.new()
131-
|> AST.Factory.rpc_request("pin_binding.#{pin_binding.pin_num}")
132-
|> AST.Factory.reboot()
133-
|> execute(state)
128+
FarmbotCore.Logger.info(1, "#{inspect(pin_binding)} triggered, executing Reboot")
129+
FarmbotCeleryScript.SysCalls.reboot()
130+
{:noreply, state}
134131
end
135132

136133
def handle_cast(:trigger, %{pin_binding: %{special_action: "sync"} = pin_binding} = state) do
137-
FarmbotCore.Logger.info(1, "#{pin_binding} triggered, executing Sync")
138-
139-
AST.Factory.new()
140-
|> AST.Factory.rpc_request("pin_binding.#{pin_binding.pin_num}")
141-
|> AST.Factory.sync()
142-
|> execute(state)
134+
FarmbotCore.Logger.info(1, "#{inspect(pin_binding)} triggered, executing Sync")
135+
FarmbotCeleryScript.SysCalls.sync()
136+
{:noreply, state}
143137
end
144138

145139
def handle_cast(:trigger, %{pin_binding: %{special_action: "take_photo"} = pin_binding} = state) do
146-
FarmbotCore.Logger.info(1, "#{pin_binding} triggered, executing Take Photo")
140+
FarmbotCore.Logger.info(1, "#{inspect(pin_binding)} triggered, executing Take Photo")
147141

148142
AST.Factory.new()
149143
|> AST.Factory.rpc_request("pin_binding.#{pin_binding.pin_num}")

0 commit comments

Comments
 (0)