{"id":65260,"date":"2026-01-24T18:24:31","date_gmt":"2026-01-24T10:24:31","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/65260.html"},"modified":"2026-01-24T18:24:31","modified_gmt":"2026-01-24T10:24:31","slug":"4g%e6%a8%a1%e5%9d%97%e5%ba%94%e7%94%a8%ef%bc%8c%e5%86%85%e7%bd%91%e7%a9%bf%e9%80%8f%ef%bc%8c%e5%89%8d%e7%ab%af%e7%bd%91%e9%a1%b5%e7%9a%84%e5%88%b6%e4%bd%9c%e7%ac%ac%e5%85%ad%e8%ae%b2%e6%9b%b4","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/65260.html","title":{"rendered":"4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a)"},"content":{"rendered":"<h4>\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a(\u6839\u636e\u6211\u4eec\u4f7f\u7528\u7684\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6&#xff0c;\u6807\u5fd7&#xff0c;\u5fc3\u7387)&#xff0c;\u4ee5\u53ca\u7ed8\u5236\u56fe\u8868<\/h4>\n<h5>\u7b2c\u56db\u6b65\u5173\u952e\u8bcd<\/h5>\n<p>\u6211\u4f1a\u5728\u4e0b\u4f4d\u673a\u901a\u8fc7\u6e29\u5ea6&#xff1a;%d\u00b0C\\\\n,\u6e7f\u5ea6&#xff1a;%d%%\\\\n,\u6454\u5012\u6807\u5fd7&#xff1a;%d\\\\n,\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\\\n,\u6c14\u4f53\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\\\n,\u5fc3\u7387\u503c&#xff1a;%d BPM\\\\n\u7684\u8fd9\u4e2a\u534f\u8bae\u8fdb\u884c\u4e0a\u62a5\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6\u6570\u636e&#xff0c;\u6454\u5012\u6807\u5fd7&#xff0c;\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&#xff0c;\u6c14\u4f53\u5f02\u5e38\u6807\u5fd7&#xff0c;\u5fc3\u7387\u503c\u8bf7\u4f60\u66f4\u65b0\u524d\u7aef&#xff0c;\u5b9e\u65f6\u663e\u793a\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6\u6570\u636e&#xff0c;\u6454\u5012\u6807\u5fd7&#xff0c;\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&#xff0c;\u6c14\u4f53\u5f02\u5e38\u6807\u5fd7&#xff0c;\u5fc3\u7387\u503c\u4e0a\u62a5\u6570\u636e&#xff0c;\u9700\u8981\u7f8e\u89c2\u597d\u770b&#xff0c;\u5e76\u4e14\u53ef\u4ee5\u5b9e\u65f6\u7ed8\u5236\u6570\u636e\u56fe\u8868<\/p>\n<h5>frontend\/index.html<\/h5>\n<p>&lt;!DOCTYPE html&gt;<br \/>\n&lt;html lang&#061;&#034;zh-CN&#034;&gt;<br \/>\n&lt;head&gt;<br \/>\n    &lt;meta charset&#061;&#034;UTF-8&#034;&gt;<br \/>\n    &lt;meta name&#061;&#034;viewport&#034; content&#061;&#034;width&#061;device-width, initial-scale&#061;1.0&#034;&gt;<br \/>\n    &lt;title&gt;iHelmet \u76d1\u63a7\u4e2d\u5fc3&lt;\/title&gt;<br \/>\n    &lt;script src&#061;&#034;https:\/\/cdn.jsdelivr.net\/npm\/chart.js&#034;&gt;&lt;\/script&gt;<br \/>\n    &lt;link rel&#061;&#034;stylesheet&#034; href&#061;&#034;style.css&#034;&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<\/p>\n<p>    &lt;div class&#061;&#034;ambient-light&#034;&gt;&lt;\/div&gt;<\/p>\n<p>    &lt;div class&#061;&#034;app-container&#034;&gt;<br \/>\n        &lt;nav class&#061;&#034;sidebar glass&#034;&gt;<br \/>\n            &lt;div class&#061;&#034;brand&#034;&gt;<br \/>\n                &lt;div class&#061;&#034;logo-icon&#034;&gt;\uf8ff&lt;\/div&gt;<br \/>\n                &lt;span&gt;iHelmet Pro&lt;\/span&gt;<br \/>\n            &lt;\/div&gt;<\/p>\n<p>            &lt;ul class&#061;&#034;menu&#034;&gt;<br \/>\n                &lt;li class&#061;&#034;menu-item active&#034; data-target&#061;&#034;view-dashboard&#034;&gt;<br \/>\n                    &lt;svg viewBox&#061;&#034;0 0 24 24&#034; fill&#061;&#034;none&#034; stroke&#061;&#034;currentColor&#034; stroke-width&#061;&#034;2&#034;&gt;&lt;path d&#061;&#034;M22 12h-4l-3 9L9 3l-3 9H2&#034;&gt;&lt;\/path&gt;&lt;\/svg&gt;<br \/>\n                    \u751f\u547d\u4f53\u5f81<br \/>\n                &lt;\/li&gt;<br \/>\n                &lt;li class&#061;&#034;menu-item&#034; data-target&#061;&#034;view-debug&#034;&gt;<br \/>\n                    &lt;svg viewBox&#061;&#034;0 0 24 24&#034; fill&#061;&#034;none&#034; stroke&#061;&#034;currentColor&#034; stroke-width&#061;&#034;2&#034;&gt;&lt;rect x&#061;&#034;2&#034; y&#061;&#034;3&#034; width&#061;&#034;20&#034; height&#061;&#034;14&#034; rx&#061;&#034;2&#034; ry&#061;&#034;2&#034;&gt;&lt;\/rect&gt;&lt;line x1&#061;&#034;8&#034; y1&#061;&#034;21&#034; x2&#061;&#034;16&#034; y2&#061;&#034;21&#034;&gt;&lt;\/line&gt;&lt;line x1&#061;&#034;12&#034; y1&#061;&#034;17&#034; x2&#061;&#034;12&#034; y2&#061;&#034;21&#034;&gt;&lt;\/line&gt;&lt;\/svg&gt;<br \/>\n                    \u6570\u636e\u7ec8\u7aef<br \/>\n                &lt;\/li&gt;<br \/>\n            &lt;\/ul&gt;<\/p>\n<p>            &lt;div class&#061;&#034;connection-card&#034;&gt;<br \/>\n                &lt;div class&#061;&#034;status-indicator&#034;&gt;<br \/>\n                    &lt;div id&#061;&#034;statusDot&#034; class&#061;&#034;dot offline&#034;&gt;&lt;\/div&gt;<br \/>\n                    &lt;span id&#061;&#034;statusText&#034;&gt;\u7b49\u5f85\u8fde\u63a5&#8230;&lt;\/span&gt;<br \/>\n                &lt;\/div&gt;<br \/>\n                &lt;button id&#061;&#034;btnGlobalConnect&#034; class&#061;&#034;btn-mini&#034;&gt;\u91cd\u8fde\u7cfb\u7edf&lt;\/button&gt;<br \/>\n            &lt;\/div&gt;<br \/>\n        &lt;\/nav&gt;<\/p>\n<p>        &lt;main class&#061;&#034;main-area&#034;&gt;<\/p>\n<p>            &lt;div id&#061;&#034;view-dashboard&#034; class&#061;&#034;view-section active&#034;&gt;<br \/>\n                &lt;header class&#061;&#034;view-header&#034;&gt;<br \/>\n                    &lt;h1&gt;\u5b9e\u65f6\u76d1\u63a7\u4e2d\u5fc3&lt;\/h1&gt;<br \/>\n                    &lt;span class&#061;&#034;last-update&#034; id&#061;&#034;lastUpdateTime&#034;&gt;\u6700\u540e\u66f4\u65b0: &#8211;:&#8211;:&#8211;&lt;\/span&gt;<br \/>\n                &lt;\/header&gt;<\/p>\n<p>                &lt;div class&#061;&#034;sensor-grid&#034;&gt;<br \/>\n                    &lt;div class&#061;&#034;sensor-card&#034;&gt;<br \/>\n                        &lt;div class&#061;&#034;card-icon temp-color&#034;&gt;<br \/>\n                            &lt;svg viewBox&#061;&#034;0 0 24 24&#034; fill&#061;&#034;none&#034; stroke&#061;&#034;currentColor&#034; stroke-width&#061;&#034;2&#034;&gt;&lt;path d&#061;&#034;M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z&#034;&gt;&lt;\/path&gt;&lt;\/svg&gt;<br \/>\n                        &lt;\/div&gt;<br \/>\n                        &lt;div class&#061;&#034;card-data&#034;&gt;<br \/>\n                            &lt;span class&#061;&#034;label&#034;&gt;\u73af\u5883\u6e29\u5ea6&lt;\/span&gt;<br \/>\n                            &lt;div class&#061;&#034;value-group&#034;&gt;<br \/>\n                                &lt;span class&#061;&#034;value&#034; id&#061;&#034;val-temp&#034;&gt;&#8211;&lt;\/span&gt;<br \/>\n                                &lt;span class&#061;&#034;unit&#034;&gt;\u00b0C&lt;\/span&gt;<br \/>\n                            &lt;\/div&gt;<br \/>\n                        &lt;\/div&gt;<br \/>\n                    &lt;\/div&gt;<\/p>\n<p>                    &lt;div class&#061;&#034;sensor-card&#034;&gt;<br \/>\n                        &lt;div class&#061;&#034;card-icon humid-color&#034;&gt;<br \/>\n                            &lt;svg viewBox&#061;&#034;0 0 24 24&#034; fill&#061;&#034;none&#034; stroke&#061;&#034;currentColor&#034; stroke-width&#061;&#034;2&#034;&gt;&lt;path d&#061;&#034;M12 2.69l5.74 5.88a6 6 0 0 1-8.49 8.49 6 6 0 0 1 0-8.49L12 2.69z&#034;&gt;&lt;\/path&gt;&lt;\/svg&gt;<br \/>\n                        &lt;\/div&gt;<br \/>\n                        &lt;div class&#061;&#034;card-data&#034;&gt;<br \/>\n                            &lt;span class&#061;&#034;label&#034;&gt;\u73af\u5883\u6e7f\u5ea6&lt;\/span&gt;<br \/>\n                            &lt;div class&#061;&#034;value-group&#034;&gt;<br \/>\n                                &lt;span class&#061;&#034;value&#034; id&#061;&#034;val-humid&#034;&gt;&#8211;&lt;\/span&gt;<br \/>\n                                &lt;span class&#061;&#034;unit&#034;&gt;%&lt;\/span&gt;<br \/>\n                            &lt;\/div&gt;<br \/>\n                        &lt;\/div&gt;<br \/>\n                    &lt;\/div&gt;<\/p>\n<p>                    &lt;div class&#061;&#034;sensor-card&#034;&gt;<br \/>\n                        &lt;div class&#061;&#034;card-icon heart-color&#034;&gt;<br \/>\n                            &lt;svg viewBox&#061;&#034;0 0 24 24&#034; fill&#061;&#034;none&#034; stroke&#061;&#034;currentColor&#034; stroke-width&#061;&#034;2&#034;&gt;&lt;path d&#061;&#034;M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z&#034;&gt;&lt;\/path&gt;&lt;\/svg&gt;<br \/>\n                        &lt;\/div&gt;<br \/>\n                        &lt;div class&#061;&#034;card-data&#034;&gt;<br \/>\n                            &lt;span class&#061;&#034;label&#034;&gt;\u5b9e\u65f6\u5fc3\u7387&lt;\/span&gt;<br \/>\n                            &lt;div class&#061;&#034;value-group&#034;&gt;<br \/>\n                                &lt;span class&#061;&#034;value&#034; id&#061;&#034;val-hr&#034;&gt;&#8211;&lt;\/span&gt;<br \/>\n                                &lt;span class&#061;&#034;unit&#034;&gt;BPM&lt;\/span&gt;<br \/>\n                            &lt;\/div&gt;<br \/>\n                        &lt;\/div&gt;<br \/>\n                    &lt;\/div&gt;<br \/>\n                &lt;\/div&gt;<\/p>\n<p>                &lt;div class&#061;&#034;alert-grid&#034;&gt;<br \/>\n                    &lt;div class&#061;&#034;alert-card safe&#034; id&#061;&#034;alert-fall&#034;&gt;<br \/>\n                        &lt;span class&#061;&#034;icon&#034;&gt;&#x1f3c3;&lt;\/span&gt;<br \/>\n                        &lt;span class&#061;&#034;text&#034;&gt;\u4f53\u6001\u6b63\u5e38&lt;\/span&gt;<br \/>\n                    &lt;\/div&gt;<br \/>\n                    &lt;div class&#061;&#034;alert-card safe&#034; id&#061;&#034;alert-gas&#034;&gt;<br \/>\n                        &lt;span class&#061;&#034;icon&#034;&gt;\u2601\ufe0f&lt;\/span&gt;<br \/>\n                        &lt;span class&#061;&#034;text&#034;&gt;\u7a7a\u6c14\u6b63\u5e38&lt;\/span&gt;<br \/>\n                    &lt;\/div&gt;<br \/>\n                    &lt;div class&#061;&#034;alert-card safe&#034; id&#061;&#034;alert-hr-status&#034;&gt;<br \/>\n                        &lt;span class&#061;&#034;icon&#034;&gt;\u2764\ufe0f&lt;\/span&gt;<br \/>\n                        &lt;span class&#061;&#034;text&#034;&gt;\u5fc3\u5f8b\u6b63\u5e38&lt;\/span&gt;<br \/>\n                    &lt;\/div&gt;<br \/>\n                &lt;\/div&gt;<\/p>\n<p>                &lt;div class&#061;&#034;charts-container&#034;&gt;<br \/>\n                    &lt;div class&#061;&#034;chart-box glass-card&#034;&gt;<br \/>\n                        &lt;h3&gt;\u73af\u5883\u8d8b\u52bf (Temp &amp; Humid)&lt;\/h3&gt;<br \/>\n                        &lt;div class&#061;&#034;chart-wrapper&#034;&gt;<br \/>\n                            &lt;canvas id&#061;&#034;chartEnvironment&#034;&gt;&lt;\/canvas&gt;<br \/>\n                        &lt;\/div&gt;<br \/>\n                    &lt;\/div&gt;<br \/>\n                    &lt;div class&#061;&#034;chart-box glass-card&#034;&gt;<br \/>\n                        &lt;h3&gt;\u5fc3\u7387\u8d8b\u52bf (Heart Rate)&lt;\/h3&gt;<br \/>\n                        &lt;div class&#061;&#034;chart-wrapper&#034;&gt;<br \/>\n                            &lt;canvas id&#061;&#034;chartHeart&#034;&gt;&lt;\/canvas&gt;<br \/>\n                        &lt;\/div&gt;<br \/>\n                    &lt;\/div&gt;<br \/>\n                &lt;\/div&gt;<br \/>\n            &lt;\/div&gt;<\/p>\n<p>            &lt;div id&#061;&#034;view-debug&#034; class&#061;&#034;view-section hidden&#034;&gt;<br \/>\n                &lt;header class&#061;&#034;view-header&#034;&gt;<br \/>\n                    &lt;h1&gt;\u539f\u59cb\u6570\u636e\u6d41&lt;\/h1&gt;<br \/>\n                    &lt;div class&#061;&#034;header-actions&#034;&gt;<br \/>\n                        &lt;button class&#061;&#034;action-btn&#034; onclick&#061;&#034;clearLog()&#034;&gt;\u6e05\u5c4f&lt;\/button&gt;<br \/>\n                    &lt;\/div&gt;<br \/>\n                &lt;\/header&gt;<br \/>\n                &lt;div class&#061;&#034;terminal-window glass-card&#034;&gt;<br \/>\n                    &lt;div id&#061;&#034;logArea&#034; class&#061;&#034;chat-container&#034;&gt;&lt;\/div&gt;<br \/>\n                &lt;\/div&gt;<br \/>\n            &lt;\/div&gt;<\/p>\n<p>        &lt;\/main&gt;<br \/>\n    &lt;\/div&gt;<\/p>\n<p>    &lt;script src&#061;&#034;script.js&#034;&gt;&lt;\/script&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<\/p>\n<h5>frontend\/style.css<\/h5>\n<p>:root {<br \/>\n    &#8211;bg-color: #f5f5f7;<br \/>\n    &#8211;card-bg: rgba(255, 255, 255, 0.75);<br \/>\n    &#8211;text-main: #1d1d1f;<br \/>\n    &#8211;radius: 18px;<br \/>\n    &#8211;red-alert: #ff3b30;<br \/>\n    &#8211;green-safe: #34c759;<br \/>\n}<\/p>\n<p>body {<br \/>\n    margin: 0;<br \/>\n    font-family: -apple-system, BlinkMacSystemFont, &#034;SF Pro Text&#034;, sans-serif;<br \/>\n    background-color: var(&#8211;bg-color);<br \/>\n    color: var(&#8211;text-main);<br \/>\n    height: 100vh;<br \/>\n    overflow: hidden;<br \/>\n}<\/p>\n<p>.ambient-light {<br \/>\n    position: absolute;<br \/>\n    width: 100%; height: 100%;<br \/>\n    background: radial-gradient(circle at 20% 20%, #e0f7fa 0%, transparent 50%),<br \/>\n                radial-gradient(circle at 80% 80%, #ffe0e0 0%, transparent 50%);<br \/>\n    z-index: -1;<br \/>\n}<\/p>\n<p>.app-container {<br \/>\n    display: flex; height: 100vh; padding: 16px; box-sizing: border-box; gap: 16px;<br \/>\n}<\/p>\n<p>\/* Sidebar &amp; Generic (\u590d\u7528\u4e4b\u524d\u7684 style, \u8fd9\u91cc\u7701\u7565\u91cd\u590d\u90e8\u5206&#xff0c;\u53ea\u5217\u51fa\u6838\u5fc3\u6539\u52a8) *\/<br \/>\n.sidebar { width: 220px; background: var(&#8211;card-bg); backdrop-filter: blur(20px); border-radius: var(&#8211;radius); padding: 24px 16px; display: flex; flex-direction: column; border: 1px solid rgba(255,255,255,0.5); }<br \/>\n.brand { font-size: 18px; font-weight: 700; margin-bottom: 40px; display: flex; align-items: center; gap: 8px; }<br \/>\n.menu { list-style: none; padding: 0; flex: 1; }<br \/>\n.menu-item { padding: 12px; margin-bottom: 6px; border-radius: 12px; cursor: pointer; display: flex; align-items: center; gap: 10px; color: #666; transition: 0.2s; }<br \/>\n.menu-item.active { background: white; color: #0071e3; box-shadow: 0 4px 12px rgba(0,0,0,0.05); }<br \/>\n.menu-item svg { width: 20px; height: 20px; }<br \/>\n.connection-card { background: white; padding: 12px; border-radius: 12px; text-align: center; }<br \/>\n.status-indicator { display: flex; align-items: center; justify-content: center; gap: 6px; margin-bottom: 8px; font-size: 12px; }<br \/>\n.dot { width: 8px; height: 8px; border-radius: 50%; }<br \/>\n.dot.online { background: var(&#8211;green-safe); box-shadow: 0 0 6px var(&#8211;green-safe); }<br \/>\n.dot.offline { background: #999; }<br \/>\n.btn-mini { width: 100%; padding: 6px; border: none; background: #f0f0f0; border-radius: 8px; cursor: pointer; }<\/p>\n<p>\/* &#8212; Dashboard Specific &#8212; *\/<br \/>\n.main-area { flex: 1; position: relative; overflow-y: auto; padding-right: 5px; } \/* \u5141\u8bb8\u4e3b\u533a\u57df\u6eda\u52a8 *\/<br \/>\n.view-section { display: none; flex-direction: column; gap: 20px; padding-bottom: 20px; }<br \/>\n.view-section.active { display: flex; animation: fadeIn 0.4s ease; }<\/p>\n<p>&#064;keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }<\/p>\n<p>.view-header { display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 10px; }<br \/>\n.view-header h1 { margin: 0; font-size: 26px; }<br \/>\n.last-update { font-size: 12px; color: #888; }<\/p>\n<p>\/* 1. Sensor Grid *\/<br \/>\n.sensor-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }<br \/>\n.sensor-card {<br \/>\n    background: var(&#8211;card-bg); backdrop-filter: blur(20px);<br \/>\n    border-radius: var(&#8211;radius); padding: 20px;<br \/>\n    display: flex; align-items: center; gap: 16px;<br \/>\n    box-shadow: 0 4px 20px rgba(0,0,0,0.02);<br \/>\n    border: 1px solid rgba(255,255,255,0.6);<br \/>\n}<br \/>\n.card-icon {<br \/>\n    width: 48px; height: 48px; border-radius: 12px;<br \/>\n    display: flex; align-items: center; justify-content: center;<br \/>\n    color: white;<br \/>\n}<br \/>\n.temp-color { background: linear-gradient(135deg, #FF9A9E 0%, #FECFEF 100%); color: #d63384; }<br \/>\n.humid-color { background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%); color: #6f42c1; }<br \/>\n.heart-color { background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 99%, #fecfef 100%); color: #ff3b30; }<\/p>\n<p>.card-data { display: flex; flex-direction: column; }<br \/>\n.card-data .label { font-size: 13px; color: #666; font-weight: 500; }<br \/>\n.value-group { display: flex; align-items: baseline; gap: 4px; }<br \/>\n.card-data .value { font-size: 28px; font-weight: 700; color: var(&#8211;text-main); }<br \/>\n.card-data .unit { font-size: 14px; color: #888; }<\/p>\n<p>\/* 2. Alert Grid *\/<br \/>\n.alert-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }<br \/>\n.alert-card {<br \/>\n    padding: 16px; border-radius: 14px;<br \/>\n    display: flex; align-items: center; justify-content: center; gap: 10px;<br \/>\n    font-weight: 600; font-size: 15px;<br \/>\n    transition: all 0.3s;<br \/>\n}<br \/>\n.alert-card.safe { background: rgba(52, 199, 89, 0.15); color: #006400; border: 1px solid rgba(52, 199, 89, 0.2); }<br \/>\n.alert-card.danger {<br \/>\n    background: var(&#8211;red-alert); color: white;<br \/>\n    box-shadow: 0 4px 15px rgba(255, 59, 48, 0.4);<br \/>\n    animation: pulse 1s infinite;<br \/>\n}<\/p>\n<p>&#064;keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.02); } 100% { transform: scale(1); } }<\/p>\n<p>\/* 3. Charts *\/<br \/>\n.charts-container { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; height: 300px; }<br \/>\n.chart-box {<br \/>\n    background: var(&#8211;card-bg); backdrop-filter: blur(20px);<br \/>\n    border-radius: var(&#8211;radius); padding: 16px;<br \/>\n    border: 1px solid rgba(255,255,255,0.6);<br \/>\n    display: flex; flex-direction: column;<br \/>\n}<br \/>\n.chart-box h3 { margin: 0 0 10px 0; font-size: 14px; color: #666; }<br \/>\n.chart-wrapper { flex: 1; position: relative; width: 100%; height: 100%; }<\/p>\n<p>\/* Debug View *\/<br \/>\n.terminal-window {<br \/>\n    height: 100%; background: #1e1e1e; border-radius: 16px;<br \/>\n    padding: 16px; color: #00ff00; font-family: monospace; display: flex; flex-direction: column;<br \/>\n}<br \/>\n.chat-container { flex: 1; overflow-y: auto; font-size: 12px; }<br \/>\n.hidden { display: none; }<\/p>\n<h5>frontend\/script.js<\/h5>\n<p>let ws &#061; null;<br \/>\nlet isConnected &#061; false;<\/p>\n<p>\/\/ \u56fe\u8868\u5b9e\u4f8b<br \/>\nlet chartEnv &#061; null; \/\/ \u6e29\u6e7f\u5ea6\u56fe\u8868<br \/>\nlet chartHeart &#061; null; \/\/ \u5fc3\u7387\u56fe\u8868<br \/>\nconst MAX_DATA_POINTS &#061; 20; \/\/ \u56fe\u8868\u53ea\u4fdd\u7559\u6700\u8fd120\u4e2a\u70b9&#xff0c;\u8ba9\u5b83\u52a8\u8d77\u6765<\/p>\n<p>\/\/ DOM \u5143\u7d20<br \/>\nconst els &#061; {<br \/>\n    temp: document.getElementById(&#039;val-temp&#039;),<br \/>\n    humid: document.getElementById(&#039;val-humid&#039;),<br \/>\n    hr: document.getElementById(&#039;val-hr&#039;),<br \/>\n    alertFall: document.getElementById(&#039;alert-fall&#039;),<br \/>\n    alertGas: document.getElementById(&#039;alert-gas&#039;),<br \/>\n    alertHr: document.getElementById(&#039;alert-hr-status&#039;),<br \/>\n    time: document.getElementById(&#039;lastUpdateTime&#039;),<br \/>\n    statusDot: document.getElementById(&#039;statusDot&#039;),<br \/>\n    statusText: document.getElementById(&#039;statusText&#039;),<br \/>\n    btnConnect: document.getElementById(&#039;btnGlobalConnect&#039;),<br \/>\n    logArea: document.getElementById(&#039;logArea&#039;)<br \/>\n};<\/p>\n<p>\/\/ \u521d\u59cb\u5316<br \/>\nwindow.onload &#061; () &#061;&gt; {<br \/>\n    initCharts(); \/\/ \u521d\u59cb\u5316\u7a7a\u56fe\u8868<br \/>\n    connectServer();<br \/>\n    setupMenu();<br \/>\n};<\/p>\n<p>\/\/ &#8212; 1. WebSocket \u8fde\u63a5\u4e0e\u6570\u636e\u5904\u7406 &#8212;<\/p>\n<p>function connectServer() {<br \/>\n    const protocol &#061; window.location.protocol &#061;&#061;&#061; &#039;https:&#039; ? &#039;wss&#039; : &#039;ws&#039;;<br \/>\n    const host &#061; window.location.hostname;<br \/>\n    const port &#061; window.location.port ? &#096;:${window.location.port}&#096; : &#039;&#039;;<br \/>\n    const url &#061; &#096;${protocol}:\/\/${host}${port}&#096;;<\/p>\n<p>    log(&#096;\u6b63\u5728\u8fde\u63a5: ${url}&#8230;&#096;);<\/p>\n<p>    try {<br \/>\n        ws &#061; new WebSocket(url);<\/p>\n<p>        ws.onopen &#061; () &#061;&gt; {<br \/>\n            isConnected &#061; true;<br \/>\n            updateStatusUI(true);<br \/>\n            log(&#039;\u8fde\u63a5\u6210\u529f&#039;);<br \/>\n        };<\/p>\n<p>        ws.onclose &#061; () &#061;&gt; {<br \/>\n            isConnected &#061; false;<br \/>\n            updateStatusUI(false);<br \/>\n            log(&#039;\u8fde\u63a5\u65ad\u5f00&#039;);<br \/>\n        };<\/p>\n<p>        ws.onmessage &#061; (event) &#061;&gt; {<br \/>\n            handleIncomingData(event.data);<br \/>\n        };<\/p>\n<p>    } catch (e) {<br \/>\n        log(&#039;\u8fde\u63a5 URL \u9519\u8bef&#039;);<br \/>\n    }<br \/>\n}<\/p>\n<p>document.getElementById(&#039;btnGlobalConnect&#039;).addEventListener(&#039;click&#039;, () &#061;&gt; {<br \/>\n    if(isConnected &amp;&amp; ws) ws.close();<br \/>\n    else connectServer();<br \/>\n});<\/p>\n<p>\/\/ &#8212; 2. \u6838\u5fc3&#xff1a;\u89e3\u6790\u534f\u8bae\u5e76\u66f4\u65b0 UI &#8212;<\/p>\n<p>function handleIncomingData(rawString) {<br \/>\n    \/\/ \u539f\u59cb\u8c03\u8bd5\u65e5\u5fd7<br \/>\n    log(&#096;[RX] ${rawString}&#096;);<\/p>\n<p>    \/**<br \/>\n     * \u534f\u8bae\u683c\u5f0f:<br \/>\n     * \u6e29\u5ea6&#xff1a;%d\u00b0C\\\\n,\u6e7f\u5ea6&#xff1a;%d%%\\\\n,\u6454\u5012\u6807\u5fd7&#xff1a;%d\\\\n,\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\\\n,\u6c14\u4f53\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\\\n,\u5fc3\u7387\u503c&#xff1a;%d BPM\\\\n<br \/>\n     * * \u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u63d0\u53d6\u6570\u5b57\u3002<br \/>\n     * \\\\d&#043; \u5339\u914d\u6570\u5b57<br \/>\n     * [\\\\s\\\\S]*? \u5339\u914d\u4e2d\u95f4\u7684\u6362\u884c\u7b26\u548c\u9017\u53f7\u7b49\u6742\u4e71\u5b57\u7b26<br \/>\n     *\/<\/p>\n<p>    const regex &#061; \/\u6e29\u5ea6&#xff1a;(\\\\d&#043;).*\u6e7f\u5ea6&#xff1a;(\\\\d&#043;).*\u6454\u5012\u6807\u5fd7&#xff1a;(\\\\d&#043;).*\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&#xff1a;(\\\\d&#043;).*\u6c14\u4f53\u5f02\u5e38\u6807\u5fd7&#xff1a;(\\\\d&#043;).*\u5fc3\u7387\u503c&#xff1a;(\\\\d&#043;)\/s;<br \/>\n    const match &#061; rawString.match(regex);<\/p>\n<p>    if (match) {<br \/>\n        const data &#061; {<br \/>\n            temp: parseInt(match[1]),<br \/>\n            humid: parseInt(match[2]),<br \/>\n            fall: parseInt(match[3]),<br \/>\n            hrFlag: parseInt(match[4]),<br \/>\n            gasFlag: parseInt(match[5]),<br \/>\n            hrValue: parseInt(match[6])<br \/>\n        };<\/p>\n<p>        updateDashboard(data);<br \/>\n    } else {<br \/>\n        log(&#034;\u6570\u636e\u683c\u5f0f\u4e0d\u5339\u914d&#xff0c;\u5ffd\u7565&#034;);<br \/>\n    }<br \/>\n}<\/p>\n<p>function updateDashboard(data) {<br \/>\n    const now &#061; new Date();<br \/>\n    const timeLabel &#061; now.toLocaleTimeString();<br \/>\n    els.time.innerText &#061; &#096;\u6700\u540e\u66f4\u65b0: ${timeLabel}&#096;;<\/p>\n<p>    \/\/ A. \u66f4\u65b0\u6570\u503c<br \/>\n    els.temp.innerText &#061; data.temp;<br \/>\n    els.humid.innerText &#061; data.humid;<br \/>\n    els.hr.innerText &#061; data.hrValue;<\/p>\n<p>    \/\/ B. \u66f4\u65b0\u8b66\u62a5\u72b6\u6001 (0&#061;\u6b63\u5e38, 1&#061;\u5f02\u5e38)<br \/>\n    updateAlertCard(els.alertFall, data.fall, &#034;&#x1f3c3; \u4f53\u6001\u6b63\u5e38&#034;, &#034;\u26a0\ufe0f \u68c0\u6d4b\u5230\u6454\u5012!&#034;);<br \/>\n    updateAlertCard(els.alertHr, data.hrFlag, &#034;\u2764\ufe0f \u5fc3\u5f8b\u6b63\u5e38&#034;, &#034;\u26a0\ufe0f \u5fc3\u7387\u5f02\u5e38!&#034;);<br \/>\n    updateAlertCard(els.alertGas, data.gasFlag, &#034;\u2601\ufe0f \u7a7a\u6c14\u6b63\u5e38&#034;, &#034;\u2620\ufe0f \u6709\u5bb3\u6c14\u4f53!&#034;);<\/p>\n<p>    \/\/ C. \u66f4\u65b0\u56fe\u8868<br \/>\n    updateChartData(chartEnv, timeLabel, [data.temp, data.humid]);<br \/>\n    updateChartData(chartHeart, timeLabel, [data.hrValue]);<br \/>\n}<\/p>\n<p>function updateAlertCard(element, status, safeText, dangerText) {<br \/>\n    const iconSpan &#061; element.querySelector(&#039;.icon&#039;);<br \/>\n    const textSpan &#061; element.querySelector(&#039;.text&#039;);<\/p>\n<p>    if (status &#061;&#061;&#061; 1) {<br \/>\n        element.className &#061; &#039;alert-card danger&#039;;<br \/>\n        textSpan.innerText &#061; dangerText;<br \/>\n    } else {<br \/>\n        element.className &#061; &#039;alert-card safe&#039;;<br \/>\n        textSpan.innerText &#061; safeText;<br \/>\n    }<br \/>\n}<\/p>\n<p>\/\/ &#8212; 3. \u56fe\u8868\u903b\u8f91 (Chart.js) &#8212;<\/p>\n<p>function initCharts() {<br \/>\n    \/\/ 1. \u6e29\u6e7f\u5ea6\u56fe\u8868<br \/>\n    const ctxEnv &#061; document.getElementById(&#039;chartEnvironment&#039;).getContext(&#039;2d&#039;);<br \/>\n    chartEnv &#061; new Chart(ctxEnv, {<br \/>\n        type: &#039;line&#039;,<br \/>\n        data: {<br \/>\n            labels: [],<br \/>\n            datasets: [<br \/>\n                {<br \/>\n                    label: &#039;\u6e29\u5ea6 (\u00b0C)&#039;,<br \/>\n                    data: [],<br \/>\n                    borderColor: &#039;#ff6b6b&#039;,<br \/>\n                    backgroundColor: &#039;rgba(255, 107, 107, 0.1)&#039;,<br \/>\n                    borderWidth: 2,<br \/>\n                    tension: 0.4, \/\/ \u5e73\u6ed1\u66f2\u7ebf<br \/>\n                    fill: true<br \/>\n                },<br \/>\n                {<br \/>\n                    label: &#039;\u6e7f\u5ea6 (%)&#039;,<br \/>\n                    data: [],<br \/>\n                    borderColor: &#039;#4ecdc4&#039;,<br \/>\n                    backgroundColor: &#039;rgba(78, 205, 196, 0.1)&#039;,<br \/>\n                    borderWidth: 2,<br \/>\n                    tension: 0.4,<br \/>\n                    fill: true<br \/>\n                }<br \/>\n            ]<br \/>\n        },<br \/>\n        options: {<br \/>\n            responsive: true,<br \/>\n            maintainAspectRatio: false,<br \/>\n            animation: false, \/\/ \u5b9e\u65f6\u6570\u636e\u5efa\u8bae\u5173\u95ed\u590d\u6742\u52a8\u753b<br \/>\n            scales: {<br \/>\n                x: { display: false }, \/\/ \u9690\u85cfX\u8f74\u6587\u5b57&#xff0c;\u663e\u5f97\u5e72\u51c0<br \/>\n                y: { beginAtZero: false }<br \/>\n            },<br \/>\n            plugins: { legend: { position: &#039;top&#039; } }<br \/>\n        }<br \/>\n    });<\/p>\n<p>    \/\/ 2. \u5fc3\u7387\u56fe\u8868<br \/>\n    const ctxHr &#061; document.getElementById(&#039;chartHeart&#039;).getContext(&#039;2d&#039;);<br \/>\n    chartHeart &#061; new Chart(ctxHr, {<br \/>\n        type: &#039;line&#039;,<br \/>\n        data: {<br \/>\n            labels: [],<br \/>\n            datasets: [{<br \/>\n                label: &#039;\u5fc3\u7387 (BPM)&#039;,<br \/>\n                data: [],<br \/>\n                borderColor: &#039;#ff3b30&#039;,<br \/>\n                backgroundColor: &#039;rgba(255, 59, 48, 0.1)&#039;,<br \/>\n                borderWidth: 2,<br \/>\n                tension: 0.3,<br \/>\n                fill: true,<br \/>\n                pointRadius: 3<br \/>\n            }]<br \/>\n        },<br \/>\n        options: {<br \/>\n            responsive: true,<br \/>\n            maintainAspectRatio: false,<br \/>\n            animation: false,<br \/>\n            scales: {<br \/>\n                x: { display: false },<br \/>\n                y: { min: 40, max: 180 } \/\/ \u8bbe\u7f6e\u5408\u7406\u7684Y\u8f74\u8303\u56f4<br \/>\n            }<br \/>\n        }<br \/>\n    });<br \/>\n}<\/p>\n<p>function updateChartData(chart, label, newValues) {<br \/>\n    \/\/ \u6dfb\u52a0 X \u8f74\u6807\u7b7e<br \/>\n    chart.data.labels.push(label);<\/p>\n<p>    \/\/ \u6dfb\u52a0 Y \u8f74\u6570\u636e (\u5bf9\u5e94 datasets \u4e2d\u7684\u6bcf\u4e00\u6761\u7ebf)<br \/>\n    chart.data.datasets.forEach((dataset, i) &#061;&gt; {<br \/>\n        dataset.data.push(newValues[i]);<br \/>\n    });<\/p>\n<p>    \/\/ \u4fdd\u6301\u6570\u636e\u957f\u5ea6&#xff0c;\u79fb\u9664\u6700\u65e9\u7684\u6570\u636e (\u6ed1\u52a8\u7a97\u53e3)<br \/>\n    if (chart.data.labels.length &gt; MAX_DATA_POINTS) {<br \/>\n        chart.data.labels.shift();<br \/>\n        chart.data.datasets.forEach((dataset) &#061;&gt; {<br \/>\n            dataset.data.shift();<br \/>\n        });<br \/>\n    }<\/p>\n<p>    chart.update();<br \/>\n}<\/p>\n<p>\/\/ &#8212; 4. \u8f85\u52a9\u529f\u80fd &#8212;<\/p>\n<p>function setupMenu() {<br \/>\n    document.querySelectorAll(&#039;.menu-item&#039;).forEach(item &#061;&gt; {<br \/>\n        item.addEventListener(&#039;click&#039;, () &#061;&gt; {<br \/>\n            document.querySelectorAll(&#039;.menu-item&#039;).forEach(i &#061;&gt; i.classList.remove(&#039;active&#039;));<br \/>\n            document.querySelectorAll(&#039;.view-section&#039;).forEach(v &#061;&gt; v.classList.remove(&#039;active&#039;));<br \/>\n            item.classList.add(&#039;active&#039;);<br \/>\n            const targetId &#061; item.getAttribute(&#039;data-target&#039;);<br \/>\n            document.getElementById(targetId).classList.add(&#039;active&#039;);<br \/>\n        });<br \/>\n    });<br \/>\n}<\/p>\n<p>function updateStatusUI(online) {<br \/>\n    if (online) {<br \/>\n        els.statusDot.className &#061; &#039;dot online&#039;;<br \/>\n        els.statusText.innerText &#061; &#039;\u7cfb\u7edf\u5728\u7ebf&#039;;<br \/>\n        els.btnConnect.innerText &#061; &#039;\u65ad\u5f00&#039;;<br \/>\n        els.btnConnect.style.background &#061; &#039;#ff3b30&#039;;<br \/>\n        els.btnConnect.style.color &#061; &#039;white&#039;;<br \/>\n    } else {<br \/>\n        els.statusDot.className &#061; &#039;dot offline&#039;;<br \/>\n        els.statusText.innerText &#061; &#039;\u79bb\u7ebf&#039;;<br \/>\n        els.btnConnect.innerText &#061; &#039;\u91cd\u8fde&#039;;<br \/>\n        els.btnConnect.style.background &#061; &#039;#f0f0f0&#039;;<br \/>\n        els.btnConnect.style.color &#061; &#039;black&#039;;<br \/>\n    }<br \/>\n}<\/p>\n<p>function clearLog() {<br \/>\n    els.logArea.innerHTML &#061; &#039;&#039;;<br \/>\n}<\/p>\n<p>function log(text) {<br \/>\n    const div &#061; document.createElement(&#039;div&#039;);<br \/>\n    div.innerText &#061; &#096;[${new Date().toLocaleTimeString()}] ${text}&#096;;<br \/>\n    div.style.borderBottom &#061; &#034;1px solid #333&#034;;<br \/>\n    div.style.padding &#061; &#034;4px 0&#034;;<br \/>\n    els.logArea.appendChild(div);<br \/>\n    els.logArea.scrollTop &#061; els.logArea.scrollHeight;<br \/>\n}<\/p>\n<h5>\u6548\u679c\u56fe\u5982\u4e0b<\/h5>\n<p style=\"text-align:center\"><img decoding=\"async\" alt=\"\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/01\/20260124102428-69749ddce313b.png\" \/><\/p>\n<p style=\"text-align:center\"><img decoding=\"async\" alt=\"\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/01\/20260124102430-69749dde6a64a.png\" \/><\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a(\u6839\u636e\u6211\u4eec\u4f7f\u7528\u7684\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6&#xff0c;\u6807\u5fd7&#xff0c;\u5fc3\u7387)&#xff0c;\u4ee5\u53ca\u7ed8\u5236\u56fe\u8868\u7b2c\u56db\u6b65\u5173\u952e\u8bcd\u6211\u4f1a\u5728\u4e0b\u4f4d\u673a\u901a\u8fc7\u6e29\u5ea6&#xff1a;%d\u00b0C\\\\n,\u6e7f\u5ea6&#xff1a;%d%%\\\\n,\u6454\u5012\u6807\u5fd7&#xff1a;%d\\\\n,\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\\\n,\u6c14\u4f53\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\\\n,\u5fc3\u7387\u503c&#xff1a;%d BPM\\\\n\u7684\u8fd9\u4e2a\u534f\u8bae\u8fdb\u884c\u4e0a\u62a5\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6\u6570\u636e&#xff0c;\u6454\u5012\u6807\u5fd7&#xff0c;\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&amp;#xff<\/p>\n","protected":false},"author":2,"featured_media":65258,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[6766,6509,81,947,50,87,292],"topic":[],"class_list":["post-65260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-6766","tag-6509","tag-python","tag-websocket","tag-50","tag-87","tag-292"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/65260.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a(\u6839\u636e\u6211\u4eec\u4f7f\u7528\u7684\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6&#xff0c;\u6807\u5fd7&#xff0c;\u5fc3\u7387)&#xff0c;\u4ee5\u53ca\u7ed8\u5236\u56fe\u8868\u7b2c\u56db\u6b65\u5173\u952e\u8bcd\u6211\u4f1a\u5728\u4e0b\u4f4d\u673a\u901a\u8fc7\u6e29\u5ea6&#xff1a;%d\u00b0C\\n,\u6e7f\u5ea6&#xff1a;%d%%\\n,\u6454\u5012\u6807\u5fd7&#xff1a;%d\\n,\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\n,\u6c14\u4f53\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\n,\u5fc3\u7387\u503c&#xff1a;%d BPM\\n\u7684\u8fd9\u4e2a\u534f\u8bae\u8fdb\u884c\u4e0a\u62a5\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6\u6570\u636e&#xff0c;\u6454\u5012\u6807\u5fd7&#xff0c;\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&amp;#xff\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/65260.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-24T10:24:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/01\/20260124102428-69749ddce313b.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/65260.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/65260.html\",\"name\":\"4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-01-24T10:24:31+00:00\",\"dateModified\":\"2026-01-24T10:24:31+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/65260.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/65260.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/65260.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/65260.html","og_locale":"zh_CN","og_type":"article","og_title":"4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a(\u6839\u636e\u6211\u4eec\u4f7f\u7528\u7684\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6&#xff0c;\u6807\u5fd7&#xff0c;\u5fc3\u7387)&#xff0c;\u4ee5\u53ca\u7ed8\u5236\u56fe\u8868\u7b2c\u56db\u6b65\u5173\u952e\u8bcd\u6211\u4f1a\u5728\u4e0b\u4f4d\u673a\u901a\u8fc7\u6e29\u5ea6&#xff1a;%d\u00b0C\\n,\u6e7f\u5ea6&#xff1a;%d%%\\n,\u6454\u5012\u6807\u5fd7&#xff1a;%d\\n,\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\n,\u6c14\u4f53\u5f02\u5e38\u6807\u5fd7&#xff1a;%d\\n,\u5fc3\u7387\u503c&#xff1a;%d BPM\\n\u7684\u8fd9\u4e2a\u534f\u8bae\u8fdb\u884c\u4e0a\u62a5\u6e29\u5ea6&#xff0c;\u6e7f\u5ea6\u6570\u636e&#xff0c;\u6454\u5012\u6807\u5fd7&#xff0c;\u5fc3\u7387\u5f02\u5e38\u6807\u5fd7&amp;#xff","og_url":"https:\/\/www.wsisp.com\/helps\/65260.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-01-24T10:24:31+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2026\/01\/20260124102428-69749ddce313b.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/65260.html","url":"https:\/\/www.wsisp.com\/helps\/65260.html","name":"4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a) - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-01-24T10:24:31+00:00","dateModified":"2026-01-24T10:24:31+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/65260.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/65260.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/65260.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"4G\u6a21\u5757\u5e94\u7528\uff0c\u5185\u7f51\u7a7f\u900f\uff0c\u524d\u7aef\u7f51\u9875\u7684\u5236\u4f5c\u7b2c\u516d\u8bb2(\u66f4\u65b0\u524d\u7aef\u7684\u6570\u636e\u663e\u793a)"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/65260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=65260"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/65260\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/65258"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=65260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=65260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=65260"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=65260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}