UNPKG

farmbot

Version:
222 lines (221 loc) 8.14 kB
import { NumberConfigKey } from "./resources/configs/firmware"; export type Primitive = string | number | boolean; /** Everything the farmbot knows about itself at a given moment in time. */ export interface BotStateTree { /** Microcontroller configuration and settings. */ mcu_params: McuParams; /** Cartesian coordinates of the bot. */ location_data: LocationData; /** Lookup table, indexed by number for pin status */ pins: Pins; /** User definable config settings. */ configuration: Configuration; /** READ ONLY meta data about the FarmBot device. */ readonly informational_settings: InformationalSettings; /** Bag of misc. ENV vars that any Farmware author can use. */ user_env: Dictionary<(string | undefined)>; /** When you're really curious about how a long-running * task (like FarmBot OS update downloads) is going to take. */ jobs: Dictionary<(JobProgress | undefined)>; /** List of user accessible processes running on the bot. */ process_info: { farmwares: Dictionary<FarmwareManifest>; }; gpio_registry: { [pin: number]: string | undefined; } | undefined; } /** Microcontroller board. */ export type FirmwareHardware = "none" | "arduino" | "express_k10" | "express_k11" | "express_k12" | "farmduino_k14" | "farmduino_k15" | "farmduino_k16" | "farmduino_k17" | "farmduino_k18" | "farmduino"; /** FarmBot motor and encoder positions. */ export type LocationName = "position" | "scaled_encoders" | "raw_encoders"; export type AxisState = "idle" | "begin" | "accelerate" | "cruise" | "decelerate" | "stop" | "crawl"; export interface LocationData { position: Record<Xyz, number | undefined>; scaled_encoders: Record<Xyz, number | undefined>; raw_encoders: Record<Xyz, number | undefined>; load?: Record<Xyz, number | undefined>; axis_states?: Record<Xyz, AxisState | undefined>; } /** Job progress status. */ export type ProgressStatus = "complete" | "working" | "error"; export type JobProgress = PercentageProgress | BytesProgress; interface JobProgressBase { status: ProgressStatus; type: string; file_type: string; time: string; updated_at: number; } /** Percent job progress. */ export interface PercentageProgress extends JobProgressBase { unit: "percent"; percent: number; } /** Bytes job progress. */ export interface BytesProgress extends JobProgressBase { unit: "bytes"; bytes: number; } /** Identified FarmBot OS problem. */ export interface Alert { id?: number; created_at: number; problem_tag: string; priority: number; slug: string; } /** * Configs (inputs) requested by a Farmware. * Can be namespaced and supplied to a run Farmware command. * Also used in FarmBot Web App Farmware page form builder. */ export type FarmwareConfig = Record<"name" | "label" | "value", string>; /** * The Farmware manifest is a JSON file published by Farmware authors. * It is used by FarmBot OS to perform installation and upgrades. */ export interface FarmwareManifest { /** "2.0" */ farmware_manifest_version: string; /** Farmware name. */ package: string; /** Farmware version. */ package_version: string; /** Farmware description (optional). */ description: string; /** Farmware author. */ author: string; /** Farmware language, eg: `python` (optional). */ language: string; /** The thing that will run the Farmware eg: `python`. */ executable: string; /** Command line args (combined into a string) passed to `executable`. */ args: string; /** Dictionary of `FarmwareConfig` with number (i.e., "1") keys. (optional) */ config: Dictionary<FarmwareConfig>; /** Required FarmBot OS version to run the Farmware, i.e., ">=8.0.0" */ farmbot_os_version_requirement: string; /** Required Farmware Tools version. Use ">=0.0.0" for latest version. */ farmware_tools_version_requirement: string; /** Farmware manifest URL (optional). */ url: string; /** Zipped Farmware files URL. */ zip: string; } export declare enum Encoder { unknown = -1, quadrature = 0, differential = 1 } /** Microcontroller firmware hardware setting names. */ export type McuParamName = NumberConfigKey; /** Microcontroller configuration and settings. */ export type McuParams = Partial<Record<McuParamName, (number | undefined)>>; /** Bot axis names. */ export type Xyz = "x" | "y" | "z"; /** 3 dimensional vector. */ export type Vector3 = Record<Xyz, number>; /** GPIO pin value record. */ export interface Pin { mode: number; value: number; } /** Lookup for pin status, indexed by pin number. */ export type Pins = Dictionary<Pin | undefined>; /** FarmBot OS configs. */ export interface FullConfiguration { arduino_debug_messages: number; boot_sequence_id?: number; firmware_debug_log?: boolean; firmware_hardware: FirmwareHardware; firmware_input_log: boolean; firmware_output_log: boolean; firmware_path?: string; fw_auto_update: number; os_auto_update: number; sequence_body_log: boolean; sequence_complete_log: boolean; sequence_init_log: boolean; update_channel?: string; safe_height?: number; soil_height?: number; gantry_height?: number; } /** FarmBot OS configs. */ export type Configuration = Partial<FullConfiguration>; /** FarmBot OS config names. */ export type ConfigurationName = keyof Configuration; /** The possible values for the sync_status property on informational_settings */ export type SyncStatus = "booting" | "maintenance" | "sync_error" | "sync_now" | "synced" | "syncing" | "unknown"; /** Various FarmBot OS status data. */ export interface InformationalSettings { /** System uptime in seconds. */ uptime?: number; /** Percentage of disk space used. */ disk_usage?: number; /** CPU utilization (percent). */ cpu_usage?: number; /** Scheduler utilization (percent). */ scheduler_usage?: number; /** Megabytes of RAM used. */ memory_usage?: number; /** CPU Temperature (C) of the device running FBOS (RPi). */ soc_temp?: number; /** WiFi signal strength (dBm). */ wifi_level?: number; /** WiFi signal strength (percent). */ wifi_level_percent?: number; /** FBOS commit hash. */ controller_commit?: string; /** Current version of FarmBot OS. */ controller_version?: string | undefined; /** Current uuid of FarmBot OS firmware. */ controller_uuid?: string | undefined; /** Arduino/Farmduino firmware version. */ firmware_version?: string | undefined; /** If the RPi is throttled and/or having WiFi issues. */ throttled?: string | undefined; /** Farmbot's private IP address */ private_ip?: string | undefined; /** The message to be displayed on the frontend for sync status. */ sync_status?: SyncStatus | undefined; /** Microcontroller status (move in progress, etc.) */ busy: boolean; /** Microcontroller status */ idle?: boolean; /** Emergency stop status. */ locked: boolean; /** FBOS commit hash. */ commit: string; /** Microcontroller firmware commit hash. */ firmware_commit: string; /** FBOS device type (rpi3, etc.). */ target: string; /** FBOS env (prod, dev, etc.). */ env: string; /** FBOS node name. */ node_name: string; /** FBOS is beta? */ currently_on_beta?: boolean; /** FBOS update available? */ update_available?: boolean; /** CSV list of available camera device numbers (/dev/video#). */ video_devices?: string; } export type MQTTEventName = "connect" | "message"; export interface Dictionary<T> { [key: string]: T; } export interface APIToken { /** LEGACY ISSUES AHEAD: PLEASE READ: * This is the *host* of MQTT server. A host is *not* the same thing as * a URL. This property is only useful for NodeJS users.*/ mqtt: string; /** Fully formed URL (port, protocol, host) pointing to the MQTT * websocket server. */ mqtt_ws: string; /** UUID of current bot, eg: "device_1". */ bot: string; } export {};