Skip to content

Commit

Permalink
Merge pull request #602 from FarmBot/staging
Browse files Browse the repository at this point in the history
6.4.4
  • Loading branch information
ConnorRigby authored Jul 26, 2018
2 parents 416e283 + e8dc276 commit 2234a7c
Show file tree
Hide file tree
Showing 113 changed files with 1,842 additions and 1,230 deletions.
6 changes: 3 additions & 3 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
version: 2.0
defaults: &defaults
docker:
- image: nervesproject/nerves:1.0.0-rc.0
- image: nervesproject/nerves:1.3.0

install_elixir: &install_elixir
run:
name: Install Elixir
command: |
wget https://github.com/elixir-lang/elixir/releases/download/v1.6.3/Precompiled.zip
wget https://github.com/elixir-lang/elixir/releases/download/v1.6.6/Precompiled.zip
unzip -d /usr/local/elixir Precompiled.zip
echo 'export PATH=/usr/local/elixir/bin:$PATH' >> $BASH_ENV
Expand All @@ -18,7 +18,7 @@ install_hex_archives: &install_hex_archives
cd /tmp
mix local.hex --force
mix local.rebar --force
mix archive.install hex nerves_bootstrap 1.0.0 --force
mix archive.install hex nerves_bootstrap "~> 1.0" --force
fetch_and_compile_deps: &fetch_and_compile_deps
run:
Expand Down
5 changes: 1 addition & 4 deletions .formatter.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,4 @@ known_formatted_files =
|> Enum.map(&String.trim(&1))
|> List.delete("")

[
inputs: ["mix.exs", ".formatter.exs"] ++ known_formatted_files,
line_length: 80
]
[inputs: ["mix.exs", ".formatter.exs"] ++ known_formatted_files]
4 changes: 2 additions & 2 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
erlang 20.2
elixir 1.6.4
erlang 21.0.1
elixir 1.6.6
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
# Changelog
# 6.4.4
* Optimize AMQP connection.
* Sync PinBindings with the API.
* Add new field on `informational_settings`: `soc_temp`.
* Add new field on `informational_settings`: `wifi_level`.
* Add new RPC `dump_info` that collects some info helpful for bug reports.
* Add `BoxLed3` and `BoxLed4` to `write_pin`.
* Implement new LED subsystem.
* Declare language and charset in Configurator to avoid localization issues.
* Add new Configurator fields for dns and ntp.
* Another attempt at catching broken sqlite3 lib.
* Update Linux system layer.

# 6.4.3
* Fix Ramps firmware build.

Expand Down
6 changes: 5 additions & 1 deletion FEATURE_MIN_VERSIONS.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,9 @@
"sensors": "6.3.0",
"change_ownership": "6.3.0",
"backscheduled_regimens": "6.4.0",
"endstop_invert": "6.4.1"
"endstop_invert": "6.4.1",
"api_pin_bindings": "6.4.4",
"diagnostic_dumps": "6.4.4",
"rpi_led_control": "6.4.4",
"farmduino_k14": "6.4.4"
}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ if you spot a bug or fix, but for now we suggest obtaining a Raspberry Pi 3 for

