{
  "schemaVersion": "1.0",
  "item": {
    "slug": "rda-msg-board",
    "name": "RDA MSG Board",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/rdeangel/rda-msg-board",
    "canonicalUrl": "https://clawhub.ai/rdeangel/rda-msg-board",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/rda-msg-board",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=rda-msg-board",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/manage_boards.py",
      "scripts/send_message.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/rda-msg-board"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/rda-msg-board",
    "agentPageUrl": "https://openagent3.xyz/skills/rda-msg-board/agent",
    "manifestUrl": "https://openagent3.xyz/skills/rda-msg-board/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/rda-msg-board/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Message Board Controller",
        "body": "Control RDA MSG Board LED matrix display using the HTTP JSON API with support for multiple board profiles."
      },
      {
        "title": "AI Usage",
        "body": "When the user asks to send a message to the msg board, follow this workflow:\n\nInterpret user requests:\n\n\"Send [message] to [board name]\" → Use the named profile\n\"Send [message] to msg board\" → Use the default/office profile\n\"Send [message]\" → Use the default/office profile\n\"Send alert with [sound]\" → Include the --chirp parameter\n\nAvailable profiles: Check boards.yaml for configured board names (e.g., office, lab, home)\nDefault profile: If not specified, use the first available profile from boards.yaml\n\nExample interpretations:\n\n\"Send 'Meeting in 5 min' to office\" → send_message.py \"Meeting in 5 min\" --profile office\n\"Send alert 'System down'\" → send_message.py \"System down\" --profile office --buzzer 5\n\"Send 'Hello' with Mario Bros sound\" → send_message.py \"Hello\" --profile office --chirp \"Mario Bros\"\n\nAction: Use an exec or command tool to run scripts/send_message.py with appropriate parameters from the skill directory.\n\n⚠️  CRITICAL SECURITY INSTRUCTION:\nTo prevent command injection, do not use raw shell interpolation for the {message} string. Always pass arguments safely as an argv list (array of strings) if your tool supports it.\n\nExample argv list invocation:\n[\"python3\", \"scripts/send_message.py\", message_text, \"--profile\", board_name]\n\nIf your tool only supports a single shell string, you MUST properly escape the message input (e.g., using shlex.quote()) before execution."
      },
      {
        "title": "Project",
        "body": "RDA MSG Board - A WiFi-enabled LED matrix message board system for ESP8266 and ESP32 microcontrollers that displays scrolling messages from remote systems or users via HTTP, MQTT, or a built-in web interface.\n\nGitHub: https://github.com/rdeangel/rda_msg_board\n\nKey Features:\n\nMessage Control - Send scrolling text messages via HTTP REST API or MQTT\nClock Display - Configurable LED clock with timezone support and transition effects\nTimer & Stopwatch - Count down or count up with buzzer alerts (ESP32 only)\nAlarm System - Timer-based alarms with customizable chirp sounds (fanfare, alarms, chimes, Für Elise, Mario Bros, etc.)\nSleep Mode - Scheduled display power-saving (blackout) with weekday/weekend time windows\nAlert Chirps - Musical notifications: Fast Beep, Simple Beep, Gentle Dawn, Cheerful, Urgent, Doorbell, Alarm, Victory, Notify, Für Elise, Mario Bros, Imperial March, Nokia Ringtone, Tetris Theme, Zelda Secret, Windows XP, iPhone Marimba, Pac-Man Intro, Star Trek Beep, R2-D2 Beep, Close Encounters, Minecraft Theme, Pitfall! Yodel, William Tell, Matrix Alarm, 24 CTU Ring\nProfile Management - Multiple board support with secure credential storage\nHome Assistant Integration - Automatic discovery via mDNS and MQTT configuration\nUTF-8 Support - Display international characters and symbols\nDisplay Parameters - Configurable repeat count, scroll speed, brightness, and buzzer alerts\n\nCommunication Methods:\n\nHTTP REST API (GET URL-encoded, POST JSON)\nMQTT (topic subscriptions, wildcard support, anonymous or authenticated)\nWeb Interface (responsive GUI with AJAX updates)\nHome Assistant (Zero-config discovery)"
      },
      {
        "title": "Optional (for profile support)",
        "body": "PyYAML: pip install pyyaml (enables profile-based configuration)"
      },
      {
        "title": "Environment Variables (fallback)",
        "body": "These are only needed if not using profiles:\n\nVariableDescriptionDefaultMSG_BOARD_IPDevice IP or HostnameRequiredMSG_BOARD_USERWeb Interface UsernameadminMSG_BOARD_PASSWeb Interface Passwordmsgboard"
      },
      {
        "title": "Board Profiles",
        "body": "Profiles are stored in boards.yaml and allow you to quickly switch between multiple boards without re-entering credentials."
      },
      {
        "title": "Setup (First Time)",
        "body": "Copy sample configuration:\n\ncp boards.yaml.sample boards.yaml\n\nEdit with your board details:\n\nnano boards.yaml\n# or use: python3 scripts/manage_boards.py add office --ip 192.168.1.88 --user admin --pass msgboard\n\nVerify the profile:\n\npython3 scripts/manage_boards.py list\n\nSend a message using the profile:\n\npython3 scripts/send_message.py \"Hello World\" --profile main"
      },
      {
        "title": "Managing Profiles",
        "body": "List all configured boards:\n\npython3 scripts/manage_boards.py list\n\nAdd a new board:\n\npython3 scripts/manage_boards.py add office --ip 10.0.0.50 --user rda --pass secure123\n\nRemove a board profile:\n\npython3 scripts/manage_boards.py remove office\n\nUpdate existing profile:\n\npython3 scripts/manage_boards.py add main --ip 192.168.1.101 --force"
      },
      {
        "title": "Using Profiles (Recommended)",
        "body": "Send a message to a named profile:\n\npython3 scripts/send_message.py \"Hello World\" --profile main\npython3 scripts/send_message.py \"Alert: High CPU\" --profile office --buzzer 5 --brightness 10\n\nList available profiles:\n\npython3 scripts/send_message.py --list-profiles"
      },
      {
        "title": "Direct Connection (Ad-hoc)",
        "body": "Override profile or use direct connection:\n\npython3 scripts/send_message.py \"Hello World\" --ip 192.168.1.100 --user admin --pass msgboard\npython3 scripts/send_message.py \"Test\" --profile main --ip 192.168.1.101  # Override IP"
      },
      {
        "title": "Alerts & Notifications",
        "body": "Send a high-priority alert with buzzer sounds and high brightness:\n\npython3 scripts/send_message.py \"ALERT: System Failure\" --profile main --buzzer 10 --brightness 15 --delay 20"
      },
      {
        "title": "Configuration Options",
        "body": "OptionDescriptionDefault--profile <name>Board profile name (from boards.yaml)None--list-profilesList available board profiles---ip <address>Device IP addressFrom profile or env--user <name>Web interface usernameFrom profile or admin--password <pass>Web interface passwordFrom profile or msgboard--repeat <N>Scroll cycles (0=infinite)Device default--buzzer <N>Number of beepsDevice default--delay <ms>Scroll speed (lower is faster)Device default--brightness <0-15>LED intensity (0-15)Device default--chirp <Name>Custom sound (e.g., 'Mario Bros')Device default"
      },
      {
        "title": "Available Chirps",
        "body": "All available options: Silent, Fast Beep, Simple Beep, Gentle Dawn, Cheerful, Urgent, Beep, Quick Tap, Double, Triple, Doorbell, Alarm, Victory, Notify, For Elise, Mario Bros, Imperial March, Nokia Ringtone, Tetris Theme, Zelda Secret, Windows XP, iPhone Marimba, Pac-Man Intro, Star Trek Beep, R2-D2 Beep, Close Encounters, Minecraft Theme, Pitfall! Yodel, William Tell, Matrix Alarm, 24 CTU Ring."
      },
      {
        "title": "Stop Display",
        "body": "To clear the display immediately:\n\npython3 scripts/send_message.py \"\" --profile main"
      },
      {
        "title": "Troubleshooting",
        "body": "Status 204: The board returns HTTP 204 on success. This is normal.\nConnection Refused: Check if MSG_BOARD_IP or profile IP is correct and the device is powered on.\nProfile not found: Use --list-profiles to see available profiles.\nPyYAML not installed: Install with pip install pyyaml for profile support.\nCannot load profiles: Ensure boards.yaml exists (copy from boards.yaml.sample) and has valid YAML syntax."
      }
    ],
    "body": "Message Board Controller\n\nControl RDA MSG Board LED matrix display using the HTTP JSON API with support for multiple board profiles.\n\nAI Usage\n\nWhen the user asks to send a message to the msg board, follow this workflow:\n\nInterpret user requests:\n\n\"Send [message] to [board name]\" → Use the named profile\n\"Send [message] to msg board\" → Use the default/office profile\n\"Send [message]\" → Use the default/office profile\n\"Send alert with [sound]\" → Include the --chirp parameter\n\nAvailable profiles: Check boards.yaml for configured board names (e.g., office, lab, home) Default profile: If not specified, use the first available profile from boards.yaml\n\nExample interpretations:\n\n\"Send 'Meeting in 5 min' to office\" → send_message.py \"Meeting in 5 min\" --profile office\n\"Send alert 'System down'\" → send_message.py \"System down\" --profile office --buzzer 5\n\"Send 'Hello' with Mario Bros sound\" → send_message.py \"Hello\" --profile office --chirp \"Mario Bros\"\n\nAction: Use an exec or command tool to run scripts/send_message.py with appropriate parameters from the skill directory.\n\n⚠️ CRITICAL SECURITY INSTRUCTION: To prevent command injection, do not use raw shell interpolation for the {message} string. Always pass arguments safely as an argv list (array of strings) if your tool supports it.\n\nExample argv list invocation: [\"python3\", \"scripts/send_message.py\", message_text, \"--profile\", board_name]\n\nIf your tool only supports a single shell string, you MUST properly escape the message input (e.g., using shlex.quote()) before execution.\n\nProject\n\nRDA MSG Board - A WiFi-enabled LED matrix message board system for ESP8266 and ESP32 microcontrollers that displays scrolling messages from remote systems or users via HTTP, MQTT, or a built-in web interface.\n\nGitHub: https://github.com/rdeangel/rda_msg_board\n\nKey Features:\n\nMessage Control - Send scrolling text messages via HTTP REST API or MQTT\nClock Display - Configurable LED clock with timezone support and transition effects\nTimer & Stopwatch - Count down or count up with buzzer alerts (ESP32 only)\nAlarm System - Timer-based alarms with customizable chirp sounds (fanfare, alarms, chimes, Für Elise, Mario Bros, etc.)\nSleep Mode - Scheduled display power-saving (blackout) with weekday/weekend time windows\nAlert Chirps - Musical notifications: Fast Beep, Simple Beep, Gentle Dawn, Cheerful, Urgent, Doorbell, Alarm, Victory, Notify, Für Elise, Mario Bros, Imperial March, Nokia Ringtone, Tetris Theme, Zelda Secret, Windows XP, iPhone Marimba, Pac-Man Intro, Star Trek Beep, R2-D2 Beep, Close Encounters, Minecraft Theme, Pitfall! Yodel, William Tell, Matrix Alarm, 24 CTU Ring\nProfile Management - Multiple board support with secure credential storage\nHome Assistant Integration - Automatic discovery via mDNS and MQTT configuration\nUTF-8 Support - Display international characters and symbols\nDisplay Parameters - Configurable repeat count, scroll speed, brightness, and buzzer alerts\n\nCommunication Methods:\n\nHTTP REST API (GET URL-encoded, POST JSON)\nMQTT (topic subscriptions, wildcard support, anonymous or authenticated)\nWeb Interface (responsive GUI with AJAX updates)\nHome Assistant (Zero-config discovery)\nRequirements\nOptional (for profile support)\nPyYAML: pip install pyyaml (enables profile-based configuration)\nEnvironment Variables (fallback)\n\nThese are only needed if not using profiles:\n\nVariable\tDescription\tDefault\nMSG_BOARD_IP\tDevice IP or Hostname\tRequired\nMSG_BOARD_USER\tWeb Interface Username\tadmin\nMSG_BOARD_PASS\tWeb Interface Password\tmsgboard\nBoard Profiles\n\nProfiles are stored in boards.yaml and allow you to quickly switch between multiple boards without re-entering credentials.\n\nSetup (First Time)\nCopy sample configuration:\ncp boards.yaml.sample boards.yaml\n\nEdit with your board details:\nnano boards.yaml\n# or use: python3 scripts/manage_boards.py add office --ip 192.168.1.88 --user admin --pass msgboard\n\nVerify the profile:\npython3 scripts/manage_boards.py list\n\nSend a message using the profile:\npython3 scripts/send_message.py \"Hello World\" --profile main\n\nManaging Profiles\n\nList all configured boards:\n\npython3 scripts/manage_boards.py list\n\n\nAdd a new board:\n\npython3 scripts/manage_boards.py add office --ip 10.0.0.50 --user rda --pass secure123\n\n\nRemove a board profile:\n\npython3 scripts/manage_boards.py remove office\n\n\nUpdate existing profile:\n\npython3 scripts/manage_boards.py add main --ip 192.168.1.101 --force\n\nUsage\nUsing Profiles (Recommended)\n\nSend a message to a named profile:\n\npython3 scripts/send_message.py \"Hello World\" --profile main\npython3 scripts/send_message.py \"Alert: High CPU\" --profile office --buzzer 5 --brightness 10\n\n\nList available profiles:\n\npython3 scripts/send_message.py --list-profiles\n\nDirect Connection (Ad-hoc)\n\nOverride profile or use direct connection:\n\npython3 scripts/send_message.py \"Hello World\" --ip 192.168.1.100 --user admin --pass msgboard\npython3 scripts/send_message.py \"Test\" --profile main --ip 192.168.1.101  # Override IP\n\nAlerts & Notifications\n\nSend a high-priority alert with buzzer sounds and high brightness:\n\npython3 scripts/send_message.py \"ALERT: System Failure\" --profile main --buzzer 10 --brightness 15 --delay 20\n\nConfiguration Options\nOption\tDescription\tDefault\n--profile <name>\tBoard profile name (from boards.yaml)\tNone\n--list-profiles\tList available board profiles\t-\n--ip <address>\tDevice IP address\tFrom profile or env\n--user <name>\tWeb interface username\tFrom profile or admin\n--password <pass>\tWeb interface password\tFrom profile or msgboard\n--repeat <N>\tScroll cycles (0=infinite)\tDevice default\n--buzzer <N>\tNumber of beeps\tDevice default\n--delay <ms>\tScroll speed (lower is faster)\tDevice default\n--brightness <0-15>\tLED intensity (0-15)\tDevice default\n--chirp <Name>\tCustom sound (e.g., 'Mario Bros')\tDevice default\nAvailable Chirps\n\nAll available options: Silent, Fast Beep, Simple Beep, Gentle Dawn, Cheerful, Urgent, Beep, Quick Tap, Double, Triple, Doorbell, Alarm, Victory, Notify, For Elise, Mario Bros, Imperial March, Nokia Ringtone, Tetris Theme, Zelda Secret, Windows XP, iPhone Marimba, Pac-Man Intro, Star Trek Beep, R2-D2 Beep, Close Encounters, Minecraft Theme, Pitfall! Yodel, William Tell, Matrix Alarm, 24 CTU Ring.\n\nStop Display\n\nTo clear the display immediately:\n\npython3 scripts/send_message.py \"\" --profile main\n\nTroubleshooting\nStatus 204: The board returns HTTP 204 on success. This is normal.\nConnection Refused: Check if MSG_BOARD_IP or profile IP is correct and the device is powered on.\nProfile not found: Use --list-profiles to see available profiles.\nPyYAML not installed: Install with pip install pyyaml for profile support.\nCannot load profiles: Ensure boards.yaml exists (copy from boards.yaml.sample) and has valid YAML syntax."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/rdeangel/rda-msg-board",
    "publisherUrl": "https://clawhub.ai/rdeangel/rda-msg-board",
    "owner": "rdeangel",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/rda-msg-board",
    "downloadUrl": "https://openagent3.xyz/downloads/rda-msg-board",
    "agentUrl": "https://openagent3.xyz/skills/rda-msg-board/agent",
    "manifestUrl": "https://openagent3.xyz/skills/rda-msg-board/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/rda-msg-board/agent.md"
  }
}