IoT Devices · الشاشة الشاملة
أمثلة API لـSuper Screen: اتصال WebSocket محلي
استعلم عن المناطق عبر WebSocket المحلي، وطابق الردود باستخدام mid وعالج المهلة قبل النشر. تستخدم الأمثلة بروتوكول الشاشة المستقل عن واجهة الأجهزة.
قبل تشغيل المثال
استخدم Node.js 24 أو عميلاً متوافقاً مع WebSocket في شبكة المشغّل. أكد المنفذ عبر /ping ومرر SCREEN_IP وSCREEN_PORT وSCREEN_CONTROL_CODE في البيئة. يلزم رمز الجهاز المفعّل ذو الست خانات، وليس مفتاح /api/iot/v1.
الطلب الأول للقراءة فقط ويعرض المناطق. مهلة الثماني ثواني مثال وليست ضمان خدمة. يطبع الرد المطابق دون عنوان الاتصال أو الرمز. اختبره على شاشة تجريبية قبل تحويله إلى أوامر تحكم.
Node.js: عرض المناطق وربط الرد
احفظه باسم screen-query.mjs وشغّل node screen-query.mjs بعد إعداد البيئة. اجعل mid من ثمانية أحرف وts بالمللي ثانية. لا يكمل رد طلب آخر هذا الطلب.
import { randomBytes } from 'node:crypto';
const host = process.env.SCREEN_IP;
const port = Number(process.env.SCREEN_PORT);
const token = process.env.SCREEN_CONTROL_CODE ?? '';
if (!host || !/^[a-zA-Z0-9.-]+$/.test(host) ||
!Number.isInteger(port) || port < 1 || port > 65535 ||
!/^\d{6}$/.test(token)) {
throw new Error('Set SCREEN_IP, SCREEN_PORT and SCREEN_CONTROL_CODE');
}
const endpoint = new URL(`ws://${host}:${port}/order`);
endpoint.search = new URLSearchParams({ token, rid: 'energy-pilot', rname: 'Energy pilot' }).toString();
const mid = randomBytes(4).toString('hex');
const socket = new WebSocket(endpoint);
let done = false;
function finish(failed) {
if (done) return;
done = true;
clearTimeout(timer);
process.exitCode = failed ? 1 : 0;
socket.close();
}
const timer = setTimeout(() => {
console.error('Reply timeout; verify state before retrying a control action');
finish(true);
}, 8000);
socket.addEventListener('open', () => {
if (!done) socket.send(JSON.stringify({
mid, data: { screen: { action: 'list' } }, ts: Date.now(),
}));
});
socket.addEventListener('message', (event) => {
if (done) return;
let reply;
try { reply = JSON.parse(String(event.data)); } catch { return; }
if (!reply || typeof reply !== 'object' || reply.mid !== mid) return;
console.log(JSON.stringify(reply, null, 2));
finish(reply.ret === 'error');
});
socket.addEventListener('error', () => {
if (!done) console.error('Connection failed; check network, port and control code');
finish(true);
});
socket.addEventListener('close', () => {
if (!done) {
console.error('Connection closed before a correlated reply');
finish(true);
}
});نشر المحتوى بعد الاستعلام عن المنطقة
استخدم معرّف منطقة من نتيجة الاستعلام. تفتح البيانات التالية دليل الطاقة في الموقع لاختبار الوصول؛ استبدله بلوحة مشروعك بعد الاختبار. أضف mid وts جديدين للمحلي وحقول النقل المسلمة للسحابي. لا ترسل أوامر الشاشة إلى واجهة الأجهزة.
{"web":{"area":"a1","url":"https://iotdevices.org/zh/solutions/energy-management","interval":60}}
{"web":{"area":"a1"}}معالجة الأخطاء دون افتراض التنفيذ
يدل ret: error على فشل مثل invalid param أو unsupported أو device is in remote mode. انتهاء المهلة يعني أن النتيجة مجهولة. استعلم عن الحالة قبل إعادة إجراء يغيرها، ولا تكرر الكلام أو الآثار الجانبية عشوائياً. احتفظ بالمعرّف والوقت والرد المنقح وتحقق من الشاشة منفصلاً.