Hi Michael,
natürlich, dafür hatte ich ja auch den Thread auf gemacht ![:wink: :wink:](https://community.symcon.de/images/emoji/win10/wink.png?v=9)
Das Script ist schon etwas älter (Anfangszeit) und ist leider nicht selbstinstallierend.
Schau mal ob Du zurecht kommst, ansonsten einfach nachfragen. IP Adresse richtig eintragen!
Von der Struktur her liegen 3 String-Variablen unterhalb des Scripts für Serverzeiten und -status.
Zusätlich liegt unterhalb des Scripts ein Dummy-Modul (namens „Sicherung“) mit pro Rechner einer Stringvariablen mit dem identischen Namen des registrierten Computers am WHS.
<?php
################################################################################
# Script: Network.Health.ips.php
# Version: 2.1.20190825
# Author: Heiko Wilknitz
#
# Windows Home Server Health Status auslesen!
#
# -------------------------------- Changelog -----------------------------------
#
# v2.1.20190825 - WHS_Info mit hinzugenommen
#
# ------------------------------ Konfiguration ---------------------------------
#
# WHS Health XML Status File
$url='http://192.x.y.z:55000/health/health.xml';
#umlaute = array("ä","ö","ü","Ä","Ö","Ü","ß");
$umlaute = array("ä","ö","ü","Ä","Ö","Ãœ","ß");
$replace = array("ä","ö","ü","Ä","Ö","Ü","ß");
#
# Status Variablen
$idUptime = 39095;
$idUpdate = 59656;
$idConsole = 12778;
# Dummy Modul, welches die Namen der Rechner enthält (String-Varibalen mit 1:1 Computernamen)
$idBackup = 50296;
#
################################################################################
$count = 0;
$html = '<table class="wwx"><thead class="orange"><tr><th style="width: 30px;">Nr.</th><th style="width: 150px;">Status</th><th>Beschreibung</th></tr></thead>';
################################################################################
// Load XML
$xml = simplexml_load_file($url);
date_default_timezone_set('UTC');
################################################################################
// UPTIME
$diff = $xml->Hardware->SystemInformation["Uptime"] * 60;
$tage = intval($diff/86400);
$stunden = intval(($diff-$tage*86400)/3600);
$minuten = intval(($diff-$tage*86400 - $stunden*3600)/60);
$sekunden = $diff-$tage*86400-$stunden*3600-$minuten*60;
$uptime = $tage.' Tage '.$stunden.' Stunden '.$minuten.' Minuten';
SetValueString($idUptime , $uptime);
################################################################################
// LASTUPDATE
$date = date_create_from_format('Y-m-d H:i:sZ', $xml->attributes()->LastUpdated);
$ts = strtotime($xml->attributes()->LastUpdated);
SetValueString($idUpdate , strftime('%A %d.%m.%Y %H:%M:%S', $ts));
################################################################################
// NOTIFICATIONS (CONSOLE)
foreach ($xml->Notifications->Notification as $note) {
if($note->attributes()->IsSuppressed != '1') { // and ($note->attributes()->Severity == "WHS_ERROR" or $note->attributes()->Severity == "WHS_WARNING")) {
$header = str_replace($umlaute, $replace, $note->attributes()->TextHeader);
$description = str_replace($umlaute, $replace, $note->attributes()->TextDescription);
$image = "<img src='/user/health/yellow.png' />";
if($note->attributes()->Severity == "WHS_ERROR") {
$image = "<img src='/user/health/red.png' />";
}
else if ($note->attributes()->Severity == "WHS_INFO") {
if ((strpos($note->attributes()->UniqueID, 'WHS.Backup.CurrentOperation') !== false) && (strpos($header, 'Sicherungsdienst') === false)) {
$image = "<img src='/user/health/blue.png' />";
$stock =
$description = $header;
$header = GetMark($description, 'von * wird').' Backup';
} else {
continue;
}
}
$html = $html."<tr><td>".$image."</td><td>".$header."</td><td>".$description."</td></tr>";
// Nur wenn ein Eintrag da ist!
$count++;
}
}
if ($count == 0) {
// "<img src='\user\whs\green.png' /> Es liegen keine Statusmeldungen vor.";
$image = "<img src='\user\health\green.png' style='vertical-align: middle; padding-right:10px;'/>";
$header = "Fehlerfrei - ";
$description = "Es liegen keine Statusmeldungen vor.";
$html = "<tr><td>".$image."</td><td>".$header."</td><td>".$description."</td></tr></table>";
} else {
// "Es liegen ".$count." Meldung(en) vor.<br /><br />".
$html = $html."</table>";
}
//print $html;
SetValueString($idConsole , $html);
################################################################################
// COMPUTERINFO
$ids = IPS_GetChildrenIDs($idBackup);
foreach ($ids as $id) {
$array = IPS_GetObject($id);
$name = $array['ObjectInfo'];
if($name == '') {
$name = $array['ObjectName'];
}
//print $name;
foreach ($xml->Backup->ComputerInfo as $pc) {
if($name == $pc->attributes()->ComputerName) {
SetValueString($id, $pc->attributes()->DaysSinceBackup.' Tag(e)');
}
}
}
// Diese Funktion trennt die relevanten Bereiche aus dem Ausschnitt heraus
// $string ist dabei der zu durchsuchende Gesamtstring,
// in $Mark sind durch "*" getrennt der Beginn des zu suchenden Strings
// und das Ende des zu suchende Abschnittes.
// Beispiel für den Text "<div>*</div></li>"
function GetMark($string, $mark) {
$find = explode("*",$mark);
$lens = strlen($find[0]);
$lene = strlen($find[1]);
$start = strpos($string, $find[0]);
//echo "Start:".$start.PHP_EOL;
$stop = strpos($string, $find[1], $start+$lens);
//echo "Stop:".$stop.PHP_EOL;
$inner = substr($string, $start+$lens, $stop-$start-$lens);
return $inner;
}
################################################################################
?>
Viel Erfolg
Heiko