Mindig is kíváncsi voltam a HDD hőmérsékletére a NAS-omban. A NAS egy zárt szobában van, légkondi nélkül. Ráadásul régebben szétszedtem a NAS-t, és nagyon forrók voltak a lemezek... Akkor még nem mértem a hőmérsékletet, de kezdtem aggódni. Számos vitát találhat a NAS-meghajtó hőmérsékletéről és annak Linux/Python környezetből történő megfigyeléséről. De nekem egyik megoldás sem vált be! Amit akartam: NAS HDD hőmérséklet-figyelés – nem akartam kiolvasni az értéket a Linux alrendszer valamely részéből, ami megváltoztathatja a NAS szoftver következő kiadását. megbízható, dokumentált módon Egy grafikonon akartam látni , amely a bátyám pincéjében van. az otthoni NAS-omat és a tartalék NAS-omat Az értékeket egy Teljes rugalmasságot akartam a grafikon megjelenésében, lehetőleg magam állítva be a Matplotlibben. jó megjelenésű grafikonon akartam látni. Szeretném kivenni az értékeket a NAS irányítópultjáról, és . Van egy az asztalomon. Már mutatja az erkélyem hőmérsékletét, páratartalmát és szennyezettségi szintjét, valamint internetkapcsolatom elérhetőségének történetét. Ott szeretném látni a HDD hőmérséklet előzményeit. valós időben megjeleníteni a grafikonokat 2 minlogos kijelző 1. lépés: A hőmérsékleti adatok összegyűjtése Az adatokat keresztül gyűjtjük a csomagon keresztül. SNMP protokollon pysnmp Az SNMP és a MIB megértése egy széles körben használt protokoll a hálózati eszközök állapotának és teljesítményének figyelésére. Lehetővé teszi olyan adatok gyűjtését, mint például a hőmérséklet, a CPU-használat és a lemez állapota. (Simple Network Management Protocol) Az SNMP olyan információk adatbázisai, amelyek SNMP-n keresztül lekérdezhetők. Minden adatot egy OID (Object Identifier) azonosít, amely egyedileg azonosít egy változót, amely SNMP-n keresztül olvasható vagy beállítható. (Management Information Bases) A MIB-ek Meg kell adnia a begyűjtendő értékeket. Synology NAS-om van. az oldalaikon. Össze kell gyűjtenünk: MIB A MIB fájlt közzéteszik Lemez neve: 1.3.6.1.4.1.6574.2.1.1.2 Lemezmodell: 1.3.6.1.4.1.6574.2.1.1.3 Lemez hőmérséklete: 1.3.6.1.4.1.6574.2.1.1.6 A pysnmp oldalon van egy . Ez írta nekem a Python szkript törzsét, kezelve az SNMP API-val kapcsolatos összes nehézséget és kezelve az aszinkron hívásokat. A legfontosabb rész a következő: kiváló chatbot async def run(server_name, ipaddress, username, passwd, outinfo): # SNMP walk for disk name, model, and temperature oids = [ ObjectType(ObjectIdentity('1.3.6.1.4.1.6574.2.1.1.2')), # Disk name (diskID) ObjectType(ObjectIdentity('1.3.6.1.4.1.6574.2.1.1.3')), # Disk model (diskModel) ObjectType(ObjectIdentity('1.3.6.1.4.1.6574.2.1.1.6')) # Disk temperature (diskTemperature) ] errorIndication, errorStatus, errorIndex, varBinds = await bulkCmd( SnmpEngine(), UsmUserData(username, passwd, authProtocol=usmHMACSHAAuthProtocol), # Use the appropriate auth protocol await UdpTransportTarget.create((ipaddress, 161)), ContextData(), 0, 10, # Increase the max-repetitions to get more results in one request *oids # Query disk name, model, and temperature ) if errorIndication: print(f"Error: {errorIndication}") elif errorStatus: print(f"Error Status: {errorStatus.prettyPrint()} at {errorIndex and varBinds[int(errorIndex) - 1] or '?'}") else: disk_data = {} for varBind in varBinds: oid, value = varBind oid_str = str(oid) # Disk name if oid_str.startswith('1.3.6.1.4.1.6574.2.1.1.2'): index = oid_str.split('.')[-1] if index not in disk_data: disk_data[index] = {} disk_data[index]['name'] = value # Disk model elif oid_str.startswith('1.3.6.1.4.1.6574.2.1.1.3'): index = oid_str.split('.')[-1] if index not in disk_data: disk_data[index] = {} disk_data[index]['model'] = value # Disk temperature elif oid_str.startswith('1.3.6.1.4.1.6574.2.1.1.6'): index = oid_str.split('.')[-1] if index not in disk_data: disk_data[index] = {} disk_data[index]['temperature'] = value # Print out the disk information for index, info in disk_data.items(): name = info.get('name', 'Unknown') model = info.get('model', 'Unknown') temperature = info.get('temperature', 'Unknown') name = str(name) model = str(model) temperature = str(temperature) print(f"IP Address {ipaddress}, Disk {index}: Name: {name}, Model: {model}, Temperature: {temperature} °C") outinfo.append({'server_name': server_name, 'ip': ipaddress, 'disk': index, 'name': name, 'model': model, 'temperature': temperature}) Engedélyeznie kell az SNMP protokollt a Synology NAS beállításaiban: 2. lépés: Telepítse a szkriptet, és küldje el az adatokat feldolgozásra A szkriptet közvetlenül a NAS-ra telepítettem a Docker környezetben. Biztosítania kell, hogy a Docker-tároló újrainduljon az esetleges újraindítás után. Ebből az okból állítottam be egy egyszerű docker-compose.yaml fájlt: version: '3.8' services: pingchart: build: . restart: always container_name: synology-temperature Ezután indítsa el a Dockert paranccsal. docker-compose up -d Csatlakozom a – egy egyszerű rendszer az adatok összegyűjtésére, feldolgozására és megjelenítésére. Az adatokat HTTPS-kéréseken keresztül (az URL-ben vagy a törzsben kódolva) küldi el, és ott beállít egy vizualizációs szkriptet. A grafikonok ezután bárhonnan elérhetők. 2minloghoz Használhatja a 2minlogot. Alternatív megoldásként elküldheti az adatokat adatbázisba vagy helyi fájlrendszerbe. 3. lépés: Az adatok megjelenítése Beállítottam egy egyszerű Matplotlib szkriptet a grafikon megjelenítéséhez. Valójában a ChatGPT-t (o1-preview) kértem meg, és elég jól sikerült. A Python szkript nem volt tökéletes, de elég jó volt a feladat gyors befejezéséhez. A felszólítás lent található. Here is a csv file. Can you write a code: Split data into different graphs by combining the server name and name (eg, DS920+ / Disk 1). Each graph will show the temperature. There will be a title in each graph (eg, DS920+ / Disk 1) The graphs will have the same temperature range. The background will be black, graph background will be also black, the graph color will be from dark green (low temperatures) to light green (high temperatures). There will be two thin lines - 20 °C (blue) and 45 °C (red). Trim the data for last week with tickmarks at midnight of every day. The data are in UTC time. Convert it to Europe/Berlin time zone. The resolution of the total image is hxw 600 x 1024 pixels. Save the image to PNG. disk,ip,model,name,server_name,temperature,timestamp 0,10.0.0.9,ST4000VN008-2DR166,Disk 3,DS920+,38,2024-09-19T20:19:48.723761 1,10.0.0.9,ST16000NM000J-2TW103,Disk 4,DS920+,42,2024-09-19T20:19:49.253975 2,10.0.0.9,ST4000VX007-2DT166,Disk 1,DS920+,38,2024-09-19T20:19:49.818734 3,10.0.0.9,ST4000VX007-2DT166,Disk 2,DS920+,39,2024-09-19T20:19:50.393793 0,10.0.2.9,ST12000NM001G-2MV103,Disk 1,DS220j,28,2024-09-19T20:19:50.873142 0,10.0.0.9,ST4000VN008-2DR166,Disk 3,DS920+,38,2024-09-19T20:20:02.119583 1,10.0.0.9,ST16000NM000J-2TW103,Disk 4,DS920+,42,2024-09-19T20:20:02.596654 2,10.0.0.9,ST4000VX007-2DT166,Disk 1,DS920+,38,2024-09-19T20:20:03.101480 3,10.0.0.9,ST4000VX007-2DT166,Disk 2,DS920+,39,2024-09-19T20:20:03.697423 0,10.0.2.9,ST12000NM001G-2MV103,Disk 1,DS220j,28,2024-09-19T20:20:04.221348 0,10.0.0.9,ST4000VN008-2DR166,Disk 3,DS920+,38,2024-09-19T20:25:02.254611 1,10.0.0.9,ST16000NM000J-2TW103,Disk 4,DS920+,42,2024-09-19T20:25:02.714633 2,10.0.0.9,ST4000VX007-2DT166,Disk 1,DS920+,38,2024-09-19T20:25:03.295622 3,10.0.0.9,ST4000VX007-2DT166,Disk 2,DS920+,39,2024-09-19T20:25:03.780728 ... A vizualizációs szkript a 2minlog platformon belül kerül telepítésre. Helyben is futtathatja. A szkript elérhető . a GitHubon Becsomagolva Használhat egy teljesen felügyelt az adatok összegyűjtésére, feldolgozására és megjelenítésére. Tekintse meg a . Az eredményeket az asztalomon ülő Android táblagépen jelenítem meg, és segítségével körbejárom a különböző grafikonokat. Az adatokat a helyi fájlrendszerére is mentheti, és ugyanezt megteheti. 2minlogot dokumentációt az Image Tuner A megoldást Synology NAS-on tesztelték, de másokhoz is adaptálható. Referenciák: GitHub Repository: NAS Temperature Monitoring Project Pysnmp dokumentáció: pysnmp Library Pysnmp csomag chatbot: SNMP guru Kijelző beállítása: és Teljes képernyős automatikus frissítés a régi Android táblagép beállítása képernyőként Synology MIB-fájlok**:** Synology MIB-útmutató 2minlog: 2minlog adatvizualizációs platform #Synology #SynologyNAS #Hőmérséklet #Monitoring #DataVisualization #Matplotlib #SNMP #2minlog #Python #Docker