|Raspbery Pi Version |
|---|
| :star: **[RPi 3 (Ships with FarmBot.io kits)](https://github.com/FarmBot/farmbot_os/releases/download/v6.4.1/farmbot-rpi3-6.4.1.img)**|
| :star: **[RPi 3 (Ships with FarmBot.io kits)](https://github.com/FarmBot/farmbot_os/releases/download/v6.4.3/farmbot-rpi3-6.4.3.img)**|
---

## Installation
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6.4.3
6.4.4
2 changes: 1 addition & 1 deletion c_src/farmbot-arduino-firmware
17 changes: 14 additions & 3 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ config :lager, :handlers, []
config :elixir, ansi_enabled: true
config :iex, :colors, enabled: true

config :ssl, protocol_version: :"tlsv1.2"
# config :ssl, protocol_version: :"tlsv1.2"

config :farmbot, farm_event_debug_log: false

Expand All @@ -44,17 +44,28 @@ config :farmbot, :behaviour,
authorization: Farmbot.Bootstrap.Authorization,
firmware_handler: Farmbot.Firmware.StubHandler,
http_adapter: Farmbot.HTTP.HTTPoisonAdapter,
gpio_handler: Farmbot.System.GPIO.StubHandler
pin_binding_handler: Farmbot.PinBinding.StubHandler,
json_parser: Farmbot.JSON.JasonParser,
leds_handler: Farmbot.Leds.StubHandler

config :farmbot, :farmware,
first_part_farmware_manifest_url: "https://raw.githubusercontent.com/FarmBot-Labs/farmware_manifests/master/manifest.json"

config :farmbot, :builtins,
pin_binding: [
emergency_lock: -1,
emergency_unlock: -2,
]

config :farmbot,
expected_fw_versions: ["6.4.0.F", "6.4.0.R", "6.4.0.G"],
default_server: "https://my.farm.bot",
default_currently_on_beta: String.contains?(to_string(:os.cmd('git rev-parse --abbrev-ref HEAD')), "beta"),
firmware_io_logs: false,
default_farmware_tools_release_url: "https://api.github.com/repos/FarmBot-Labs/farmware-tools/releases/11015343"
default_farmware_tools_release_url: "https://api.github.com/repos/FarmBot-Labs/farmware-tools/releases/11015343",
default_ntp_server_1: "0.pool.ntp.org",
default_ntp_server_2: "1.pool.ntp.org",
default_dns_name: "nerves-project.org"

global_overlay_dir = "rootfs_overlay"

Expand Down
1 change: 1 addition & 0 deletions config/host/dev.exs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ config :farmbot, :init, [
config :farmbot, :transport, [
Farmbot.BotState.Transport.AMQP,
Farmbot.BotState.Transport.HTTP,
Farmbot.BotState.Transport.Registry,
]

config :farmbot, ecto_repos: [Farmbot.Repo, Farmbot.System.ConfigStorage]
Expand Down
3 changes: 2 additions & 1 deletion config/host/test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ config :farmbot, :init, [

# Transports.
config :farmbot, :transport, [
Farmbot.BotState.Transport.Test
Farmbot.BotState.Transport.Test,
Farmbot.BotState.Transport.Registry,
]

config :farmbot, :farmware, first_part_farmware_manifest_url: nil
Expand Down
14 changes: 12 additions & 2 deletions config/target/dev.exs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ config :farmbot, ecto_repos: [Farmbot.Repo, Farmbot.System.ConfigStorage]

# Configure your our init system.
config :farmbot, :init, [
Farmbot.Target.Leds.AleHandler,

# Autodetects if a Arduino is plugged in and configures accordingly.
Farmbot.Firmware.UartHandler.AutoDetector,

Expand All @@ -36,14 +38,20 @@ config :farmbot, :init, [
# Stops the disk from getting full.
Farmbot.Target.Network.TzdataTask,

# Reports SOC temperature to BotState.
Farmbot.Target.SocTempWorker,
# Reports Wifi info to BotState.
Farmbot.Target.Network.InfoSupervisor,

# Debug stuff
Farmbot.System.Debug,
Farmbot.Target.Uevent.Supervisor
Farmbot.Target.Uevent.Supervisor,
]

config :farmbot, :transport, [
Farmbot.BotState.Transport.AMQP,
Farmbot.BotState.Transport.HTTP,
Farmbot.BotState.Transport.Registry,
]

# Configure Farmbot Behaviours.
Expand All @@ -52,7 +60,8 @@ config :farmbot, :behaviour,
system_tasks: Farmbot.Target.SystemTasks,
firmware_handler: Farmbot.Firmware.StubHandler,
update_handler: Farmbot.Target.UpdateHandler,
gpio_handler: Farmbot.Target.GPIO.AleHandler
pin_binding_handler: Farmbot.Target.PinBinding.AleHandler,
leds_handler: Farmbot.Target.Leds.AleHandler

local_file = Path.join(System.user_home!(), ".ssh/id_rsa.pub")
local_key = if File.exists?(local_file), do: [File.read!(local_file)], else: []
Expand All @@ -61,4 +70,5 @@ config :nerves_firmware_ssh, authorized_keys: local_key

config :shoehorn,
init: [:nerves_runtime, :nerves_init_gadget],
handler: Farmbot.ShoehornHandler,
app: :farmbot
21 changes: 19 additions & 2 deletions config/target/prod.exs
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
use Mix.Config

config :logger, [
utc_log: true,
handle_otp_reports: true,
handle_sasl_reports: true,
backends: [RingLogger]
]

config :farmbot, data_path: "/root"

# Disable tzdata autoupdates because it tries to dl the update file
Expand All @@ -20,6 +27,8 @@ config :farmbot, ecto_repos: [Farmbot.Repo, Farmbot.System.ConfigStorage]

# Configure your our init system.
config :farmbot, :init, [
Farmbot.Target.Leds.AleHandler,

# Autodetects if a Arduino is plugged in and configures accordingly.
Farmbot.Firmware.UartHandler.AutoDetector,

Expand All @@ -35,13 +44,19 @@ config :farmbot, :init, [
# Stops the disk from getting full.
Farmbot.Target.Network.TzdataTask,

# Reports SOC temperature to BotState.
Farmbot.Target.SocTempWorker,
# Reports Wifi info to BotState.
Farmbot.Target.Network.InfoSupervisor,

# Helps with hot plugging of serial devices.
Farmbot.Target.Uevent.Supervisor
Farmbot.Target.Uevent.Supervisor,
]

config :farmbot, :transport, [
Farmbot.BotState.Transport.AMQP,
Farmbot.BotState.Transport.HTTP,
Farmbot.BotState.Transport.Registry,
]

# Configure Farmbot Behaviours.
Expand All @@ -50,8 +65,10 @@ config :farmbot, :behaviour,
system_tasks: Farmbot.Target.SystemTasks,
firmware_handler: Farmbot.Firmware.StubHandler,
update_handler: Farmbot.Target.UpdateHandler,
gpio_handler: Farmbot.Target.GPIO.AleHandler
pin_binding_handler: Farmbot.Target.PinBinding.AleHandler,
leds_handler: Farmbot.Target.Leds.AleHandler

config :shoehorn,
init: [:nerves_runtime],
handler: Farmbot.ShoehornHandler,
app: :farmbot
4 changes: 4 additions & 0 deletions docs/BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ If you have the above set up you will need some software dependencies:
* Set the `ARDUINO_INSTALL_DIR` environment variable
* execute `.circleci/setup_arduino.sh`

## Optional dependencies
* python
* opencv-python

Following [this](http://embedded-elixir.com/post/2017-05-23-using-asdf-vm/) guide
will get you mostly setup.

Expand Down
11 changes: 10 additions & 1 deletion formatted_files
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ lib/farmbot/farmware/runtime.ex
lib/farmbot/farmware/runtime_error.ex
lib/farmbot/farmware/supervisor.ex
lib/farmbot/repo/worker.ex
lib/farmbot/system/gpio/gpio.ex
lib/farmbot/pin_binding/pin_binding.ex
lib/farmbot/pin_binding/stub_handler.ex
lib/farmbot/asset/farm_event.ex
lib/farmbot/asset/regimen.ex
lib/farmbot/jwt.ex
lib/farmbot/json/jason_parser.ex
lib/farmbot/json/parser.ex
lib/farmbot/bot_state/led_worker.ex
lib/farmbot/firmware/led_worker.ex
lib/farmbot/repo/led_worker.ex
platform/target/gpio/leds_ale_handler.ex
platform/target/gpio/pin_binding_ale_handler.ex
16 changes: 16 additions & 0 deletions lib/farmbot/asset/asset.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ defmodule Farmbot.Asset do
Device,
FarmEvent,
Peripheral,
PinBinding,
Point,
Regimen,
Sensor,
Expand All @@ -22,6 +23,7 @@ defmodule Farmbot.Asset do
Farmbot.Repo.delete_all(Device)
Farmbot.Repo.delete_all(FarmEvent)
Farmbot.Repo.delete_all(Peripheral)
Farmbot.Repo.delete_all(PinBinding)
Farmbot.Repo.delete_all(Point)
Farmbot.Repo.delete_all(Regimen)
Farmbot.Repo.delete_all(Sensor)
Expand All @@ -30,6 +32,10 @@ defmodule Farmbot.Asset do
:ok
end

def all_pin_bindings do
Farmbot.Repo.all(PinBinding)
end

@doc "Information about _this_ device."
def device do
Farmbot.Repo.one(Device)
Expand All @@ -40,11 +46,21 @@ defmodule Farmbot.Asset do
Farmbot.Repo.one(from(p in Peripheral, where: p.id == ^peripheral_id))
end

@doc "Get a peripheral by it's pin."
def get_peripheral_by_number(number) do
Farmbot.Repo.one(from(p in Peripheral, where: p.pin == ^number))
end

@doc "Get a Sensor by it's id."
def get_sensor_by_id(sensor_id) do
Farmbot.Repo.one(from(s in Sensor, where: s.id == ^sensor_id))
end

@doc "Get a sensor by it's pin."
def get_sensor_by_number(number) do
Farmbot.Repo.one(from(s in Sensor, where: s.pin == ^number))
end

@doc "Get a Sequence by it's id."
def get_sequence_by_id(sequence_id) do
Farmbot.Repo.one(from(s in Sequence, where: s.id == ^sequence_id))
Expand Down
6 changes: 3 additions & 3 deletions lib/farmbot/asset/farm_event.ex
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ defmodule Farmbot.Asset.FarmEvent do
def build_calendar(%__MODULE__{calendar: nil} = fe),
do: build_calendar(%{fe | calendar: []})

def build_calendar(%__MODULE__{time_unit: "never"} = fe), do: fe
def build_calendar(%__MODULE__{time_unit: "never"} = fe),
do: %{fe | calendar: [fe.start_time]}

def build_calendar(%__MODULE__{calendar: calendar} = fe)
when is_list(calendar) do
Expand All @@ -71,8 +72,7 @@ defmodule Farmbot.Asset.FarmEvent do
|> elem(1)
|> DateTime.to_unix(:second)

end_time_seconds =
DateTime.from_iso8601(fe.end_time) |> elem(1) |> DateTime.to_unix(:second)
end_time_seconds = DateTime.from_iso8601(fe.end_time) |> elem(1) |> DateTime.to_unix(:second)

repeat = fe.repeat
repeat_frequency_seconds = time_unit_to_seconds(fe.time_unit)
Expand Down
32 changes: 32 additions & 0 deletions lib/farmbot/asset/pin_binding.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
defmodule Farmbot.Asset.PinBinding do
@moduledoc """
When a pin binding is triggered a sequence fires.
"""
use Ecto.Schema
import Ecto.Changeset

schema "pin_bindings" do
field(:pin_num, :integer)
field(:sequence_id, :integer)
field(:special_action, :string)
end

@required_fields [:id, :pin_num]

def changeset(pin_binding, params \\ %{}) do
pin_binding
|> cast(params, @required_fields)
|> validate_required(@required_fields)
|> validate_pin_num()
|> unique_constraint(:id)
|> unique_constraint(:pin_num)
end

def validate_pin_num(changeset) do
if get_field(changeset, :pin_num, -1) in [17, 23, 27, 06, 21, 24, 25, 12, 13] do
add_error(changeset, :pin_num, "in use")
else
changeset
end
end
end
2 changes: 0 additions & 2 deletions lib/farmbot/bootstrap/auth_task.ex
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,11 @@ defmodule Farmbot.Bootstrap.AuthTask do
auth_task = Application.get_env(:farmbot, :behaviour)[:authorization]
{email, pass, server} = {fetch_email(), fetch_pass(), fetch_server()}
# Logger.busy(3, "refreshing token: #{email} - #{server}")
Farmbot.System.GPIO.Leds.led_status_err()
case auth_task.authorize(email, pass, server) do
{:ok, token} ->
# Logger.success(3, "Successful authorization: #{email} - #{server}")
update_config_value(:bool, "settings", "first_boot", false)
update_config_value(:string, "authorization", "token", token)
Farmbot.System.GPIO.Leds.led_status_ok()
if get_config_value(:bool, "settings", "auto_sync") do
# Force an auto sync
Farmbot.Repo.sync(2)
Expand Down
Loading

0 comments on commit 2234a7c

Please sign in to comment.