Hi Michael,
natürlich, dafür hatte ich ja auch den Thread auf gemacht 
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