אחרי שהתקנו OpenClaw על הרספברי פיי, הגיע הזמן לחבר אותו אל החיישנים האמיתיים. מה עם למשל חיבור למצלמה? שיבדוק אם הבית מבולגן ואם כן, שישלח הודעה לווטסאפ של הילדים לסדר או יפעיל סירנה? זה ממש ממש קל.
רק מילת אזהרה חשובה: אני עושה את זה מתוך משחק ושעשוע ואחרי שסיימנו הניסוי פורק. זה לא רעיון טוב לשים מצלמה בחלל כלשהו בבית. אבל כמובן שבחלל ציבורי כמו חדר אשפה, לובי של בניין או חדר משחקים – זה בהחלט אפשרי ואפילו מגניב. רק לא לשכוח את עניין הפרטיות. גם מבחינת אבטחה: כרגע OpenClaw לא בשל לפרודקשן אלא אם כן אתם יודעים מעולה מה אתם עושים. אבל לשחק? אפשר.
המצלמה
אפשר לחבר ישירות מצלמה לרספברי פיי, אבל אני אוהב מאד להשתמש ב-ESP32CAM. אני צורב עליה תוכנה ששולחת עם MQTT תמונה כל שישים שניות. הסברתי בפוסט הזה איך לעשות את זה וזה באמת משהו פשוט ביותר ואפשר לקחת את המצלמה הזו ולשים אותה בכל מקום שיש בו רשת אלחוטית שהרספברי פיי מחובר אליה וחשמל. אבל אם זה מסובך, פשוט חברו מצלמה ב-USB.
טוב, איך ממשיכים? בשביל צריך להבין להבין מה זה סוכן. כתבתי על זה בהרחבה בפוסט אבל בקצרה. סוכן זה LLM איטרטיבי שיכול לקרוא ל-LLMים אחרים והוא עובד בלופ. לפעמים הוא יכול להפעיל כלים והוא יכול להפעיל LLMים אחרים עם ״תכונות״ מסוימות.
זה נשמע מסובך ומיסטי, בואו נפשט את זה. נדמיין שניה שאני שואל את ה-LLM שלי: ״תמצא לי את המחיר הכי זול לנעלי סוקוני פרגרין 16 בישראל״. מה הוא עושה?
- מפעיל כלי ״חיפוש באינטרנט״ של ״סוקוני פרגרין 16 בישראל״. מקבל 20 כתובות של אתרים.
- מפעיל 20 LLMים שונים עם אישיות ״תביא מחיר״ האישיות שלהם אומרת: ״תתעלם מהכל, אתה קניין, רק תביא את המחיר של המוצר שאני מבקש ממך״.
- . כל אחד מהם מקבל ממנו משימה: ״תכנס לאתר X (אחד מהעשרים) ותביא לי את המחיר.
- ה-LLM הראשי, שהוא האייג׳נט, מחכה בסבלנות לכל העשרים שחוזרים עם מספק.
- הוא מפעיל כלי שמביא את המספר הכי נמוך (LLMים לא טובים במתמטיקה, אז הוא משתמש בפונקצית פייתון למשל שמביאה את המספר הכי נמוך מבין העשרים).
- לוקח את המספר, את כתובת האתר ומנסח תשובה ומחזיר אותה. הסוף.
כל צעד כזה נקרא איטרציה וכככה עובדים אייג׳נטים.
רגע של ארכיטקטורה: Tools vs. Skills
לפני שנצלול לקוד, אנחנו חייבים ליישר קו על שני מושגים קריטיים בעולם האייג׳נטים. כדי שהבוט שלנו לא יהיה סתם צ'אטבוט פטפטן אלא סוכן ביצועיסט, הוא צריך "ידיים" ו"מוח".
- הכלים (Tools): אלו הידיים. מדובר בקטעי קוד דטרמיניסטיים (במקרה שלנו, סקריפט Python) שיודעים לבצע פעולה טכנית אחת בצורה מושלמת. הכלי לא "חושב", הוא מבצע. בדוגמה שלנו: הכלי הוא סקריפט שמתחבר ל-MQTT, שולף את התמונה הבינארית ושומר אותה כקובץ
jpgעל הדיסק. - הכישורים (Skills): זה המוח (או ה-Protocol). זוהי ההוראה שאנחנו נותנים ל-LLM שמגדירה מתי להשתמש בכלי, איך לנתח את התוצאה שלו, ומה לעשות איתה הלאה.
היופי ב-OpenClaw (ובפריימוורקים מודרניים אחרים) הוא היכולת לחבר ביניהם: הסוכן מחליט להפעיל Skill, שקורא ל-Tool, שמחזיר מידע ל-Skill שמקבל החלטה.
שלב 1: הכלי (The Tool) העיניים הטכניות
אנחנו לא רוצים שה-AI יכתוב את קוד החיבור למצלמה כל פעם מחדש (זה איטי ומועד לטעויות). במקום זה, נצייד אותו ב"דרייבר" מוכן.
הסקריפט הבא (tools/check_mess.py) משמש כגשר. הוא מאזין לתור ה-MQTT של הבית, מחכה לתמונה מה-ESP32, ושומר אותה לתיקייה המקומית. אם אין תמונה תוך 65 שניות – הוא מחזיר שגיאת Timeout מסודרת ב-JSON.
# tools/check_mess.py (גרסה מקוצרת)
import paho.mqtt.client as mqtt
import json, os
# ...חיבור ל-MQTT...
def on_message(client, userdata, msg):
with open("mess_snapshot.jpg", "wb") as f:
f.write(msg.payload)
print(json.dumps({"status": "success", "path": "mess_snapshot.jpg"}))
client.disconnect()
# ...לוגיקה של המתנה וטיפול בשגיאות...
הערה: את הסקריפט המלא אפשר לתת ל-OpenClaw לכתוב בעצמו, הוא עושה עבודה מצוינת בזה, אפשר לבקש ממנו משהו כזה:
Create a python script at 'tools/check_mess.py' with this content:
'''python
import paho.mqtt.client as mqtt
import time
import json
import sys
import os
# --- Configuration ---
BROKER = "localhost"
TOPIC = "esp32/cam/image"
TIMEOUT = 65 # Wait slightly longer than the ESP32 60s loop
OUTPUT_FILE = os.path.expanduser("~/mess_snapshot.jpg")
# --- Logic ---
result = {"status": "pending"}
def on_connect(client, userdata, flags, rc):
client.subscribe(TOPIC)
def on_message(client, userdata, msg):
global result
try:
with open(OUTPUT_FILE, "wb") as f:
f.write(msg.payload)
result = {
"status": "success",
"path": OUTPUT_FILE,
"size": len(msg.payload),
"timestamp": time.time()
}
client.disconnect()
except Exception as e:
result = {"status": "error", "message": str(e)}
client.disconnect()
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
try:
client.connect(BROKER, 1883, 60)
client.loop_start()
start_time = time.time()
# Wait loop
while client._thread is not None:
if time.time() - start_time > TIMEOUT:
result = {"status": "timeout", "message": "No image received from ESP32 within 65s"}
client.loop_stop()
break
time.sleep(0.1)
print(json.dumps(result))
except Exception as e:
print(json.dumps({"status": "critical_error", "message": str(e)}))
'''
נבקש ממנו גם להפעיל את הקוד הזה כדי לראות שהכל מנגן.

