farmbot_os/apps/os/lib/farmbot/farmbot.ex

63 lines
1.7 KiB
Elixir

defmodule Farmbot do
@moduledoc """
Main entry point to the application.
Basically just starts some supervisors.
"""
require Logger
use Supervisor
alias Farmbot.Sync.Database
alias Nerves.Firmware
alias Farmbot.Supervisor, as: FarmbotSupervisor
alias Farmbot.FileSystem
alias FileSystem.Supervisor, as: FarmbotFSSupervisor
@doc """
Shortcut to Nerves.Firmware.reboot
"""
@spec reboot :: any
def reboot do
Logger.warn ">> going down for a reboot!"
Firmware.reboot
end
@doc """
Shortcut to Nerves.Firmware.poweroff
"""
@spec reboot :: any
def poweroff do
Logger.warn ">> going to power down!"
Firmware.poweroff
end
def init([%{target: target, compat_version: compat_version,
version: version, env: env}])
do
children = [
supervisor(FarmbotFSSupervisor, [{env, target}], [restart: :permanent]),
worker(Farmbot.Network, [target], [restart: :permanent]),
supervisor(FarmbotSupervisor,
[%{target: target,
compat_version: compat_version,
version: version,
env: env}],
restart: :permanent)
]
opts = [strategy: :one_for_one, name: Farmbot]
supervise(children, opts)
end
def start(_type, [%{target: target, compat_version: compat_version,
version: version, env: env}])
do
Logger.debug ">> is booting on #{target}."
Amnesia.start
Database.create! Keyword.put([], :memory, [node])
Database.wait(15_000)
Supervisor.start_link(__MODULE__,
[%{target: target, compat_version: compat_version,
version: version, env: env}])
end
def factory_reset, do: FileSystem.factory_reset
end