חוזה HTTP / Serial

הקושחה מעלה WebServer(80) אחרי ניסיון WiFi של 10 שניות. הארגומנטים הם query/form של Arduino (server.arg), לא גוף JSON. אם הרשת נכשלת — המצב האוטומטי המקומי ממשיך. זה לא SDK ולא ענן.

ארבעה נתיבים

שיטהנתיבארגומנטכישלון
GET /status אין. מחזיר snapshot חי
POST /set-angle deg חסר → missing deg; לא-מספר → invalid deg
POST /set-panel type חסר → missing type; מחוץ ל־0..2 → invalid panel type
POST /set-mode auto חייב המחרוזת "0" או "1"
set-panel?type=foo לא נכשל. String::toInt() של Arduino מחזיר 0, ו־0 הוא OLED. זה חולשה בקושחה, לא «סובלנות». המשחק למטה מדגים אותה.

set-angle מכבה אוטו (autoMode = false) ואז קורא moveToAngle, שמצמיד ל־±PANEL_LIMITS[panel]. תשובת 200 אומרת «הפקודה התקבלה», לא «המסך ב־99°».

שחקן חוזה

GET /statusבקשה (query string, כמו הלוח)
קוד תשובה
{}

אין לוח. src/lib/protocol.js מריץ את אותם כללי ולידציה.

גוף /status

{
  "angle":   4.5,
  "target":  8.0,
  "auto":    true,
  "panel":   2,
  "lux_top": 412.0,
  "lux_bot": 77.3
}

panel הוא enum: 0 OLED, 1 QLED, 2 LED. lux_* הם הקריאה החיה מ־BH1750 — כולל ערך שלילי כשהחיישן נכשל. אין שדה WiFi, אין הומינג, אין מומנט.

Serial 115200

הקושחה מדפיסה שורה אחת ב־setup(). לא לוג בקרה, לא קריאות lux.

Serial.begin(115200);

// אחרי WiFi.begin + לולאת 10 שניות:
IP: 192.168.1.42
// או:
WiFi timeout — continuing in local auto mode

מה קורה בלי רשת

server.begin() עדיין נקרא. בלי קישור, הלקוח לא מגיע לנתיבים. loop() ממשיך: stepper.run() + calcOptimalAngle כל 2 שניות אם autoMode. ניתוק WiFi אחרי החיבור לא מדפיס שוב — אין watchdog רשת בלופ.