用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/personamanagmentlayer/pcl --skill iot-expert命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Expert in Persona Control Language (PCL) - language design, compiler architecture, runtime systems, and ecosystem development
Expert system for designing, creating, and validating PCL skills with comprehensive domain knowledge extraction
Expert-level Docker containerization, image optimization, and container orchestration. Use this skill for building efficient Docker images, managing containers, and implementing Docker best practices.
基于 SOC 职业分类
正在显示 SKILL.md
| name | iot-expert |
| version | 1.0.0 |
| description | Expert-level IoT systems, embedded devices, edge computing, and IoT protocols |
| category | domains |
| tags | ["iot","embedded","edge-computing","mqtt","sensors","firmware"] |
| allowed-tools | ["Read","Write","Edit"] |
Expert guidance for IoT systems, embedded devices, edge computing, sensor networks, and IoT protocols.
import paho.mqtt.client as mqtt
import json
from datetime import datetime
from typing import Callable, Dict
class MQTTClient:
def __init__(self, broker: str, port: int = 1883, client_id: str = "iot_device"):
self.broker = broker
self.port = port
self.client = mqtt.Client(client_id)
self.subscriptions: Dict[str, Callable] = {}
self.client.on_connect = self._on_connect
self.client.on_message = self._on_message
self.client.on_disconnect = self._on_disconnect
def _on_connect(self, client, userdata, flags, rc):
if rc == 0:
print(f"Connected to MQTT broker at {self.broker}:{self.port}")
# Resubscribe to topics on reconnect
for topic in self.subscriptions.keys():
self.client.subscribe(topic)
:
()
():
topic = msg.topic
payload = msg.payload.decode()
topic .subscriptions:
:
data = json.loads(payload)
.subscriptions[topic](data)
json.JSONDecodeError:
.subscriptions[topic](payload)
():
rc != :
()
():
username password:
.client.username_pw_set(username, password)
.client.connect(.broker, .port, )
.client.loop_start()
():
message = json.dumps(payload)
result = .client.publish(topic, message, qos=qos, retain=retain)
result.rc == mqtt.MQTT_ERR_SUCCESS
():
.subscriptions[topic] = callback
.client.subscribe(topic, qos=qos)
():
.client.loop_stop()
.client.disconnect()
:
():
.device_id = device_id
.mqtt = mqtt_client
.topic =
() -> :
random
(random.uniform(, ), )
():
temperature = .read_temperature()
payload = {
: .device_id,
: temperature,
: ,
: datetime.utcnow().isoformat()
}
.mqtt.publish(.topic, payload)
payload
// Arduino/ESP32 Example
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT22
const char* ssid = "YourWiFiSSID";
const char* password = "YourPassword";
const char* mqtt_server = "broker.example.com";
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
void setup_wifi() {
delay(10);
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
{
(!client.connected()) {
Serial.print();
(client.connect()) {
Serial.println();
client.subscribe();
} {
Serial.print();
Serial.print(client.state());
Serial.println();
delay();
}
}
}
{
Serial.begin();
setup_wifi();
client.setServer(mqtt_server, );
client.setCallback(callback);
dht.begin();
}
{
(!client.connected()) {
reconnect();
}
client.loop();
lastRead = ;
(millis() - lastRead > ) {
humidity = dht.readHumidity();
temperature = dht.readTemperature();
(!isnan(humidity) && !isnan(temperature)) {
msg[];
(msg, (msg),
,
temperature, humidity);
client.publish(, msg);
Serial.println(msg);
}
lastRead = millis();
}
}
import asyncio
from typing import Dict, List
import numpy as np
class EdgeProcessor:
"""Process data at edge before sending to cloud"""
def __init__(self, buffer_size: int = 100):
self.buffer: List[Dict] = []
self.buffer_size = buffer_size
def add_reading(self, reading: Dict):
"""Add sensor reading to buffer"""
self.buffer.append(reading)
if len(self.buffer) >= self.buffer_size:
self.process_buffer()
def process_buffer(self) -> Dict:
"""Process buffered data at edge"""
if not self.buffer:
return {}
# Extract temperature values
temperatures = [r['temperature'] for r in self.buffer]
# Compute statistics at edge
summary = {
"count": len(temperatures),
: np.mean(temperatures),
: np.std(temperatures),
: np.(temperatures),
: np.(temperatures),
: .detect_anomalies(temperatures)
}
.buffer = []
summary
() -> []:
mean = np.mean(values)
std = np.std(values)
threshold =
anomalies = []
i, v (values):
(v - mean) > threshold * std:
anomalies.append(i)
anomalies
:
():
.mqtt = mqtt_client
.edge_processor = EdgeProcessor()
.devices: [, TemperatureSensor] = {}
():
.devices[device.device_id] = device
topic =
.mqtt.subscribe(topic, .handle_device_data)
():
.edge_processor.add_reading(data)
():
:
device .devices.values():
reading = device.publish_reading()
()
asyncio.sleep(interval)
from datetime import datetime
from enum import Enum
class DeviceStatus(Enum):
ONLINE = "online"
OFFLINE = "offline"
MAINTENANCE = "maintenance"
ERROR = "error"
class IoTDevice:
def __init__(self, device_id: str, device_type: str):
self.device_id = device_id
self.device_type = device_type
self.status = DeviceStatus.OFFLINE
self.last_seen = None
self.firmware_version = "1.0.0"
self.metadata = {}
def update_status(self, status: DeviceStatus):
self.status = status
self.last_seen = datetime.utcnow()
def needs_firmware_update(self, latest_version: str) -> bool:
return self.firmware_version < latest_version
class DeviceManager:
def __init__(self):
self.devices: Dict[str, IoTDevice] = {}
():
.devices[device.device_id] = device
():
device_id .devices:
.devices[device_id].update_status(DeviceStatus.ONLINE)
() -> [IoTDevice]:
offline = []
now = datetime.utcnow()
device .devices.values():
device.last_seen:
elapsed = (now - device.last_seen).total_seconds()
elapsed > timeout_seconds:
offline.append(device)
offline
():
device_id .devices:
payload = {
: ,
: new_version,
:
}
payload
❌ No power management strategy ❌ Unencrypted communications ❌ No error handling for network failures ❌ Sending all raw data to cloud ❌ No device authentication ❌ Hard-coded credentials in firmware ❌ No OTA update mechanism