Siempre me he preguntado por la temperatura de los discos duros de mi NAS. Tengo el NAS en una habitación cerrada sin aire acondicionado. Además, desmonté el NAS hace un tiempo y los discos estaban muy calientes... No medí la temperatura en ese momento, pero empecé a preocuparme. Puedes encontrar muchas discusiones sobre la temperatura de la unidad NAS y su monitoreo desde un entorno Linux/Python. ¡Pero ninguna de las soluciones funcionó para mí! Lo que quería: Monitoreo de temperatura del disco duro NAS de : no quería leer el valor de alguna parte del subsistema Linux, que puede cambiar la próxima versión del software NAS. manera confiable y documentada Quería ver , que está en el sótano de mi hermano, en un gráfico. mi NAS doméstico y mi NAS de respaldo Quería ver los valores en un Quería total flexibilidad en el aspecto del gráfico, preferiblemente configurándolo yo mismo en Matplotlib. gráfico atractivo. Quiero poder sacar los valores del panel del NAS y . Tengo una en mi escritorio. Ya muestra la temperatura, la humedad y los niveles de contaminación en mi balcón y el historial de disponibilidad de mi conexión a Internet. Quiero ver el historial de temperatura del disco duro allí. mostrar gráficos en tiempo real pantalla 2minlog Paso 1: Recopilación de datos de temperatura Recopilaremos datos a través mediante el paquete . del protocolo SNMP pysnmp Comprensión de SNMP y MIB es un protocolo ampliamente utilizado para supervisar el estado y el rendimiento de los dispositivos de red. Permite la recopilación de datos como temperaturas, uso de la CPU y estado del disco. (Simple Network Management Protocol) SNMP son bases de datos de información que se pueden consultar a través de SNMP. Cada dato se identifica mediante un OID (Identificador de objeto), que identifica de forma única una variable que se puede leer o configurar a través de SNMP. (Bases de información de gestión) Las MIB Debes especificar los valores que se recopilarán. Tengo un servidor NAS de Synology. en sus páginas. Necesitamos recopilar: MIB Publican el archivo MIB Nombre del disco: 1.3.6.1.4.1.6574.2.1.1.2 Modelo de disco: 1.3.6.1.4.1.6574.2.1.1.3 Temperatura del disco: 1.3.6.1.4.1.6574.2.1.1.6 Hay un en la página pysnmp. Escribió el cuerpo del script de Python para mí, se ocupó de todas las dificultades con la API de SNMP y de las llamadas asincrónicas. La sección clave es la siguiente: excelente 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}) Debe habilitar el protocolo SNMP en la configuración de Synology NAS: Paso 2: Implementar el script y enviar datos para su procesamiento Implementé el script directamente en el NAS en el entorno de Docker. Debe asegurarse de que el contenedor de Docker se inicie nuevamente después del reinicio final. Por ese motivo, configuré un archivo docker-compose.yaml simple: version: '3.8' services: pingchart: build: . restart: always container_name: synology-temperature Luego inicie Docker con . docker-compose up -d Estoy afiliado a , un sistema simple para recopilar, procesar y visualizar datos. Envías los datos allí a través de solicitudes HTTPS (codificadas en la URL o en el cuerpo) y configuras un script de visualización allí. Los gráficos están disponibles desde cualquier lugar que los necesites. 2minlog Puedes utilizar 2minlog. También puedes enviar los datos a una base de datos o a un sistema de archivos local. Paso 3: Visualización de datos Configuré un script Matplotlib simple para mostrar el gráfico. En realidad, le pedí a ChatGPT (o1-preview) que lo hiciera y lo hizo bastante bien. El script Python no era perfecto, pero era lo suficientemente bueno como para terminar la tarea rápidamente. El mensaje se muestra a continuación. 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 ... El script de visualización se implementa dentro de la plataforma 2minlog. También puede ejecutarlo localmente. El script está disponible en . GitHub Para terminar Puede utilizar un totalmente administrado para recopilar, procesar y visualizar los datos. Consulte la . Muestro los resultados en una tableta Android que está sobre mi mesa y hago un ciclo entre los distintos gráficos con . También puede guardar los datos en su sistema de archivos local y hacer lo mismo. 2minlog documentación Image Tuner La solución se ha probado en un NAS Synology, pero se puede adaptar a otros. Referencias: Repositorio de GitHub: Proyecto de monitoreo de temperatura NAS Documentación de Pysnmp: Biblioteca de Pysnmp Chatbot del paquete Pysnmp: gurú de SNMP Configuración de pantalla: y Actualización automática de pantalla completa configuración de una tableta Android antigua como pantalla Archivos MIB de Synology**:** Guía de MIB de Synology 2minlog: plataforma de visualización de datos 2minlog #Synology #SynologyNAS #Temperatura #Monitoreo #Visualización de datos #Matplotlib #SNMP #2minlog #Python #Docker