mirror of
https://git.eworm.de/cgit/routeros-scripts
synced 2025-08-02 17:24:30 +02:00
... from 'check-health', so the script works on all devices to monitor CPU and RAM. The supported plugins for sensors in hardware are installed automatically.
74 lines
2.8 KiB
Text
74 lines
2.8 KiB
Text
#!rsc by RouterOS
|
|
# RouterOS script: check-health.d/temperature
|
|
# Copyright (c) 2019-2025 Christian Hesse <mail@eworm.de>
|
|
# https://rsc.eworm.de/COPYING.md
|
|
#
|
|
# requires RouterOS, version=7.14
|
|
#
|
|
# check for RouterOS health state - temperature plugin
|
|
# https://rsc.eworm.de/doc/check-health.md
|
|
|
|
:global CheckHealthPlugins;
|
|
|
|
:set ($CheckHealthPlugins->[ :jobname ]) do={
|
|
:local FuncName [ :tostr $0 ];
|
|
|
|
:global CheckHealthLast;
|
|
:global CheckHealthTemperature;
|
|
:global CheckHealthTemperatureDeviation;
|
|
:global CheckHealthTemperatureNotified;
|
|
:global Identity;
|
|
|
|
:global LogPrint;
|
|
:global SendNotification2;
|
|
:global SymbolForNotification;
|
|
|
|
:if ([ :len [ /system/health/find where type="C" ] ] = 0) do={
|
|
$LogPrint debug $FuncName ("Your device does not provide any voltage health values.");
|
|
:return false;
|
|
}
|
|
|
|
:local TempToNum do={
|
|
:global CharacterReplace;
|
|
:local T [ :toarray [ $CharacterReplace $1 "." "," ] ];
|
|
:return ($T->0 * 10 + $T->1);
|
|
}
|
|
|
|
:if ([ :typeof $CheckHealthTemperatureNotified ] != "array") do={
|
|
:set CheckHealthTemperatureNotified ({});
|
|
}
|
|
|
|
:foreach Temperature in=[ /system/health/find where type="C" ] do={
|
|
:local Name [ /system/health/get $Temperature name ];
|
|
:local Value [ /system/health/get $Temperature value ];
|
|
|
|
:if ([ :typeof ($CheckHealthLast->$Name) ] != "nothing") do={
|
|
:if ([ :typeof ($CheckHealthTemperature->$Name) ] != "num" ) do={
|
|
$LogPrint info $FuncName ("No threshold given for " . $Name . ", assuming 50C.");
|
|
:set ($CheckHealthTemperature->$Name) 50;
|
|
}
|
|
:local Validate [ /system/health/get [ find where name=$Name ] value ];
|
|
:while ($Value != $Validate) do={
|
|
:set Value $Validate;
|
|
:set Validate [ /system/health/get [ find where name=$Name ] value ];
|
|
}
|
|
:if ($Value > $CheckHealthTemperature->$Name && \
|
|
$CheckHealthTemperatureNotified->$Name != true) do={
|
|
$SendNotification2 ({ origin=$FuncName; \
|
|
subject=([ $SymbolForNotification "fire" ] . "Health warning: " . $Name); \
|
|
message=("The " . $Name . " on " . $Identity . " is above threshold: " . \
|
|
$Value . "\C2\B0" . "C") });
|
|
:set ($CheckHealthTemperatureNotified->$Name) true;
|
|
}
|
|
:if ($Value <= ($CheckHealthTemperature->$Name - $CheckHealthTemperatureDeviation) && \
|
|
$CheckHealthTemperatureNotified->$Name = true) do={
|
|
$SendNotification2 ({ origin=$FuncName; \
|
|
subject=([ $SymbolForNotification "white-heavy-check-mark" ] . "Health recovery: " . $Name); \
|
|
message=("The " . $Name . " on " . $Identity . " dropped below threshold: " . \
|
|
$Value . "\C2\B0" . "C") });
|
|
:set ($CheckHealthTemperatureNotified->$Name) false;
|
|
}
|
|
}
|
|
:set ($CheckHealthLast->$Name) $Value;
|
|
}
|
|
}
|