PlantWater
Human-centered plant care systems designed to help people understand, monitor, and care for plants through simple, adaptable, and understandable technology.
Project
The smallest useful picture of what this project is.
PlantWater
Human-centered plant care systems designed to help people understand, monitor, and care for plants through simple, adaptable, and understandable technology.
Principles
The rules and design principles the project is built around.
Components
The major systems and pieces that make up the project.
API Endpoints
Every discovered route is compact by default and expandable when you need its technical details.
src/routes/apikeys.py
3 endpoints
POST
/api/keys/create
create_key
— No description documented yet.
/api/keys/create
No description documented yet.
name
str
db
Depends
Session
= Depends(get_db)
GET
/api/keys
list_keys
— No description documented yet.
/api/keys
No description documented yet.
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
POST
/api/keys/{key_id}/revoke
revoke_key
— No description documented yet.
/api/keys/{key_id}/revoke
No description documented yet.
key_id
str
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
src/routes/beds.py
30 endpoints
POST
/api/bed-data
receive_data
— Accept and store sensor readings from ESP32 microcontroller.
/api/bed-data
Accept and store sensor readings from ESP32 microcontroller.
data
BedData
db
Depends
Session
= Depends(get_db)
GET
/api/beds
get_beds
— Retrieve the latest sensor reading for each plant bed.
/api/beds
Retrieve the latest sensor reading for each plant bed.
db
Depends
Session
= Depends(get_db)
GET
/api/beds/{bed_id}/history
history
— Retrieve recent historical readings for a specific plant bed.
/api/beds/{bed_id}/history
Retrieve recent historical readings for a specific plant bed.
bed_id
str
db
Depends
Session
= Depends(get_db)
GET
/api/beds/{bed_id}/range
get_range
— Retrieve sensor readings within a specific time range.
/api/beds/{bed_id}/range
Retrieve sensor readings within a specific time range.
bed_id
str
start
datetime
end
datetime
db
Depends
Session
= Depends(get_db)
GET
/api/beds/{bed_id}/graph
graph_data
— Retrieve sensor data formatted for frontend charting libraries.
/api/beds/{bed_id}/graph
Retrieve sensor data formatted for frontend charting libraries.
bed_id
str
limit
int
= 200
db
Depends
Session
= Depends(get_db)
GET
/api/beds/{bed_id}/stats
stats
— Calculate aggregated statistics for a plant bed's moisture data.
/api/beds/{bed_id}/stats
Calculate aggregated statistics for a plant bed's moisture data.
bed_id
str
db
Depends
Session
= Depends(get_db)
GET
/api/beds/latest
latest
— Get latest reading for each active bed (online detection).
/api/beds/latest
Get latest reading for each active bed (online detection).
db
Depends
Session
= Depends(get_db)
GET
/api/beds/{bed_id}/full-graph
full_graph
— Get detailed graph data including health and RSSI.
/api/beds/{bed_id}/full-graph
Get detailed graph data including health and RSSI.
bed_id
str
limit
int
= 200
db
Depends
Session
= Depends(get_db)
GET
/api/config/{bed_id}
get_config
— Retrieve current configuration settings for a plant bed.
/api/config/{bed_id}
Retrieve current configuration settings for a plant bed.
bed_id
str
db
Depends
Session
= Depends(get_db)
POST
/api/config/{bed_id}
update_config
— Update configuration settings for a plant bed.
/api/config/{bed_id}
Update configuration settings for a plant bed.
bed_id
str
config
BedConfig
db
Depends
Session
= Depends(get_db)
POST
/api/should-water
should_water
— Intelligent watering decision engine.
/api/should-water
Intelligent watering decision engine.
bed_id
str
average_moisture
float
db
Depends
Session
= Depends(get_db)
POST
/api/water
water_bed
— Manually control valve irrigation.
/api/water
Manually control valve irrigation.
bed_id
str
duration
int
= 3
GET
/api/valve/{bed_id}
valve_status
— Get current valve status.
/api/valve/{bed_id}
Get current valve status.
bed_id
str
POST
/api/beds/{bed_id}/mode
set_mode
— Set bed operating mode.
/api/beds/{bed_id}/mode
Set bed operating mode.
bed_id
str
mode
str
GET
/api/beds/{bed_id}/mode
get_mode
— Get bed operating mode.
/api/beds/{bed_id}/mode
Get bed operating mode.
bed_id
str
POST
/api/beds/{bed_id}/water-cycle
water_cycle
— Track watering cycle for lifetime stats.
/api/beds/{bed_id}/water-cycle
Track watering cycle for lifetime stats.
bed_id
str
valve_state
str
GET
/api/beds/{bed_id}/lifetime
lifetime_stats
— Get lifetime watering statistics from database.
/api/beds/{bed_id}/lifetime
Get lifetime watering statistics from database.
bed_id
str
db
Depends
Session
= Depends(get_db)
POST
/api/beds/{bed_id}/meta
save_bed_meta
— Save bed metadata (name, icon).
/api/beds/{bed_id}/meta
Save bed metadata (name, icon).
bed_id
str
data
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
GET
/api/beds/{bed_id}/meta
get_bed_meta
— Get bed metadata.
/api/beds/{bed_id}/meta
Get bed metadata.
bed_id
str
db
Depends
Session
= Depends(get_db)
GET
/api/beds/meta
get_all_bed_meta
— Get all bed metadata.
/api/beds/meta
Get all bed metadata.
db
Depends
Session
= Depends(get_db)
GET
/api/beds/{bed_id}/health
get_bed_health
— Get plant health status.
/api/beds/{bed_id}/health
Get plant health status.
bed_id
str
db
Depends
Session
= Depends(get_db)
GET
/api/beds/{bed_id}/risk
bed_risk_next_hour
— Predict risk of drying in next hour.
/api/beds/{bed_id}/risk
Predict risk of drying in next hour.
bed_id
str
db
Depends
Session
= Depends(get_db)
GET
/health
health
— Health check endpoint for monitoring.
/health
Health check endpoint for monitoring.
DELETE
/api/cleanup
cleanup
— Delete historical data older than 7 days.
/api/cleanup
Delete historical data older than 7 days.
db
Depends
Session
= Depends(get_db)
GET
/api/will-rain
weather_api
— Check if rain is expected.
/api/will-rain
Check if rain is expected.
GET
/api/weather/current
weather_current
— Get current weather.
/api/weather/current
Get current weather.
GET
/api/weather
weather_summary
— Get cached weather summary.
/api/weather
Get cached weather summary.
GET
/api/system/overview
system_overview
— Get system status at a glance.
/api/system/overview
Get system status at a glance.
db
Depends
Session
= Depends(get_db)
POST
/api/node/heartbeat
node_heartbeat
— Record node heartbeat and connectivity info.
/api/node/heartbeat
Record node heartbeat and connectivity info.
bed_id
Query
str
= Query(...)
ip
Query
str
= Query(None)
rssi
Query
int
= Query(None)
GET
/api/beds/{bed_id}/history
get_history
— No description documented yet.
/api/beds/{bed_id}/history
No description documented yet.
bed_id
str
db
Depends
Session
= Depends(get_db)
src/routes/bot_bridge.py
2 endpoints
POST
/queue
add_message
— No description documented yet.
/queue
No description documented yet.
msg
Msg
GET
/poll
get_messages
— No description documented yet.
/poll
No description documented yet.
src/routes/dis.py
8 endpoints
GET
/api/discord/connect
discord_connect
— No description documented yet.
/api/discord/connect
No description documented yet.
GET
/api/discord/callback
discord_callback
— No description documented yet.
/api/discord/callback
No description documented yet.
request
Request
code
str
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
GET
/api/discord/me
get_my_discord
— No description documented yet.
/api/discord/me
No description documented yet.
user
Depends
User
= Depends(get_current_user)
db
Depends
Session
= Depends(get_db)
DELETE
/api/discord/disconnect
disconnect_discord
— No description documented yet.
/api/discord/disconnect
No description documented yet.
user
Depends
User
= Depends(get_current_user)
db
Depends
Session
= Depends(get_db)
POST
/api/discord/test
test_discord_dm
— No description documented yet.
/api/discord/test
No description documented yet.
payload
dict
user
Depends
User
= Depends(get_current_user)
db
Depends
Session
= Depends(get_db)
GET
/api/discord/users
get_discord_users
— No description documented yet.
/api/discord/users
No description documented yet.
db
Depends
Session
= Depends(get_db)
POST
/api/user/link-discord
link_discord
— No description documented yet.
/api/user/link-discord
No description documented yet.
user_id
int
discord_user_id
str
db
Depends
Session
= Depends(get_db)
DELETE
/api/discord/disconnect
disconnect_discord
— No description documented yet.
/api/discord/disconnect
No description documented yet.
db
Depends
Session
= Depends(get_db)
user
Depends
= Depends(get_current_user)
src/routes/firebase.py
3 endpoints
POST
/register-device
register_device_token
— Registers Firebase device token (multi-device safe).
/register-device
Registers Firebase device token (multi-device safe).
data
DeviceTokenRegister
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
POST
/firebase-token
save_firebase_token
— No description documented yet.
/firebase-token
No description documented yet.
data
dict
user
Depends
User
= Depends(get_current_user)
db
Depends
Session
= Depends(get_db)
DELETE
/firebase-token
disable_firebase
— Removes a specific Firebase token for multi-device support. If no token specified in body, removes…
/firebase-token
Removes a specific Firebase token for multi-device support. If no token specified in body, removes all tokens (backward compatibility).
data
DeviceTokenRemove
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
src/routes/notfics.py
5 endpoints
POST
/test
test_notification
— Send a test message to the currently authenticated user. Body: { "message": str }
/test
Send a test message to the currently authenticated user. Body: { "message": str }
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
POST
/send/info
send_info
— No description documented yet.
/send/info
No description documented yet.
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
POST
/send/error
send_error
— No description documented yet.
/send/error
No description documented yet.
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
POST
/send/alert
send_alert
— No description documented yet.
/send/alert
No description documented yet.
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
GET
/contact
get_contact
— Debug endpoint to verify stored contact info for logged-in user.
/contact
Debug endpoint to verify stored contact info for logged-in user.
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
src/routes/pages.py
12 endpoints
GET
/
dashboard
— No description documented yet.
/
No description documented yet.
request
Request
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
GET
/about
about_page
— No description documented yet.
/about
No description documented yet.
GET
/nodes
node_status_page
— No description documented yet.
/nodes
No description documented yet.
user
Depends
User
= Depends(get_current_user)
GET
/bed/{bed_id}/analytics
bed_analytics_page
— No description documented yet.
/bed/{bed_id}/analytics
No description documented yet.
bed_id
str
db
Depends
Session
= Depends(get_db)
GET
/bed/{bed_id}/analytics
bed_analytics_page
— No description documented yet.
/bed/{bed_id}/analytics
No description documented yet.
bed_id
str
db
Depends
Session
= Depends(get_db)
GET
/device/{bed_id}
device_page
— No description documented yet.
/device/{bed_id}
No description documented yet.
bed_id
str
db
Depends
Session
= Depends(get_db)
GET
/register
register_page
— No description documented yet.
/register
No description documented yet.
GET
/login
login_page
— No description documented yet.
/login
No description documented yet.
GET
/setup-contact
setup_contact
— No description documented yet.
/setup-contact
No description documented yet.
GET
/notifications
notifications_page
— No description documented yet.
/notifications
No description documented yet.
request
Request
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
GET
/api-keys
api_keys_page
— No description documented yet.
/api-keys
No description documented yet.
request
Request
user
Depends
User
= Depends(get_current_user)
GET
/app/docs
custom_docs
— No description documented yet.
/app/docs
No description documented yet.
src/routes/users.py
7 endpoints
POST
/api/register
register
— Register new user account.
/api/register
Register new user account.
data
RegisterRequest
response
Response
db
Depends
Session
= Depends(get_db)
POST
/api/login
login
— Login with email and password.
/api/login
Login with email and password.
data
LoginRequest
response
Response
db
Depends
Session
= Depends(get_db)
GET
/logout
logout
— Logout user by clearing cookies.
/logout
Logout user by clearing cookies.
POST
/api/user/contact
save_user_contact
— Save user contact information for SMS alerts.
/api/user/contact
Save user contact information for SMS alerts.
data
ContactRequest
db
Depends
Session
= Depends(get_db)
user
Depends
= Depends(get_current_user)
GET
/api/carriers
get_carriers
— Get available SMS carriers.
/api/carriers
Get available SMS carriers.
GET
/api/user/notifications
get_notifications
— No description documented yet.
/api/user/notifications
No description documented yet.
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
POST
/api/user/notifications
update_notifications
— No description documented yet.
/api/user/notifications
No description documented yet.
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
Functions & Methods
Searchable, grouped symbols with details hidden until requested.
barkly_docs.py
50 symbols
esc
No description documented yet.
barkly_docs.py:229
No description documented yet.
esc(value: object) -> str
value
object
compact_doc
No description documented yet.
barkly_docs.py:233
No description documented yet.
compact_doc(doc: str, limit: int = 180) -> str
doc
str
limit
int
= 180
full_doc
No description documented yet.
barkly_docs.py:245
No description documented yet.
full_doc(doc: str) -> str
doc
str
expression_text
No description documented yet.
barkly_docs.py:252
No description documented yet.
expression_text(node: Optional[ast.AST]) -> str
node
Optional[ast.AST]
annotation_text
No description documented yet.
barkly_docs.py:262
No description documented yet.
annotation_text(node: Optional[ast.AST]) -> str
node
Optional[ast.AST]
relative_file
No description documented yet.
barkly_docs.py:266
No description documented yet.
relative_file(path: Path, root: Path) -> str
path
Path
root
Path
code_line
No description documented yet.
barkly_docs.py:273
No description documented yet.
code_line(file: str, line: int) -> str
file
str
line
int
short_hash
No description documented yet.
barkly_docs.py:277
No description documented yet.
short_hash(value: str) -> str
value
str
safe_call
No description documented yet.
barkly_docs.py:281
No description documented yet.
safe_call(command: list[str], cwd: Path) -> str
command
list[str]
cwd
Path
git_branch
No description documented yet.
barkly_docs.py:300
No description documented yet.
git_branch(root: Path) -> str
root
Path
git_commit
No description documented yet.
barkly_docs.py:307
No description documented yet.
git_commit(root: Path) -> str
root
Path
git_log
No description documented yet.
barkly_docs.py:314
No description documented yet.
git_log(root: Path, limit: int = 8) -> list[str]
root
Path
limit
int
= 8
node_doc
No description documented yet.
barkly_docs.py:336
No description documented yet.
node_doc(node: ast.AST) -> str
node
ast.AST
decorator_name
No description documented yet.
barkly_docs.py:340
No description documented yet.
decorator_name(node: ast.AST) -> str
node
ast.AST
decorator_text
No description documented yet.
barkly_docs.py:354
No description documented yet.
decorator_text(node: ast.AST) -> str
node
ast.AST
decorators_for
No description documented yet.
barkly_docs.py:358
No description documented yet.
decorators_for(node: ast.AST) -> list[str]
node
ast.AST
parameter_kind
No description documented yet.
barkly_docs.py:365
No description documented yet.
parameter_kind(name: str, default_node: Optional[ast.AST]) -> str
name
str
default_node
Optional[ast.AST]
collect_parameters
No description documented yet.
barkly_docs.py:390
No description documented yet.
collect_parameters(node: ast.FunctionDef | ast.AsyncFunctionDef) -> list[Parameter]
node
ast.FunctionDef | ast.AsyncFunctionDef
call_root_name
No description documented yet.
barkly_docs.py:458
No description documented yet.
call_root_name(node: ast.Call) -> str
node
ast.Call
extract_string_argument
No description documented yet.
barkly_docs.py:468
No description documented yet.
extract_string_argument(call: ast.Call, index: int = 0) -> str
call
ast.Call
index
int
= 0
extract_methods_keyword
No description documented yet.
barkly_docs.py:483
No description documented yet.
extract_methods_keyword(call: ast.Call) -> list[str]
call
ast.Call
endpoint_from_decorator
No description documented yet.
barkly_docs.py:502
No description documented yet.
endpoint_from_decorator(decorator: ast.AST, function: ast.FunctionDef | ast.AsyncFunctionDef, file: str) -> Optional[EndpointInfo]
decorator
ast.AST
function
ast.FunctionDef | ast.AsyncFunctionDef
file
str
scan_python
No description documented yet.
barkly_docs.py:763
No description documented yet.
scan_python(root: Path) -> PythonScanner
root
Path
symbol_key
No description documented yet.
barkly_docs.py:773
No description documented yet.
symbol_key(function: FunctionInfo) -> str
function
FunctionInfo
class_key
No description documented yet.
barkly_docs.py:777
No description documented yet.
class_key(item: ClassInfo) -> str
item
ClassInfo
endpoint_key
No description documented yet.
barkly_docs.py:781
No description documented yet.
endpoint_key(item: EndpointInfo) -> str
item
EndpointInfo
function_fingerprint
No description documented yet.
barkly_docs.py:790
No description documented yet.
function_fingerprint(item: FunctionInfo) -> str
item
FunctionInfo
class_fingerprint
No description documented yet.
barkly_docs.py:804
No description documented yet.
class_fingerprint(item: ClassInfo) -> str
item
ClassInfo
endpoint_fingerprint
No description documented yet.
barkly_docs.py:821
No description documented yet.
endpoint_fingerprint(item: EndpointInfo) -> str
item
EndpointInfo
load_state
No description documented yet.
barkly_docs.py:846
No description documented yet.
load_state(path: Path) -> dict
path
Path
apply_state
No description documented yet.
barkly_docs.py:872
No description documented yet.
apply_state(scanner: PythonScanner, previous: dict) -> dict
scanner
PythonScanner
previous
dict
load_project_config
No description documented yet.
barkly_docs.py:930
No description documented yet.
load_project_config(root: Path) -> dict
root
Path
init_project
No description documented yet.
barkly_docs.py:952
No description documented yet.
init_project(root: Path) -> None
root
Path
badge
No description documented yet.
barkly_docs.py:974
No description documented yet.
badge(text: str, kind: str = '') -> str
text
str
kind
str
= ''
status_badges
No description documented yet.
barkly_docs.py:988
No description documented yet.
status_badges(is_new: bool, is_changed: bool) -> str
is_new
bool
is_changed
bool
parameter_summary
No description documented yet.
barkly_docs.py:1008
No description documented yet.
parameter_summary(params: list[Parameter]) -> str
params
list[Parameter]
parameter_details
No description documented yet.
barkly_docs.py:1021
No description documented yet.
parameter_details(params: list[Parameter]) -> str
params
list[Parameter]
function_row
No description documented yet.
barkly_docs.py:1081
No description documented yet.
function_row(item: FunctionInfo, show_class: bool = False) -> str
item
FunctionInfo
show_class
bool
= False
method_group
No description documented yet.
barkly_docs.py:1190
No description documented yet.
method_group(title: str, functions: list[FunctionInfo]) -> str
title
str
functions
list[FunctionInfo]
class_group
No description documented yet.
barkly_docs.py:1255
No description documented yet.
class_group(item: ClassInfo) -> str
item
ClassInfo
endpoint_row
No description documented yet.
barkly_docs.py:1343
No description documented yet.
endpoint_row(item: EndpointInfo) -> str
item
EndpointInfo
module_row
No description documented yet.
barkly_docs.py:1458
No description documented yet.
module_row(module: ModuleInfo) -> str
module
ModuleInfo
section
No description documented yet.
barkly_docs.py:1537
No description documented yet.
section(number: str, title: str, description: str, body: str) -> str
number
str
title
str
description
str
body
str
info_card
No description documented yet.
barkly_docs.py:1577
No description documented yet.
info_card(title: str, value: str, description: str = '') -> str
title
str
value
str
description
str
= ''
simple_card_grid
No description documented yet.
barkly_docs.py:1604
No description documented yet.
simple_card_grid(values: list[str]) -> str
values
list[str]
search_toolbar
No description documented yet.
barkly_docs.py:1621
No description documented yet.
search_toolbar(input_id: str, count_id: str, new_id: str, placeholder: str) -> str
input_id
str
count_id
str
new_id
str
placeholder
str
build_html
No description documented yet.
barkly_docs.py:1667
No description documented yet.
build_html(project: dict, scanner: PythonScanner, state: dict, root: Path) -> str
project
dict
scanner
PythonScanner
state
dict
root
Path
generate
No description documented yet.
barkly_docs.py:3402
No description documented yet.
generate(source: Path, output: Path, name: Optional[str] = None, project_type: Optional[str] = None, status: Optional[str] = None) -> None
source
Path
output
Path
name
Optional[str]
= None
project_type
Optional[str]
= None
status
Optional[str]
= None
build_parser
No description documented yet.
barkly_docs.py:3494
No description documented yet.
build_parser() -> argparse.ArgumentParser
main
No description documented yet.
barkly_docs.py:3558
No description documented yet.
main() -> None
bot/bot.py
9 symbols
api_get
No description documented yet.
bot/bot.py:41
No description documented yet.
api_get(path)
path
api_post
No description documented yet.
bot/bot.py:49
No description documented yet.
api_post(path)
path
get_beds
No description documented yet.
bot/bot.py:56
No description documented yet.
get_beds()
get_history
No description documented yet.
bot/bot.py:60
No description documented yet.
get_history(bed_id)
bed_id
safe_dm
No description documented yet.
bot/bot.py:70
No description documented yet.
safe_dm(user_id, msg)
user_id
msg
poll_messages
No description documented yet.
bot/bot.py:81
No description documented yet.
poll_messages()
signal_state
No description documented yet.
bot/bot.py:114
No description documented yet.
signal_state(rssi)
rssi
monitor_system
No description documented yet.
bot/bot.py:124
No description documented yet.
monitor_system()
on_ready
No description documented yet.
bot/bot.py:155
No description documented yet.
on_ready()
esp32-firmware/firmware/main.py
3 symbols
emergency_shutdown
No description documented yet.
esp32-firmware/firmware/main.py:114
No description documented yet.
emergency_shutdown()
run_watering
No description documented yet.
esp32-firmware/firmware/main.py:133
No description documented yet.
run_watering(seconds)
seconds
main
No description documented yet.
esp32-firmware/firmware/main.py:183
No description documented yet.
main()
src/auth.py
5 symbols
decode_token
Decode JWT token safely
src/auth.py:27
Decode JWT token safely
decode_token(token: str)
token
str
get_current_user
Cookie-based authentication. Reads user_id from cookie and validates against DB.
src/auth.py:39
Cookie-based authentication. Reads user_id from cookie and validates against DB.
get_current_user(request: Request, db: Session = Depends(get_db))
request
Request
db
Depends
Session
= Depends(get_db)
generate_raw_key
No description documented yet.
src/auth.py:68
No description documented yet.
generate_raw_key()
hash_key
No description documented yet.
src/auth.py:72
No description documented yet.
hash_key(raw_key: str)
raw_key
str
verify_api_key
API key validation via SHA256 hash lookup
src/auth.py:76
API key validation via SHA256 hash lookup
verify_api_key(x_api_key: str = Header(None), db: Session = Depends(get_db))
x_api_key
Header
str
= Header(None)
db
Depends
Session
= Depends(get_db)
src/db.py
3 symbols
get_db
Dependency function to provide database session to route handlers. Creates a new database session for each request, ensuring prop…
src/db.py:25
Dependency function to provide database session to route handlers. Creates a new database session for each request, ensuring proper resource management with automatic cleanup in a finally block. Yields: Session: SQLAlchemy session for database operations
get_db()
weather_loop
Background thread that updates global weather every minute
src/db.py:78
Background thread that updates global weather every minute
weather_loop()
start_weather_thread
Start the background weather update thread
src/db.py:93
Start the background weather update thread
start_weather_thread()
src/deps.py
1 symbols
get_current_user
No description documented yet.
src/deps.py:6
No description documented yet.
get_current_user(request: Request, db: Session = Depends(get_db))
request
Request
db
Depends
Session
= Depends(get_db)
src/routes/apikeys.py
3 symbols
create_key
No description documented yet.
src/routes/apikeys.py:24
No description documented yet.
create_key(name: str, db: Session = Depends(get_db))
name
str
db
Depends
Session
= Depends(get_db)
list_keys
No description documented yet.
src/routes/apikeys.py:43
No description documented yet.
list_keys(db: Session = Depends(get_db), user: User = Depends(get_current_user))
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
revoke_key
No description documented yet.
src/routes/apikeys.py:58
No description documented yet.
revoke_key(key_id: str, db: Session = Depends(get_db), user: User = Depends(get_current_user))
key_id
str
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
src/routes/beds.py
34 symbols
is_rain_spike
Detect sudden spike in moisture (rain event)
src/routes/beds.py:33
Detect sudden spike in moisture (rain event)
is_rain_spike(bed_id, current, previous)
bed_id
current
previous
calculate_health
Calculate plant health score from sensor data
src/routes/beds.py:40
Calculate plant health score from sensor data
calculate_health(moisture_values, rssi_values)
moisture_values
rssi_values
current_weather
Fetch current weather from OpenWeather API
src/routes/beds.py:84
Fetch current weather from OpenWeather API
current_weather()
get_weather
Get weather with caching
src/routes/beds.py:109
Get weather with caching
get_weather()
receive_data
Accept and store sensor readings from ESP32 microcontroller.
src/routes/beds.py:140
Accept and store sensor readings from ESP32 microcontroller.
receive_data(data: BedData, db: Session = Depends(get_db))
data
BedData
db
Depends
Session
= Depends(get_db)
get_beds
Retrieve the latest sensor reading for each plant bed.
src/routes/beds.py:218
Retrieve the latest sensor reading for each plant bed.
get_beds(db: Session = Depends(get_db))
db
Depends
Session
= Depends(get_db)
history
Retrieve recent historical readings for a specific plant bed.
src/routes/beds.py:238
Retrieve recent historical readings for a specific plant bed.
history(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
get_range
Retrieve sensor readings within a specific time range.
src/routes/beds.py:260
Retrieve sensor readings within a specific time range.
get_range(bed_id: str, start: datetime, end: datetime, db: Session = Depends(get_db))
bed_id
str
start
datetime
end
datetime
db
Depends
Session
= Depends(get_db)
graph_data
Retrieve sensor data formatted for frontend charting libraries.
src/routes/beds.py:284
Retrieve sensor data formatted for frontend charting libraries.
graph_data(bed_id: str, limit: int = 200, db: Session = Depends(get_db))
bed_id
str
limit
int
= 200
db
Depends
Session
= Depends(get_db)
stats
Calculate aggregated statistics for a plant bed's moisture data.
src/routes/beds.py:304
Calculate aggregated statistics for a plant bed's moisture data.
stats(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
latest
Get latest reading for each active bed (online detection).
src/routes/beds.py:323
Get latest reading for each active bed (online detection).
latest(db: Session = Depends(get_db))
db
Depends
Session
= Depends(get_db)
full_graph
Get detailed graph data including health and RSSI.
src/routes/beds.py:365
Get detailed graph data including health and RSSI.
full_graph(bed_id: str, limit: int = 200, db: Session = Depends(get_db))
bed_id
str
limit
int
= 200
db
Depends
Session
= Depends(get_db)
get_config
Retrieve current configuration settings for a plant bed.
src/routes/beds.py:414
Retrieve current configuration settings for a plant bed.
get_config(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
update_config
Update configuration settings for a plant bed.
src/routes/beds.py:434
Update configuration settings for a plant bed.
update_config(bed_id: str, config: BedConfig, db: Session = Depends(get_db))
bed_id
str
config
BedConfig
db
Depends
Session
= Depends(get_db)
should_water
Intelligent watering decision engine.
src/routes/beds.py:455
Intelligent watering decision engine.
should_water(bed_id: str, average_moisture: float, db: Session = Depends(get_db))
bed_id
str
average_moisture
float
db
Depends
Session
= Depends(get_db)
water_bed
Manually control valve irrigation.
src/routes/beds.py:504
Manually control valve irrigation.
water_bed(bed_id: str, duration: int = 3)
bed_id
str
duration
int
= 3
valve_status
Get current valve status.
src/routes/beds.py:513
Get current valve status.
valve_status(bed_id: str)
bed_id
str
set_mode
Set bed operating mode.
src/routes/beds.py:529
Set bed operating mode.
set_mode(bed_id: str, mode: str)
bed_id
str
mode
str
get_mode
Get bed operating mode.
src/routes/beds.py:538
Get bed operating mode.
get_mode(bed_id: str)
bed_id
str
water_cycle
Track watering cycle for lifetime stats.
src/routes/beds.py:551
Track watering cycle for lifetime stats.
water_cycle(bed_id: str, valve_state: str)
bed_id
str
valve_state
str
lifetime_stats
Get lifetime watering statistics from database.
src/routes/beds.py:586
Get lifetime watering statistics from database.
lifetime_stats(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
save_bed_meta
Save bed metadata (name, icon).
src/routes/beds.py:631
Save bed metadata (name, icon).
save_bed_meta(bed_id: str, data: dict, db: Session = Depends(get_db), user: User = Depends(get_current_user))
bed_id
str
data
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
get_bed_meta
Get bed metadata.
src/routes/beds.py:665
Get bed metadata.
get_bed_meta(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
get_all_bed_meta
Get all bed metadata.
src/routes/beds.py:686
Get all bed metadata.
get_all_bed_meta(db: Session = Depends(get_db))
db
Depends
Session
= Depends(get_db)
get_bed_health
Get plant health status.
src/routes/beds.py:705
Get plant health status.
get_bed_health(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
bed_risk_next_hour
Predict risk of drying in next hour.
src/routes/beds.py:739
Predict risk of drying in next hour.
bed_risk_next_hour(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
health
Health check endpoint for monitoring.
src/routes/beds.py:815
Health check endpoint for monitoring.
health()
cleanup
Delete historical data older than 7 days.
src/routes/beds.py:821
Delete historical data older than 7 days.
cleanup(db: Session = Depends(get_db))
db
Depends
Session
= Depends(get_db)
weather_api
Check if rain is expected.
src/routes/beds.py:831
Check if rain is expected.
weather_api()
weather_current
Get current weather.
src/routes/beds.py:837
Get current weather.
weather_current()
weather_summary
Get cached weather summary.
src/routes/beds.py:843
Get cached weather summary.
weather_summary()
system_overview
Get system status at a glance.
src/routes/beds.py:863
Get system status at a glance.
system_overview(db: Session = Depends(get_db))
db
Depends
Session
= Depends(get_db)
node_heartbeat
Record node heartbeat and connectivity info.
src/routes/beds.py:897
Record node heartbeat and connectivity info.
node_heartbeat(bed_id: str = Query(...), ip: str = Query(None), rssi: int = Query(None))
bed_id
Query
str
= Query(...)
ip
Query
str
= Query(None)
rssi
Query
int
= Query(None)
get_history
No description documented yet.
src/routes/beds.py:912
No description documented yet.
get_history(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
src/routes/bot_bridge.py
3 symbols
add_message
No description documented yet.
src/routes/bot_bridge.py:14
No description documented yet.
add_message(msg: Msg)
msg
Msg
get_messages
No description documented yet.
src/routes/bot_bridge.py:20
No description documented yet.
get_messages()
push_bot_message
payload: { "discord_user_id": "123", "message": "hello" }
src/routes/bot_bridge.py:27
payload: { "discord_user_id": "123", "message": "hello" }
push_bot_message(payload: dict)
payload
dict
src/routes/dis.py
9 symbols
discord_connect
No description documented yet.
src/routes/dis.py:33
No description documented yet.
discord_connect()
discord_callback
No description documented yet.
src/routes/dis.py:50
No description documented yet.
discord_callback(request: Request, code: str, db: Session = Depends(get_db), user: User = Depends(get_current_user))
request
Request
code
str
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
get_my_discord
No description documented yet.
src/routes/dis.py:133
No description documented yet.
get_my_discord(user: User = Depends(get_current_user), db: Session = Depends(get_db))
user
Depends
User
= Depends(get_current_user)
db
Depends
Session
= Depends(get_db)
disconnect_discord
No description documented yet.
src/routes/dis.py:156
No description documented yet.
disconnect_discord(user: User = Depends(get_current_user), db: Session = Depends(get_db))
user
Depends
User
= Depends(get_current_user)
db
Depends
Session
= Depends(get_db)
send_discord_dm
No description documented yet.
src/routes/dis.py:175
No description documented yet.
send_discord_dm(discord_user_id: str, message: str) -> dict
discord_user_id
str
message
str
test_discord_dm
No description documented yet.
src/routes/dis.py:213
No description documented yet.
test_discord_dm(payload: dict, user: User = Depends(get_current_user), db: Session = Depends(get_db))
payload
dict
user
Depends
User
= Depends(get_current_user)
db
Depends
Session
= Depends(get_db)
get_discord_users
No description documented yet.
src/routes/dis.py:228
No description documented yet.
get_discord_users(db: Session = Depends(get_db))
db
Depends
Session
= Depends(get_db)
link_discord
No description documented yet.
src/routes/dis.py:240
No description documented yet.
link_discord(user_id: int, discord_user_id: str, db: Session = Depends(get_db))
user_id
int
discord_user_id
str
db
Depends
Session
= Depends(get_db)
disconnect_discord
No description documented yet.
src/routes/dis.py:259
No description documented yet.
disconnect_discord(db: Session = Depends(get_db), user = Depends(get_current_user))
db
Depends
Session
= Depends(get_db)
user
Depends
= Depends(get_current_user)
src/routes/firebase.py
3 symbols
register_device_token
Registers Firebase device token (multi-device safe).
src/routes/firebase.py:28
Registers Firebase device token (multi-device safe).
register_device_token(data: DeviceTokenRegister, db: Session = Depends(get_db), user: User = Depends(get_current_user))
data
DeviceTokenRegister
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
save_firebase_token
No description documented yet.
src/routes/firebase.py:75
No description documented yet.
save_firebase_token(data: dict, user: User = Depends(get_current_user), db: Session = Depends(get_db))
data
dict
user
Depends
User
= Depends(get_current_user)
db
Depends
Session
= Depends(get_db)
disable_firebase
Removes a specific Firebase token for multi-device support. If no token specified in body, removes all tokens (backward compatibi…
src/routes/firebase.py:133
Removes a specific Firebase token for multi-device support. If no token specified in body, removes all tokens (backward compatibility).
disable_firebase(data: DeviceTokenRemove, db: Session = Depends(get_db), user: User = Depends(get_current_user))
data
DeviceTokenRemove
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
src/routes/notfics.py
5 symbols
test_notification
Send a test message to the currently authenticated user. Body: { "message": str }
src/routes/notfics.py:18
Send a test message to the currently authenticated user. Body: { "message": str }
test_notification(payload: dict, db: Session = Depends(get_db), user: User = Depends(get_current_user))
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
send_info
No description documented yet.
src/routes/notfics.py:37
No description documented yet.
send_info(payload: dict, db: Session = Depends(get_db), user: User = Depends(get_current_user))
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
send_error
No description documented yet.
src/routes/notfics.py:54
No description documented yet.
send_error(payload: dict, db: Session = Depends(get_db), user: User = Depends(get_current_user))
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
send_alert
No description documented yet.
src/routes/notfics.py:71
No description documented yet.
send_alert(payload: dict, db: Session = Depends(get_db), user: User = Depends(get_current_user))
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
get_contact
Debug endpoint to verify stored contact info for logged-in user.
src/routes/notfics.py:88
Debug endpoint to verify stored contact info for logged-in user.
get_contact(db: Session = Depends(get_db), user: User = Depends(get_current_user))
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
src/routes/pages.py
12 symbols
page
No description documented yet.
src/routes/pages.py:171
No description documented yet.
page(title: str, body: str)
title
str
body
str
dashboard
No description documented yet.
src/routes/pages.py:210
No description documented yet.
dashboard(request: Request, db: Session = Depends(get_db), user: User = Depends(get_current_user))
request
Request
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
about_page
No description documented yet.
src/routes/pages.py:427
No description documented yet.
about_page()
node_status_page
No description documented yet.
src/routes/pages.py:531
No description documented yet.
node_status_page(user: User = Depends(get_current_user))
user
Depends
User
= Depends(get_current_user)
bed_analytics_page
No description documented yet.
src/routes/pages.py:628
No description documented yet.
bed_analytics_page(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
device_page
No description documented yet.
src/routes/pages.py:931
No description documented yet.
device_page(bed_id: str, db: Session = Depends(get_db))
bed_id
str
db
Depends
Session
= Depends(get_db)
register_page
No description documented yet.
src/routes/pages.py:1196
No description documented yet.
register_page()
login_page
No description documented yet.
src/routes/pages.py:1247
No description documented yet.
login_page()
setup_contact
No description documented yet.
src/routes/pages.py:1302
No description documented yet.
setup_contact()
notifications_page
No description documented yet.
src/routes/pages.py:1431
No description documented yet.
notifications_page(request: Request, db: Session = Depends(get_db), user: User = Depends(get_current_user))
request
Request
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
api_keys_page
No description documented yet.
src/routes/pages.py:1823
No description documented yet.
api_keys_page(request: Request, user: User = Depends(get_current_user))
request
Request
user
Depends
User
= Depends(get_current_user)
custom_docs
No description documented yet.
src/routes/pages.py:1982
No description documented yet.
custom_docs()
src/routes/users.py
7 symbols
register
Register new user account.
src/routes/users.py:24
Register new user account.
register(data: RegisterRequest, response: Response, db: Session = Depends(get_db))
data
RegisterRequest
response
Response
db
Depends
Session
= Depends(get_db)
login
Login with email and password.
src/routes/users.py:56
Login with email and password.
login(data: LoginRequest, response: Response, db: Session = Depends(get_db))
data
LoginRequest
response
Response
db
Depends
Session
= Depends(get_db)
logout
Logout user by clearing cookies.
src/routes/users.py:78
Logout user by clearing cookies.
logout()
save_user_contact
Save user contact information for SMS alerts.
src/routes/users.py:93
Save user contact information for SMS alerts.
save_user_contact(data: ContactRequest, db: Session = Depends(get_db), user = Depends(get_current_user))
data
ContactRequest
db
Depends
Session
= Depends(get_db)
user
Depends
= Depends(get_current_user)
get_carriers
Get available SMS carriers.
src/routes/users.py:121
Get available SMS carriers.
get_carriers()
get_notifications
No description documented yet.
src/routes/users.py:151
No description documented yet.
get_notifications(db: Session = Depends(get_db), user: User = Depends(get_current_user))
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
update_notifications
No description documented yet.
src/routes/users.py:183
No description documented yet.
update_notifications(payload: dict, db: Session = Depends(get_db), user: User = Depends(get_current_user))
payload
dict
db
Depends
Session
= Depends(get_db)
user
Depends
User
= Depends(get_current_user)
src/services/notifications.py
7 symbols
_firebase_token
No description documented yet.
src/services/notifications.py:81
No description documented yet.
_firebase_token()
send_email
No description documented yet.
src/services/notifications.py:97
No description documented yet.
send_email(to_email: str, message: str, n_type: str = 'alert') -> dict
to_email
str
message
str
n_type
str
= 'alert'
queue_discord_message
No description documented yet.
src/services/notifications.py:133
No description documented yet.
queue_discord_message(discord_user_id: str, message: str) -> dict
discord_user_id
str
message
str
send_firebase_push
No description documented yet.
src/services/notifications.py:160
No description documented yet.
send_firebase_push(token: str, title: str, body: str, data: dict = None) -> dict
token
str
title
str
body
str
data
dict
= None
send_notification
No description documented yet.
src/services/notifications.py:273
No description documented yet.
send_notification(user_id: int, message: str, db, n_type: str = 'alert') -> dict
user_id
int
message
str
db
n_type
str
= 'alert'
should_alert
No description documented yet.
src/services/notifications.py:378
No description documented yet.
should_alert(user_id: int, bed_id: str, alert_type: str, new_state: str) -> bool
user_id
int
bed_id
str
alert_type
str
new_state
str
test_firebase
No description documented yet.
src/services/notifications.py:388
No description documented yet.
test_firebase(db)
db
src/sim/bed-pid-contoller-sim.py
7 symbols
update_weather
No description documented yet.
src/sim/bed-pid-contoller-sim.py:69
No description documented yet.
update_weather()
sensor
No description documented yet.
src/sim/bed-pid-contoller-sim.py:80
No description documented yet.
sensor(v)
v
heartbeat
No description documented yet.
src/sim/bed-pid-contoller-sim.py:86
No description documented yet.
heartbeat()
simulate
No description documented yet.
src/sim/bed-pid-contoller-sim.py:102
No description documented yet.
simulate()
controller
No description documented yet.
src/sim/bed-pid-contoller-sim.py:159
No description documented yet.
controller(s)
s
send
No description documented yet.
src/sim/bed-pid-contoller-sim.py:233
No description documented yet.
send(s)
s
run
No description documented yet.
src/sim/bed-pid-contoller-sim.py:271
No description documented yet.
run()
src/sim/full-system-simulator.py
7 symbols
heartbeat_loop
No description documented yet.
src/sim/full-system-simulator.py:79
No description documented yet.
heartbeat_loop()
update_weather
No description documented yet.
src/sim/full-system-simulator.py:96
No description documented yet.
update_weather()
simulate
No description documented yet.
src/sim/full-system-simulator.py:113
No description documented yet.
simulate(bed)
bed
compute_watering_time
No description documented yet.
src/sim/full-system-simulator.py:166
No description documented yet.
compute_watering_time(bed)
bed
apply_valve_control
No description documented yet.
src/sim/full-system-simulator.py:190
No description documented yet.
apply_valve_control(bed)
bed
send
No description documented yet.
src/sim/full-system-simulator.py:216
No description documented yet.
send(bed)
bed
run
No description documented yet.
src/sim/full-system-simulator.py:248
No description documented yet.
run()
src/sim/main.py
1 symbols
run
No description documented yet.
src/sim/main.py:16
No description documented yet.
run()
src/sim/network.py
2 symbols
send
No description documented yet.
src/sim/network.py:12
No description documented yet.
send(soil, plant, valve, weather)
soil
plant
valve
weather
heartbeat
No description documented yet.
src/sim/network.py:46
No description documented yet.
heartbeat()
src/sim/utils.py
1 symbols
log
No description documented yet.
src/sim/utils.py:13
No description documented yet.
log(msg)
msg
src/watchdog.py
1 symbols
api_watchdog
No description documented yet.
src/watchdog.py:7
No description documented yet.
api_watchdog()
barkly_docs.py · FunctionInfo
2 symbols
qualified_name
No description documented yet.
barkly_docs.py:157
No description documented yet.
qualified_name(self) -> str
self
signature
No description documented yet.
barkly_docs.py:163
No description documented yet.
signature(self) -> str
self
barkly_docs.py · EndpointInfo
1 symbols
method_text
No description documented yet.
barkly_docs.py:213
No description documented yet.
method_text(self) -> str
self
barkly_docs.py · PythonScanner
7 symbols
__init__
No description documented yet.
barkly_docs.py:603
No description documented yet.
__init__(self, root: Path)
self
root
Path
scan
No description documented yet.
barkly_docs.py:611
No description documented yet.
scan(self) -> None
self
scan_file
No description documented yet.
barkly_docs.py:618
No description documented yet.
scan_file(self, path: Path) -> None
self
path
Path
function_node_for_class_method
No description documented yet.
barkly_docs.py:676
No description documented yet.
function_node_for_class_method(self, class_node: ast.ClassDef, method_name: str) -> Optional[ast.FunctionDef | ast.AsyncFunctionDef]
self
class_node
ast.ClassDef
method_name
str
make_function
No description documented yet.
barkly_docs.py:691
No description documented yet.
make_function(self, node: ast.FunctionDef | ast.AsyncFunctionDef, file: str, class_name: str = '') -> FunctionInfo
self
node
ast.FunctionDef | ast.AsyncFunctionDef
file
str
class_name
str
= ''
make_class
No description documented yet.
barkly_docs.py:710
No description documented yet.
make_class(self, node: ast.ClassDef, file: str) -> ClassInfo
self
node
ast.ClassDef
file
str
find_endpoints
No description documented yet.
barkly_docs.py:740
No description documented yet.
find_endpoints(self, node: Optional[ast.FunctionDef | ast.AsyncFunctionDef], file: str) -> None
self
node
Optional[ast.FunctionDef | ast.AsyncFunctionDef]
file
str
bot/bot.py · BedSelect
2 symbols
__init__
No description documented yet.
bot/bot.py:168
No description documented yet.
__init__(self, beds)
self
beds
callback
No description documented yet.
bot/bot.py:179
No description documented yet.
callback(self, interaction: discord.Interaction)
self
interaction
discord.Interaction
bot/bot.py · GardenDashboard
4 symbols
__init__
No description documented yet.
bot/bot.py:188
No description documented yet.
__init__(self, beds)
self
beds
status
No description documented yet.
bot/bot.py:196
No description documented yet.
status(self, interaction: discord.Interaction, button: discord.ui.Button)
self
interaction
discord.Interaction
button
discord.ui.Button
water
No description documented yet.
bot/bot.py:215
No description documented yet.
water(self, interaction: discord.Interaction, button: discord.ui.Button)
self
interaction
discord.Interaction
button
discord.ui.Button
history
No description documented yet.
bot/bot.py:231
No description documented yet.
history(self, interaction: discord.Interaction, button: discord.ui.Button)
self
interaction
discord.Interaction
button
discord.ui.Button
esp32-firmware/firmware/garden_api.py · GardenAPI
10 symbols
__init__
No description documented yet.
esp32-firmware/firmware/garden_api.py:9
No description documented yet.
__init__(self, server_url, api_key, bed_id, firmware = '1.0.0')
self
server_url
api_key
bed_id
firmware
= '1.0.0'
_headers
No description documented yet.
esp32-firmware/firmware/garden_api.py:26
No description documented yet.
_headers(self)
self
send_sensor_data
Send soil sensor readings to /api/bed-data
esp32-firmware/firmware/garden_api.py:35
Send soil sensor readings to /api/bed-data
send_sensor_data(self, average, sensors, rssi, valve_state = 'OFF')
self
average
sensors
rssi
valve_state
= 'OFF'
should_water
Ask server if watering is needed
esp32-firmware/firmware/garden_api.py:102
Ask server if watering is needed
should_water(self, moisture)
self
moisture
heartbeat
Tell server the ESP32 is alive
esp32-firmware/firmware/garden_api.py:158
Tell server the ESP32 is alive
heartbeat(self, ip = None, rssi = None)
self
ip
= None
rssi
= None
get_config
Download bed settings
esp32-firmware/firmware/garden_api.py:226
Download bed settings
get_config(self)
self
get_ip
Get ESP32 local IP address
esp32-firmware/firmware/garden_api.py:269
Get ESP32 local IP address
get_ip(self)
self
get_rssi
Get WiFi signal strength
esp32-firmware/firmware/garden_api.py:299
Get WiFi signal strength
get_rssi(self)
self
send_heartbeat
Automatic heartbeat using ESP32 network info
esp32-firmware/firmware/garden_api.py:331
Automatic heartbeat using ESP32 network info
send_heartbeat(self)
self
timestamp
ESP32 timestamp placeholder. Later replace with NTP time.
esp32-firmware/firmware/garden_api.py:353
ESP32 timestamp placeholder. Later replace with NTP time.
timestamp(self)
self
esp32-firmware/firmware/logger.py · Logger
8 symbols
__init__
No description documented yet.
esp32-firmware/firmware/logger.py:8
No description documented yet.
__init__(self, filename = 'garden.log', max_lines = 500)
self
filename
= 'garden.log'
max_lines
= 500
_timestamp
No description documented yet.
esp32-firmware/firmware/logger.py:19
No description documented yet.
_timestamp(self)
self
_write
No description documented yet.
esp32-firmware/firmware/logger.py:37
No description documented yet.
_write(self, level, message)
self
level
message
_trim
Keep log size under control
esp32-firmware/firmware/logger.py:88
Keep log size under control
_trim(self)
self
info
No description documented yet.
esp32-firmware/firmware/logger.py:130
No description documented yet.
info(self, message)
self
message
warning
No description documented yet.
esp32-firmware/firmware/logger.py:144
No description documented yet.
warning(self, message)
self
message
error
No description documented yet.
esp32-firmware/firmware/logger.py:158
No description documented yet.
error(self, message)
self
message
clear
No description documented yet.
esp32-firmware/firmware/logger.py:172
No description documented yet.
clear(self)
self
esp32-firmware/firmware/pid.py · PIDController
2 symbols
__init__
No description documented yet.
esp32-firmware/firmware/pid.py:3
No description documented yet.
__init__(self, kp, ki, kd, target, integral_limit = 800, deadzone = 25)
self
kp
ki
kd
target
integral_limit
= 800
deadzone
= 25
compute
No description documented yet.
esp32-firmware/firmware/pid.py:27
No description documented yet.
compute(self, current)
self
current
esp32-firmware/firmware/soil_sensor.py · SoilSensor
6 symbols
__init__
No description documented yet.
esp32-firmware/firmware/soil_sensor.py:9
No description documented yet.
__init__(self, pin, dry_value = 3000, wet_value = 1200, samples = 10)
self
pin
dry_value
= 3000
wet_value
= 1200
samples
= 10
read_raw
Read raw ADC value ESP32: 0 - 4095
esp32-firmware/firmware/soil_sensor.py:42
Read raw ADC value ESP32: 0 - 4095
read_raw(self)
self
read_percent
Convert ADC reading into soil moisture % 0% = dry 100% = wet
esp32-firmware/firmware/soil_sensor.py:72
Convert ADC reading into soil moisture % 0% = dry 100% = wet
read_percent(self)
self
is_dry
Returns True if soil is dry
esp32-firmware/firmware/soil_sensor.py:132
Returns True if soil is dry
is_dry(self, threshold = 30)
self
threshold
= 30
calibrate
Change calibration values Example: dry = sensor in dry soil wet = sensor in wet soil
esp32-firmware/firmware/soil_sensor.py:153
Change calibration values Example: dry = sensor in dry soil wet = sensor in wet soil
calibrate(self, dry, wet)
self
dry
wet
get_status
Return full sensor data
esp32-firmware/firmware/soil_sensor.py:179
Return full sensor data
get_status(self)
self
esp32-firmware/firmware/valve.py · ValveController
6 symbols
__init__
No description documented yet.
esp32-firmware/firmware/valve.py:8
No description documented yet.
__init__(self, pin, active_high = True)
self
pin
active_high
= True
on
Turn valve ON
esp32-firmware/firmware/valve.py:32
Turn valve ON
on(self)
self
off
Turn valve OFF
esp32-firmware/firmware/valve.py:51
Turn valve OFF
off(self)
self
toggle
Flip valve state
esp32-firmware/firmware/valve.py:71
Flip valve state
toggle(self)
self
is_on
No description documented yet.
esp32-firmware/firmware/valve.py:89
No description documented yet.
is_on(self)
self
water_for
Run irrigation for a set time
esp32-firmware/firmware/valve.py:97
Run irrigation for a set time
water_for(self, seconds)
self
seconds
esp32-firmware/firmware/wifi_manager.py · WiFiManager
8 symbols
__init__
No description documented yet.
esp32-firmware/firmware/wifi_manager.py:8
No description documented yet.
__init__(self, ssid, password)
self
ssid
password
connect
Connect ESP32 to WiFi
esp32-firmware/firmware/wifi_manager.py:23
Connect ESP32 to WiFi
connect(self, timeout = 30)
self
timeout
= 30
disconnect
Disconnect WiFi
esp32-firmware/firmware/wifi_manager.py:101
Disconnect WiFi
disconnect(self)
self
connected
Check WiFi status
esp32-firmware/firmware/wifi_manager.py:113
Check WiFi status
connected(self)
self
reconnect
Restore connection
esp32-firmware/firmware/wifi_manager.py:125
Restore connection
reconnect(self)
self
ip
Get ESP32 IP
esp32-firmware/firmware/wifi_manager.py:146
Get ESP32 IP
ip(self)
self
rssi
Get signal strength
esp32-firmware/firmware/wifi_manager.py:163
Get signal strength
rssi(self)
self
info
Return WiFi information
esp32-firmware/firmware/wifi_manager.py:182
Return WiFi information
info(self)
self
src/sim/events.py · Events
6 symbols
__init__
No description documented yet.
src/sim/events.py:7
No description documented yet.
__init__(self)
self
trigger
No description documented yet.
src/sim/events.py:33
No description documented yet.
trigger(self, soil, plant, valve)
self
soil
plant
valve
apply_noise
No description documented yet.
src/sim/events.py:118
No description documented yet.
apply_noise(self, soil)
self
soil
set_event_rate
No description documented yet.
src/sim/events.py:189
No description documented yet.
set_event_rate(self, rate)
self
rate
set_event_scale
No description documented yet.
src/sim/events.py:192
No description documented yet.
set_event_scale(self, scale)
self
scale
test_event
No description documented yet.
src/sim/events.py:195
No description documented yet.
test_event(self, name)
self
name
src/sim/plant.py · Plant
2 symbols
__init__
No description documented yet.
src/sim/plant.py:5
No description documented yet.
__init__(self)
self
update
No description documented yet.
src/sim/plant.py:9
No description documented yet.
update(self, soil)
self
soil
src/sim/soil.py · Soil
6 symbols
__init__
No description documented yet.
src/sim/soil.py:8
No description documented yet.
__init__(self)
self
evaporate
No description documented yet.
src/sim/soil.py:19
No description documented yet.
evaporate(self, weather)
self
weather
flow
No description documented yet.
src/sim/soil.py:28
No description documented yet.
flow(self)
self
equilibrium
No description documented yet.
src/sim/soil.py:37
No description documented yet.
equilibrium(self)
self
clamp
No description documented yet.
src/sim/soil.py:49
No description documented yet.
clamp(self)
self
avg
No description documented yet.
src/sim/soil.py:54
No description documented yet.
avg(self)
self
src/sim/valve.py · Valve
2 symbols
__init__
No description documented yet.
src/sim/valve.py:2
No description documented yet.
__init__(self)
self
update
No description documented yet.
src/sim/valve.py:7
No description documented yet.
update(self, soil)
self
soil
src/sim/weather.py · Weather
2 symbols
__init__
No description documented yet.
src/sim/weather.py:10
No description documented yet.
__init__(self)
self
update
No description documented yet.
src/sim/weather.py:15
No description documented yet.
update(self)
self
Classes
Classes stay collapsed so large projects remain readable.
Parameter
No description documented yet.
0 methods
FunctionInfo
No description documented yet.
2 methods
qualified_name
No description documented yet.
barkly_docs.py:157
No description documented yet.
qualified_name(self) -> str
self
signature
No description documented yet.
barkly_docs.py:163
No description documented yet.
signature(self) -> str
self
ClassInfo
No description documented yet.
0 methods
EndpointInfo
No description documented yet.
1 methods
method_text
No description documented yet.
barkly_docs.py:213
No description documented yet.
method_text(self) -> str
self
ModuleInfo
No description documented yet.
0 methods
PythonScanner
No description documented yet.
7 methods
__init__
No description documented yet.
barkly_docs.py:603
No description documented yet.
__init__(self, root: Path)
self
root
Path
scan
No description documented yet.
barkly_docs.py:611
No description documented yet.
scan(self) -> None
self
scan_file
No description documented yet.
barkly_docs.py:618
No description documented yet.
scan_file(self, path: Path) -> None
self
path
Path
function_node_for_class_method
No description documented yet.
barkly_docs.py:676
No description documented yet.
function_node_for_class_method(self, class_node: ast.ClassDef, method_name: str) -> Optional[ast.FunctionDef | ast.AsyncFunctionDef]
self
class_node
ast.ClassDef
method_name
str
make_function
No description documented yet.
barkly_docs.py:691
No description documented yet.
make_function(self, node: ast.FunctionDef | ast.AsyncFunctionDef, file: str, class_name: str = '') -> FunctionInfo
self
node
ast.FunctionDef | ast.AsyncFunctionDef
file
str
class_name
str
= ''
make_class
No description documented yet.
barkly_docs.py:710
No description documented yet.
make_class(self, node: ast.ClassDef, file: str) -> ClassInfo
self
node
ast.ClassDef
file
str
find_endpoints
No description documented yet.
barkly_docs.py:740
No description documented yet.
find_endpoints(self, node: Optional[ast.FunctionDef | ast.AsyncFunctionDef], file: str) -> None
self
node
Optional[ast.FunctionDef | ast.AsyncFunctionDef]
file
str
BedSelect
No description documented yet.
2 methods
__init__
No description documented yet.
bot/bot.py:168
No description documented yet.
__init__(self, beds)
self
beds
callback
No description documented yet.
bot/bot.py:179
No description documented yet.
callback(self, interaction: discord.Interaction)
self
interaction
discord.Interaction
GardenDashboard
No description documented yet.
4 methods
__init__
No description documented yet.
bot/bot.py:188
No description documented yet.
__init__(self, beds)
self
beds
status
No description documented yet.
bot/bot.py:196
No description documented yet.
status(self, interaction: discord.Interaction, button: discord.ui.Button)
self
interaction
discord.Interaction
button
discord.ui.Button
water
No description documented yet.
bot/bot.py:215
No description documented yet.
water(self, interaction: discord.Interaction, button: discord.ui.Button)
self
interaction
discord.Interaction
button
discord.ui.Button
history
No description documented yet.
bot/bot.py:231
No description documented yet.
history(self, interaction: discord.Interaction, button: discord.ui.Button)
self
interaction
discord.Interaction
button
discord.ui.Button
GardenAPI
No description documented yet.
10 methods
__init__
No description documented yet.
esp32-firmware/firmware/garden_api.py:9
No description documented yet.
__init__(self, server_url, api_key, bed_id, firmware = '1.0.0')
self
server_url
api_key
bed_id
firmware
= '1.0.0'
_headers
No description documented yet.
esp32-firmware/firmware/garden_api.py:26
No description documented yet.
_headers(self)
self
send_sensor_data
Send soil sensor readings to /api/bed-data
esp32-firmware/firmware/garden_api.py:35
Send soil sensor readings to /api/bed-data
send_sensor_data(self, average, sensors, rssi, valve_state = 'OFF')
self
average
sensors
rssi
valve_state
= 'OFF'
should_water
Ask server if watering is needed
esp32-firmware/firmware/garden_api.py:102
Ask server if watering is needed
should_water(self, moisture)
self
moisture
heartbeat
Tell server the ESP32 is alive
esp32-firmware/firmware/garden_api.py:158
Tell server the ESP32 is alive
heartbeat(self, ip = None, rssi = None)
self
ip
= None
rssi
= None
get_config
Download bed settings
esp32-firmware/firmware/garden_api.py:226
Download bed settings
get_config(self)
self
get_ip
Get ESP32 local IP address
esp32-firmware/firmware/garden_api.py:269
Get ESP32 local IP address
get_ip(self)
self
get_rssi
Get WiFi signal strength
esp32-firmware/firmware/garden_api.py:299
Get WiFi signal strength
get_rssi(self)
self
send_heartbeat
Automatic heartbeat using ESP32 network info
esp32-firmware/firmware/garden_api.py:331
Automatic heartbeat using ESP32 network info
send_heartbeat(self)
self
timestamp
ESP32 timestamp placeholder. Later replace with NTP time.
esp32-firmware/firmware/garden_api.py:353
ESP32 timestamp placeholder. Later replace with NTP time.
timestamp(self)
self
Logger
No description documented yet.
8 methods
__init__
No description documented yet.
esp32-firmware/firmware/logger.py:8
No description documented yet.
__init__(self, filename = 'garden.log', max_lines = 500)
self
filename
= 'garden.log'
max_lines
= 500
_timestamp
No description documented yet.
esp32-firmware/firmware/logger.py:19
No description documented yet.
_timestamp(self)
self
_write
No description documented yet.
esp32-firmware/firmware/logger.py:37
No description documented yet.
_write(self, level, message)
self
level
message
_trim
Keep log size under control
esp32-firmware/firmware/logger.py:88
Keep log size under control
_trim(self)
self
info
No description documented yet.
esp32-firmware/firmware/logger.py:130
No description documented yet.
info(self, message)
self
message
warning
No description documented yet.
esp32-firmware/firmware/logger.py:144
No description documented yet.
warning(self, message)
self
message
error
No description documented yet.
esp32-firmware/firmware/logger.py:158
No description documented yet.
error(self, message)
self
message
clear
No description documented yet.
esp32-firmware/firmware/logger.py:172
No description documented yet.
clear(self)
self
PIDController
No description documented yet.
2 methods
__init__
No description documented yet.
esp32-firmware/firmware/pid.py:3
No description documented yet.
__init__(self, kp, ki, kd, target, integral_limit = 800, deadzone = 25)
self
kp
ki
kd
target
integral_limit
= 800
deadzone
= 25
compute
No description documented yet.
esp32-firmware/firmware/pid.py:27
No description documented yet.
compute(self, current)
self
current
SoilSensor
No description documented yet.
6 methods
__init__
No description documented yet.
esp32-firmware/firmware/soil_sensor.py:9
No description documented yet.
__init__(self, pin, dry_value = 3000, wet_value = 1200, samples = 10)
self
pin
dry_value
= 3000
wet_value
= 1200
samples
= 10
read_raw
Read raw ADC value ESP32: 0 - 4095
esp32-firmware/firmware/soil_sensor.py:42
Read raw ADC value ESP32: 0 - 4095
read_raw(self)
self
read_percent
Convert ADC reading into soil moisture % 0% = dry 100% = wet
esp32-firmware/firmware/soil_sensor.py:72
Convert ADC reading into soil moisture % 0% = dry 100% = wet
read_percent(self)
self
is_dry
Returns True if soil is dry
esp32-firmware/firmware/soil_sensor.py:132
Returns True if soil is dry
is_dry(self, threshold = 30)
self
threshold
= 30
calibrate
Change calibration values Example: dry = sensor in dry soil wet = sensor in wet soil
esp32-firmware/firmware/soil_sensor.py:153
Change calibration values Example: dry = sensor in dry soil wet = sensor in wet soil
calibrate(self, dry, wet)
self
dry
wet
get_status
Return full sensor data
esp32-firmware/firmware/soil_sensor.py:179
Return full sensor data
get_status(self)
self
ValveController
No description documented yet.
6 methods
__init__
No description documented yet.
esp32-firmware/firmware/valve.py:8
No description documented yet.
__init__(self, pin, active_high = True)
self
pin
active_high
= True
on
Turn valve ON
esp32-firmware/firmware/valve.py:32
Turn valve ON
on(self)
self
off
Turn valve OFF
esp32-firmware/firmware/valve.py:51
Turn valve OFF
off(self)
self
toggle
Flip valve state
esp32-firmware/firmware/valve.py:71
Flip valve state
toggle(self)
self
is_on
No description documented yet.
esp32-firmware/firmware/valve.py:89
No description documented yet.
is_on(self)
self
water_for
Run irrigation for a set time
esp32-firmware/firmware/valve.py:97
Run irrigation for a set time
water_for(self, seconds)
self
seconds
WiFiManager
No description documented yet.
8 methods
__init__
No description documented yet.
esp32-firmware/firmware/wifi_manager.py:8
No description documented yet.
__init__(self, ssid, password)
self
ssid
password
connect
Connect ESP32 to WiFi
esp32-firmware/firmware/wifi_manager.py:23
Connect ESP32 to WiFi
connect(self, timeout = 30)
self
timeout
= 30
disconnect
Disconnect WiFi
esp32-firmware/firmware/wifi_manager.py:101
Disconnect WiFi
disconnect(self)
self
connected
Check WiFi status
esp32-firmware/firmware/wifi_manager.py:113
Check WiFi status
connected(self)
self
reconnect
Restore connection
esp32-firmware/firmware/wifi_manager.py:125
Restore connection
reconnect(self)
self
ip
Get ESP32 IP
esp32-firmware/firmware/wifi_manager.py:146
Get ESP32 IP
ip(self)
self
rssi
Get signal strength
esp32-firmware/firmware/wifi_manager.py:163
Get signal strength
rssi(self)
self
info
Return WiFi information
esp32-firmware/firmware/wifi_manager.py:182
Return WiFi information
info(self)
self
Carrier
No description documented yet.
0 methods
BedMetaDB
Stores metadata for plant beds (name, icon) for display purposes
0 methods
BedReading
ORM model for storing plant bed sensor readings. Represents a single snapshot of sensor data from a plant bed, includin…
0 methods
BedConfigDB
ORM model for storing plant bed configuration settings. Manages configurable parameters for the automated irrigation sy…
0 methods
User
User account model for authentication
0 methods
UserContact
User contact info for SMS/notification delivery
0 methods
DiscordAccount
No description documented yet.
0 methods
APIKey
No description documented yet.
0 methods
Msg
No description documented yet.
0 methods
BedData
Schema for incoming sensor readings from ESP32
0 methods
BedConfig
Schema for updating plant bed configuration settings
0 methods
RegisterRequest
Registration request payload
0 methods
LoginRequest
Login request payload
0 methods
ContactRequest
User contact information for SMS alerts
0 methods
Heartbeat
Node heartbeat ping
0 methods
AlertRequest
No description documented yet.
0 methods
ContactUpdate
No description documented yet.
0 methods
DeviceTokenRegister
No description documented yet.
0 methods
DeviceTokenRemove
Schema for removing a Firebase device token
0 methods
EventLevel
No description documented yet.
0 methods
GardenEvent
No description documented yet.
0 methods
Events
No description documented yet.
6 methods
__init__
No description documented yet.
src/sim/events.py:7
No description documented yet.
__init__(self)
self
trigger
No description documented yet.
src/sim/events.py:33
No description documented yet.
trigger(self, soil, plant, valve)
self
soil
plant
valve
apply_noise
No description documented yet.
src/sim/events.py:118
No description documented yet.
apply_noise(self, soil)
self
soil
set_event_rate
No description documented yet.
src/sim/events.py:189
No description documented yet.
set_event_rate(self, rate)
self
rate
set_event_scale
No description documented yet.
src/sim/events.py:192
No description documented yet.
set_event_scale(self, scale)
self
scale
test_event
No description documented yet.
src/sim/events.py:195
No description documented yet.
test_event(self, name)
self
name
Plant
No description documented yet.
2 methods
__init__
No description documented yet.
src/sim/plant.py:5
No description documented yet.
__init__(self)
self
update
No description documented yet.
src/sim/plant.py:9
No description documented yet.
update(self, soil)
self
soil
Soil
No description documented yet.
6 methods
__init__
No description documented yet.
src/sim/soil.py:8
No description documented yet.
__init__(self)
self
evaporate
No description documented yet.
src/sim/soil.py:19
No description documented yet.
evaporate(self, weather)
self
weather
flow
No description documented yet.
src/sim/soil.py:28
No description documented yet.
flow(self)
self
equilibrium
No description documented yet.
src/sim/soil.py:37
No description documented yet.
equilibrium(self)
self
clamp
No description documented yet.
src/sim/soil.py:49
No description documented yet.
clamp(self)
self
avg
No description documented yet.
src/sim/soil.py:54
No description documented yet.
avg(self)
self
Valve
No description documented yet.
2 methods
__init__
No description documented yet.
src/sim/valve.py:2
No description documented yet.
__init__(self)
self
update
No description documented yet.
src/sim/valve.py:7
No description documented yet.
update(self, soil)
self
soil
Weather
No description documented yet.
2 methods
__init__
No description documented yet.
src/sim/weather.py:10
No description documented yet.
__init__(self)
self
update
No description documented yet.
src/sim/weather.py:15
No description documented yet.
update(self)
self
Modules
A lightweight map of source files and their discovered contents.
barkly_docs.py
66 symbols
10 imports
bot/bot.py
17 symbols
10 imports
esp32-firmware/firmware/config.py
0 symbols
0 imports
esp32-firmware/firmware/garden_api.py
11 symbols
4 imports
esp32-firmware/firmware/logger.py
9 symbols
2 imports
esp32-firmware/firmware/main.py
3 symbols
7 imports
esp32-firmware/firmware/pid.py
3 symbols
0 imports
esp32-firmware/firmware/soil_sensor.py
7 symbols
2 imports
esp32-firmware/firmware/valve.py
7 symbols
2 imports
esp32-firmware/firmware/wifi_manager.py
9 symbols
2 imports
src/auth.py
5 symbols
7 imports
src/carriers.py
1 symbols
1 imports
src/db.py
3 symbols
7 imports
src/deps.py
1 symbols
4 imports
src/main.py
0 symbols
12 imports
src/models.py
7 symbols
4 imports
src/routes/__init__.py
0 symbols
0 imports
src/routes/apikeys.py
3 symbols
13 imports
src/routes/beds.py
34 symbols
11 imports
src/routes/bot_bridge.py
4 symbols
2 imports
src/routes/dis.py
9 symbols
10 imports
src/routes/firebase.py
3 symbols
10 imports
src/routes/notfics.py
5 symbols
8 imports
src/routes/pages.py
12 symbols
16 imports
src/routes/users.py
7 symbols
8 imports
src/schemas.py
10 symbols
3 imports
src/services/__init__.py
0 symbols
0 imports
src/services/notifications.py
9 symbols
15 imports
src/sim/bed-pid-contoller-sim.py
7 symbols
7 imports
src/sim/config.py
0 symbols
2 imports
src/sim/events.py
7 symbols
3 imports
src/sim/full-system-simulator.py
7 symbols
7 imports
src/sim/main.py
1 symbols
10 imports
src/sim/network.py
2 symbols
6 imports
src/sim/plant.py
3 symbols
0 imports
src/sim/soil.py
7 symbols
1 imports
src/sim/utils.py
1 symbols
3 imports
src/sim/valve.py
3 symbols
0 imports
src/sim/weather.py
3 symbols
3 imports
src/watchdog.py
1 symbols
4 imports
Imports
Dependencies discovered from Python import statements.
Lifecycle
The development path used by the project.
Git
Repository state and recent development history.
c490158|2026-09-27|working on getitng barkly dos implentnetd
8d05e09|2026-07-29|updated pythonfile for the hearbeat
a129c6b|2026-07-29|converted it to micropython
4c7d3e3|2026-07-29|working on esp32 code
f76f569|2026-07-29|added wifi sutff
e8de656|2026-05-23|setting up basic esp32frimware
c6d557d|2026-05-23|working on hardware code
259c379|2026-05-23|working on hardware code
Changelog
What BARKLY DOCS noticed changed between documentation generations.
BARKLY DOCS stores a small local snapshot of discovered symbols and compares the next scan against it. The scanner uses static Python AST analysis and never imports or executes the project.
On the first generation, the existing project becomes the baseline. Later generations can identify newly discovered and changed functions, methods, classes, and API endpoints.