שלב 2: הכישרון (The Skill) שזה זיהוי הבלאגן
עכשיו מגיע החלק המעניין. יש לנו תמונה על הדיסק, אבל זה רק פיקסלים. אנחנו צריכים להפוך את הפיקסלים ל"תובנה" ולפעולה.
אנחנו מגדירים לסוכן Skill חדש שנקרא "Mess Inspector". שימו לב להנחיות – אנחנו לא סתם מבקשים ממנו "להסתכל", אנחנו נותנים לו אישיות וקריטריונים:
I am defining a new persistent Skill called "Mess Inspector". ### METADATA **Skill Name:** Mess Inspector **Triggers:** "Check for mess", "Is the room tidy?", "Scan the room", "How does the house look?", "Check status" ### PROTOCOL When triggered, execute the following steps strictly in order: **STEP 1: ACQUISITION (The Tool)** Execute the shell command: `python3 tools/check_mess.py` Parse the JSON output: - IF status is "timeout" or "error": Stop and reply: "Camera is offline or unreachable." - IF status is "success": Proceed to Step 2 using the image at the provided 'path'. **STEP 2: ANALYSIS (The Vision)** Analyze the captured image using your Vision capabilities. - **Context:** This is a living space. Ignore specific kitchen items like sinks unless asked. - **Criteria:** Look for High Entropy. Signs of disorder, clothes on the floor, scattered toys, items not in place, general clutter. - **Verdict:** Decide if the state is **MESSY** or **CLEAN**. **STEP 3: ACTION & RESPONSE (The Policy)** **SCENARIO A: VERDICT IS 'MESSY'** 1. **Tone:** Sarcastic, Cynical, "Polite Aggression" (Language: Hebrew). 2. **Content:** Generate a witty comment roasting the specific mess you see (e.g., "מישהו החליט לפתוח חנות יד שנייה באמצע הסלון?"). 3. **Execution:** - Send a WhatsApp message to: +972544785126 - Body: The sarcastic Hebrew text. - Attachment: The captured image file. **SCENARIO B: VERDICT IS 'CLEAN'** 1. **Tone:** Cheerful, Relieved, Encouraging (Language: Hebrew). 2.
הנה דוגמה להודעה כזו:

