[{"data":1,"prerenderedAt":3838},["ShallowReactive",2],{"tech-circutor-scout-iot-monitoring":3},{"id":4,"title":5,"author":6,"body":7,"category":3817,"date":3818,"description":3819,"extension":3820,"image":3821,"meta":3822,"navigation":1413,"path":3824,"readingTime":3825,"seo":3826,"stem":3827,"tags":3828,"__hash__":3837},"tech\u002Ftech\u002Fcircutor-scout-iot-monitoring.md","Monitoring Energi Industri dengan IoT: Panduan Lengkap Circutor Scout + OpenClaw Dashboard","Zainul Fanani",{"type":8,"value":9,"toc":3768},"minimark",[10,15,19,27,33,36,43,58,61,64,68,71,76,81,84,89,92,97,100,105,108,112,115,163,166,168,172,182,186,193,196,276,280,283,405,411,425,431,437,441,444,472,474,478,484,487,491,494,565,571,577,583,589,595,601,729,742,746,749,755,835,838,841,851,854,905,908,918,1003,1006,1012,1014,1018,1024,1027,1030,1034,1264,1268,1312,1316,1319,1340,1342,1346,1349,1353,1356,1392,1531,1535,1540,1557,1562,1579,1629,1633,1636,1688,1692,1695,2072,2075,2109,2113,2116,2482,2485,2493,2496,2498,2502,2508,2512,2650,2654,2660,2666,2672,2678,2841,2846,2894,2897,2903,2909,2915,2917,2921,2924,2928,2934,2940,2945,3052,3057,3086,3092,3096,3101,3106,3111,3168,3174,3180,3189,3193,3199,3204,3209,3214,3234,3278,3284,3290,3294,3299,3304,3360,3363,3365,3369,3372,3376,3544,3548,3608,3611,3614,3616,3620,3624,3627,3633,3637,3640,3660,3664,3667,3693,3697,3700,3702,3706,3709,3712,3715,3718,3721,3723,3728,3756,3758,3764],[11,12,14],"h2",{"id":13},"bayangkan-ini-tagihan-listrik-naik-30-tapi-nggak-tahu-kenapa","Bayangkan Ini: Tagihan Listrik Naik 30%, Tapi Nggak Tahu Kenapa",[16,17,18],"p",{},"Ini bukan skenario hipotetik. Ini realita yang gue hadapi berkali-kali di lapangan — pabrik, gedung komersial, bahkan perusahaan mining. Tagihan PLN tiba-tiba meledak, operation manager panik, dan semua orang saling tunjuk. Engineering bilang \"bukan masalah mesin kita,\" finance bilang \"kena adjustmen rate dong,\" dan management cuma bisa ngelus dada.",[16,20,21,22,26],{},"Problem-nya sama sekali bukan soal rate listrik. Problem-nya adalah ",[23,24,25],"strong",{},"blind spot",". Kita nggak punya visibilitas terhadap apa yang sebenarnya terjadi di electrical system kita. Berapa kW yang dipakai tiap line produksi? Kapan peak demand terjadi? Apakah power factor kita selalu di atas 0.85? Berapa energi yang terbuang saat idle?",[16,28,29,30],{},"Jawabannya: ",[23,31,32],{},"nggak ada yang tahu.",[16,34,35],{},"Dan di situlah uang menghilang — perlahan, tanpa terasa, tapi konsisten. Dalam skala industri, bicara soal ratusan juta sampai miliaran rupiah per tahun.",[16,37,38],{},[39,40],"img",{"alt":41,"src":42},"Monitoring energi industri di control room","\u002Fimages\u002Fposts\u002Fcircutor-header-full.jpg",[16,44,45,46,49,50,53,54,57],{},"Di artikel ini, gue bakal breakdown secara lengkap bagaimana kita bisa mengakhiri blind spot itu pakai ",[23,47,48],{},"Circutor Scout Platform"," + ",[23,51,52],{},"IoT hardware ecosystem"," mereka, lalu mengintegrasikan semuanya ke ",[23,55,56],{},"OpenClaw"," untuk custom dashboard dan automation yang sebenarnya berguna.",[16,59,60],{},"Bukan cuma teori — ini panduan teknis yang bisa langsung kamu implementasi.",[62,63],"hr",{},[11,65,67],{"id":66},"kenapa-energy-monitoring-itu-non-negotiable","Kenapa Energy Monitoring Itu Non-Negotiable",[16,69,70],{},"Sebelum masuk ke teknis, mari kita sepakati dulu: energy monitoring bukan luxury, ini kebutuhan dasar. Same levelnya dengan safety system atau fire alarm. Kalau kamu nggak tahu berapa energi yang kamu pakai dan di mana, kamu literally operating blind.",[72,73,75],"h3",{"id":74},"dampak-nyata-dari-tanpa-monitoring","Dampak Nyata dari Tanpa Monitoring",[16,77,78],{},[23,79,80],{},"1. Energy Waste yang Tak Terdeteksi",[16,82,83],{},"Pabrik rata-rata membuang 15-30% energi mereka tanpa sadar. Mesin yang jalan idle, motor yang oversize, compressed air yang bocor — semua ini terus menggerus kWh tanpa ada yang notice karena nggak ada data.",[16,85,86],{},[23,87,88],{},"2. Peak Demand Penalty",[16,90,91],{},"PLN pakai sistem VA (Volt-Ampere) untuk billing demand. Kalau power factor kamu jelek (misal 0.7), kamu bayar untuk apparent power yang jauh lebih besar dari real power yang sebenarnya kamu pakai. Ini bisa bikin tagihan meledak 20-40% lebih mahal.",[16,93,94],{},[23,95,96],{},"3. Power Quality Issue",[16,98,99],{},"Harmonic, voltage sag, unbalance — semua ini merusak equipment. Motor panas berlebihan, capacitor bank cepat rusak, PLC nggak stabil. Tanpa monitoring, kamu cuma tahu masalahnya setelah equipment rusak. Mahal banget.",[16,101,102],{},[23,103,104],{},"4. Inability to Prove Savings",[16,106,107],{},"Kamu invest di LED, VFD, atau high-efficiency motor. Tapi ketika ditanya \"berapa saving-nya?\" — nggak bisa jawab karena nggak ada baseline data.",[72,109,111],{"id":110},"the-roi-of-monitoring","The ROI of Monitoring",[16,113,114],{},"Ini bukan guesswork. Study dari Department of Energy AS menunjukkan bahwa energy monitoring system bisa menghasilkan saving 5-15% dari total biaya energi. Untuk pabrik dengan tagihan listrik Rp 500 juta\u002Fbulan, itu berarti saving Rp 25-75 juta per bulan. ROI biasanya under 12 bulan.",[116,117,122],"pre",{"className":118,"code":119,"language":120,"meta":121,"style":121},"language-mermaid shiki shiki-themes github-light github-dark","flowchart LR\n    A[Blind Operation] -->|Install Monitoring| B[Visibility]\n    B --> C[Identify Waste]\n    C --> D[Optimize]\n    D --> E[Track Savings]\n    E -->|Continuous| B\n","mermaid","",[123,124,125,133,139,145,151,157],"code",{"__ignoreMap":121},[126,127,130],"span",{"class":128,"line":129},"line",1,[126,131,132],{},"flowchart LR\n",[126,134,136],{"class":128,"line":135},2,[126,137,138],{},"    A[Blind Operation] -->|Install Monitoring| B[Visibility]\n",[126,140,142],{"class":128,"line":141},3,[126,143,144],{},"    B --> C[Identify Waste]\n",[126,146,148],{"class":128,"line":147},4,[126,149,150],{},"    C --> D[Optimize]\n",[126,152,154],{"class":128,"line":153},5,[126,155,156],{},"    D --> E[Track Savings]\n",[126,158,160],{"class":128,"line":159},6,[126,161,162],{},"    E -->|Continuous| B\n",[16,164,165],{},"Dengan monitoring, kamu transform dari reactive maintenance ke proactive management. Dari \"kenapa tagihan naik?\" ke \"kita sudah saving 23% QoQ.\"",[62,167],{},[11,169,171],{"id":170},"circutor-scout-platform-the-brain-of-your-energy-management","Circutor Scout Platform: The Brain of Your Energy Management",[16,173,174,181],{},[175,176,180],"a",{"href":177,"rel":178},"https:\u002F\u002Fcircutor.com\u002Fen\u002Fscout-platform\u002F",[179],"nofollow","Circutor"," itu bukan startup baru. Ini perusahaan Spanyol yang udah puluhan tahun di power quality dan energy management. Dan Scout Platform mereka itu, menurut gue, salah satu energy management cloud yang paling underrated di market.",[72,183,185],{"id":184},"apa-itu-circutor-scout","Apa Itu Circutor Scout?",[16,187,188,189,192],{},"Scout adalah ",[23,190,191],{},"cloud-based energy management platform"," yang ISO 27001 certified. Artinya, bukan cuma fitur lengkap tapi juga security-nya serius. Buat industri Indonesia yang makin aware tentang data security, ini big deal.",[16,194,195],{},"Core capabilities-nya:",[197,198,199,212],"table",{},[200,201,202],"thead",{},[203,204,205,209],"tr",{},[206,207,208],"th",{},"Feature",[206,210,211],{},"Detail",[213,214,215,226,236,246,256,266],"tbody",{},[203,216,217,223],{},[218,219,220],"td",{},[23,221,222],{},"Multi-site Management",[218,224,225],{},"Monitor semua lokasi dari satu dashboard",[203,227,228,233],{},[218,229,230],{},[23,231,232],{},"Advanced Data Analysis",[218,234,235],{},"Trend, comparison, benchmarking antar site",[203,237,238,243],{},[218,239,240],{},[23,241,242],{},"Prioritized Alerts",[218,244,245],{},"Nggak cuma alert, tapi kasih konteks dan prioritas",[203,247,248,253],{},[218,249,250],{},[23,251,252],{},"Mobile App",[218,254,255],{},"Android & iOS — cek data di mana saja",[203,257,258,263],{},[218,259,260],{},[23,261,262],{},"Open API",[218,264,265],{},"REST API yang documented, bisa integrate ke apa aja",[203,267,268,273],{},[218,269,270],{},[23,271,272],{},"ISO 27001",[218,274,275],{},"Certified information security management",[72,277,279],{"id":278},"scout-modules","Scout Modules",[16,281,282],{},"Scout bukan monolitik app — mereka punya modular system yang bisa kamu pilih sesuai kebutuhan:",[116,284,286],{"className":118,"code":285,"language":120,"meta":121,"style":121},"flowchart TD\n    SCOUT[Circutor Scout Platform] --> DL[Digital Link]\n    SCOUT --> QA[Quality Analyst]\n    SCOUT --> VAR[VAR Module]\n    SCOUT --> DSO[DSO Monitor]\n    \n    DL --> DL1[Remote Device Access]\n    DL --> DL2[Configuration & Firmware]\n    DL --> DL3[Diagnostics]\n    \n    QA --> QA1[IEC 61000-4-30]\n    QA --> QA2[EN 50160 Compliance]\n    QA --> QA3[Power Quality Reports]\n    \n    VAR --> VAR1[Capacitor Bank Status]\n    VAR --> VAR2[Power Factor Tracking]\n    VAR --> VAR3[Step & Connection Logs]\n    \n    DSO --> DSO1[Transformer Monitoring]\n    DSO --> DSO2[Substation Analytics]\n    DSO --> DSO3[Load Profiling]\n",[123,287,288,293,298,303,308,313,318,324,330,336,341,347,353,359,364,370,376,382,387,393,399],{"__ignoreMap":121},[126,289,290],{"class":128,"line":129},[126,291,292],{},"flowchart TD\n",[126,294,295],{"class":128,"line":135},[126,296,297],{},"    SCOUT[Circutor Scout Platform] --> DL[Digital Link]\n",[126,299,300],{"class":128,"line":141},[126,301,302],{},"    SCOUT --> QA[Quality Analyst]\n",[126,304,305],{"class":128,"line":147},[126,306,307],{},"    SCOUT --> VAR[VAR Module]\n",[126,309,310],{"class":128,"line":153},[126,311,312],{},"    SCOUT --> DSO[DSO Monitor]\n",[126,314,315],{"class":128,"line":159},[126,316,317],{},"    \n",[126,319,321],{"class":128,"line":320},7,[126,322,323],{},"    DL --> DL1[Remote Device Access]\n",[126,325,327],{"class":128,"line":326},8,[126,328,329],{},"    DL --> DL2[Configuration & Firmware]\n",[126,331,333],{"class":128,"line":332},9,[126,334,335],{},"    DL --> DL3[Diagnostics]\n",[126,337,339],{"class":128,"line":338},10,[126,340,317],{},[126,342,344],{"class":128,"line":343},11,[126,345,346],{},"    QA --> QA1[IEC 61000-4-30]\n",[126,348,350],{"class":128,"line":349},12,[126,351,352],{},"    QA --> QA2[EN 50160 Compliance]\n",[126,354,356],{"class":128,"line":355},13,[126,357,358],{},"    QA --> QA3[Power Quality Reports]\n",[126,360,362],{"class":128,"line":361},14,[126,363,317],{},[126,365,367],{"class":128,"line":366},15,[126,368,369],{},"    VAR --> VAR1[Capacitor Bank Status]\n",[126,371,373],{"class":128,"line":372},16,[126,374,375],{},"    VAR --> VAR2[Power Factor Tracking]\n",[126,377,379],{"class":128,"line":378},17,[126,380,381],{},"    VAR --> VAR3[Step & Connection Logs]\n",[126,383,385],{"class":128,"line":384},18,[126,386,317],{},[126,388,390],{"class":128,"line":389},19,[126,391,392],{},"    DSO --> DSO1[Transformer Monitoring]\n",[126,394,396],{"class":128,"line":395},20,[126,397,398],{},"    DSO --> DSO2[Substation Analytics]\n",[126,400,402],{"class":128,"line":401},21,[126,403,404],{},"    DSO --> DSO3[Load Profiling]\n",[16,406,407,410],{},[23,408,409],{},"Digital Link"," — ini game changer buat remote sites. Kamu bisa akses, konfigurasi, dan diagnose perangkat Circutor dari mana saja lewat cloud. Nggak perlu on-site visit cuma buat cek setting meter atau update firmware. Buat company yang punya site tersebar di Kalimantan, Sulawesi, Papua — ini saving travel cost yang signifikan.",[16,412,413,416,417,420,421,424],{},[23,414,415],{},"Quality Analyst"," — module ini comply dengan ",[23,418,419],{},"IEC 61000-4-30 Class A"," dan ",[23,422,423],{},"EN 50160",". Buat yang belum tahu, IEC 61000-4-30 itu standard international untuk power quality measurement. Class A adalah tier tertinggi — artinya datanya akurat dan bisa dipakai untuk dispute resolution dengan utility. EN 50160 itu European standard yang jadi benchmark global. Reports dari module ini bisa langsung kamu pakai untuk buktikan ke PLN kalau ada masalah kualitas suplai.",[16,426,427,430],{},[23,428,429],{},"VAR Module"," — khusus buat monitor capacitor bank dan power factor correction. Track setiap step connection, hours of operation, dan trending. Ini memastikan investment kamu di power factor correction system benar-benar bekerja optimal.",[16,432,433,436],{},[23,434,435],{},"DSO Monitor"," — buat Distribution System Operator atau company yang manage sendiri transformator. Monitoring load profile, thermal capacity, oil temperature, dan semua parameter transformator penting.",[72,438,440],{"id":439},"why-scout-not-others","Why Scout, Not Others?",[16,442,443],{},"Market energy management platform itu crowded — ada Siemens WinCC, Schneider EcoStruxure, ABB Ability, dan lain-lain. Tapi menurut gue, Scout punya beberapa keunggulan yang sering terlewat:",[445,446,447,454,460,466],"ol",{},[448,449,450,453],"li",{},[23,451,452],{},"Hardware + Software dari satu vendor."," Nggak pernah fun pakai software monitoring yang harus integrate dengan 5 brand meter berbeda. Circutor bikin meter, gateway, DAN platform-nya sendiri. Integration level-nya beda jauh.",[448,455,456,459],{},[23,457,458],{},"API benar-benar open."," Banyak platform klaim \"open API\" tapi dokumentasinya minimal atau ada paywall. Scout punya documented API yang bisa kamu pakai buat build custom integration — dan itu yang bakal kita pakai nanti buat connect ke OpenClaw.",[448,461,462,465],{},[23,463,464],{},"ISO 27001 certification."," Security isn't optional di 2026. Data energi kamu itu sensitif — reveal production patterns, operational schedules, bahkan bisa dipakai buat industrial espionage. Scout certified, dan itu matters.",[448,467,468,471],{},[23,469,470],{},"Pricing yang reasonable."," Compare dengan platform enterprise level yang billing-nya bisa puluhan ribu dollar per bulan, Scout significantly more affordable tanpa mengorbankan core features.",[62,473],{},[11,475,477],{"id":476},"circutor-iot-hardware-ecosystem","Circutor IoT Hardware Ecosystem",[16,479,480],{},[39,481],{"alt":482,"src":483},"Instalasi energy meter CVM di panel listrik industri","\u002Fimages\u002Fposts\u002Fcircutor-installation-full.jpg",[16,485,486],{},"Platform tanpa hardware itu useless. Dan di sinilah Circutor benar-benar shine — mereka punya ekosistem hardware yang lengkap, dari meter class entry sampai high-end, plus semua gateway yang kamu butuhkan buat connect ke cloud.",[72,488,490],{"id":489},"cvm-energy-meters-the-sensor-layer","CVM Energy Meters: The Sensor Layer",[16,492,493],{},"CVM (Circutor Virtual Multimeter) adalah seri energy meter mereka. Range-nya luas — dari yang basic buat sub-metering sampai yang advanced buat power quality analysis.",[116,495,497],{"className":118,"code":496,"language":120,"meta":121,"style":121},"flowchart TD\n    CVM[CVM Family] --> PREMIUM[Premium Class]\n    CVM --> MID[MID Range]\n    CVM --> ENTRY[Entry Level]\n    \n    PREMIUM --> A1600[CVM-A1600]\n    PREMIUM --> B50[CVM-B50]\n    \n    MID --> D50[CVM-D50]\n    MID --> D4XX[CVM-D4XX Series]\n    \n    ENTRY --> NRG[CVM-NRG]\n    ENTRY --> MINI[CVM-MINI]\n    ENTRY --> C10[CVM-C10]\n",[123,498,499,503,508,513,518,522,527,532,536,541,546,550,555,560],{"__ignoreMap":121},[126,500,501],{"class":128,"line":129},[126,502,292],{},[126,504,505],{"class":128,"line":135},[126,506,507],{},"    CVM[CVM Family] --> PREMIUM[Premium Class]\n",[126,509,510],{"class":128,"line":141},[126,511,512],{},"    CVM --> MID[MID Range]\n",[126,514,515],{"class":128,"line":147},[126,516,517],{},"    CVM --> ENTRY[Entry Level]\n",[126,519,520],{"class":128,"line":153},[126,521,317],{},[126,523,524],{"class":128,"line":159},[126,525,526],{},"    PREMIUM --> A1600[CVM-A1600]\n",[126,528,529],{"class":128,"line":320},[126,530,531],{},"    PREMIUM --> B50[CVM-B50]\n",[126,533,534],{"class":128,"line":326},[126,535,317],{},[126,537,538],{"class":128,"line":332},[126,539,540],{},"    MID --> D50[CVM-D50]\n",[126,542,543],{"class":128,"line":338},[126,544,545],{},"    MID --> D4XX[CVM-D4XX Series]\n",[126,547,548],{"class":128,"line":343},[126,549,317],{},[126,551,552],{"class":128,"line":349},[126,553,554],{},"    ENTRY --> NRG[CVM-NRG]\n",[126,556,557],{"class":128,"line":355},[126,558,559],{},"    ENTRY --> MINI[CVM-MINI]\n",[126,561,562],{"class":128,"line":361},[126,563,564],{},"    ENTRY --> C10[CVM-C10]\n",[16,566,567,570],{},[23,568,569],{},"CVM-A1600"," — ini flagship. Full power quality analyzer dengan Class A compliance. 512 samples\u002Fcycle, measure semua parameter yang bisa kamu bayangkan: voltage, current, power, energy, harmonics (sampai 50th), flicker, unbalance, transients. Buat critical application di main incomer atau transformer monitoring. Bisa connect langsung ke Scout.",[16,572,573,576],{},[23,574,575],{},"CVM-B50"," — power quality meter yang compact tapi powerful. Punya color display, web server built-in, dan connectivity yang lengkap (Ethernet, RS-485, Wi-Fi optional). Good balance antara features dan price.",[16,578,579,582],{},[23,580,581],{},"CVM-D50 & CVM-D4XX"," — seri D adalah workhorse buat industrial metering. D50 single-phase, D4XX three-phase. Measure power dan energy dengan akurasi tinggi, punya data logging, dan Modbus communication. Ini pilihan yang solid buat panel-level metering.",[16,584,585,588],{},[23,586,587],{},"CVM-NRG"," — dirancang khusus buat renewable energy application. Monitor solar, wind, atau hybrid system dengan parameter khusus kayak PV efficiency, inverter output, grid feed-in vs consumption. Cocok banget buat factory yang mulai adopt solar rooftop.",[16,590,591,594],{},[23,592,593],{},"CVM-MINI"," — compact meter buat sub-metering. Small form factor, harga competitive. Perfect buat track per-section consumption: per line produksi, per floor di gedung, per tenant di commercial building.",[16,596,597,600],{},[23,598,599],{},"CVM-C10"," — yang paling basic dari lineup. DIN-rail mount, single-phase, harga paling terjangkau. Buat kasus yang cuma butuh kWh reading tanpa frills.",[197,602,603,622],{},[200,604,605],{},[203,606,607,610,613,616,619],{},[206,608,609],{},"Meter",[206,611,612],{},"Phase",[206,614,615],{},"Power Quality",[206,617,618],{},"Communication",[206,620,621],{},"Best For",[213,623,624,640,655,672,686,700,715],{},[203,625,626,628,631,634,637],{},[218,627,569],{},[218,629,630],{},"3-phase",[218,632,633],{},"Class A Full",[218,635,636],{},"Ethernet, RS-485",[218,638,639],{},"Main incomer, critical feeders",[203,641,642,644,646,649,652],{},[218,643,575],{},[218,645,630],{},[218,647,648],{},"Advanced",[218,650,651],{},"Ethernet, RS-485, Wi-Fi",[218,653,654],{},"General industrial monitoring",[203,656,657,660,663,666,669],{},[218,658,659],{},"CVM-D50",[218,661,662],{},"1-phase",[218,664,665],{},"Standard",[218,667,668],{},"RS-485",[218,670,671],{},"Single-phase sub-metering",[203,673,674,677,679,681,683],{},[218,675,676],{},"CVM-D4XX",[218,678,630],{},[218,680,665],{},[218,682,668],{},[218,684,685],{},"Panel-level metering",[203,687,688,690,692,695,697],{},[218,689,587],{},[218,691,630],{},[218,693,694],{},"Renewable",[218,696,636],{},[218,698,699],{},"Solar\u002Fwind\u002Fhybrid systems",[203,701,702,704,707,710,712],{},[218,703,593],{},[218,705,706],{},"1\u002F3-phase",[218,708,709],{},"Basic",[218,711,668],{},[218,713,714],{},"Sub-metering per section",[203,716,717,719,721,723,726],{},[218,718,599],{},[218,720,662],{},[218,722,709],{},[218,724,725],{},"Pulse",[218,727,728],{},"Simple energy tracking",[730,731,732],"blockquote",{},[16,733,734,737,738,741],{},[23,735,736],{},"Pro tip:"," Semua CVM meter menggunakan ",[23,739,740],{},"Modbus RTU over RS-485"," sebagai protokol komunikasi dasar. Ini standard de facto di industrial world. Artinya, bahkan kalau kamu nggak pakai Scout, meter-meter ini tetap bisa integrate ke SCADA, BMS, atau custom system kamu sendiri.",[72,743,745],{"id":744},"gateway-bridge-dari-field-ke-cloud","Gateway: Bridge dari Field ke Cloud",[16,747,748],{},"Meter ngumpulkan data di field. Tapi data ini perlu sampai ke cloud. Itu tugas gateway.",[16,750,751,754],{},[23,752,753],{},"Line-EDS-Cloud"," — ini gateway utama yang Circutor rekomendasikan buat koneksi ke Scout. Fungsinya straightforward: convert data dari Modbus RTU\u002FTCP (dari meter) dan kirim ke cloud platform.",[116,756,758],{"className":118,"code":757,"language":120,"meta":121,"style":121},"flowchart LR\n    subgraph Field\n        M1[CVM-A1600] -->|Modbus RTU| GW[Line-EDS-Cloud]\n        M2[CVM-B50] -->|Modbus RTU| GW\n        M3[CVM-D4XX] -->|Modbus RTU| GW\n    end\n    \n    subgraph Cloud\n        GW -->|MQTT\u002FHTTPS| AWS[AWS \u002F Google Cloud \u002F Azure]\n        AWS --> SCOUT[Circutor Scout]\n    end\n    \n    subgraph Custom\n        AWS --> API[REST API]\n        API --> OC[OpenClaw Dashboard]\n    end\n",[123,759,760,764,769,774,779,784,789,793,798,803,808,812,816,821,826,831],{"__ignoreMap":121},[126,761,762],{"class":128,"line":129},[126,763,132],{},[126,765,766],{"class":128,"line":135},[126,767,768],{},"    subgraph Field\n",[126,770,771],{"class":128,"line":141},[126,772,773],{},"        M1[CVM-A1600] -->|Modbus RTU| GW[Line-EDS-Cloud]\n",[126,775,776],{"class":128,"line":147},[126,777,778],{},"        M2[CVM-B50] -->|Modbus RTU| GW\n",[126,780,781],{"class":128,"line":153},[126,782,783],{},"        M3[CVM-D4XX] -->|Modbus RTU| GW\n",[126,785,786],{"class":128,"line":159},[126,787,788],{},"    end\n",[126,790,791],{"class":128,"line":320},[126,792,317],{},[126,794,795],{"class":128,"line":326},[126,796,797],{},"    subgraph Cloud\n",[126,799,800],{"class":128,"line":332},[126,801,802],{},"        GW -->|MQTT\u002FHTTPS| AWS[AWS \u002F Google Cloud \u002F Azure]\n",[126,804,805],{"class":128,"line":338},[126,806,807],{},"        AWS --> SCOUT[Circutor Scout]\n",[126,809,810],{"class":128,"line":343},[126,811,788],{},[126,813,814],{"class":128,"line":349},[126,815,317],{},[126,817,818],{"class":128,"line":355},[126,819,820],{},"    subgraph Custom\n",[126,822,823],{"class":128,"line":361},[126,824,825],{},"        AWS --> API[REST API]\n",[126,827,828],{"class":128,"line":366},[126,829,830],{},"        API --> OC[OpenClaw Dashboard]\n",[126,832,833],{"class":128,"line":372},[126,834,788],{},[16,836,837],{},"Support koneksi ke major cloud providers: AWS, Google Cloud, Azure. Jadi kalau company kamu udah punya cloud infrastructure sendiri, bisa juga arahkan ke sana. Security-nya pakai TLS encryption, jadi data yang transit itu encrypted.",[16,839,840],{},"Setup-nya plug-and-play. Power, connect RS-485 bus dari meter-meter, configure Wi-Fi atau Ethernet, register ke Scout platform — done. Biasanya under 30 menit untuk satu gateway.",[16,842,843,846,847,850],{},[23,844,845],{},"TCPRS1+"," — converter yang lebih versatile. Fungsi utamanya: RS-485 to Ethernet\u002FWi-Fi converter. Tapi yang bikin special: dia punya ",[23,848,849],{},"built-in REST API web server",".",[16,852,853],{},"Apa artinya? Kamu bisa query data meter langsung dari browser atau script Python tanpa perlu Scout. Contoh:",[116,855,859],{"className":856,"code":857,"language":858,"meta":121,"style":121},"language-bash shiki shiki-themes github-light github-dark","# Read voltage from meter address 1\ncurl http:\u002F\u002F192.168.1.100\u002Frest\u002Fapi\u002Fmodbus?addr=1&reg=0&count=3\n# Response: {\"data\": [221.5, 219.8, 222.1]}\n","bash",[123,860,861,867,900],{"__ignoreMap":121},[126,862,863],{"class":128,"line":129},[126,864,866],{"class":865},"sJ8bj","# Read voltage from meter address 1\n",[126,868,869,873,877,881,885,889,892,895,897],{"class":128,"line":135},[126,870,872],{"class":871},"sScJk","curl",[126,874,876],{"class":875},"sZZnC"," http:\u002F\u002F192.168.1.100\u002Frest\u002Fapi\u002Fmodbus?addr=",[126,878,880],{"class":879},"sj4cs","1",[126,882,884],{"class":883},"sVt8B","&reg",[126,886,888],{"class":887},"szBVR","=",[126,890,891],{"class":875},"0",[126,893,894],{"class":883},"&count",[126,896,888],{"class":887},[126,898,899],{"class":875},"3\n",[126,901,902],{"class":128,"line":141},[126,903,904],{"class":865},"# Response: {\"data\": [221.5, 219.8, 222.1]}\n",[16,906,907],{},"Ini buka banyak kemungkinan buat custom integration. Nggak locked ke satu platform. Kalau TCPRS1+ connect ke internet, kamu bisa fetch data dari mana saja.",[16,909,910,913,914,917],{},[23,911,912],{},"eMod Series"," — ini yang paling flexible. eMod adalah modular IoT controller yang mendukung ",[23,915,916],{},"Modbus, OPC-UA, dan BACnet"," secara bersamaan. Tiga protokol industri yang paling umum — dalam satu device.",[116,919,921],{"className":118,"code":920,"language":120,"meta":121,"style":121},"flowchart TD\n    EMOD[eMod Series] --> MOD[Modbus RTU\u002FTCP]\n    EMOD --> OPC[OPC-UA]\n    EMOD --> BAC[BACnet IP]\n    \n    MOD --> M1[CVM Meters]\n    MOD --> M2[3rd Party Devices]\n    \n    OPC --> SCADA[SCADA Systems]\n    OPC --> ERP[ERP Integration]\n    \n    BAC --> BMS[Building Management]\n    BAC --> HVAC[HVAC Systems]\n    \n    EMOD --> CLOUD[Cloud Platform]\n    EMOD --> LOCAL[Local Dashboard]\n    EMOD --> API[Custom API]\n",[123,922,923,927,932,937,942,946,951,956,960,965,970,974,979,984,988,993,998],{"__ignoreMap":121},[126,924,925],{"class":128,"line":129},[126,926,292],{},[126,928,929],{"class":128,"line":135},[126,930,931],{},"    EMOD[eMod Series] --> MOD[Modbus RTU\u002FTCP]\n",[126,933,934],{"class":128,"line":141},[126,935,936],{},"    EMOD --> OPC[OPC-UA]\n",[126,938,939],{"class":128,"line":147},[126,940,941],{},"    EMOD --> BAC[BACnet IP]\n",[126,943,944],{"class":128,"line":153},[126,945,317],{},[126,947,948],{"class":128,"line":159},[126,949,950],{},"    MOD --> M1[CVM Meters]\n",[126,952,953],{"class":128,"line":320},[126,954,955],{},"    MOD --> M2[3rd Party Devices]\n",[126,957,958],{"class":128,"line":326},[126,959,317],{},[126,961,962],{"class":128,"line":332},[126,963,964],{},"    OPC --> SCADA[SCADA Systems]\n",[126,966,967],{"class":128,"line":338},[126,968,969],{},"    OPC --> ERP[ERP Integration]\n",[126,971,972],{"class":128,"line":343},[126,973,317],{},[126,975,976],{"class":128,"line":349},[126,977,978],{},"    BAC --> BMS[Building Management]\n",[126,980,981],{"class":128,"line":355},[126,982,983],{},"    BAC --> HVAC[HVAC Systems]\n",[126,985,986],{"class":128,"line":361},[126,987,317],{},[126,989,990],{"class":128,"line":366},[126,991,992],{},"    EMOD --> CLOUD[Cloud Platform]\n",[126,994,995],{"class":128,"line":372},[126,996,997],{},"    EMOD --> LOCAL[Local Dashboard]\n",[126,999,1000],{"class":128,"line":378},[126,1001,1002],{},"    EMOD --> API[Custom API]\n",[16,1004,1005],{},"eMod punya SDK\u002FAPI untuk C, C++, Go, Python, dan Java. Juga support Node-RED, Grafana, dan InfluxDB. Buat developer atau integrator, ini playground yang sangat flexible. Mau build custom edge computing application? eMod bisa handle-nya.",[16,1007,1008,1011],{},[23,1009,1010],{},"DataBox Platform"," — industrial IoT platform yang lebih lengkap dari sekadar gateway. DataBox punya extensive API, KPI engine, alarm management, dan report generator. Bisa standalone atau integrate dengan Scout. Cocok buat requirement yang lebih complex.",[62,1013],{},[11,1015,1017],{"id":1016},"integration-architecture-circutor-ke-openclaw","Integration Architecture: Circutor ke OpenClaw",[16,1019,1020],{},[39,1021],{"alt":1022,"src":1023},"Arsitektur IoT energy monitoring dari meter sampai dashboard","\u002Fimages\u002Fposts\u002Fcircutor-architecture-full.jpg",[16,1025,1026],{},"Nah, sekarang bagian yang paling menarik. Circutor Scout itu bagus sebagai managed platform, tapi kadang kamu butuh custom capability yang nggak ada di dalamnya. Mungkin custom alert ke Telegram, atau dashboard yang combine energy data dengan production data, atau automated report ke email setiap Senin pagi.",[16,1028,1029],{},"Di situlah OpenClaw masuk sebagai orchestration layer.",[72,1031,1033],{"id":1032},"arsitektur-lengkap","Arsitektur Lengkap",[116,1035,1037],{"className":118,"code":1036,"language":120,"meta":121,"style":121},"flowchart TD\n    subgraph \"Field Level\"\n        M1[CVM-A1600 Main Incomer] --> BUS[RS-485 Bus]\n        M2[CVM-B50 Feeders] --> BUS\n        M3[CVM-D4XX Sub-Meters] --> BUS\n        M4[CVM-NRG Solar] --> BUS\n        CB[Capacitor Bank VAR] --> BUS\n    end\n    \n    subgraph \"Gateway Level\"\n        BUS --> GW1[Line-EDS-Cloud to Scout]\n        BUS --> GW2[TCPRS1+ REST API]\n        BUS --> GW3[eMod OPC-UA BACnet]\n    end\n    \n    subgraph \"Cloud Level\"\n        GW1 --> SCOUT[Circutor Scout Cloud]\n        GW2 --> HTTP[HTTP REST Endpoint]\n        GW3 --> DATABOX[DataBox InfluxDB]\n        \n        SCOUT --> SAPI[Scout REST API]\n    end\n    \n    subgraph \"OpenClaw Layer\"\n        SAPI --> COLLECT[Data Collector Scheduled]\n        HTTP --> COLLECT\n        DATABOX --> COLLECT\n        \n        COLLECT --> STORE[Time-Series Storage]\n        STORE --> DASH[Custom Dashboard]\n        STORE --> ANALYZE[AI Analysis Engine]\n        STORE --> ALERT[Alert System]\n        \n        DASH --> WEB[Web Dashboard]\n        DASH --> TG[Telegram Bot]\n        DASH --> REPORT[Automated Reports]\n        \n        ALERT --> TG\n        ALERT --> EMAIL[Email Notifications]\n        \n        ANALYZE --> REC[Optimization Recommendations]\n        ANALYZE --> FORECAST[Load Forecasting]\n    end\n",[123,1038,1039,1043,1048,1053,1058,1063,1068,1073,1077,1081,1086,1091,1096,1101,1105,1109,1114,1119,1124,1129,1134,1139,1144,1149,1155,1161,1167,1173,1178,1184,1190,1196,1202,1207,1213,1219,1225,1230,1236,1242,1247,1253,1259],{"__ignoreMap":121},[126,1040,1041],{"class":128,"line":129},[126,1042,292],{},[126,1044,1045],{"class":128,"line":135},[126,1046,1047],{},"    subgraph \"Field Level\"\n",[126,1049,1050],{"class":128,"line":141},[126,1051,1052],{},"        M1[CVM-A1600 Main Incomer] --> BUS[RS-485 Bus]\n",[126,1054,1055],{"class":128,"line":147},[126,1056,1057],{},"        M2[CVM-B50 Feeders] --> BUS\n",[126,1059,1060],{"class":128,"line":153},[126,1061,1062],{},"        M3[CVM-D4XX Sub-Meters] --> BUS\n",[126,1064,1065],{"class":128,"line":159},[126,1066,1067],{},"        M4[CVM-NRG Solar] --> BUS\n",[126,1069,1070],{"class":128,"line":320},[126,1071,1072],{},"        CB[Capacitor Bank VAR] --> BUS\n",[126,1074,1075],{"class":128,"line":326},[126,1076,788],{},[126,1078,1079],{"class":128,"line":332},[126,1080,317],{},[126,1082,1083],{"class":128,"line":338},[126,1084,1085],{},"    subgraph \"Gateway Level\"\n",[126,1087,1088],{"class":128,"line":343},[126,1089,1090],{},"        BUS --> GW1[Line-EDS-Cloud to Scout]\n",[126,1092,1093],{"class":128,"line":349},[126,1094,1095],{},"        BUS --> GW2[TCPRS1+ REST API]\n",[126,1097,1098],{"class":128,"line":355},[126,1099,1100],{},"        BUS --> GW3[eMod OPC-UA BACnet]\n",[126,1102,1103],{"class":128,"line":361},[126,1104,788],{},[126,1106,1107],{"class":128,"line":366},[126,1108,317],{},[126,1110,1111],{"class":128,"line":372},[126,1112,1113],{},"    subgraph \"Cloud Level\"\n",[126,1115,1116],{"class":128,"line":378},[126,1117,1118],{},"        GW1 --> SCOUT[Circutor Scout Cloud]\n",[126,1120,1121],{"class":128,"line":384},[126,1122,1123],{},"        GW2 --> HTTP[HTTP REST Endpoint]\n",[126,1125,1126],{"class":128,"line":389},[126,1127,1128],{},"        GW3 --> DATABOX[DataBox InfluxDB]\n",[126,1130,1131],{"class":128,"line":395},[126,1132,1133],{},"        \n",[126,1135,1136],{"class":128,"line":401},[126,1137,1138],{},"        SCOUT --> SAPI[Scout REST API]\n",[126,1140,1142],{"class":128,"line":1141},22,[126,1143,788],{},[126,1145,1147],{"class":128,"line":1146},23,[126,1148,317],{},[126,1150,1152],{"class":128,"line":1151},24,[126,1153,1154],{},"    subgraph \"OpenClaw Layer\"\n",[126,1156,1158],{"class":128,"line":1157},25,[126,1159,1160],{},"        SAPI --> COLLECT[Data Collector Scheduled]\n",[126,1162,1164],{"class":128,"line":1163},26,[126,1165,1166],{},"        HTTP --> COLLECT\n",[126,1168,1170],{"class":128,"line":1169},27,[126,1171,1172],{},"        DATABOX --> COLLECT\n",[126,1174,1176],{"class":128,"line":1175},28,[126,1177,1133],{},[126,1179,1181],{"class":128,"line":1180},29,[126,1182,1183],{},"        COLLECT --> STORE[Time-Series Storage]\n",[126,1185,1187],{"class":128,"line":1186},30,[126,1188,1189],{},"        STORE --> DASH[Custom Dashboard]\n",[126,1191,1193],{"class":128,"line":1192},31,[126,1194,1195],{},"        STORE --> ANALYZE[AI Analysis Engine]\n",[126,1197,1199],{"class":128,"line":1198},32,[126,1200,1201],{},"        STORE --> ALERT[Alert System]\n",[126,1203,1205],{"class":128,"line":1204},33,[126,1206,1133],{},[126,1208,1210],{"class":128,"line":1209},34,[126,1211,1212],{},"        DASH --> WEB[Web Dashboard]\n",[126,1214,1216],{"class":128,"line":1215},35,[126,1217,1218],{},"        DASH --> TG[Telegram Bot]\n",[126,1220,1222],{"class":128,"line":1221},36,[126,1223,1224],{},"        DASH --> REPORT[Automated Reports]\n",[126,1226,1228],{"class":128,"line":1227},37,[126,1229,1133],{},[126,1231,1233],{"class":128,"line":1232},38,[126,1234,1235],{},"        ALERT --> TG\n",[126,1237,1239],{"class":128,"line":1238},39,[126,1240,1241],{},"        ALERT --> EMAIL[Email Notifications]\n",[126,1243,1245],{"class":128,"line":1244},40,[126,1246,1133],{},[126,1248,1250],{"class":128,"line":1249},41,[126,1251,1252],{},"        ANALYZE --> REC[Optimization Recommendations]\n",[126,1254,1256],{"class":128,"line":1255},42,[126,1257,1258],{},"        ANALYZE --> FORECAST[Load Forecasting]\n",[126,1260,1262],{"class":128,"line":1261},43,[126,1263,788],{},[72,1265,1267],{"id":1266},"flow-data-nya","Flow Data-nya",[445,1269,1270,1276,1287,1298,1303,1309],{},[448,1271,1272,1275],{},[23,1273,1274],{},"CVM meters"," kumpulkan data electrical parameters (V, I, P, Q, S, PF, THD, energy) tiap detik atau tiap menit (tergantung setting)",[448,1277,1278,1279,1282,1283,1286],{},"Data dikirim via ",[23,1280,1281],{},"RS-485 Modbus"," ke ",[23,1284,1285],{},"gateway"," (Line-EDS-Cloud atau TCPRS1+)",[448,1288,1289,1290,1293,1294,1297],{},"Gateway forward data ke ",[23,1291,1292],{},"Scout Cloud"," (kalau pakai Line-EDS-Cloud) atau expose via ",[23,1295,1296],{},"REST API"," (kalau pakai TCPRS1+)",[448,1299,1300,1302],{},[23,1301,56],{}," fetch data dari Scout API atau TCPRS1+ REST API secara scheduled (misal setiap 5 menit)",[448,1304,1305,1306],{},"Data diolah dan disimpan di ",[23,1307,1308],{},"time-series database",[448,1310,1311],{},"Dashboard, alert, dan analytics di-generate dari data yang udah terkumpul",[72,1313,1315],{"id":1314},"multiple-data-path","Multiple Data Path",[16,1317,1318],{},"Yang penting dipahami: kamu nggak harus locked ke satu path. Bisa pakai kombinasi:",[1320,1321,1322,1328,1334],"ul",{},[448,1323,1324,1327],{},[23,1325,1326],{},"Scout API"," untuk data yang udah di-proses (trend, aggregation, alarm) — cocok buat dashboard level management",[448,1329,1330,1333],{},[23,1331,1332],{},"TCPRS1+ REST API"," untuk raw real-time data — cocok buat custom monitoring dan control",[448,1335,1336,1339],{},[23,1337,1338],{},"eMod OPC-UA"," untuk integration dengan existing SCADA\u002FBMS — cocok buat facility yang udah punya infrastructure",[62,1341],{},[11,1343,1345],{"id":1344},"step-by-step-setup-guide","Step-by-Step Setup Guide",[16,1347,1348],{},"Oke, cukup teorinya. Mari kita praktik. Ini step-by-step yang gue rekomendasikan buat setup complete system dari nol.",[72,1350,1352],{"id":1351},"step-1-install-cvm-meters","Step 1: Install CVM Meters",[16,1354,1355],{},"Physical installation CVM meter:",[445,1357,1358,1368,1374,1380,1386],{},[448,1359,1360,1363,1364,1367],{},[23,1361,1362],{},"Tentukan measurement points."," Ini yang paling critical. Jangan asal pasang meter di mana-mana — mulai dari main incomer (PLN), lalu major feeders, lalu critical loads. Buat ",[23,1365,1366],{},"single-line diagram"," dulu dan tandai semua titik monitoring.",[448,1369,1370,1373],{},[23,1371,1372],{},"Pasang CT (Current Transformer)."," Pastikan ratio CT sesuai dengan load. Undersized CT = inaccurate reading. Oversized = low resolution. Rule of thumb: rated CT harus 1.2-1.5x dari expected maximum current.",[448,1375,1376,1379],{},[23,1377,1378],{},"Install meter di panel."," DIN-rail atau panel mount tergantung model. Pastikan wiring sesuai manual — CT polarity itu matters. Kalau salah balik, reading bakal negatif atau phase shifted.",[448,1381,1382,1385],{},[23,1383,1384],{},"Set Modbus address dan baud rate."," Setiap meter perlu unique address. Standard: address 1, 2, 3... secara sequential. Baud rate konsisten di seluruh bus — 9600 atau 19200 bps.",[448,1387,1388,1391],{},[23,1389,1390],{},"Verify reading."," Sebelum proceed, pastikan semua reading make sense. Compare dengan clamp meter atau existing metering. Difference should be under 2%.",[116,1393,1397],{"className":1394,"code":1395,"language":1396,"meta":121,"style":121},"language-python shiki shiki-themes github-light github-dark","# Quick verification script via Modbus RTU (using pymodbus)\nfrom pymodbus.client import ModbusSerialClient\n\nclient = ModbusSerialClient(\n    method='rtu',\n    port='\u002Fdev\u002FttyUSB0',\n    baudrate=9600,\n    bytesize=8,\n    parity='N',\n    stopbits=1\n)\n\nclient.connect()\n\n# Read voltage L1, L2, L3 from CVM-A1600 (address 1)\n# Register 0x0054 = V L1, 0x0056 = V L2, 0x0058 = V L3\nresult = client.read_input_registers(address=0x0054, count=6, slave=1)\n\nif not result.isError():\n    v_l1 = result.registers[0] \u002F 10  # Scale factor depends on model\n    v_l2 = result.registers[2] \u002F 10\n    v_l3 = result.registers[4] \u002F 10\n    print(f\"Voltages: L1={v_l1:.1f}V, L2={v_l2:.1f}V, L3={v_l3:.1f}V\")\nelse:\n    print(f\"Error reading: {result}\")\n\nclient.close()\n","python",[123,1398,1399,1404,1409,1415,1420,1425,1430,1435,1440,1445,1450,1455,1459,1464,1468,1473,1478,1483,1487,1492,1497,1502,1507,1512,1517,1522,1526],{"__ignoreMap":121},[126,1400,1401],{"class":128,"line":129},[126,1402,1403],{},"# Quick verification script via Modbus RTU (using pymodbus)\n",[126,1405,1406],{"class":128,"line":135},[126,1407,1408],{},"from pymodbus.client import ModbusSerialClient\n",[126,1410,1411],{"class":128,"line":141},[126,1412,1414],{"emptyLinePlaceholder":1413},true,"\n",[126,1416,1417],{"class":128,"line":147},[126,1418,1419],{},"client = ModbusSerialClient(\n",[126,1421,1422],{"class":128,"line":153},[126,1423,1424],{},"    method='rtu',\n",[126,1426,1427],{"class":128,"line":159},[126,1428,1429],{},"    port='\u002Fdev\u002FttyUSB0',\n",[126,1431,1432],{"class":128,"line":320},[126,1433,1434],{},"    baudrate=9600,\n",[126,1436,1437],{"class":128,"line":326},[126,1438,1439],{},"    bytesize=8,\n",[126,1441,1442],{"class":128,"line":332},[126,1443,1444],{},"    parity='N',\n",[126,1446,1447],{"class":128,"line":338},[126,1448,1449],{},"    stopbits=1\n",[126,1451,1452],{"class":128,"line":343},[126,1453,1454],{},")\n",[126,1456,1457],{"class":128,"line":349},[126,1458,1414],{"emptyLinePlaceholder":1413},[126,1460,1461],{"class":128,"line":355},[126,1462,1463],{},"client.connect()\n",[126,1465,1466],{"class":128,"line":361},[126,1467,1414],{"emptyLinePlaceholder":1413},[126,1469,1470],{"class":128,"line":366},[126,1471,1472],{},"# Read voltage L1, L2, L3 from CVM-A1600 (address 1)\n",[126,1474,1475],{"class":128,"line":372},[126,1476,1477],{},"# Register 0x0054 = V L1, 0x0056 = V L2, 0x0058 = V L3\n",[126,1479,1480],{"class":128,"line":378},[126,1481,1482],{},"result = client.read_input_registers(address=0x0054, count=6, slave=1)\n",[126,1484,1485],{"class":128,"line":384},[126,1486,1414],{"emptyLinePlaceholder":1413},[126,1488,1489],{"class":128,"line":389},[126,1490,1491],{},"if not result.isError():\n",[126,1493,1494],{"class":128,"line":395},[126,1495,1496],{},"    v_l1 = result.registers[0] \u002F 10  # Scale factor depends on model\n",[126,1498,1499],{"class":128,"line":401},[126,1500,1501],{},"    v_l2 = result.registers[2] \u002F 10\n",[126,1503,1504],{"class":128,"line":1141},[126,1505,1506],{},"    v_l3 = result.registers[4] \u002F 10\n",[126,1508,1509],{"class":128,"line":1146},[126,1510,1511],{},"    print(f\"Voltages: L1={v_l1:.1f}V, L2={v_l2:.1f}V, L3={v_l3:.1f}V\")\n",[126,1513,1514],{"class":128,"line":1151},[126,1515,1516],{},"else:\n",[126,1518,1519],{"class":128,"line":1157},[126,1520,1521],{},"    print(f\"Error reading: {result}\")\n",[126,1523,1524],{"class":128,"line":1163},[126,1525,1414],{"emptyLinePlaceholder":1413},[126,1527,1528],{"class":128,"line":1169},[126,1529,1530],{},"client.close()\n",[72,1532,1534],{"id":1533},"step-2-setup-gateway","Step 2: Setup Gateway",[16,1536,1537],{},[23,1538,1539],{},"Kalau pakai Line-EDS-Cloud:",[445,1541,1542,1545,1548,1551,1554],{},[448,1543,1544],{},"Connect RS-485 bus dari semua meter ke terminal Line-EDS-Cloud",[448,1546,1547],{},"Connect Ethernet cable atau configure Wi-Fi",[448,1549,1550],{},"Power on — gateway akan auto-detect meter di bus",[448,1552,1553],{},"Register gateway ke Scout account (via QR code atau manual token)",[448,1555,1556],{},"Configure polling interval dan data points di Scout web interface",[16,1558,1559],{},[23,1560,1561],{},"Kalau pakai TCPRS1+:",[445,1563,1564,1567,1570,1573,1576],{},[448,1565,1566],{},"Connect RS-485 bus sama seperti di atas",[448,1568,1569],{},"Connect Ethernet atau configure Wi-Fi",[448,1571,1572],{},"Access web interface (default IP: 192.168.1.100)",[448,1574,1575],{},"Set Modbus parameters (baud rate, parity, slave addresses)",[448,1577,1578],{},"Configure REST API endpoint",[116,1580,1582],{"className":856,"code":1581,"language":858,"meta":121,"style":121},"# TCPRS1+ REST API examples\ncurl -s http:\u002F\u002F192.168.1.100\u002Frest\u002Fapi\u002Fmeters\u002F1\u002Freadings | python3 -m json.tool\ncurl -s \"http:\u002F\u002F192.168.1.100\u002Frest\u002Fapi\u002Fmeters\u002F1\u002Fregisters?start=84&count=12\"\ncurl -s \"http:\u002F\u002F192.168.1.100\u002Frest\u002Fapi\u002Fmeters\u002F1\u002Fenergy\"\n",[123,1583,1584,1589,1611,1620],{"__ignoreMap":121},[126,1585,1586],{"class":128,"line":129},[126,1587,1588],{"class":865},"# TCPRS1+ REST API examples\n",[126,1590,1591,1593,1596,1599,1602,1605,1608],{"class":128,"line":135},[126,1592,872],{"class":871},[126,1594,1595],{"class":879}," -s",[126,1597,1598],{"class":875}," http:\u002F\u002F192.168.1.100\u002Frest\u002Fapi\u002Fmeters\u002F1\u002Freadings",[126,1600,1601],{"class":887}," |",[126,1603,1604],{"class":871}," python3",[126,1606,1607],{"class":879}," -m",[126,1609,1610],{"class":875}," json.tool\n",[126,1612,1613,1615,1617],{"class":128,"line":141},[126,1614,872],{"class":871},[126,1616,1595],{"class":879},[126,1618,1619],{"class":875}," \"http:\u002F\u002F192.168.1.100\u002Frest\u002Fapi\u002Fmeters\u002F1\u002Fregisters?start=84&count=12\"\n",[126,1621,1622,1624,1626],{"class":128,"line":147},[126,1623,872],{"class":871},[126,1625,1595],{"class":879},[126,1627,1628],{"class":875}," \"http:\u002F\u002F192.168.1.100\u002Frest\u002Fapi\u002Fmeters\u002F1\u002Fenergy\"\n",[72,1630,1632],{"id":1631},"step-3-configure-scout-platform","Step 3: Configure Scout Platform",[16,1634,1635],{},"Kalau kamu pakai Line-EDS-Cloud, data otomatis masuk ke Scout. Tinggal configure di web interface:",[445,1637,1638,1644,1650,1670,1676,1682],{},[448,1639,1640,1643],{},[23,1641,1642],{},"Create site"," — masukkan nama site, lokasi, timezone (WITA untuk Balikpapan!)",[448,1645,1646,1649],{},[23,1647,1648],{},"Create substation\u002Ffeeder hierarchy"," — susun sesuai single-line diagram",[448,1651,1652,1655,1656],{},[23,1653,1654],{},"Configure alarms"," — set threshold untuk parameter penting:\n",[1320,1657,1658,1661,1664,1667],{},[448,1659,1660],{},"Voltage: 380V ±5%",[448,1662,1663],{},"Power Factor: \u003C 0.85 warning, \u003C 0.80 critical",[448,1665,1666],{},"THD: > 8% warning, > 15% critical",[448,1668,1669],{},"Current unbalance: > 15%",[448,1671,1672,1675],{},[23,1673,1674],{},"Setup dashboard views"," — Scout punya customizable widgets",[448,1677,1678,1681],{},[23,1679,1680],{},"Configure reports"," — daily, weekly, monthly energy reports",[448,1683,1684,1687],{},[23,1685,1686],{},"Invite team members"," — role-based access control",[72,1689,1691],{"id":1690},"step-4-connect-ke-openclaw","Step 4: Connect ke OpenClaw",[16,1693,1694],{},"Ini bagian dimana magic terjadi. Scout API memungkinkan kita fetch data dan build custom workflow.",[116,1696,1698],{"className":1394,"code":1697,"language":1396,"meta":121,"style":121},"# scout_collector.py - Scheduled data collection from Circutor Scout API\nimport requests\nimport json\nimport os\nfrom datetime import datetime, timedelta\nfrom pathlib import Path\n\nSCOUT_BASE_URL = os.environ.get(\"SCOUT_API_URL\", \"https:\u002F\u002Fapi.scout.circutor.com\")\nSCOUT_API_KEY = os.environ.get(\"SCOUT_API_KEY\", \"your-api-key-here\")\nDATA_DIR = Path(\"\u002Fdata\u002Fenergy\")\n\ndef get_headers():\n    return {\n        \"Authorization\": f\"Bearer {SCOUT_API_KEY}\",\n        \"Content-Type\": \"application\u002Fjson\"\n    }\n\ndef fetch_sites():\n    resp = requests.get(f\"{SCOUT_BASE_URL}\u002Fv1\u002Fsites\", headers=get_headers())\n    resp.raise_for_status()\n    return resp.json()\n\ndef fetch_readings(site_id, start_time, end_time, resolution=\"5min\"):\n    params = {\n        \"start\": start_time.isoformat(),\n        \"end\": end_time.isoformat(),\n        \"resolution\": resolution,\n        \"variables\": \"voltage,current,active_power,reactive_power,power_factor,thd\"\n    }\n    resp = requests.get(\n        f\"{SCOUT_BASE_URL}\u002Fv1\u002Fsites\u002F{site_id}\u002Freadings\",\n        headers=get_headers(),\n        params=params\n    )\n    resp.raise_for_status()\n    return resp.json()\n\ndef fetch_energy_summary(site_id, period=\"day\"):\n    params = {\"period\": period}\n    resp = requests.get(\n        f\"{SCOUT_BASE_URL}\u002Fv1\u002Fsites\u002F{site_id}\u002Fenergy\",\n        headers=get_headers(),\n        params=params\n    )\n    resp.raise_for_status()\n    return resp.json()\n\ndef save_data(data, filename):\n    DATA_DIR.mkdir(parents=True, exist_ok=True)\n    filepath = DATA_DIR \u002F filename\n    with open(filepath, \"w\") as f:\n        json.dump(data, f, indent=2)\n    return filepath\n\ndef collect_all():\n    sites = fetch_sites()\n    now = datetime.utcnow()\n    for site in sites[\"sites\"]:\n        site_id = site[\"id\"]\n        site_name = site[\"name\"]\n        readings = fetch_readings(\n            site_id, now - timedelta(hours=24), now, resolution=\"5min\"\n        )\n        timestamp = now.strftime(\"%Y%m%d_%H%M%S\")\n        filename = f\"{site_name}_{timestamp}.json\"\n        save_data(readings, filename)\n        print(f\"[{now}] Collected data for {site_name}\")\n    return len(sites[\"sites\"])\n\nif __name__ == \"__main__\":\n    collected = collect_all()\n    print(f\"Collection complete: {collected} sites\")\n",[123,1699,1700,1705,1710,1715,1720,1725,1730,1734,1739,1744,1749,1753,1758,1763,1768,1773,1778,1782,1787,1792,1797,1802,1806,1811,1816,1821,1826,1831,1836,1840,1845,1850,1855,1860,1865,1869,1873,1877,1882,1887,1891,1896,1900,1904,1909,1914,1919,1924,1930,1936,1942,1948,1954,1960,1965,1971,1977,1983,1989,1995,2001,2007,2013,2019,2025,2031,2037,2043,2049,2054,2060,2066],{"__ignoreMap":121},[126,1701,1702],{"class":128,"line":129},[126,1703,1704],{},"# scout_collector.py - Scheduled data collection from Circutor Scout API\n",[126,1706,1707],{"class":128,"line":135},[126,1708,1709],{},"import requests\n",[126,1711,1712],{"class":128,"line":141},[126,1713,1714],{},"import json\n",[126,1716,1717],{"class":128,"line":147},[126,1718,1719],{},"import os\n",[126,1721,1722],{"class":128,"line":153},[126,1723,1724],{},"from datetime import datetime, timedelta\n",[126,1726,1727],{"class":128,"line":159},[126,1728,1729],{},"from pathlib import Path\n",[126,1731,1732],{"class":128,"line":320},[126,1733,1414],{"emptyLinePlaceholder":1413},[126,1735,1736],{"class":128,"line":326},[126,1737,1738],{},"SCOUT_BASE_URL = os.environ.get(\"SCOUT_API_URL\", \"https:\u002F\u002Fapi.scout.circutor.com\")\n",[126,1740,1741],{"class":128,"line":332},[126,1742,1743],{},"SCOUT_API_KEY = os.environ.get(\"SCOUT_API_KEY\", \"your-api-key-here\")\n",[126,1745,1746],{"class":128,"line":338},[126,1747,1748],{},"DATA_DIR = Path(\"\u002Fdata\u002Fenergy\")\n",[126,1750,1751],{"class":128,"line":343},[126,1752,1414],{"emptyLinePlaceholder":1413},[126,1754,1755],{"class":128,"line":349},[126,1756,1757],{},"def get_headers():\n",[126,1759,1760],{"class":128,"line":355},[126,1761,1762],{},"    return {\n",[126,1764,1765],{"class":128,"line":361},[126,1766,1767],{},"        \"Authorization\": f\"Bearer {SCOUT_API_KEY}\",\n",[126,1769,1770],{"class":128,"line":366},[126,1771,1772],{},"        \"Content-Type\": \"application\u002Fjson\"\n",[126,1774,1775],{"class":128,"line":372},[126,1776,1777],{},"    }\n",[126,1779,1780],{"class":128,"line":378},[126,1781,1414],{"emptyLinePlaceholder":1413},[126,1783,1784],{"class":128,"line":384},[126,1785,1786],{},"def fetch_sites():\n",[126,1788,1789],{"class":128,"line":389},[126,1790,1791],{},"    resp = requests.get(f\"{SCOUT_BASE_URL}\u002Fv1\u002Fsites\", headers=get_headers())\n",[126,1793,1794],{"class":128,"line":395},[126,1795,1796],{},"    resp.raise_for_status()\n",[126,1798,1799],{"class":128,"line":401},[126,1800,1801],{},"    return resp.json()\n",[126,1803,1804],{"class":128,"line":1141},[126,1805,1414],{"emptyLinePlaceholder":1413},[126,1807,1808],{"class":128,"line":1146},[126,1809,1810],{},"def fetch_readings(site_id, start_time, end_time, resolution=\"5min\"):\n",[126,1812,1813],{"class":128,"line":1151},[126,1814,1815],{},"    params = {\n",[126,1817,1818],{"class":128,"line":1157},[126,1819,1820],{},"        \"start\": start_time.isoformat(),\n",[126,1822,1823],{"class":128,"line":1163},[126,1824,1825],{},"        \"end\": end_time.isoformat(),\n",[126,1827,1828],{"class":128,"line":1169},[126,1829,1830],{},"        \"resolution\": resolution,\n",[126,1832,1833],{"class":128,"line":1175},[126,1834,1835],{},"        \"variables\": \"voltage,current,active_power,reactive_power,power_factor,thd\"\n",[126,1837,1838],{"class":128,"line":1180},[126,1839,1777],{},[126,1841,1842],{"class":128,"line":1186},[126,1843,1844],{},"    resp = requests.get(\n",[126,1846,1847],{"class":128,"line":1192},[126,1848,1849],{},"        f\"{SCOUT_BASE_URL}\u002Fv1\u002Fsites\u002F{site_id}\u002Freadings\",\n",[126,1851,1852],{"class":128,"line":1198},[126,1853,1854],{},"        headers=get_headers(),\n",[126,1856,1857],{"class":128,"line":1204},[126,1858,1859],{},"        params=params\n",[126,1861,1862],{"class":128,"line":1209},[126,1863,1864],{},"    )\n",[126,1866,1867],{"class":128,"line":1215},[126,1868,1796],{},[126,1870,1871],{"class":128,"line":1221},[126,1872,1801],{},[126,1874,1875],{"class":128,"line":1227},[126,1876,1414],{"emptyLinePlaceholder":1413},[126,1878,1879],{"class":128,"line":1232},[126,1880,1881],{},"def fetch_energy_summary(site_id, period=\"day\"):\n",[126,1883,1884],{"class":128,"line":1238},[126,1885,1886],{},"    params = {\"period\": period}\n",[126,1888,1889],{"class":128,"line":1244},[126,1890,1844],{},[126,1892,1893],{"class":128,"line":1249},[126,1894,1895],{},"        f\"{SCOUT_BASE_URL}\u002Fv1\u002Fsites\u002F{site_id}\u002Fenergy\",\n",[126,1897,1898],{"class":128,"line":1255},[126,1899,1854],{},[126,1901,1902],{"class":128,"line":1261},[126,1903,1859],{},[126,1905,1907],{"class":128,"line":1906},44,[126,1908,1864],{},[126,1910,1912],{"class":128,"line":1911},45,[126,1913,1796],{},[126,1915,1917],{"class":128,"line":1916},46,[126,1918,1801],{},[126,1920,1922],{"class":128,"line":1921},47,[126,1923,1414],{"emptyLinePlaceholder":1413},[126,1925,1927],{"class":128,"line":1926},48,[126,1928,1929],{},"def save_data(data, filename):\n",[126,1931,1933],{"class":128,"line":1932},49,[126,1934,1935],{},"    DATA_DIR.mkdir(parents=True, exist_ok=True)\n",[126,1937,1939],{"class":128,"line":1938},50,[126,1940,1941],{},"    filepath = DATA_DIR \u002F filename\n",[126,1943,1945],{"class":128,"line":1944},51,[126,1946,1947],{},"    with open(filepath, \"w\") as f:\n",[126,1949,1951],{"class":128,"line":1950},52,[126,1952,1953],{},"        json.dump(data, f, indent=2)\n",[126,1955,1957],{"class":128,"line":1956},53,[126,1958,1959],{},"    return filepath\n",[126,1961,1963],{"class":128,"line":1962},54,[126,1964,1414],{"emptyLinePlaceholder":1413},[126,1966,1968],{"class":128,"line":1967},55,[126,1969,1970],{},"def collect_all():\n",[126,1972,1974],{"class":128,"line":1973},56,[126,1975,1976],{},"    sites = fetch_sites()\n",[126,1978,1980],{"class":128,"line":1979},57,[126,1981,1982],{},"    now = datetime.utcnow()\n",[126,1984,1986],{"class":128,"line":1985},58,[126,1987,1988],{},"    for site in sites[\"sites\"]:\n",[126,1990,1992],{"class":128,"line":1991},59,[126,1993,1994],{},"        site_id = site[\"id\"]\n",[126,1996,1998],{"class":128,"line":1997},60,[126,1999,2000],{},"        site_name = site[\"name\"]\n",[126,2002,2004],{"class":128,"line":2003},61,[126,2005,2006],{},"        readings = fetch_readings(\n",[126,2008,2010],{"class":128,"line":2009},62,[126,2011,2012],{},"            site_id, now - timedelta(hours=24), now, resolution=\"5min\"\n",[126,2014,2016],{"class":128,"line":2015},63,[126,2017,2018],{},"        )\n",[126,2020,2022],{"class":128,"line":2021},64,[126,2023,2024],{},"        timestamp = now.strftime(\"%Y%m%d_%H%M%S\")\n",[126,2026,2028],{"class":128,"line":2027},65,[126,2029,2030],{},"        filename = f\"{site_name}_{timestamp}.json\"\n",[126,2032,2034],{"class":128,"line":2033},66,[126,2035,2036],{},"        save_data(readings, filename)\n",[126,2038,2040],{"class":128,"line":2039},67,[126,2041,2042],{},"        print(f\"[{now}] Collected data for {site_name}\")\n",[126,2044,2046],{"class":128,"line":2045},68,[126,2047,2048],{},"    return len(sites[\"sites\"])\n",[126,2050,2052],{"class":128,"line":2051},69,[126,2053,1414],{"emptyLinePlaceholder":1413},[126,2055,2057],{"class":128,"line":2056},70,[126,2058,2059],{},"if __name__ == \"__main__\":\n",[126,2061,2063],{"class":128,"line":2062},71,[126,2064,2065],{},"    collected = collect_all()\n",[126,2067,2069],{"class":128,"line":2068},72,[126,2070,2071],{},"    print(f\"Collection complete: {collected} sites\")\n",[16,2073,2074],{},"Jalankan collection script ini via cron:",[116,2076,2078],{"className":856,"code":2077,"language":858,"meta":121,"style":121},"*\u002F5 * * * * \u002Fusr\u002Fbin\u002Fpython3 \u002Fopt\u002Fopenclaw\u002Fscripts\u002Fscout_collector.py >> \u002Fvar\u002Flog\u002Fscout_collector.log 2>&1\n",[123,2079,2080],{"__ignoreMap":121},[126,2081,2082,2085,2088,2090,2093,2095,2097,2100,2103,2106],{"class":128,"line":129},[126,2083,2084],{"class":887},"*",[126,2086,2087],{"class":883},"\u002F5 ",[126,2089,2084],{"class":887},[126,2091,2092],{"class":887}," *",[126,2094,2092],{"class":887},[126,2096,2092],{"class":887},[126,2098,2099],{"class":883}," \u002Fusr\u002Fbin\u002Fpython3 \u002Fopt\u002Fopenclaw\u002Fscripts\u002Fscout_collector.py ",[126,2101,2102],{"class":887},">>",[126,2104,2105],{"class":883}," \u002Fvar\u002Flog\u002Fscout_collector.log ",[126,2107,2108],{"class":887},"2>&1\n",[72,2110,2112],{"id":2111},"step-5-telegram-alert-system","Step 5: Telegram Alert System",[16,2114,2115],{},"Ini yang paling useful buat daily operation. Daripada cek Scout dashboard terus-menerus, mending dapat push notification langsung di Telegram kalau ada yang abnormal.",[116,2117,2119],{"className":1394,"code":2118,"language":1396,"meta":121,"style":121},"# telegram_energy_alert.py - Send energy alerts to Telegram\nimport requests\nimport json\nimport os\nfrom pathlib import Path\n\nTELEGRAM_BOT_TOKEN = os.environ.get(\"TELEGRAM_BOT_TOKEN\")\nTELEGRAM_CHAT_ID = os.environ.get(\"TELEGRAM_CHAT_ID\")\n\ndef send_telegram_message(text):\n    url = f\"https:\u002F\u002Fapi.telegram.org\u002Fbot{TELEGRAM_BOT_TOKEN}\u002FsendMessage\"\n    payload = {\n        \"chat_id\": TELEGRAM_CHAT_ID,\n        \"text\": text,\n        \"parse_mode\": \"Markdown\"\n    }\n    resp = requests.post(url, json=payload)\n    resp.raise_for_status()\n    return resp.json()\n\ndef check_power_factor(data, threshold=0.85):\n    alerts = []\n    for reading in data.get(\"readings\", []):\n        pf = reading.get(\"power_factor\", {})\n        avg_pf = pf.get(\"average\", 1.0)\n        if avg_pf \u003C threshold:\n            alerts.append({\n                \"type\": \"LOW_POWER_FACTOR\",\n                \"severity\": \"CRITICAL\" if avg_pf \u003C 0.80 else \"WARNING\",\n                \"value\": avg_pf,\n                \"site\": reading.get(\"site_name\", \"Unknown\"),\n                \"timestamp\": reading.get(\"timestamp\", \"\")\n            })\n    return alerts\n\ndef check_voltage_unbalance(data, threshold=3.0):\n    alerts = []\n    for reading in data.get(\"readings\", []):\n        vub = reading.get(\"voltage_unbalance\", 0.0)\n        if vub > threshold:\n            alerts.append({\n                \"type\": \"VOLTAGE_UNBALANCE\",\n                \"severity\": \"WARNING\" if vub \u003C 5.0 else \"CRITICAL\",\n                \"value\": vub,\n                \"site\": reading.get(\"site_name\", \"Unknown\"),\n                \"timestamp\": reading.get(\"timestamp\", \"\")\n            })\n    return alerts\n\ndef format_alert(alert):\n    severity_emoji = \"🔴\" if alert[\"severity\"] == \"CRITICAL\" else \"🟡\"\n    return (\n        f\"{severity_emoji} *Energy Alert: {alert['type']}*\\n\\n\"\n        f\"Site: {alert['site']}\\n\"\n        f\"Value: {alert['value']:.2f}\\n\"\n        f\"Severity: {alert['severity']}\\n\"\n        f\"Time: {alert['timestamp']}\\n\\n\"\n        f\"_Powered by OpenClaw + Circutor Scout_\"\n    )\n\ndef run_alert_check():\n    data_file = sorted(Path(\"\u002Fdata\u002Fenergy\").glob(\"*.json\"))[-1]\n    with open(data_file) as f:\n        data = json.load(f)\n    all_alerts = []\n    all_alerts.extend(check_power_factor(data))\n    all_alerts.extend(check_voltage_unbalance(data))\n    for alert in all_alerts:\n        message = format_alert(alert)\n        send_telegram_message(message)\n        print(f\"Alert sent: {alert['type']} = {alert['value']}\")\n    return len(all_alerts)\n\nif __name__ == \"__main__\":\n    count = run_alert_check()\n    print(f\"Alert check complete: {count} alerts sent\")\n",[123,2120,2121,2126,2130,2134,2138,2142,2146,2151,2156,2160,2165,2170,2175,2180,2185,2190,2194,2199,2203,2207,2211,2216,2221,2226,2231,2236,2241,2246,2251,2256,2261,2266,2271,2276,2281,2285,2290,2294,2298,2303,2308,2312,2317,2322,2327,2331,2335,2339,2343,2347,2352,2357,2362,2367,2372,2377,2382,2387,2392,2396,2400,2405,2410,2415,2420,2425,2430,2435,2440,2445,2450,2455,2460,2465,2470,2476],{"__ignoreMap":121},[126,2122,2123],{"class":128,"line":129},[126,2124,2125],{},"# telegram_energy_alert.py - Send energy alerts to Telegram\n",[126,2127,2128],{"class":128,"line":135},[126,2129,1709],{},[126,2131,2132],{"class":128,"line":141},[126,2133,1714],{},[126,2135,2136],{"class":128,"line":147},[126,2137,1719],{},[126,2139,2140],{"class":128,"line":153},[126,2141,1729],{},[126,2143,2144],{"class":128,"line":159},[126,2145,1414],{"emptyLinePlaceholder":1413},[126,2147,2148],{"class":128,"line":320},[126,2149,2150],{},"TELEGRAM_BOT_TOKEN = os.environ.get(\"TELEGRAM_BOT_TOKEN\")\n",[126,2152,2153],{"class":128,"line":326},[126,2154,2155],{},"TELEGRAM_CHAT_ID = os.environ.get(\"TELEGRAM_CHAT_ID\")\n",[126,2157,2158],{"class":128,"line":332},[126,2159,1414],{"emptyLinePlaceholder":1413},[126,2161,2162],{"class":128,"line":338},[126,2163,2164],{},"def send_telegram_message(text):\n",[126,2166,2167],{"class":128,"line":343},[126,2168,2169],{},"    url = f\"https:\u002F\u002Fapi.telegram.org\u002Fbot{TELEGRAM_BOT_TOKEN}\u002FsendMessage\"\n",[126,2171,2172],{"class":128,"line":349},[126,2173,2174],{},"    payload = {\n",[126,2176,2177],{"class":128,"line":355},[126,2178,2179],{},"        \"chat_id\": TELEGRAM_CHAT_ID,\n",[126,2181,2182],{"class":128,"line":361},[126,2183,2184],{},"        \"text\": text,\n",[126,2186,2187],{"class":128,"line":366},[126,2188,2189],{},"        \"parse_mode\": \"Markdown\"\n",[126,2191,2192],{"class":128,"line":372},[126,2193,1777],{},[126,2195,2196],{"class":128,"line":378},[126,2197,2198],{},"    resp = requests.post(url, json=payload)\n",[126,2200,2201],{"class":128,"line":384},[126,2202,1796],{},[126,2204,2205],{"class":128,"line":389},[126,2206,1801],{},[126,2208,2209],{"class":128,"line":395},[126,2210,1414],{"emptyLinePlaceholder":1413},[126,2212,2213],{"class":128,"line":401},[126,2214,2215],{},"def check_power_factor(data, threshold=0.85):\n",[126,2217,2218],{"class":128,"line":1141},[126,2219,2220],{},"    alerts = []\n",[126,2222,2223],{"class":128,"line":1146},[126,2224,2225],{},"    for reading in data.get(\"readings\", []):\n",[126,2227,2228],{"class":128,"line":1151},[126,2229,2230],{},"        pf = reading.get(\"power_factor\", {})\n",[126,2232,2233],{"class":128,"line":1157},[126,2234,2235],{},"        avg_pf = pf.get(\"average\", 1.0)\n",[126,2237,2238],{"class":128,"line":1163},[126,2239,2240],{},"        if avg_pf \u003C threshold:\n",[126,2242,2243],{"class":128,"line":1169},[126,2244,2245],{},"            alerts.append({\n",[126,2247,2248],{"class":128,"line":1175},[126,2249,2250],{},"                \"type\": \"LOW_POWER_FACTOR\",\n",[126,2252,2253],{"class":128,"line":1180},[126,2254,2255],{},"                \"severity\": \"CRITICAL\" if avg_pf \u003C 0.80 else \"WARNING\",\n",[126,2257,2258],{"class":128,"line":1186},[126,2259,2260],{},"                \"value\": avg_pf,\n",[126,2262,2263],{"class":128,"line":1192},[126,2264,2265],{},"                \"site\": reading.get(\"site_name\", \"Unknown\"),\n",[126,2267,2268],{"class":128,"line":1198},[126,2269,2270],{},"                \"timestamp\": reading.get(\"timestamp\", \"\")\n",[126,2272,2273],{"class":128,"line":1204},[126,2274,2275],{},"            })\n",[126,2277,2278],{"class":128,"line":1209},[126,2279,2280],{},"    return alerts\n",[126,2282,2283],{"class":128,"line":1215},[126,2284,1414],{"emptyLinePlaceholder":1413},[126,2286,2287],{"class":128,"line":1221},[126,2288,2289],{},"def check_voltage_unbalance(data, threshold=3.0):\n",[126,2291,2292],{"class":128,"line":1227},[126,2293,2220],{},[126,2295,2296],{"class":128,"line":1232},[126,2297,2225],{},[126,2299,2300],{"class":128,"line":1238},[126,2301,2302],{},"        vub = reading.get(\"voltage_unbalance\", 0.0)\n",[126,2304,2305],{"class":128,"line":1244},[126,2306,2307],{},"        if vub > threshold:\n",[126,2309,2310],{"class":128,"line":1249},[126,2311,2245],{},[126,2313,2314],{"class":128,"line":1255},[126,2315,2316],{},"                \"type\": \"VOLTAGE_UNBALANCE\",\n",[126,2318,2319],{"class":128,"line":1261},[126,2320,2321],{},"                \"severity\": \"WARNING\" if vub \u003C 5.0 else \"CRITICAL\",\n",[126,2323,2324],{"class":128,"line":1906},[126,2325,2326],{},"                \"value\": vub,\n",[126,2328,2329],{"class":128,"line":1911},[126,2330,2265],{},[126,2332,2333],{"class":128,"line":1916},[126,2334,2270],{},[126,2336,2337],{"class":128,"line":1921},[126,2338,2275],{},[126,2340,2341],{"class":128,"line":1926},[126,2342,2280],{},[126,2344,2345],{"class":128,"line":1932},[126,2346,1414],{"emptyLinePlaceholder":1413},[126,2348,2349],{"class":128,"line":1938},[126,2350,2351],{},"def format_alert(alert):\n",[126,2353,2354],{"class":128,"line":1944},[126,2355,2356],{},"    severity_emoji = \"🔴\" if alert[\"severity\"] == \"CRITICAL\" else \"🟡\"\n",[126,2358,2359],{"class":128,"line":1950},[126,2360,2361],{},"    return (\n",[126,2363,2364],{"class":128,"line":1956},[126,2365,2366],{},"        f\"{severity_emoji} *Energy Alert: {alert['type']}*\\n\\n\"\n",[126,2368,2369],{"class":128,"line":1962},[126,2370,2371],{},"        f\"Site: {alert['site']}\\n\"\n",[126,2373,2374],{"class":128,"line":1967},[126,2375,2376],{},"        f\"Value: {alert['value']:.2f}\\n\"\n",[126,2378,2379],{"class":128,"line":1973},[126,2380,2381],{},"        f\"Severity: {alert['severity']}\\n\"\n",[126,2383,2384],{"class":128,"line":1979},[126,2385,2386],{},"        f\"Time: {alert['timestamp']}\\n\\n\"\n",[126,2388,2389],{"class":128,"line":1985},[126,2390,2391],{},"        f\"_Powered by OpenClaw + Circutor Scout_\"\n",[126,2393,2394],{"class":128,"line":1991},[126,2395,1864],{},[126,2397,2398],{"class":128,"line":1997},[126,2399,1414],{"emptyLinePlaceholder":1413},[126,2401,2402],{"class":128,"line":2003},[126,2403,2404],{},"def run_alert_check():\n",[126,2406,2407],{"class":128,"line":2009},[126,2408,2409],{},"    data_file = sorted(Path(\"\u002Fdata\u002Fenergy\").glob(\"*.json\"))[-1]\n",[126,2411,2412],{"class":128,"line":2015},[126,2413,2414],{},"    with open(data_file) as f:\n",[126,2416,2417],{"class":128,"line":2021},[126,2418,2419],{},"        data = json.load(f)\n",[126,2421,2422],{"class":128,"line":2027},[126,2423,2424],{},"    all_alerts = []\n",[126,2426,2427],{"class":128,"line":2033},[126,2428,2429],{},"    all_alerts.extend(check_power_factor(data))\n",[126,2431,2432],{"class":128,"line":2039},[126,2433,2434],{},"    all_alerts.extend(check_voltage_unbalance(data))\n",[126,2436,2437],{"class":128,"line":2045},[126,2438,2439],{},"    for alert in all_alerts:\n",[126,2441,2442],{"class":128,"line":2051},[126,2443,2444],{},"        message = format_alert(alert)\n",[126,2446,2447],{"class":128,"line":2056},[126,2448,2449],{},"        send_telegram_message(message)\n",[126,2451,2452],{"class":128,"line":2062},[126,2453,2454],{},"        print(f\"Alert sent: {alert['type']} = {alert['value']}\")\n",[126,2456,2457],{"class":128,"line":2068},[126,2458,2459],{},"    return len(all_alerts)\n",[126,2461,2463],{"class":128,"line":2462},73,[126,2464,1414],{"emptyLinePlaceholder":1413},[126,2466,2468],{"class":128,"line":2467},74,[126,2469,2059],{},[126,2471,2473],{"class":128,"line":2472},75,[126,2474,2475],{},"    count = run_alert_check()\n",[126,2477,2479],{"class":128,"line":2478},76,[126,2480,2481],{},"    print(f\"Alert check complete: {count} alerts sent\")\n",[16,2483,2484],{},"Contoh output di Telegram:",[116,2486,2491],{"className":2487,"code":2489,"language":2490},[2488],"language-text","🔴 Energy Alert: LOW_POWER_FACTOR\n\nSite: Factory Balikpapan - Main Incomer\nValue: 0.78\nSeverity: CRITICAL\nTime: 2026-04-05T14:30:00Z\n\n_Powered by OpenClaw + Circutor Scout_\n","text",[123,2492,2489],{"__ignoreMap":121},[16,2494,2495],{},"Begitu ada masalah, kamu langsung tahu. Bukan setelah PLN kirim tagihan yang membengkak.",[62,2497],{},[11,2499,2501],{"id":2500},"openclaw-custom-dashboard","OpenClaw Custom Dashboard",[16,2503,2504,2505],{},"Scout dashboard itu bagus untuk standard monitoring. Tapi kekuatan sebenarnya dari integration dengan OpenClaw adalah kemampuan bikin ",[23,2506,2507],{},"custom view yang combine data dari berbagai sumber.",[72,2509,2511],{"id":2510},"dashboard-components","Dashboard Components",[116,2513,2515],{"className":118,"code":2514,"language":120,"meta":121,"style":121},"flowchart LR\n    subgraph \"Data Sources\"\n        SCOUT[Circutor Scout]\n        TCPRS[TCPRS1+ Gateway]\n        EMOD[eMod Local]\n        PROD[Production System]\n        WEATHER[Weather API]\n    end\n    \n    subgraph \"OpenClaw Processing\"\n        SCOUT --> AGG[Data Aggregation]\n        TCPRS --> AGG\n        EMOD --> AGG\n        PROD --> CORR[Correlation Engine]\n        WEATHER --> CORR\n        \n        AGG --> DASH[Dashboard Engine]\n        CORR --> DASH\n    end\n    \n    subgraph \"Dashboard Views\"\n        DASH --> RTO[Real-Time Overview]\n        DASH --> TREND[Trend Analysis]\n        DASH --> KPI[KPI Cards]\n        DASH --> COMP[Multi-Site Compare]\n        DASH --> PQ[Power Quality]\n        DASH --> COST[Cost Estimation]\n    end\n",[123,2516,2517,2521,2526,2531,2536,2541,2546,2551,2555,2559,2564,2569,2574,2579,2584,2589,2593,2598,2603,2607,2611,2616,2621,2626,2631,2636,2641,2646],{"__ignoreMap":121},[126,2518,2519],{"class":128,"line":129},[126,2520,132],{},[126,2522,2523],{"class":128,"line":135},[126,2524,2525],{},"    subgraph \"Data Sources\"\n",[126,2527,2528],{"class":128,"line":141},[126,2529,2530],{},"        SCOUT[Circutor Scout]\n",[126,2532,2533],{"class":128,"line":147},[126,2534,2535],{},"        TCPRS[TCPRS1+ Gateway]\n",[126,2537,2538],{"class":128,"line":153},[126,2539,2540],{},"        EMOD[eMod Local]\n",[126,2542,2543],{"class":128,"line":159},[126,2544,2545],{},"        PROD[Production System]\n",[126,2547,2548],{"class":128,"line":320},[126,2549,2550],{},"        WEATHER[Weather API]\n",[126,2552,2553],{"class":128,"line":326},[126,2554,788],{},[126,2556,2557],{"class":128,"line":332},[126,2558,317],{},[126,2560,2561],{"class":128,"line":338},[126,2562,2563],{},"    subgraph \"OpenClaw Processing\"\n",[126,2565,2566],{"class":128,"line":343},[126,2567,2568],{},"        SCOUT --> AGG[Data Aggregation]\n",[126,2570,2571],{"class":128,"line":349},[126,2572,2573],{},"        TCPRS --> AGG\n",[126,2575,2576],{"class":128,"line":355},[126,2577,2578],{},"        EMOD --> AGG\n",[126,2580,2581],{"class":128,"line":361},[126,2582,2583],{},"        PROD --> CORR[Correlation Engine]\n",[126,2585,2586],{"class":128,"line":366},[126,2587,2588],{},"        WEATHER --> CORR\n",[126,2590,2591],{"class":128,"line":372},[126,2592,1133],{},[126,2594,2595],{"class":128,"line":378},[126,2596,2597],{},"        AGG --> DASH[Dashboard Engine]\n",[126,2599,2600],{"class":128,"line":384},[126,2601,2602],{},"        CORR --> DASH\n",[126,2604,2605],{"class":128,"line":389},[126,2606,788],{},[126,2608,2609],{"class":128,"line":395},[126,2610,317],{},[126,2612,2613],{"class":128,"line":401},[126,2614,2615],{},"    subgraph \"Dashboard Views\"\n",[126,2617,2618],{"class":128,"line":1141},[126,2619,2620],{},"        DASH --> RTO[Real-Time Overview]\n",[126,2622,2623],{"class":128,"line":1146},[126,2624,2625],{},"        DASH --> TREND[Trend Analysis]\n",[126,2627,2628],{"class":128,"line":1151},[126,2629,2630],{},"        DASH --> KPI[KPI Cards]\n",[126,2632,2633],{"class":128,"line":1157},[126,2634,2635],{},"        DASH --> COMP[Multi-Site Compare]\n",[126,2637,2638],{"class":128,"line":1163},[126,2639,2640],{},"        DASH --> PQ[Power Quality]\n",[126,2642,2643],{"class":128,"line":1169},[126,2644,2645],{},"        DASH --> COST[Cost Estimation]\n",[126,2647,2648],{"class":128,"line":1175},[126,2649,788],{},[72,2651,2653],{"id":2652},"key-dashboard-views","Key Dashboard Views",[16,2655,2656],{},[39,2657],{"alt":2658,"src":2659},"Dashboard monitoring dari smartphone","\u002Fimages\u002Fposts\u002Fcircutor-mobile-app-full.jpg",[16,2661,2662,2665],{},[23,2663,2664],{},"1. Real-Time Overview"," — Current kW, kVA, kVAr per feeder. Power factor gauge. Voltage waveform per phase. Energy consumed today (kWh). Current demand vs contracted demand.",[16,2667,2668,2671],{},[23,2669,2670],{},"2. Trend Analysis"," — Daily\u002Fweekly\u002Fmonthly energy consumption trend. Comparison dengan periode sebelumnya. Peak demand history. Power factor trend. Temperature correlation (AC load naik drastis pas siang).",[16,2673,2674,2677],{},[23,2675,2676],{},"3. Energy Cost Estimation"," — Dashboard nggak cuma nunjukin kWh — tapi langsung convert ke Rupiah.",[116,2679,2681],{"className":1394,"code":2680,"language":1396,"meta":121,"style":121},"def calculate_energy_cost(readings, tariff_data):\n    \"\"\"\n    Calculate estimated energy cost based on PLN industrial tariff.\n    Adjust tariff_data sesuai kontrak PLN kamu.\n    \"\"\"\n    total_kwh = 0\n    total_kva_peak = 0\n    \n    for reading in readings:\n        total_kwh += reading[\"energy_import_kwh\"]\n        demand_kva = reading[\"apparent_power_kva\"]\n        if demand_kva > total_kva_peak:\n            total_kva_peak = demand_kva\n    \n    energy_cost = total_kwh * tariff_data[\"energy_rate\"]\n    demand_cost = total_kva_peak * tariff_data[\"demand_rate\"]\n    reactive_cost = max(0, total_kwh * (1\u002F0.85 - 1) * tariff_data[\"reactive_rate\"])\n    \n    return {\n        \"energy_cost_rp\": energy_cost,\n        \"demand_cost_rp\": demand_cost,\n        \"reactive_penalty_rp\": reactive_cost,\n        \"total_cost_rp\": energy_cost + demand_cost + reactive_cost,\n        \"total_kwh\": total_kwh,\n        \"peak_kva\": total_kva_peak,\n        \"cost_per_kwh\": (energy_cost + demand_cost + reactive_cost) \u002F total_kwh if total_kwh > 0 else 0\n    }\n\ntariff = {\n    \"energy_rate\": 1444.70,\n    \"demand_rate\": 183120,\n    \"reactive_rate\": 1444.70\n}\n",[123,2682,2683,2688,2693,2698,2703,2707,2712,2717,2721,2726,2731,2736,2741,2746,2750,2755,2760,2765,2769,2773,2778,2783,2788,2793,2798,2803,2808,2812,2816,2821,2826,2831,2836],{"__ignoreMap":121},[126,2684,2685],{"class":128,"line":129},[126,2686,2687],{},"def calculate_energy_cost(readings, tariff_data):\n",[126,2689,2690],{"class":128,"line":135},[126,2691,2692],{},"    \"\"\"\n",[126,2694,2695],{"class":128,"line":141},[126,2696,2697],{},"    Calculate estimated energy cost based on PLN industrial tariff.\n",[126,2699,2700],{"class":128,"line":147},[126,2701,2702],{},"    Adjust tariff_data sesuai kontrak PLN kamu.\n",[126,2704,2705],{"class":128,"line":153},[126,2706,2692],{},[126,2708,2709],{"class":128,"line":159},[126,2710,2711],{},"    total_kwh = 0\n",[126,2713,2714],{"class":128,"line":320},[126,2715,2716],{},"    total_kva_peak = 0\n",[126,2718,2719],{"class":128,"line":326},[126,2720,317],{},[126,2722,2723],{"class":128,"line":332},[126,2724,2725],{},"    for reading in readings:\n",[126,2727,2728],{"class":128,"line":338},[126,2729,2730],{},"        total_kwh += reading[\"energy_import_kwh\"]\n",[126,2732,2733],{"class":128,"line":343},[126,2734,2735],{},"        demand_kva = reading[\"apparent_power_kva\"]\n",[126,2737,2738],{"class":128,"line":349},[126,2739,2740],{},"        if demand_kva > total_kva_peak:\n",[126,2742,2743],{"class":128,"line":355},[126,2744,2745],{},"            total_kva_peak = demand_kva\n",[126,2747,2748],{"class":128,"line":361},[126,2749,317],{},[126,2751,2752],{"class":128,"line":366},[126,2753,2754],{},"    energy_cost = total_kwh * tariff_data[\"energy_rate\"]\n",[126,2756,2757],{"class":128,"line":372},[126,2758,2759],{},"    demand_cost = total_kva_peak * tariff_data[\"demand_rate\"]\n",[126,2761,2762],{"class":128,"line":378},[126,2763,2764],{},"    reactive_cost = max(0, total_kwh * (1\u002F0.85 - 1) * tariff_data[\"reactive_rate\"])\n",[126,2766,2767],{"class":128,"line":384},[126,2768,317],{},[126,2770,2771],{"class":128,"line":389},[126,2772,1762],{},[126,2774,2775],{"class":128,"line":395},[126,2776,2777],{},"        \"energy_cost_rp\": energy_cost,\n",[126,2779,2780],{"class":128,"line":401},[126,2781,2782],{},"        \"demand_cost_rp\": demand_cost,\n",[126,2784,2785],{"class":128,"line":1141},[126,2786,2787],{},"        \"reactive_penalty_rp\": reactive_cost,\n",[126,2789,2790],{"class":128,"line":1146},[126,2791,2792],{},"        \"total_cost_rp\": energy_cost + demand_cost + reactive_cost,\n",[126,2794,2795],{"class":128,"line":1151},[126,2796,2797],{},"        \"total_kwh\": total_kwh,\n",[126,2799,2800],{"class":128,"line":1157},[126,2801,2802],{},"        \"peak_kva\": total_kva_peak,\n",[126,2804,2805],{"class":128,"line":1163},[126,2806,2807],{},"        \"cost_per_kwh\": (energy_cost + demand_cost + reactive_cost) \u002F total_kwh if total_kwh > 0 else 0\n",[126,2809,2810],{"class":128,"line":1169},[126,2811,1777],{},[126,2813,2814],{"class":128,"line":1175},[126,2815,1414],{"emptyLinePlaceholder":1413},[126,2817,2818],{"class":128,"line":1180},[126,2819,2820],{},"tariff = {\n",[126,2822,2823],{"class":128,"line":1186},[126,2824,2825],{},"    \"energy_rate\": 1444.70,\n",[126,2827,2828],{"class":128,"line":1192},[126,2829,2830],{},"    \"demand_rate\": 183120,\n",[126,2832,2833],{"class":128,"line":1198},[126,2834,2835],{},"    \"reactive_rate\": 1444.70\n",[126,2837,2838],{"class":128,"line":1204},[126,2839,2840],{},"}\n",[16,2842,2843],{},[23,2844,2845],{},"4. Multi-Site Comparison",[116,2847,2849],{"className":118,"code":2848,"language":120,"meta":121,"style":121},"graph TD\n    subgraph \"Multi-Site Dashboard\"\n        direction LR\n        S1[\"Site A Balikpapan 2450 kWh PF 0.92 Rp 8.2M\"]\n        S2[\"Site B Jakarta 3120 kWh PF 0.78 Rp 12.5M\"]\n        S3[\"Site C Sidoarjo 1890 kWh PF 0.88 Rp 6.1M\"]\n    end\n    \n    style S2 fill:#ff6b6b,color:#fff\n",[123,2850,2851,2856,2861,2866,2871,2876,2881,2885,2889],{"__ignoreMap":121},[126,2852,2853],{"class":128,"line":129},[126,2854,2855],{},"graph TD\n",[126,2857,2858],{"class":128,"line":135},[126,2859,2860],{},"    subgraph \"Multi-Site Dashboard\"\n",[126,2862,2863],{"class":128,"line":141},[126,2864,2865],{},"        direction LR\n",[126,2867,2868],{"class":128,"line":147},[126,2869,2870],{},"        S1[\"Site A Balikpapan 2450 kWh PF 0.92 Rp 8.2M\"]\n",[126,2872,2873],{"class":128,"line":153},[126,2874,2875],{},"        S2[\"Site B Jakarta 3120 kWh PF 0.78 Rp 12.5M\"]\n",[126,2877,2878],{"class":128,"line":159},[126,2879,2880],{},"        S3[\"Site C Sidoarjo 1890 kWh PF 0.88 Rp 6.1M\"]\n",[126,2882,2883],{"class":128,"line":320},[126,2884,788],{},[126,2886,2887],{"class":128,"line":326},[126,2888,317],{},[126,2890,2891],{"class":128,"line":332},[126,2892,2893],{},"    style S2 fill:#ff6b6b,color:#fff\n",[16,2895,2896],{},"Dengan multi-site view, kamu bisa langsung spot mana site yang problematic. Site B di Jakarta dengan power factor 0.78? That needs immediate attention.",[16,2898,2899,2902],{},[23,2900,2901],{},"5. Power Quality Deep Dive"," — THD trend per phase, individual harmonics spectrum (bar chart sampai 50th), voltage flicker severity, EN 50160 compliance status, event log: sag, swell, transient.",[16,2904,2905,2908],{},[23,2906,2907],{},"6. Automated Daily Report"," — Setiap jam 7 pagi, OpenClaw generate dan kirim ringkasan energy ke Telegram:",[116,2910,2913],{"className":2911,"code":2912,"language":2490},[2488],"📊 Energy Report — Factory Balikpapan\n📅 5 April 2026\n\n⚡ Yesterday's Summary\n━━━━━━━━━━━━━━━━━━━━\nEnergy: 2,450 kWh\nPeak Demand: 485 kVA (82% of contract)\nAvg Power Factor: 0.91\nMax THD-V: 4.2%\nEstimated Cost: Rp 8,247,000\n\n📈 vs Last Week\n━━━━━━━━━━━━━━━━━━━━\nEnergy: +3.2%\nPF: -0.02 (check Site B)\nCost: +Rp 245,000\n\n⚠️ Alerts (yesterday)\n━━━━━━━━━━━━━━━━━━━━\n🔴 14:30 — PF dropped to 0.78 (Feeder 3)\n🟡 09:15 — Voltage sag detected (L2)\n\n💡 Recommendation\n━━━━━━━━━━━━━━━━━━━━\nFeeder 3 PF issue: Check capacitor bank\nsteps 3 & 4. Contact logs show step 3\nhasn't switched in 72 hours.\n",[123,2914,2912],{"__ignoreMap":121},[62,2916],{},[11,2918,2920],{"id":2919},"real-world-use-cases","Real-World Use Cases",[16,2922,2923],{},"Theory is cheap. Let's talk about actual implementations.",[72,2925,2927],{"id":2926},"use-case-1-factory-energy-monitoring-balikpapan","Use Case 1: Factory Energy Monitoring — Balikpapan",[16,2929,2930,2933],{},[23,2931,2932],{},"Context:"," Pabrik plywood dengan 4 line produksi. Tagihan listrik Rp 800 juta\u002Fbulan. Nggak ada visibility per-line consumption.",[16,2935,2936,2939],{},[23,2937,2938],{},"Setup:"," CVM-A1600 di main incomer (PLN supply), CVM-B50 di masing-masing 4 feeder (line produksi), CVM-NRG di solar rooftop 500 kWp, Line-EDS-Cloud gateway, Scout + OpenClaw integration.",[16,2941,2942],{},[23,2943,2944],{},"Findings (first 3 months):",[197,2946,2947,2966],{},[200,2948,2949],{},[203,2950,2951,2954,2957,2960,2963],{},[206,2952,2953],{},"Feeder",[206,2955,2956],{},"Avg Load (kW)",[206,2958,2959],{},"Load Factor",[206,2961,2962],{},"PF",[206,2964,2965],{},"Action",[213,2967,2968,2985,3002,3019,3035],{},[203,2969,2970,2973,2976,2979,2982],{},[218,2971,2972],{},"Main",[218,2974,2975],{},"420",[218,2977,2978],{},"0.62",[218,2980,2981],{},"0.91",[218,2983,2984],{},"OK",[203,2986,2987,2990,2993,2996,2999],{},[218,2988,2989],{},"Line 1",[218,2991,2992],{},"180",[218,2994,2995],{},"0.78",[218,2997,2998],{},"0.93",[218,3000,3001],{},"Optimal",[203,3003,3004,3007,3010,3013,3016],{},[218,3005,3006],{},"Line 2",[218,3008,3009],{},"95",[218,3011,3012],{},"0.41",[218,3014,3015],{},"0.85",[218,3017,3018],{},"Low utilization",[203,3020,3021,3024,3027,3030,3032],{},[218,3022,3023],{},"Line 3",[218,3025,3026],{},"120",[218,3028,3029],{},"0.55",[218,3031,2995],{},[218,3033,3034],{},"Low PF",[203,3036,3037,3040,3043,3046,3049],{},[218,3038,3039],{},"Line 4",[218,3041,3042],{},"65",[218,3044,3045],{},"0.33",[218,3047,3048],{},"0.89",[218,3050,3051],{},"Review needed",[16,3053,3054],{},[23,3055,3056],{},"Actions Taken:",[445,3058,3059,3068,3077],{},[448,3060,3061,3064,3065,850],{},[23,3062,3063],{},"Line 3 power factor correction"," — Kapasitor bank step 3 & 4 ternyata stuck. Diperbaiki, PF naik dari 0.78 ke 0.94. Saving reactive penalty sekitar ",[23,3066,3067],{},"Rp 45 juta\u002Fbulan",[448,3069,3070,3073,3074,850],{},[23,3071,3072],{},"Line 2 idle detection"," — Load factor cuma 0.41, artinya mesin banyak idle. Implement auto-shutdown untuk equipment idle > 30 menit. Saving ",[23,3075,3076],{},"Rp 18 juta\u002Fbulan",[448,3078,3079,3082,3083,850],{},[23,3080,3081],{},"Solar optimization"," — Dengan CVM-NRG, bisa track solar generation vs self-consumption vs export. Realized that 35% solar generation terbuang karena inverter limit tertentu. Reprogrammed, saving tambahan ",[23,3084,3085],{},"Rp 12 juta\u002Fbulan",[16,3087,3088,3091],{},[23,3089,3090],{},"Total estimated annual saving: ~Rp 900 juta."," ROI dari investment monitoring system: under 4 bulan.",[72,3093,3095],{"id":3094},"use-case-2-capacitor-bank-optimization-var-module","Use Case 2: Capacitor Bank Optimization — VAR Module",[16,3097,3098,3100],{},[23,3099,2932],{}," Gedung komersial 12 lantai dengan capacitor bank 600 kVAr. Tagihan reactive power penalty rata-rata Rp 15 juta\u002Fbulan karena PF sering drop di bawah 0.85.",[16,3102,3103,3105],{},[23,3104,2938],{}," VAR module aktif di Scout, monitoring tiap step capacitor bank, alert via OpenClaw ke Telegram kalau ada step yang abnormal.",[16,3107,3108],{},[23,3109,3110],{},"What VAR Module Revealed:",[116,3112,3114],{"className":118,"code":3113,"language":120,"meta":121,"style":121},"graph TD\n    subgraph \"Capacitor Bank Health\"\n        S1[\"Step 1: 100 kVAr - Normal - 2847 hrs\"]\n        S2[\"Step 2: 100 kVAr - Normal - 1923 hrs\"]\n        S3[\"Step 3: 100 kVAr - Degraded - 4521 hrs\"]\n        S4[\"Step 4: 150 kVAr - Normal - 856 hrs\"]\n        S5[\"Step 5: 150 kVAr - Fault - 0 hrs OFFLINE\"]\n    end\n    \n    style S3 fill:#ffa502,color:#fff\n    style S5 fill:#ff4757,color:#fff\n",[123,3115,3116,3120,3125,3130,3135,3140,3145,3150,3154,3158,3163],{"__ignoreMap":121},[126,3117,3118],{"class":128,"line":129},[126,3119,2855],{},[126,3121,3122],{"class":128,"line":135},[126,3123,3124],{},"    subgraph \"Capacitor Bank Health\"\n",[126,3126,3127],{"class":128,"line":141},[126,3128,3129],{},"        S1[\"Step 1: 100 kVAr - Normal - 2847 hrs\"]\n",[126,3131,3132],{"class":128,"line":147},[126,3133,3134],{},"        S2[\"Step 2: 100 kVAr - Normal - 1923 hrs\"]\n",[126,3136,3137],{"class":128,"line":153},[126,3138,3139],{},"        S3[\"Step 3: 100 kVAr - Degraded - 4521 hrs\"]\n",[126,3141,3142],{"class":128,"line":159},[126,3143,3144],{},"        S4[\"Step 4: 150 kVAr - Normal - 856 hrs\"]\n",[126,3146,3147],{"class":128,"line":320},[126,3148,3149],{},"        S5[\"Step 5: 150 kVAr - Fault - 0 hrs OFFLINE\"]\n",[126,3151,3152],{"class":128,"line":326},[126,3153,788],{},[126,3155,3156],{"class":128,"line":332},[126,3157,317],{},[126,3159,3160],{"class":128,"line":338},[126,3161,3162],{},"    style S3 fill:#ffa502,color:#fff\n",[126,3164,3165],{"class":128,"line":343},[126,3166,3167],{},"    style S5 fill:#ff4757,color:#fff\n",[16,3169,3170,3173],{},[23,3171,3172],{},"Root Cause Analysis:"," Step 5 offline sudah 3 bulan tanpa ada yang notice. Itu 150 kVAr yang hilang — artinya max compensation cuma 450 kVAr dari 600 kVAr rated. Step 3 menunjukkan degradation. Hours of operation jauh lebih tinggi dari step lain, artinya dia yang paling sering aktif. Resistor discharge mulai panas.",[16,3175,3176,3179],{},[23,3177,3178],{},"Actions:"," Replace step 5 contactor yang fault. Schedule preventive maintenance step 3. Reconfigure switching logic agar wear lebih even. Set alert: kalau ada step OFFLINE > 24 jam, auto-notify electrical team via Telegram.",[16,3181,3182,3185,3186,850],{},[23,3183,3184],{},"Result:"," PF stabil di atas 0.93. Reactive penalty turun dari Rp 15 juta ke ",[23,3187,3188],{},"Rp 1.2 juta\u002Fbulan",[72,3190,3192],{"id":3191},"use-case-3-power-quality-analysis-quality-analyst","Use Case 3: Power Quality Analysis — Quality Analyst",[16,3194,3195],{},[39,3196],{"alt":3197,"src":3198},"Analisis power quality dan harmonic waveform","\u002Fimages\u002Fposts\u002Fcircutor-power-quality-full.jpg",[16,3200,3201,3203],{},[23,3202,2932],{}," Pabrik food processing yang mengalami frequent PLC reset dan motor failure. Management curiga electrical supply dari PLN, tapi nggak punya bukti.",[16,3205,3206,3208],{},[23,3207,2938],{}," CVM-A1600 (Class A power quality analyzer) di main incomer, Quality Analyst module aktif, monitoring 30 hari untuk baseline.",[16,3210,3211],{},[23,3212,3213],{},"Findings:",[1320,3215,3216,3222,3228],{},[448,3217,3218,3221],{},[23,3219,3220],{},"Voltage sag"," detected 47 times dalam 30 hari. Depth: rata-rata 15-25%, duration 100-500ms. Source: PLN grid switching events.",[448,3223,3224,3227],{},[23,3225,3226],{},"THD-V average 6.8%"," — tinggi, tapi masih dalam toleransi EN 50160 (\u003C 8%). Tapi THD-I mencapai 18.3% karena banyak VFD (variable frequency drive).",[448,3229,3230,3233],{},[23,3231,3232],{},"Voltage unbalance 4.2%"," — melewati threshold 3% yang direkomendasikan NEMA untuk motor.",[116,3235,3237],{"className":118,"code":3236,"language":120,"meta":121,"style":121},"graph LR\n    subgraph \"Power Quality Report\"\n        direction TB\n        R1[\"Voltage Sag: 47 events Avg depth 19%\"]\n        R2[\"THD-V: 6.8% OK - THD-I: 18.3% Warning\"]\n        R3[\"VUB: 4.2% exceeds 3% NEMA limit\"]\n        R4[\"Flicker: Pst 0.8 OK - EN 50160 compliant\"]\n    end\n",[123,3238,3239,3244,3249,3254,3259,3264,3269,3274],{"__ignoreMap":121},[126,3240,3241],{"class":128,"line":129},[126,3242,3243],{},"graph LR\n",[126,3245,3246],{"class":128,"line":135},[126,3247,3248],{},"    subgraph \"Power Quality Report\"\n",[126,3250,3251],{"class":128,"line":141},[126,3252,3253],{},"        direction TB\n",[126,3255,3256],{"class":128,"line":147},[126,3257,3258],{},"        R1[\"Voltage Sag: 47 events Avg depth 19%\"]\n",[126,3260,3261],{"class":128,"line":153},[126,3262,3263],{},"        R2[\"THD-V: 6.8% OK - THD-I: 18.3% Warning\"]\n",[126,3265,3266],{"class":128,"line":159},[126,3267,3268],{},"        R3[\"VUB: 4.2% exceeds 3% NEMA limit\"]\n",[126,3270,3271],{"class":128,"line":320},[126,3272,3273],{},"        R4[\"Flicker: Pst 0.8 OK - EN 50160 compliant\"]\n",[126,3275,3276],{"class":128,"line":326},[126,3277,788],{},[16,3279,3280,3283],{},[23,3281,3282],{},"Recommendations:"," Install active voltage conditioner (AVC) di critical loads — budget Rp 85 juta, tapi menghilangkan production downtime yang estimasi kerugiannya Rp 200 juta\u002Ftahun. Install active harmonic filter 100A untuk reduce THD-I, motor lifespan diprediksi meningkat 40%. Request PLN untuk check service transformer tap setting, VUB turun ke 1.8%.",[16,3285,3286,3289],{},[23,3287,3288],{},"All three recommendations have ROI under 18 months."," Dan yang paling penting: sekarang ada data. Kalau PLN bilang \"supply kami fine\" — bisa tunjukin report Quality Analyst yang comply IEC 61000-4-30. Data nggak bisa didebat.",[72,3291,3293],{"id":3292},"use-case-4-multi-site-comparison","Use Case 4: Multi-Site Comparison",[16,3295,3296,3298],{},[23,3297,2932],{}," Radian Group punya 4 site tersebar di Indonesia (Balikpapan, Jakarta, Sidoarjo). Masing-masing dengan kontrak PLN dan tariff berbeda.",[16,3300,3301,3303],{},[23,3302,2938],{}," Scout multi-site management, OpenClaw consolidate data dari semua site, benchmarking dashboard: energy intensity per unit produksi.",[116,3305,3307],{"className":118,"code":3306,"language":120,"meta":121,"style":121},"graph TD\n    subgraph \"Energy Benchmarking\"\n        direction LR\n        A[\"RFM Balikpapan 0.45 kWh\u002Funit Best\"]\n        B[\"REFOREL Jakarta 0.52 kWh\u002Funit +15.5%\"]\n        C[\"RFS Sidoarjo 0.48 kWh\u002Funit +6.7%\"]\n        D[\"UST Balikpapan 0.61 kWh\u002Funit +35.6%\"]\n    end\n    \n    style A fill:#2ed573,color:#fff\n    style D fill:#ff4757,color:#fff\n",[123,3308,3309,3313,3318,3322,3327,3332,3337,3342,3346,3350,3355],{"__ignoreMap":121},[126,3310,3311],{"class":128,"line":129},[126,3312,2855],{},[126,3314,3315],{"class":128,"line":135},[126,3316,3317],{},"    subgraph \"Energy Benchmarking\"\n",[126,3319,3320],{"class":128,"line":141},[126,3321,2865],{},[126,3323,3324],{"class":128,"line":147},[126,3325,3326],{},"        A[\"RFM Balikpapan 0.45 kWh\u002Funit Best\"]\n",[126,3328,3329],{"class":128,"line":153},[126,3330,3331],{},"        B[\"REFOREL Jakarta 0.52 kWh\u002Funit +15.5%\"]\n",[126,3333,3334],{"class":128,"line":159},[126,3335,3336],{},"        C[\"RFS Sidoarjo 0.48 kWh\u002Funit +6.7%\"]\n",[126,3338,3339],{"class":128,"line":320},[126,3340,3341],{},"        D[\"UST Balikpapan 0.61 kWh\u002Funit +35.6%\"]\n",[126,3343,3344],{"class":128,"line":326},[126,3345,788],{},[126,3347,3348],{"class":128,"line":332},[126,3349,317],{},[126,3351,3352],{"class":128,"line":338},[126,3353,3354],{},"    style A fill:#2ed573,color:#fff\n",[126,3356,3357],{"class":128,"line":343},[126,3358,3359],{},"    style D fill:#ff4757,color:#fff\n",[16,3361,3362],{},"UST shows the highest energy intensity. Investigation reveals: equipment aging (motor efficiency drop), compressed air leakage (estimated 25% leak rate), no power factor correction (PF 0.76). Action plan dikirim ke site manager UST dengan target reducing energy intensity ke 0.50 kWh\u002Funit dalam 6 bulan.",[62,3364],{},[11,3366,3368],{"id":3367},"cost-analysis-roi","Cost Analysis & ROI",[16,3370,3371],{},"Let's talk money. Berapa biaya setup dan berapa balik modal-nya.",[72,3373,3375],{"id":3374},"typical-investment-breakdown","Typical Investment Breakdown",[197,3377,3378,3394],{},[200,3379,3380],{},[203,3381,3382,3385,3388,3391],{},[206,3383,3384],{},"Component",[206,3386,3387],{},"Qty",[206,3389,3390],{},"Unit Price (est.)",[206,3392,3393],{},"Total",[213,3395,3396,3408,3422,3436,3450,3464,3476,3489,3501,3513,3529],{},[203,3397,3398,3401,3403,3406],{},[218,3399,3400],{},"CVM-A1600 (main incomer)",[218,3402,880],{},[218,3404,3405],{},"Rp 35 juta",[218,3407,3405],{},[203,3409,3410,3413,3416,3419],{},[218,3411,3412],{},"CVM-B50 (feeder meter)",[218,3414,3415],{},"4",[218,3417,3418],{},"Rp 18 juta",[218,3420,3421],{},"Rp 72 juta",[203,3423,3424,3427,3430,3433],{},[218,3425,3426],{},"CVM-MINI (sub-meter)",[218,3428,3429],{},"8",[218,3431,3432],{},"Rp 4 juta",[218,3434,3435],{},"Rp 32 juta",[203,3437,3438,3441,3444,3447],{},[218,3439,3440],{},"CT sets (include spare)",[218,3442,3443],{},"15",[218,3445,3446],{},"Rp 2 juta",[218,3448,3449],{},"Rp 30 juta",[203,3451,3452,3455,3458,3461],{},[218,3453,3454],{},"Line-EDS-Cloud gateway",[218,3456,3457],{},"2",[218,3459,3460],{},"Rp 12 juta",[218,3462,3463],{},"Rp 24 juta",[203,3465,3466,3469,3471,3474],{},[218,3467,3468],{},"TCPRS1+ converter",[218,3470,880],{},[218,3472,3473],{},"Rp 5 juta",[218,3475,3473],{},[203,3477,3478,3481,3484,3486],{},[218,3479,3480],{},"Panel wiring & installation",[218,3482,3483],{},"—",[218,3485,3483],{},[218,3487,3488],{},"Rp 40 juta",[203,3490,3491,3494,3496,3498],{},[218,3492,3493],{},"Scout subscription (annual)",[218,3495,3483],{},[218,3497,3483],{},[218,3499,3500],{},"Rp 60 juta",[203,3502,3503,3506,3508,3510],{},[218,3504,3505],{},"OpenClaw integration setup",[218,3507,3483],{},[218,3509,3483],{},[218,3511,3512],{},"Rp 25 juta",[203,3514,3515,3520,3522,3524],{},[218,3516,3517],{},[23,3518,3519],{},"Total CAPEX Year 1",[218,3521],{},[218,3523],{},[218,3525,3526],{},[23,3527,3528],{},"Rp 323 juta",[203,3530,3531,3536,3538,3540],{},[218,3532,3533],{},[23,3534,3535],{},"OPEX per year (ongoing)",[218,3537],{},[218,3539],{},[218,3541,3542],{},[23,3543,3500],{},[72,3545,3547],{"id":3546},"return-on-investment","Return on Investment",[197,3549,3550,3566],{},[200,3551,3552],{},[203,3553,3554,3557,3560,3563],{},[206,3555,3556],{},"Scenario",[206,3558,3559],{},"Monthly Saving",[206,3561,3562],{},"Annual Saving",[206,3564,3565],{},"Payback",[213,3567,3568,3581,3594],{},[203,3569,3570,3573,3575,3578],{},[218,3571,3572],{},"Conservative (5% energy reduction)",[218,3574,3460],{},[218,3576,3577],{},"Rp 144 juta",[218,3579,3580],{},"2.2 tahun",[203,3582,3583,3586,3588,3591],{},[218,3584,3585],{},"Moderate (10% energy reduction)",[218,3587,3463],{},[218,3589,3590],{},"Rp 288 juta",[218,3592,3593],{},"1.1 tahun",[203,3595,3596,3599,3602,3605],{},[218,3597,3598],{},"Aggressive (20% energy reduction)",[218,3600,3601],{},"Rp 48 juta",[218,3603,3604],{},"Rp 576 juta",[218,3606,3607],{},"0.6 tahun",[16,3609,3610],{},"Dan ini baru energy saving-nya. Belum termasuk avoided equipment damage dari power quality issues, reduced reactive power penalty, optimized maintenance scheduling, compliance documentation, dan production loss avoidance.",[16,3612,3613],{},"Honestly, ROI under 1 year itu realistic buat pabrik dengan tagihan di atas Rp 300 juta\u002Fbulan. Dan yang sering terlewat: setelah initial optimization (year 1), saving terus berlanjut di year 2, 3, dan seterusnya. Monitoring system bukan one-time saving tool — ini continuous improvement engine.",[62,3615],{},[11,3617,3619],{"id":3618},"best-practices-yang-sering-terlewat","Best Practices yang Sering Terlewat",[72,3621,3623],{"id":3622},"_1-naming-convention","1. Naming Convention",[16,3625,3626],{},"Pakai naming convention yang consistent dari awal. Trust me, 6 bulan kemudian kamu akan bingung \"Feeder 3 itu feeder yang mana?\"",[116,3628,3631],{"className":3629,"code":3630,"language":2490},[2488],"SITE-CODE_EQUIPMENT_TYPE_LOCATION\nBLKP_MCC_LINE1_MAIN   (Balikpapan, MCC, Line 1, Main)\nJKT_LVDP_AHU3         (Jakarta, LVDP, AHU 3)\nSDO_HTMF_COMP1        (Sidoarjo, HTMF, Compressor 1)\n",[123,3632,3630],{"__ignoreMap":121},[72,3634,3636],{"id":3635},"_2-alarm-fatigue","2. Alarm Fatigue",[16,3638,3639],{},"Jangan set alarm terlalu sensitif. 100 alerts per hari = semua alert akan di-ignore. Set threshold yang reasonable dan pakai severity level:",[1320,3641,3642,3648,3654],{},[448,3643,3644,3647],{},[23,3645,3646],{},"Info:"," PF turun 0.02 dibanding kemarin",[448,3649,3650,3653],{},[23,3651,3652],{},"Warning:"," PF di bawah 0.85, voltage di luar ±5%",[448,3655,3656,3659],{},[23,3657,3658],{},"Critical:"," PF di bawah 0.80, voltage di luar ±10%, equipment offline",[72,3661,3663],{"id":3662},"_3-data-retention","3. Data Retention",[16,3665,3666],{},"Time-series data grow fast. Satu site dengan 5 meter, polling setiap menit = ~36,000 records per site per day. Untuk 4 site = 144,000 records\u002Fday. Dalam setahun = 52 juta records. Plan storage accordingly. Consider downsampling:",[1320,3668,3669,3675,3681,3687],{},[448,3670,3671,3674],{},[23,3672,3673],{},"Raw data (1-min):"," simpan 30 hari terakhir",[448,3676,3677,3680],{},[23,3678,3679],{},"15-min aggregated:"," simpan 1 tahun",[448,3682,3683,3686],{},[23,3684,3685],{},"Hourly aggregated:"," simpan 5 tahun",[448,3688,3689,3692],{},[23,3690,3691],{},"Daily aggregated:"," simpan forever",[72,3694,3696],{"id":3695},"_4-dont-forget-the-human-factor","4. Don't Forget the Human Factor",[16,3698,3699],{},"Technology is useless kalau nggak ada action. Pastikan electrical engineer punya akses ke Scout dan OpenClaw dashboard. Ada regular review meeting (monthly energy review). Alert routing yang jelas — siapa handle alert untuk equipment apa. KPI energy efficiency masuk ke performance metrics.",[62,3701],{},[11,3703,3705],{"id":3704},"conclusion","Conclusion",[16,3707,3708],{},"Energy monitoring di industri Indonesia masih secara besar tertinggal dibanding negara-negara maju. Banyak pabrik yang jalan puluhan tahun tanpa tahu persis berapa energi yang mereka pakai dan di mana. Nggak karena technology-nya belum ada — justru sebaliknya, sekarang tools-nya sangat accessible dan affordable.",[16,3710,3711],{},"Circutor Scout Platform + IoT ecosystem mereka memberikan end-to-end solution yang solid: dari sensor layer (CVM meters), communication layer (gateways), sampai analytics layer (Scout cloud). Dan dengan integrasi ke OpenClaw, kamu unlock custom capability yang nggak tersedia di platform manapun: automated Telegram alerts, combined energy + production dashboard, AI-powered optimization recommendations.",[16,3713,3714],{},"Angka-angkanya nggak bohong. 5-15% energy saving itu achievable. Buat pabrik menengah, itu berarti ratusan juta rupiah per tahun. ROI bisa under 1 tahun. Dan setelah ROI tercapai, saving terus jalan.",[16,3716,3717],{},"Jadi pertanyaannya bukan \"apakah kita mampu implement energy monitoring?\" Tapi \"apakah kita mampu TIDAK implement?\"",[16,3719,3720],{},"Karena setiap hari tanpa monitoring = hari di mana uang menghilang tanpa jejak.",[62,3722],{},[16,3724,3725],{},[23,3726,3727],{},"Reference:",[1320,3729,3730,3735,3742,3749],{},[448,3731,3732],{},[175,3733,48],{"href":177,"rel":3734},[179],[448,3736,3737],{},[175,3738,3741],{"href":3739,"rel":3740},"https:\u002F\u002Fcircutor.com\u002Fen\u002Fsectors\u002Finternet-of-things-iot\u002F",[179],"Circutor IoT Solutions",[448,3743,3744],{},[175,3745,3748],{"href":3746,"rel":3747},"https:\u002F\u002Fwebstore.iec.ch\u002Fpublication\u002F61847",[179],"IEC 61000-4-30 Standard",[448,3750,3751],{},[175,3752,3755],{"href":3753,"rel":3754},"https:\u002F\u002Fstandards.iteh.ai\u002Fcatalog\u002Fstandards\u002Fcen\u002F28184f6e-b989-4db4-a60e-f24b7b2fe8fc\u002Fen-50160-2010",[179],"EN 50160 Standard",[62,3757],{},[16,3759,3760],{},[3761,3762,3763],"em",{},"Ditulis oleh Zainul Fanani — Engineering practitioner yang sehari-hari ngurusin power system, automation, dan IoT di industri Indonesia. Pengalaman langsung implementasi Circutor systems di multiple sites.",[3765,3766,3767],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":121,"searchDepth":135,"depth":135,"links":3769},[3770,3771,3775,3780,3784,3789,3796,3800,3806,3810,3816],{"id":13,"depth":135,"text":14},{"id":66,"depth":135,"text":67,"children":3772},[3773,3774],{"id":74,"depth":141,"text":75},{"id":110,"depth":141,"text":111},{"id":170,"depth":135,"text":171,"children":3776},[3777,3778,3779],{"id":184,"depth":141,"text":185},{"id":278,"depth":141,"text":279},{"id":439,"depth":141,"text":440},{"id":476,"depth":135,"text":477,"children":3781},[3782,3783],{"id":489,"depth":141,"text":490},{"id":744,"depth":141,"text":745},{"id":1016,"depth":135,"text":1017,"children":3785},[3786,3787,3788],{"id":1032,"depth":141,"text":1033},{"id":1266,"depth":141,"text":1267},{"id":1314,"depth":141,"text":1315},{"id":1344,"depth":135,"text":1345,"children":3790},[3791,3792,3793,3794,3795],{"id":1351,"depth":141,"text":1352},{"id":1533,"depth":141,"text":1534},{"id":1631,"depth":141,"text":1632},{"id":1690,"depth":141,"text":1691},{"id":2111,"depth":141,"text":2112},{"id":2500,"depth":135,"text":2501,"children":3797},[3798,3799],{"id":2510,"depth":141,"text":2511},{"id":2652,"depth":141,"text":2653},{"id":2919,"depth":135,"text":2920,"children":3801},[3802,3803,3804,3805],{"id":2926,"depth":141,"text":2927},{"id":3094,"depth":141,"text":3095},{"id":3191,"depth":141,"text":3192},{"id":3292,"depth":141,"text":3293},{"id":3367,"depth":135,"text":3368,"children":3807},[3808,3809],{"id":3374,"depth":141,"text":3375},{"id":3546,"depth":141,"text":3547},{"id":3618,"depth":135,"text":3619,"children":3811},[3812,3813,3814,3815],{"id":3622,"depth":141,"text":3623},{"id":3635,"depth":141,"text":3636},{"id":3662,"depth":141,"text":3663},{"id":3695,"depth":141,"text":3696},{"id":3704,"depth":135,"text":3705},"tech","2026-04-05 15:30:00","Panduan lengkap implementasi monitoring energi industri pakai Circutor Scout Platform + IoT system. Dari install CVM energy meter sampai custom dashboard OpenClaw. Termasuk integrasi Modbus, API, dan automated alert Telegram.","md","\u002Fimages\u002Fposts\u002Fcircutor-header.jpg",{"readTime":3823},"20 min","\u002Ftech\u002Fcircutor-scout-iot-monitoring",null,{"title":5,"description":3819},"tech\u002Fcircutor-scout-iot-monitoring",[3829,3830,3831,3832,3833,3834,3835,3836],"circutor","iot","energy-monitoring","industrial","modbus","openclaw","dashboard","automation","HnNps3fpuML6U-Xo8G2CMluDXFwdYOOh9HQhgjHn2Sw",1775381266203]