-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathRELEASE
More file actions
1537 lines (1332 loc) · 71.2 KB
/
Copy pathRELEASE
File metadata and controls
1537 lines (1332 loc) · 71.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Release Notes:
--------------------
2.45 Release
--------------------
UPGRADE CHECK FIX:
- Fixed checkupgrades.sh corrupting hiveconfig.inc when GitHub rate-limits requests
* When raw.githubusercontent.com returns a rate-limit/anti-scraping error page
instead of file content, the HTML (including GitHub Terms of Service text with
parentheses) was written into the database and then dumped into hiveconfig.inc
* Bash syntax error on source: "unexpected token `('" from the TOS URL
* Added is_valid_github_response() validation that rejects responses containing
HTML tags, "terms of service", "scraping GitHub", or "rate limit" text
* Added numeric format validation for VERSION content before writing to database
* Script now exits cleanly with a log warning instead of corrupting the config
* Reuses already-fetched upgrade.sh content instead of making a redundant curl call
--------------------
2.44 Release
--------------------
CONFIG SYNC FIX (CRITICAL):
- Fixed `let` arithmetic bug in hiveconfig.sh that corrupted string values (timezone, API keys) to 0
- Fixed same `let` bug in check.inc check_if_blank function — now uses printf -v for safe string assignment
- Added missing jq extractions for KEY_TOMORROW and KEY_AMBEE from remote config JSON
- Local-only fields (timezone, API keys, sensor GPIO/calibration, system paths, weather config) are now
protected from remote overwrite — hivecontrol.org can only sync hive identity, bee management, and
enable flags, not device-specific settings
- Fixed VERSION drift: after remote-to-local sync, VERSION is set to MAX(local, remote)+1 to prevent
re-import loops where remote falsely appears "newer"
- Added config sync logging: local vs remote VERSION comparison logged for debugging
- Fixed exit codes: config sync now exits 0 (success) instead of 1 (error)
--------------------
2.43 Release
--------------------
API:
- New unauthenticated JSON endpoint at /api/status.php for external reporting apps
- Returns hive name, ID, location, and unit preference (metric/imperial)
- Returns latest sensor readings (hive temp, humidity, weight, weather, air quality)
- Returns 24-hour and 1-hour trends for weight and temperature (direction + delta)
- Returns active alarms from the alert engine (high/low temp, robbing, swarm, honey flow, etc.)
- CORS enabled for cross-origin access
- Rate limited to 60 requests/min per IP to protect Pi resources
- Respects metric/imperial display setting from hive configuration
--------------------
2.42 Release
--------------------
TEMPERATURE CHART:
- Added Brood Zone band (93-97°F / 34-36°C) to full temperature page charts
- Added Danger band (100-120°F / 38-50°C) to full temperature page charts
- Bands appear on both line and area chart views (matches dashboard climate chart)
--------------------
2.41 Release
--------------------
RTSP FIX:
- Fixed snapshot file owned by root — now chown to www-data after capture
--------------------
2.40 Release
--------------------
UPGRADE CACHE FIX:
- Added timestamp query-string cache buster to all GitHub raw URL fetches
- Ensures checkupgrades.sh always gets the latest VERSION and upgrade.sh
--------------------
2.39 Release
--------------------
RTSP FIX:
- Removed -tls_verify flag (not supported on Raspbian ffmpeg)
- rtsps:// should work without it — Pi ffmpeg skips TLS verification by default
--------------------
2.38 Release
--------------------
RTSP CAMERA FIXES:
- Fixed dashboard snapshot not generating for RTSP cameras
* currconditions.sh now calls rtsp_snapshot.sh for RTSP camera type
* Previously only handled USB/Pi cameras via mjpg_streamer
- Added TLS support for rtsps:// URLs (self-signed certs on UniFi, etc.)
* Both rtsp_snapshot.sh and rtsp_stream.sh now pass -tls_verify 0
- RTSP stream service auto-starts when camera is configured and saved
- Service stops automatically when camera type is changed away from RTSP
- Camera test button now shows ffmpeg errors instead of hiding them
- Added /etc/init.d/rtsp_stream to sudoers for web UI service control
--------------------
2.37 Release
--------------------
- Auto-start RTSP stream service on camera config save
--------------------
2.36 Release
--------------------
DATABASE STABILITY:
- Fixed "database is locked" (SQLITE_BUSY) errors during concurrent access
- Enabled WAL (Write-Ahead Logging) journal mode for concurrent read/write support
- Added 5-second busy_timeout to PHP database connections (retries instead of failing)
- Added busy_timeout to shell scripts that write sensor data (currconditions, airnow)
- Upgrade automatically enables WAL mode on existing databases
--------------------
2.35 Release
--------------------
RTSP CAMERA STREAM:
- New "RTSP Stream" camera type in instrument configuration
* Enter an rtsp:// or rtsps:// URL from any IP camera
* Stream is converted to HLS via ffmpeg for browser playback
* Uses hls.js library — works in all modern browsers
* ffmpeg uses codec copy (no transcoding) for minimal Pi CPU usage
- Video page auto-detects camera type and shows HLS player or MJPEG
- Dashboard snapshot captured from RTSP stream via ffmpeg
- New init.d service (rtsp_stream) with watchdog auto-restart
- VLC direct connect URL shown on video page for native RTSP playback
DATABASE:
- DB_PATCH_47: Added CAMERA_RTSP_URL column to hiveconfig table
--------------------
2.34 Release
--------------------
SETUP WIZARD:
- Added Zip Code field to Step 1 (Basic Info) for pollen and EPA AirNow
- Zip code is used by pollen.com and AirNow APIs for location-based data
INSTRUMENT CONFIG:
- Added test buttons for weather, air quality, EPA AirNow, pollen, and camera
* Each integration panel now has a Test button to verify it's working
* Uses existing AJAX test infrastructure (livevalue.php)
EPA AIRNOW FIX:
- Fixed missing O3/ozone data from AirNow integration
* Lat/lon API endpoint only returned nearest reporting area (e.g., Bridgeport
PM2.5) and missed monitors in other areas (e.g., Westport ozone)
* Now uses zip code API endpoint when ZIP is configured, which returns data
from all reporting areas covering that zip code
* Falls back to lat/lon endpoint when no zip code is set
POLLEN:
- Pollen test button now runs the full API pipeline with --test flag,
bypassing the "already collected today" and "disabled" guards so
new hives can verify pollen is working immediately
- Added getpollen.sh to www-data sudoers whitelist
- Version-gated sudoers update in upgrade.sh for existing hives
UPGRADE SYSTEM:
- Fixed checkupgrades.sh not picking up new upgrade.sh versions due to
GitHub CDN caching — added Cache-Control: no-cache headers to all
curl calls fetching from raw.githubusercontent.com
DATABASE:
- DB_PATCH_46: Added ZIP column to hiveconfig table
--------------------
2.32 Release
--------------------
SETUP WIZARD:
- Added "Exit to Dashboard" link in wizard header, visible on every step
I2C SETUP FIX:
- Fixed I2C not being enabled after fresh install on Pi 4 and Pi 5
* Old setup_i2c.sh appended dtparam lines to the end of config.txt,
which could land inside conditional [pi4]/[cm4] sections and be ignored
* Now uses raspi-config nonint do_i2c 0 which handles config.txt
section placement correctly
* Falls back to manual config.txt editing only when raspi-config
is not present
* Detects Pi 5 Bookworm config path (/boot/firmware/config.txt)
* Removed i2c1_baudrate=10000 throttle that was unnecessary
HIVE BODY CONFIGURATION FIX:
- Fixed "Save Configuration" not working on newly installed hives
* Weight input fields had step="0.1" which made browser HTML5
validation reject pre-populated values like 5.63 — changed to
step="any" so any decimal is accepted
* Added defensive auto-creation of hiveequipmentweight table and row
* Added auto-creation of hive stack columns (HIVE_STACK_ORDER,
SENSOR_TEMP_POSITION, SENSOR_TEMP_LABEL, FEEDER_HAS_SYRUP)
* Changed INNER JOIN to LEFT JOIN for fresh install resilience
* Added try/catch around save with user-visible error message
--------------------
2.31 Release
--------------------
SETUP WIZARD:
- Added AHT20 (I2C) and SHT41 Trinkey (USB) to temperature sensor selection
- Added AHT20 and SHT41 Trinkey to local weather sensor type list
BROODMINDER BLE DISCOVER:
- New "Discover Devices" button in BroodMinder config panel
* Runs 15-second BLE scan for nearby BroodMinder sensors
* Displays found devices as clickable MAC address labels
* Click a device to auto-fill the BLE address field
* Available in both setup wizard and instrument config pages
* New livevalue.php "blescan" endpoint for AJAX-driven scanning
WEATHER FALLBACK API KEYS:
- Fallback weather source dropdowns now show API key input when a
key-required provider is selected (OpenWeatherMap, WeatherAPI,
Visual Crossing, Pirate Weather)
* Key input with signup link appears dynamically below dropdown
* Pre-populates from existing key if previously entered
* Values sync to primary-section form fields on save
* Hidden when fallback matches primary (key field already visible)
POLLEN CHART:
- Pollen detail chart now shows blooming pollen types next to each dot
* Data labels above markers display active pollen species
* Tooltip enriched with "Blooming: ..." line
SENSOR HEALTH DIAGNOSTICS:
- Sensor health dashboard now shows a diagnostic reason when sensors
report "No Data" or 0% uptime
* Per-sensor hints (check wiring, API key, internet, etc.)
* Weather/pollen/EPA sensors pull last error from weather_health table
* Warning shown above "View Data" link in panel footer
INSTALL FIX:
- Fresh installs now apply DB patches 44-45 (ENABLE_POLLEN and
FRAME_FEEDER columns) — fixes "no such column: ENABLE_POLLEN"
error on newly installed hives
- Updated DBVERSION from 35 to 45
--------------------
2.30 Release
--------------------
NEW SENSOR: ADAFRUIT AHT20 (I2C):
- Custom zero-dependency Python driver using raw Linux I2C file descriptors
- Auto-detects I2C bus by scanning /dev/i2c-* and probing for device at 0x38
- Works on Pi 4 and Pi 5 without pigpio, smbus2, or any pip packages
- Bash wrapper with retry loop, validation, and dewpoint calculation
- Wiring note on config page: "Ensure AHT20 is plugged into the TSL port
(farthest port from the ethernet jack)"
NEW SENSOR: ADAFRUIT SHT41 TRINKEY (USB):
- Custom zero-dependency Python driver using stdlib termios for serial I/O
- Trinkey connects via USB and presents as /dev/ttyACM0 (serial at 115200 baud)
- Handles both factory firmware (4-field CSV) and simple firmware (2-field CSV)
- No pyserial or other pip packages required
- Bash wrapper with retry loop, validation, and dewpoint calculation
- USB connection note on config page
INSTRUMENT CONFIG:
- Added AHT20 and SHT41 Trinkey to temperature sensor type selector
- Conditional help blocks with wiring/connection guidance for each sensor
--------------------
2.29 Release
--------------------
IN-HIVE FRAME FEEDER PLACEMENT:
- New frame feeder placement indicator in hive body configuration
* Select which hive body (deep, medium, or shallow) contains a frame feeder
* Frame feeder renders as a black box inside the body in the SVG diagram
* Feeder position and label saved to database alongside sensor placement
* Dashboard diagram shows frame feeder in configured position
SENSOR & FEEDER PLACEMENT UX REDESIGN:
- Replaced confusing invisible click zones with explicit placement mode toolbar
* "Place Sensor" and "Place Feeder" buttons in toolbar above the stack
* Sensor mode: large dashed drop targets appear between components
* Feeder mode: eligible body components highlight, non-eligible items dim
* Yellow instruction banner explains what to click in each mode
* Current placement shown with red highlight; click again to relocate
* Escape key or re-clicking toolbar button cancels placement mode
* Inline badges show current sensor/feeder positions in idle mode
* Placement status indicators with one-click remove buttons in toolbar
DATABASE RESILIENCE:
- Dashboard diagram query uses SELECT * with try/catch to prevent crash
when frame feeder columns are not yet in the database
- Hive body config page auto-creates FRAME_FEEDER_POSITION and
FRAME_FEEDER_LABEL columns on load if they don't exist
- Frame feeder save wrapped in separate try/catch for old DB compatibility
- DB patch 45 adds frame feeder columns via upgrade chain
- schema_validate.sh ensures frame feeder columns exist
--------------------
2.28 Release
--------------------
DASHBOARD CAMERA SNAPSHOT:
- Dashboard sidebar shows a still image from the USB camera when enabled
* Snapshot captured from mjpg_streamer (localhost:8080/?action=snapshot)
each time currconditions.sh runs (every 15 minutes)
* Saved to images/hive_snapshot.jpg with atomic write (tmp + mv)
* "Hive Camera" panel appears below Hive Configuration in the sidebar
* Shows capture timestamp and links to live stream (video.php)
* Placeholder message shown before first snapshot is captured
* Panel hidden entirely when ENABLE_HIVE_CAMERA is not 'yes'
* Image cache-busted via filemtime query string to prevent stale display
* Fails gracefully if mjpg_streamer is not running
--------------------
2.27 Release
--------------------
VIDEO PAGE REDESIGN:
- Replaced broken weather panel with live environmental data from database
* Old panel referenced defunct Weather Underground API variables that were
never defined — showed blank/empty values
* New "Current Conditions" panel (green) queries allhivedata for latest:
temperature, dew point, humidity, wind speed/direction/gusts,
barometric pressure with trend, precipitation (hourly/daily),
solar radiation and lux
* New "Hive Conditions" panel (yellow) shows hive temp, humidity, weight
* All values respect imperial/metric (SHOW_METRIC) toggle
* Conditional rows — wind, pressure, precipitation, light sections only
appear when data is available
* Timestamp shows when data was last recorded
- Removed inaccurate "This supports native MJPEG streaming" info banner
* Stream is PHP-proxied, not direct MJPEG to browser
- VLC direct connect URL moved to subtle note under the video frame
- Uses Font Awesome 4.2-compatible icons throughout
DB PATCH CHAIN ROBUSTNESS:
- upgrade.sh and upgrade-dev.sh now suppress duplicate column errors
* sqlite3 patch commands use 2>/dev/null || true so DBVERSION counter
still advances when schema_validate.sh has already added columns
--------------------
2.25 Release
--------------------
INSTRUMENT CONFIG REDESIGN:
- Complete rewrite of instrumentconfig.php (1143 lines → 930 lines)
* Replaced flat 6-column HTML table with 3-tab layout using Bootstrap 3
nav-tabs: Hive Sensors, Weather, Environment
* Each sensor section is a collapsible panel with enable/disable toggle
* Panels color-coded by sensor health status (green/yellow/red/gray)
* Sensor health status badges at top of page from sensor_health_check.php
* Removed auto-submit on every field change — explicit Save button instead
* Unsaved changes warning with browser beforeunload prompt
* Tab state persists across saves via hidden _active_tab field + URL hash
* Success/error feedback alerts after save
- Weather source configuration improvements
* Client-side show/hide replaces server-side PHP conditional rendering
* Provider-specific fields (API keys, station IDs) show only for selected source
* Shared WXSTATION field rendered once with dynamic label text per provider
(Station ID / Station MAC / Station Serial)
* Fallback chain warnings for duplicate or same-as-primary selections
* Free providers (Open-Meteo, NWS) show location from Hive Config with
"no API key needed" messaging
- Per-sensor AJAX test buttons via livevalue.php (no full page reload)
- Auto-generated hidden field safety net replaces 48 hand-maintained hidden inputs
- Added CSRF protection (require_csrf_token / csrf_field)
- BroodMinder sensor type now shows correct help text:
* Label: "BLE MAC Address" instead of "Device Path"
* Placeholder: MAC format instead of /dev/hidraw path
* Help: BM_Scan_bleak.py command instead of "tempered -e"
- Helper functions h(), sel(), chk() for cleaner HTML output
- Removed dead WX Underground modal and commented-out GPIO blocks
POLLEN COLLECTION TOGGLE:
- New ENABLE_POLLEN setting in Instrument Config → Environment tab
* Enable/disable dropdown with collapsible panel body
* When disabled:
- Dashboard hides the pollen metric card
- Sensor Health Dashboard hides the pollen sensor card
- Instrument Config hides pollen status badge
- getpollen.sh cron job exits early (no API calls)
* Defaults to 'yes' — no behavior change for existing installs
SCHEMA VALIDATION:
- New scripts/data/schema_validate.sh ensures DB has all required columns
* Reads PRAGMA table_info and adds any missing columns with defaults
* Idempotent — safe to run multiple times
* Runs automatically after the patch chain in upgrade.sh and upgrade-dev.sh
* Fixes upgrades from older versions (e.g. 2.22) where the sequential
patch chain starts too high and skips needed columns
* Can be run standalone: sudo bash schema_validate.sh /path/to/hive-data.db
* Covers all columns from DB_PATCH_35 through DB_PATCH_44
UPGRADE SYSTEM IMPROVEMENTS:
- upgrade-dev.sh now self-updates from the cloned repo before finalizing
* Previously the installed copy ran without updating itself, so new DB
patches added in later pushes were never reached
- upgrade.sh and upgrade-dev.sh both call schema_validate.sh after patches
ICON FIXES (Font Awesome 4.2 compatibility):
- Bundled Font Awesome is 4.2.0; replaced icons added in 4.4+/4.7+:
* fa-thermometer-half → fa-fire (temperature/heat)
* fa-balance-scale → fa-dashboard (weight gauge)
* fa-industry → fa-flask (air quality)
* fa-thermometer-full/empty → fa-fire (alerts)
- Fixed across: sensor_health_check.php, instrumentconfig.php,
setup-wizard.php, help pages, alert_engine.php, hive-diagram.js
BUG FIXES:
- Wrapped UPDATE query in try/catch to show error message instead of
blank white screen on save failure
- Guarded hiveconfig.ver read with file_exists() to prevent PHP warning
on fresh deploys where the file hasn't been created yet
- Guarded ENABLE_POLLEN query in currentconditions.php with try/catch
so dashboard renders even before DB_PATCH_44 is applied
DATABASE CHANGES:
- DB_PATCH_44: Added ENABLE_POLLEN column to hiveconfig (default 'yes')
(DB version 35 -> 36)
--------------------
2.24 Release
--------------------
WX UNDERGROUND API MIGRATION:
- Migrated from dead XML endpoint (api.wunderground.com) to new PWS API
* Old endpoint killed by IBM — returns "Service Unavailable"
* New endpoint: api.weather.com/v2/pws/observations/current (JSON)
* Requires API key — free for PWS owners who upload data
- Rewrote getwxxml.sh to use JSON API with jq parsing
* Validates JSON response before extracting data
* Uses shared wx_helpers.inc for unit conversions (f_to_c, in_to_mb, etc.)
* Outputs standardized WunderGround-format JSON via output_wx_json()
- Updated Instrument Config page for WX Underground selection
* API KEY field now required when WX Underground is selected
* Link to wunderground.com/member/api-keys for key retrieval
* Station ID and API Key both shown with required indicators
* API key stored securely in hiveconfig database
DATABASE CHANGES:
- DB_PATCH_43: Added WXAPIKEY column to hiveconfig
(DB version 34 -> 35)
--------------------
2.23 Release
--------------------
HIVE BODY CONFIGURATION REDESIGN:
- Replaced spreadsheet-style table with visual hive builder
* Two-panel layout: Component Palette (left) + Interactive Stack (right)
* Click components to add them to the hive stack
* jQuery UI Sortable drag-and-drop reordering
* Click between components to place temperature sensor indicator
* Real-time tare weight calculation updates as components change
* Per-component weight inputs in the palette cards
* Feeder syrup tracking toggle
* Fixed weights section (Hive Top, Computer, Misc) separated from stack
* Responsive layout for mobile/tablet
- SVG hive diagram renders proportional stacked view
* Components sized by type (deep=76px, medium=56px, shallow=42px, etc.)
* Color-coded by category (covers=gray, bodies=wood tones, feeder=blue)
* Frame lines and hand-hold details on body components
* Screen mesh pattern on screened bottom board
* Liquid level indicator on feeder when syrup present
* Inner cover ventilation notch detail
DASHBOARD HIVE VISUALIZATION:
- New "Hive Configuration" panel in dashboard sidebar
* Read-only SVG diagram of current hive stack
* Temperature sensor shown at configured position with live reading
* Feeder syrup level indicator
* Click diagram to edit configuration
* Falls back to "Configure Hive" link when no components configured
- Reusable hive-diagram.js SVG rendering library shared by config page
and dashboard widget
DATABASE CHANGES:
- DB_PATCH_42: Added hive body stack and sensor tracking
* HIVE_STACK_ORDER (TEXT) — ordered component list, bottom-to-top
* SENSOR_TEMP_POSITION (INTEGER) — stack position of temperature sensor
* SENSOR_TEMP_LABEL (TEXT) — user-defined sensor label
* FEEDER_HAS_SYRUP (INTEGER) — feeder syrup state tracking
(DB version 33 -> 34)
UPGRADE SCRIPT:
- Added js/ and css/ directory copy to upgrade.sh for new web assets
--------------------
2.22 Release
--------------------
BUG FIXES:
- Fixed BroodMinder not collecting temperature data
* Case-sensitive MAC address comparison in broodminder.sh failed because
bleak BLE scan returns lowercase MACs but hiveconfig stores uppercase
* Changed to case-insensitive comparison using ${var,,} lowercase conversion
- Fixed non-numeric text being stored in database sensor fields
* logger.inc loglocal() printed "No API Set, not sharing log data" to stderr
* currconditions.sh captured stderr via 2>&1, contaminating sensor output
* "No" stored as hivetempf, "API" stored as hiveHum
* Removed the noisy stderr echo from loglocal (local DB logging still works)
* Added sanitize_numeric() function in currconditions.sh that validates all
sensor values before database INSERT — non-numeric values replaced with null
--------------------
2.21 Release
--------------------
BUG FIXES:
- Fixed GDD backfill producing seasongdd=0 when database is locked
* backfill_from_openmeteo() running_total query used 2>/dev/null which
silently swallowed DB lock errors from concurrent currconditions.sh
* Empty result defaulted to 0 via ${running_total:-0}, causing inserted
rows to have seasongdd=0 instead of the actual cumulative total
* Replaced with 3-attempt retry loop (2s sleep between attempts) that
aborts with a log message if all retries fail
--------------------
2.20 Release
--------------------
DASHBOARD CHART OVERHAUL:
- Replaced monolithic all-in-one chart with 5 focused dashboard charts
* Hive Climate: temp + humidity with brood zone (93-97F) and danger zone
plotBands, metric-aware thresholds
* Weight & Stores: net/gross weight + rain area chart, alert-driven
plotLines for swarm/robbing detection
* Environment: Solar radiation + Lux on dual y-axes
* Foraging Conditions (NEW): flight activity + wind with high-wind
plotBand (>20mph/32kph warning zone)
* Air Quality: PM2.5/PM10 concentrations + AQI with full EPA color-banded
plotBands (Good/Moderate/USG/Unhealthy/Very Unhealthy)
- Synchronized crosshairs across all 5 dashboard charts
* Zoom on one chart zooms all charts to same time range
* Shared tooltip format with color bullets and number formatting
- Pre-built data arrays with automatic thinning
* Data arrays built server-side via implode() instead of inline foreach
* Automatic point thinning when dataset exceeds 800 points
* Conditional markers: shown when <=200 points, hidden for larger datasets
- Shared chart infrastructure (dashboard_chart_shared.php)
* Common x-axis, tooltip, and exporting configuration
* dashboardCharts array for cross-chart synchronization
* include_once pattern prevents duplicate queries and JS declarations
- Removed combined/split view toggle (combined view was redundant with
focused charts providing better data density per chart)
SIDEBAR IMPROVEMENTS:
- Weight gauge: dynamic y-axis max (120% of actual weight, rounded to
nearest 10) instead of hardcoded 200lb ceiling
- System status: replaced bare buttons with Bootstrap label badges, added
data freshness indicator (Live / Xm ago / Xh ago) with color coding
GDD DETAIL PAGE:
- Removed pollen series from GDD chart (pollen has its own dedicated page)
HTML CLEANUP:
- Removed 9 orphaned </div> tags in index.php from previous layout refactor
- Fixed misleading HTML comments (col-lg-6 → col-lg-8)
--------------------
2.19 Release
--------------------
SECURITY FIXES:
- Fixed CRITICAL SQL injection in all stats files (light_stats, gdd_stats,
pollen_stats, air_stats, temp_stats, weight_stats, beecount_stats)
* Switch statements with no default case allowed uninitialized $sqlperiod
to be interpolated directly into SQL queries
* Replaced with $period_map whitelist + PDO bound parameters (:p)
- Fixed SQL injection in air_chart.php — converted to bound parameters
- Added try/catch around EPA table queries in air_chart.php for pre-2.16
database compatibility
BLUETOOTH / BROODMINDER FIXES:
- Fixed bleak (BLE library) not installed on fresh installs
* install.sh and install-raspberry-pi-5-64bit.sh still referenced legacy
bluepy — replaced with bleak install chain
- Fixed bleak not installed on upgrades from 2.17 to 2.18
* bleak install was in the < 2.17 upgrade block — moved to < 2.18 block
- Added Bluetooth enable to install and upgrade scripts
* systemctl enable --now bluetooth ensures service starts and persists
* rfkill unblock bluetooth clears soft-block on Raspberry Pi
- Added --break-system-packages flag for PEP 668 compatibility on newer
Debian/Raspberry Pi OS versions
UI/UX DETAIL PAGE REDESIGN:
- Redesigned all detail pages with col-lg-8/col-lg-4 layout
* Charts in main column (col-lg-8), stats/controls in sidebar (col-lg-4)
* Applied to: air, temp, weight, beecount, light, gdd
- Split air chart into two synchronized Highcharts
* Top chart: PM2.5, PM10, PM1 concentrations (ug/m3)
* Bottom chart: AQI index with EPA color-banded plotBands
* Synchronized crosshairs and zoom between charts
- Added contextual alert banners on detail pages
* air.php: high PM2.5, smoke, high ozone alerts
* temp.php: high/low temperature alerts
* weight.php: swarm, robbing, honey flow alerts
* beecount.php: swarm, robbing alerts
- Added current reading cards on detail pages
* Air: large AQI badge with EPA color coding and category label
* Weight: net/gross weight with gain/loss trend indicator
- Fixed fullscreen/air.php "Enlarge Chart" recursion — suppressed when
already in fullscreen mode via $is_fullscreen flag
BUG FIXES:
- Fixed $current_pm25 uninitialized variable warning in air.php
- Fixed get_page_alerts() returning sparse array — wrapped in array_values()
- Fixed crosshair sync this binding in air_chart.php — replaced .bind(this)
with local triggerChart variable
- Fixed GDD page mislabeled as "Light Analysis" (copy-paste from template)
- Fixed NULL comparison in temp_stats.php — changed hivetempf!='null' to
hivetempf IS NOT NULL
--------------------
2.18 Release
--------------------
BROODMINDER BLE INTEGRATION:
- Migrated from bluepy (Python 2.7) to bleak (Python 3) async BLE library
* New BM_Scan_bleak.py replaces legacy BM_Scan.py
* Fixed byte offset bug: bleak strips 2-byte company ID, all indices shifted by -2
* Model-aware temperature decoding: model >= 47 (T2/TH2) uses (raw-5000)/100
formula instead of legacy SHT3x/HDC1080 formula
* Supports all BroodMinder models: T, TH, W, T2/T2SM, W2/XLR, TH2/TH2SM
* broodminder.sh updated to call BM_Scan_bleak.py via python3
- New BLE debugging tool (ble_debug.py)
* Subcommands: scan, listen, info, read, bm
* BroodMinder-specific scan with auto-decode of manufacturer data
* Model name lookup, firmware version, realtime temperature for SwarmMinder devices
CRON & LOGGING RELIABILITY:
- Fixed silent cron failure when /home/HiveControl/logs/ directory missing
* Bash aborts entire command when >> redirect target dir doesn't exist
* Cron entries now include mkdir -p guard before script execution
* install.sh creates logs directory during fresh install
* upgrade.sh creates logs directory unconditionally (not version-gated)
* currconditions.sh creates logs directory at startup as defense-in-depth
DETAIL PAGE STATS FIX:
- Fixed empty Stats panels on all detail pages (temp, weight, air, GDD,
beecount, light)
* Stats PHP files were in datawidgets/stats/ but includes pointed to
datawidgets/ (missing stats/ subdirectory)
* PHP include silently failed, leaving all stat variables empty
* Corrected include paths in 6 detail pages; pollen.php was already correct
DASHBOARD IMPROVEMENTS:
- Pollen card now links to dedicated pollen analysis page (was linking to GDD)
* New pollen.php with period buttons, area chart, and severity-banded plotBands
* Stats sidebar with current level, severity, period avg/max/min
* Fullscreen popup support
- Pollen card color scheme differentiated from temperature card
* None=hivebrown, Low=hiveyellow, Moderate=yellow, High=red
- Added Pollen link to navigation menu (both dropdown and sidebar layouts)
--------------------
2.17 Release
--------------------
SETUP WIZARD IMPROVEMENTS:
- Geocoding & Interactive Map in Setup Wizard Step 1
* Type city/state and click "Look Up" to auto-fill latitude/longitude
* Leaflet.js + OpenStreetMap interactive map shows pin at geocoded location
* Drag pin to fine-tune coordinates — lat/lon fields update automatically
* Server-side geocoding proxy (geocode.php) handles Nominatim API calls
(avoids CORS issues and works without PHP curl module)
* Custom yellow circle marker matching HiveControl theme
- AirNow as Standalone Air Quality Source (Setup Wizard Step 7)
* Users without PurpleAir can get PM2.5 and PM10 AQI from nearest EPA monitor
* Configurable: enable/disable, API key, search distance (miles)
* Test button validates API key and displays nearest monitor data
DASHBOARD IMPROVEMENTS:
- EPA PM2.5 AQI and PM10 AQI backup series on Air Quality chart
* Falls back to EPA data when PurpleAir data is unavailable
* EPA series shown alongside PurpleAir data for cross-validation
- Alert Banner Alignment Fix
* Alert banner now properly centered in wide layout mode using Bootstrap
row/col wrapper
BUG FIXES:
- Fixed alert_engine.php crash on pre-2.16 databases
* Changed specific column SELECT to SELECT * for backward compatibility
* Added isset() guards for air quality threshold config fields
* Wrapped EPA table query in try-catch for databases without airquality_epa
* Prevents "no such column" PDOException on hives upgrading from pre-2.16
- Fixed sudoers installation to use /etc/sudoers.d/ drop-in approach
* install.sh and upgrade.sh no longer modify /etc/sudoers directly
* Eliminates "too many levels of includes" recursive inclusion error
* Drop-in validated with visudo -c before activation
- Fixed install.sh interactive prompt not pausing
* dpkg-reconfigure tzdata was corrupting stdin for subsequent select/read
* Bee counter prompt and reboot prompt now use < /dev/tty for clean input
--------------------
2.16 Release
--------------------
NEW FEATURES:
- Expanded Air Quality Data Pipeline
* PurpleAir scripts now extract ATM-corrected mass concentrations
(pm2_5_atm, pm10_0_atm, pm1_0_atm) and barometric pressure from BME280
* EPA AQI computation for PM2.5 and PM10 using standard breakpoint tables
* 12-field CSV output from all air provider scripts (was 6 fields)
* air_helpers.inc: shared AQI breakpoint functions (compute_aqi, pm25_to_aqi,
pm10_to_aqi, o3_to_aqi, no2_to_aqi, aqi_to_category, aqi_to_color)
- EPA AirNow Integration (O3 & NO2)
* New getairnow.sh script fetches hourly O3, NO2, PM2.5, PM10 AQI from
EPA AirNow API (free, 500 req/day)
* Back-calculates approximate O3 ppm and NO2 ppb from AQI breakpoints
* Stored in new airquality_epa table with automatic deduplication
* Configurable via Instrument Config admin page (enable/disable, API key,
search radius)
* Runs hourly via cron at minute 30
- Air Quality Correlation Charts
* New Bee Impact Correlations page (air_correlation.php) with period selection
* Foraging Activity vs Air Quality chart: bee count (IN+OUT) overlaid with
PM2.5 AQI and O3 AQI, EPA color-banded y-axis
* Daily Weight Change vs Average AQI: column chart with configurable smoke
threshold line
* EPA Pollutant Detail chart: O3 ppm, NO2 ppb, and AQI series with
reporting area label
- Enhanced Air Quality Chart
* Main air chart now shows PM2.5, PM10, PM1 concentrations on primary axis
* AQI on secondary axis with EPA color-banded plotBands
(Good/Moderate/USG/Unhealthy/Very Unhealthy/Hazardous)
* O3 and NO2 AQI series from EPA data when available
* Backward compatible with pre-upgrade data (falls back to legacy air_aqi)
- Air Quality Stats Panel
* Expanded stats sidebar: PM2.5 stats (avg, max/min, AQI), PM10 stats,
EPA O3/NO2 AQI stats (shown conditionally when data available)
- Air Quality Alerts
* High PM2.5 alert when concentration exceeds threshold (default 35.5 ug/m3)
* Wildfire smoke detection when PM2.5 AQI exceeds smoke threshold (default 150)
* High ozone alert when O3 AQI exceeds threshold (default 100)
* All thresholds configurable in hiveconfig
- Cloud Sync for Air Quality
* 7 new air data fields synced to hivecontrol.org (pm2_5_aqi, pm10_aqi,
pm2_5_raw, pm10_raw, pm1_raw, pressure, source)
* AirNow config (KEY_AIRNOW, ENABLE_AIRNOW, AIRNOW_DISTANCE) synced in
all 3 cloud locations (POST vars, UPDATE SQL, SEND config)
DATABASE CHANGES:
- DB_PATCH_39: 7 new columns on allhivedata (air_pm2_5_aqi, air_pm10_aqi,
air_pm2_5_raw, air_pm10_raw, air_pm1_raw, air_pressure, air_source) and
12 new columns on hiveconfig (KEY_AIRNOW, AIRNOW_DISTANCE, ENABLE_AIRNOW,
alert thresholds, chart colors, trend toggles)
(DB version 30 -> 31)
- DB_PATCH_40: New airquality_epa table for EPA gaseous pollutant data
with indexes on date and (date, source)
(DB version 31 -> 32)
--------------------
2.15 Release
--------------------
NEW FEATURES:
- Modern Pollen Data Provider Chain
* Complete rewrite of getpollen.sh (v2.0) replacing 2016-era web scraping
* Primary provider: pollen.com API (US/ZIP-based, returns 0-12 index)
* Fallback #1: Tomorrow.io (global, requires API key, 0-5 scale mapped to 0-12)
* Fallback #2: Open-Meteo Air Quality (Europe only, species-based pollen counts)
* Fallback #3: Ambee (global, requires API key)
* Automatic backfill: fills gaps from pollen.com historical and Open-Meteo
* Health logging to weather_health table for provider diagnostics
* Old claritin-based scripts archived to deprecated/ directory
- Pollen API Key Management
* Added Tomorrow.io (KEY_TOMORROW) and Ambee (KEY_AMBEE) API key fields
* Configurable via Instruments admin page under new "Pollen Data" section
* Keys synced to hivecontrol.org via cloud sync (hiveconfig.sh)
DASHBOARD IMPROVEMENTS:
- Added Pollen Card to Dashboard
* New 5th card in top row showing current pollen level (0-12 scale)
* Dynamic color coding: green (low), gold (moderate), red (high)
* Shows pollen severity label and predominant pollen types
* Custom pollen.png icon
* Custom col-lg-fifth CSS class for 5-column equal-width layout
BUG FIXES:
- Fixed pollen chart series in gdd_chart.php rendering GDD data instead of
pollen data (was iterating $result instead of $result3)
- Fixed pollen axis labels showing pressure units (mb/in) instead of plain values
- Fixed XSS vulnerability in 9 chart popup calls across 7 chart widget files
(beecount_chart, temp_chart, weight_chart, air_chart, light_chart,
all_chart, gdd_chart) — all now use htmlspecialchars()
DATABASE CHANGES:
- DB_PATCH_38: Added KEY_TOMORROW and KEY_AMBEE columns to hiveconfig table
(DB version 29 -> 30)
--------------------
2.14 Release
--------------------
NEW FEATURES:
- Weather Reliability System
* Cascading fallback with per-provider health tracking
* weather_health table logs success/failure per provider per day
* Providers automatically deprioritized after repeated failures
* Configurable per-provider API keys (KEY_OPENWEATHERMAP, KEY_WEATHERAPI,
KEY_VISUALCROSSING, KEY_WEATHERFLOW)
- GDD (Growing Degree Days) Refactoring
* Improved calculation accuracy and data pipeline
* Better seasonal accumulation tracking
- Alert System
* Hive alert engine detects high/low temperature, robbing, swarming,
and honey flow conditions
* Alert banner on dashboard shows active alerts with severity levels
* Dashboard cards change color based on alert state (temp card turns
red/yellow, weight card turns red for robbing, green for honey flow)
* 1-hour trend deltas shown on temperature and humidity cards
- Setup Wizard
* New first-run setup wizard guides users through initial configuration
* Dashboard auto-redirects to wizard if hive name/location not configured
* Streamlined onboarding for new installations
- Split/Combined Chart View
* Dashboard charts can be viewed as 3 focused panels (Climate, Weight,
Environment) or 1 combined all-in-one chart
* View preference saved to localStorage
* Toggle buttons in chart toolbar
DASHBOARD IMPROVEMENTS:
- Added trend indicators (arrows) on temperature and humidity cards
showing 1-hour rate of change
- Weight card shows trend text (Rapid loss, Possible swarm, Honey flow)
- Alert-aware card coloring reflects current hive conditions
DATABASE CHANGES:
- DB_PATCH_35: Alert system tables
- DB_PATCH_36: Weather health tracking (weather_health table, cascading
fallback columns)
- DB_PATCH_37: Per-provider API key columns (KEY_OPENWEATHERMAP,
KEY_WEATHERAPI, KEY_VISUALCROSSING, KEY_WEATHERFLOW)
(DB version 26 -> 29)
--------------------
2.13 Release
--------------------
NEW FEATURES:
- Weather API Fallback System
* New WEATHER_FALLBACK config option enables automatic failover
* If primary weather source fails, system tries fallback source automatically
* Supports any cloud-based weather source as fallback (Open-Meteo, NWS,
OpenWeatherMap, WeatherAPI, Visual Crossing)
* Fallback attempts logged with WARNING/ERROR levels for troubleshooting
* Configurable via Instruments page dropdown
- Refactored Weather Dispatcher (getwx.sh)
* Complete rewrite from 316 to 145 lines with modular functions
* Extracted init_wx_vars(), call_wx_provider(), parse_wx_json()
* Unified JSON parsing with legacy CSV fallback for older scripts
* Cleaner provider dispatch via case statement
- Modernized Legacy Weather Scripts
* getAmbientAPI.sh: 185 to 135 lines, uses wx_helpers.inc shared library
* getWeatherFlowLocal.sh: 219 to 176 lines, uses shared unit conversions
* getwxxml.sh: 153 to 108 lines, uses shared direction/output functions
* All three scripts now use degrees_to_cardinal(), output_wx_json(), and
shared unit conversion functions instead of inline duplicated code
- Increased Data Collection Frequency
* Changed currconditions.sh interval from 60 minutes to 15 minutes
* Weight monitor offset to 5,20,35,50 to prevent lock contention with
currconditions at 0,15,30,45
* Captures more granular data for better trend analysis
DASHBOARD IMPROVEMENTS:
- Added data point markers to all Highcharts line charts
* Small circle markers (radius 2) now visible along trend lines
* Applied to: temperature, weight, air quality, bee count, GDD,
light, all-sensors, and past-week charts
* Makes individual readings visible when zoomed in
HELP DOCUMENTATION:
- Complete rewrite of weather help page (help/weather.php)
* Documents all 10 weather sources with setup instructions
* Recommends Open-Meteo as default (free, no API key required)
* New Weather Fallback section explaining automatic failover
* Updated decision tree and troubleshooting guide
BUG FIXES:
- Fixed uninitialized variables in purpleairlocal.sh
* TRYCOUNTER and DATA_GOOD now initialized before while loop
* Prevents undefined variable warnings and potential infinite loops
DATABASE CHANGES:
- DB_PATCH_34: Added WEATHER_FALLBACK column to hiveconfig table
--------------------
2.12 Release
--------------------
NEW FEATURES:
- Multi-Source Weather API Support
* Added 5 new weather sources: Open-Meteo, OpenWeatherMap, NWS (weather.gov),
WeatherAPI.com, and Visual Crossing
* Shared helper library (wx_helpers.inc) for unit conversion and JSON output
* All sources output standardized WunderGround-format JSON
* NWS auto-discovers nearest station from lat/lon with 24-hour caching
* Organized weather dropdown in instrumentconfig.php with optgroups
- Automatic Weight Drift Compensation
* Auto-calibration runs weekly at 5am using nighttime readings (midnight-5am)
* Simple on/off toggle in both setup wizard and instrument config
* No manual SSH calibration required — system self-calibrates from operational data
* Requires 50+ nighttime samples with 5°F+ temperature variation
* Displays calibration status, R² value, and coefficients in admin UI
GPIO MIGRATION:
- Migrated from pigpio to lgpio for all Raspberry Pi models
* New DHTXXD_lgpio.py reads DHT22/DHT11 sensors using lgpio with busy-wait
edge detection and perf_counter_ns() for microsecond-precision timing
* Works on Pi 3, 4, 5, and all modern kernels (Bookworm/Trixie)
* Fallback chain: kernel IIO driver > lgpio Python > DHTXXD pigpio binary
* Updated dht22.sh, dht21.sh, wxdht22.sh, wxdht21.sh
* Install scripts no longer compile pigpio or start pigpiod
* Upgrade path removes pigpio and pigpiod cron entry
* Removed pigpiod @reboot from hivetool.cron
SETUP WIZARD:
- Added environmental drift compensation toggle to Step 3 (Weight Scale)
- Added drift compensation status to Step 8 review summary
- Fixed setup wizard redirect loop (dashboard link now works)
- Fixed fresh install defaults: Chart Round=on, Chart Smoothing=on,
Site Layout=Wide, Site Type=Compact
BUG FIXES:
- Fixed instrumentconfig.php weather source links pointing to siteconfig.php
instead of hiveconfig.php where lat/lon fields actually live
DATABASE CHANGES:
- Added WEIGHT_LAST_CALIBRATED and WEIGHT_CALIBRATION_R2 columns to hiveconfig
--------------------
2.11 Release
--------------------
NEW FEATURES:
- Weight Drift Compensation System
* Environmental compensation reduces weight drift caused by temperature and
humidity changes on the load cell and mechanical components
* Multivariate linear regression model: compensated = net - (alpha * delta_temp) - (beta * delta_humidity)
* Uses cached ambient weather station data (not hive-internal sensors)
* Configurable via admin Instruments page (enable/disable, view coefficients)
- High-Frequency Weight Monitor (weight_monitor.sh)
* Lightweight 15-minute cron job dedicated to weight sampling
* Runs independently of currconditions.sh (hourly full sensor sweep)
* Stores readings in new weight_readings table with raw, net, and compensated values
* flock-based mutual exclusion prevents concurrent HX711 GPIO access
- Trimmed Mean Sampling for HX711 Weight Sensor
* Collects 50 samples, discards top and bottom 10%, averages remaining 40
* Reduces noise from electrical spikes and ADC jitter
* Implemented in both HX711.py (Pi 4 pigpio) and HX711_lgpio.py (Pi 5+ lgpio)
- Calibration Workflow (calibrate_env_compensation.sh + compute_compensation.py)
* Place a static test weight on the scale and run calibration for 24-48 hours
* Automatically collects weight/temp/humidity samples via weight_monitor.sh
* Computes least-squares regression coefficients when calibration is stopped
* Requires R-squared >= 0.3 to enable compensation (rejects weak correlations)
* Writes coefficients directly to hiveconfig database
BUG FIXES:
- Fixed infinite retry loop in getweight.sh (wrong variable name in counter increment)
- Fixed time.sleep race condition in HX711_lgpio.py when valid_after is in the past
- Added flock to currconditions.sh get_hive_weight() for safe concurrent access
with weight_monitor.sh
DATABASE CHANGES:
- DB_PATCH_33: Added weight_readings table with indexes on date, date_utc, hiveid
- DB_PATCH_33: Added calibration_data table for compensation calibration samples
- DB_PATCH_33: Added 6 columns to hiveconfig: WEIGHT_TEMP_COEFF, WEIGHT_HUMIDITY_COEFF,
WEIGHT_REF_TEMP, WEIGHT_REF_HUMIDITY, WEIGHT_COMPENSATION_ENABLED, WEIGHT_MONITOR_INTERVAL
ADMIN UI:
- Added Weight Drift Compensation section to Instruments configuration page
- Shows current compensation status, coefficients, and reference values
--------------------
2.10 Release
--------------------
NEW FEATURES:
- Added Easy Installation System
* Created easy-install.sh: One-command installer eliminating need for chmod
* Installation reduced from 3 commands to 1 simple command:
curl -sSL https://raw.githubusercontent.com/rcrum003/HiveControl/master/easy-install.sh | sudo bash
* Added EASY_INSTALL_GUIDE.md: Complete beginner's guide from SD card imaging to running system
- Step-by-step Raspberry Pi OS 5 installation instructions
- How to use Raspberry Pi Imager with screenshots
- WiFi and SSH configuration walkthrough
- Sensor connection guide
- Comprehensive troubleshooting section
* Added DOWNLOAD_INSTRUCTIONS.md: All installation methods with comparisons
- One-line installation (recommended for beginners)
- Manual download and run (for code review)
- Git clone method (for developers)
- What happens during installation explained
* Added QUICK_REFERENCE.md: Printable one-page reference card
- Common commands and system control
- Web interface quick links
- Sensor testing commands
- File locations and pin connections
- Troubleshooting quick fixes
* Created download.html: Beautiful web-based download page
- Interactive installation method selector
- Copy-to-clipboard buttons for commands
- Visual step-by-step guides
- Links to all documentation
* Updated README.md with simplified installation instructions
- Prominent easy installation section
- Clear options for different features
- Links to comprehensive guides
* Added PACKAGING_IMPROVEMENTS.md: Complete documentation of all improvements
* Addresses user feedback that "chmod u+x and multiple commands are too hard"
* Makes HiveControl accessible to non-technical beekeepers