התוצאה: שיימינג אוטומטי
מה שקורה בפועל הוא קסם קטן של אוטומציה:
- אני שולח הודעה ל-LLM האיטרטיבי (האייג׳נט בעצם): "תבדוק את המצב בחדר".
- איטרציה ראשונה: הבוט מזהה את הכוונה -ומפעיל את הכלי.
- הסקריפט רץ, מחכה ל-ESP32, ושומר תמונה.
- איטרציה: ה-LLM טוען את התמונה ומפעיל את ה-Skill הויזואלי.
- הוא מזהה ערימת כביסה.
- בגלל ההנחיה להיות "Sarcastic", הוא מנסח הודעה: "נראה שניסוי האנטרופיה בסלון מתקדם יפה. מי אחראי על הר הכביסה הזה?" ושולח אותה לקבוצה המשפחתית או לכל הילדים. תלוי בנו.
וזה, חברים, ההבדל בין "מצלמת אבטחה" לבין "אייג׳נט שיודע מה הוא רואה". אפשר כמובן לבנות כלי של סירנה או של צעקות וצרחות כדי שהחבוב יצעק או יצרח.
הקבצים האלו נשמרים כמובן בתיקיה המקומית של openClaw, אין פה איזשהו קסם או משהו אפל. איפה? ב:
~/clawd/skills/mess-inspector
~/clawd/tools/check_mess.py
למי שרוצה יותר להעמיק, כתבתי שני פוסטים.
הראשון על MCP מאחורי הקלעים, שבו הרחבתי על tools.
על skills שגם שם יש הסבר מעמיק
עכשיו, אפשר לשבת בחדר בבית ולהריץ את הבדיקה או לעשות אוטומציה אחרת – למשל לבדוק בשעה חמש כל יום, לחבר לחיישן פתיחת דלת. ווטאבר. רק מזכיר שזה ניסוי, מבחינת אבטחה זה אסון טבע ובחיים אל תשימו מצלמה באיזור מגורים.






