Log Messages im WebFront

Bei der Ausführung des Scripts wird die Zeile „Zeitraum von / bis“ oberhalb der Filteroptionen eingefügt.
Um ein Beispiel eines selektierten Zeitraum einzustellen, wird bei der Installation der Default-Wert auf 07:00 - 20:00 Uhr gesetzt.
Die Bedienung ist gleich eines Wochenplans. Klick auf das Uhrensymbol in der Zeile „Zeitraum von / bis“ rechts außen …

Ich mußte einen Unterschied zwischen den IPS Versionen 4.10 und 4.40 feststellen (Datum und Zeitangabe in der Logfile).
Sollten weitere Unterschiede in neueren Versionen oder Umgebungen (z.B. Linux) auftreten kann ich das nicht nachstellen.

Aus Berechtigungsgründen kann das aktuelle Script auf der ersten Seite des Beitrag von mir nicht aktualisiert werden.

<?
################################################################################
# Scriptbezeichnung: System.StatusLog.ips.php
# Version: 1.2
# Author:  Heiko Wilknitz (@Pitti) kleine Ergänzungen N22 + BESTEX
#
# Dieses Skript filtert aus dem IPS Logfile die gewünschten Einträge:  
#    0:ALL = (ERROR, WARNING, CUSTOM, NOTIFY, SUCCESS)
#    1:ERROR
#    2:WARNING
#    3:CUSTOM
#    4:NOTIFY
#    5:SUCCESS 
#
# Installation:
# -------------
#
# HINWEIS: NUR FÜR LINUX BASIIERTE SYSTEM!!!
#
# Dieses Skript richtet automatisch alle nötigen Objekte bei manueller
# Ausführung ein.
#
# - Neues Skript erstellen
# - Diesen PHP-Code hineinkopieren
# - Abschnitt 'Konfiguration' den eigenen Gegebenheiten anpassen 
# - Skript Abspeichern
# - Skript Ausführen
#
# ------------------------------ Konfiguration ---------------------------------
#
# Logfile, sollte nichts geändert werden
$logDir     = IPS_GetLogDir();
$logFile    = 'logfile.log';
#
# A fast and powerful alternative to grep (https://github.com/svent/sift)
$useSift = false;
#
# Filter Profil 
$filter =  array(
    array(0,'ALL',        '', 8421631),
    array(1,'ERROR',    '', 16744576),
    array(2,'WARNING','', 16777088),
    array(3,'SUCCESS','', 8454016),
    array(4,'NOTIFY',    '', 16744703),
    array(5,'CUSTOM',    '', 12632256)
);

#  
# Hier ggf. die HTML Ausgabe anpassen
$maxlines = 1500; /* Maximale Anzahl Zeilen in der HTML Tabellenanzeige Wird nur initialisiert wenn dieses script in der Konsole ausgeführt wird. Speichern reicht nicht !*/
$pgdwntrg = 10; /* Angabe in Sekunden - innerhalb dieser Zeitangabe muß die Auswahl erneut gedrückt werden um auf die nächste Tabellenseite zu blättern  */

################################################################################

// INSTALLATION
if ($_IPS['SENDER']=='Execute') {
    $pos = 0;
    // Filter
    $vpn = "IPS.Logging";
    $vid = CreateVariableByName($_IPS['SELF'], "Filter", 1);
    CreateProfileInteger($vpn, 'CloseAll', '', '', 0, 0, 0, 0, $filter);
    IPS_SetVariableCustomProfile($vid, $vpn);
    IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
    IPS_SetPosition($vid, $pos++);
    SetValue($vid, 0); 
    
    // select CUSTOM
    $vid = CreateVariableByName($_IPS['SELF'], "Select Sender", 3);
    if (IPS_GetKernelVersion()< "5.0"){IPS_SetVariableCustomProfile($vid, '~String');}else{IPS_SetVariableCustomProfile($vid, '');}
    IPS_SetIcon($vid, "Gear");
    IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
    IPS_SetPosition($vid, $pos++);
    SetValue($vid, '');    
    
    // select ALL 
    $vid = CreateVariableByName($_IPS['SELF'], "Message Filter", 3);
    if (IPS_GetKernelVersion()< "5.0"){IPS_SetVariableCustomProfile($vid, '~String');}else{IPS_SetVariableCustomProfile($vid, '');}
    IPS_SetIcon($vid, "Gear");
    IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
    IPS_SetPosition($vid, $pos++);
    SetValue($vid, '');    
   
   
    // Messages
    $vid = CreateVariableByName($_IPS['SELF'], "LogMessages", 3);
    IPS_SetVariableCustomProfile($vid, '~HTMLBox');
    IPS_SetIcon($vid, "Database");
    IPS_SetPosition($vid, $pos++);
	
	// select from / to
	$eid = CreateEventByName($_IPS['SELF'], "Zeitraum von / bis");
	IPS_SetPosition($eid, -1);
	
    // LogMessages Info ***********
    IPS_SetInfo($vid, json_encode(array('key' => '', 'timestamp' => time(), 'maxlines' => $maxlines, 'lastkey' => '', 'lastline' => '', 'pgdwntrg' => $pgdwntrg,'filteropt'=>$filter, 'eid'=>$eid, )));
    // $LogMsgProp=array('key' => '', 'timestamp' => time(), 'maxlines' => '', 'pgdwntrg' => '');
	

	
}
// AKTION VIA WEBFRONT    
else if ($_IPS['SENDER'] == "WebFront") {
    
    // Speichern
    SetValue($_IPS['VARIABLE'],$_IPS['VALUE'] );
    $filter_key = GetValueInteger( IPS_GetObjectIDByName ("Filter",$_IPS['SELF']  ));
    $sender = GetValueString( IPS_GetObjectIDByName ("Select Sender",$_IPS['SELF']  ));
    $message_key_word = GetValueString( IPS_GetObjectIDByName ("Message Filter",$_IPS['SELF']  ));

    if($filter_key  == 5)
    {
        IPS_SetHidden ( IPS_GetObjectIDByName ("Select Sender",$_IPS['SELF']  ), false);
    }
    else
    {
        IPS_SetHidden ( IPS_GetObjectIDByName ("Select Sender",$_IPS['SELF']  ), true);
    }
    if($filter_key  == 0)
    {
        IPS_SetHidden ( IPS_GetObjectIDByName ("Message Filter",$_IPS['SELF']  ), false);
    }
    else
    {
        IPS_SetHidden ( IPS_GetObjectIDByName ("Message Filter",$_IPS['SELF']  ), true);
    }

    // Build command line
    $cmd = BuildExecute($useSift, $filter, $filter_key, $logDir.$logFile);
    // Filtern
    $html = GetLogMessages($cmd);
    // Anzeigen
    $vid = CreateVariableByName($_IPS['SELF'], "LogMessages", 3);
    SetValue($vid, $html);
    // Objekt Info aktualisieren
    $objArray=IPS_GetObject($vid);
    $LogMsgInf = json_decode($objArray['ObjectInfo'], true);
    $LogMsgInf['key'] = $filter_key;
    IPS_SetInfo($vid, json_encode($LogMsgInf));
}

# -------------------------------- FUNKTIONEN ----------------------------------

// Kommandozeile zusammenbauen
function BuildExecute($fast, $filter, $index, $log)
{
    $cmd = '';
    $len = count($filter);
    
    
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    //echo 'This is a server using Windows!';
    // Beispiel findstr "SUCCESS ERROR"   logfile.log    
    
    $cmd = 'findstr "';
                // ALL    
        if($index == 0) {
            foreach($filter as $key => $arr) {
                if ($key == 0) continue;
                $cmd .= ' '.$arr[1].' ';    
                if ($key != $len - 1) $cmd .= ' ';
            }
        }
        // SPECIFIC
        else {
            $cmd .= ' '.$filter[$index][1].' ';
        }
        $cmd .= '" ';   
        // echo "Befehl: ".$cmd."
"; 
        
        
} else {
     /* Linux - Anfang */    
    //SIFT => $cmd = 'sift -e " ERROR " -e " WARNING " -e " CUSTOM " -e " NOTIFY " -e " SUCCESS " '.$log; 
    if($fast == true) {
        $cmd = 'sift ';
        // ALL    
        if($index == 0) {
            foreach($filter as $key => $arr) {
                if ($key == 0) continue;
                $cmd .= '-e " '.$arr[1].' "';    
                if ($key != $len - 1) $cmd .= ' ';
            }
        }
        // SPECIFIC
        else {
            $cmd .= '-e " '.$filter[$index][1].' "';
        }
        $cmd .= ' ';
    }
    //GREP => $cmd = 'grep -E "( ERROR | WARNING | CUSTOM | NOTIFY | SUCCESS )" '.$log 
    else {
        $cmd = 'grep -E "(';
        // ALL    
        if($index == 0) {
            foreach($filter as $key => $arr) {
                if ($key == 0) continue;
                $cmd .= ' '.$arr[1].' ';    
                if ($key != $len - 1) $cmd .= '|';
            }
        }
        // SPECIFIC
        else {
            $cmd .= ' '.$filter[$index][1].' ';
        }
        $cmd .= ')" ';
    }
    /* Linux - ende */
  }
    $cmd .= $log;
    return $cmd;
};

// Daten über alle RSSI_DEVICE(s) holen und rendern
function GetLogMessages($cmd) 
{
    global $filter_key,$sender,$message_key_word;
   // Anzeige aufbereiten 
    $style = "";
    $style = $style.'<style type="text/css">';
    $style = $style.'table  {border-collapse: collapse; font-size: 14px; width: 100%; }';
    $style = $style.'td.fst {vertical-align: middle; text-align: left; padding: 5px; border-left: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
    $style = $style.'td.mid {vertical-align: middle; text-align: left; padding: 5px; border-top: 1px solid rgba(255, 255, 255, 0.1); }';
    $style = $style.'td.lst {vertical-align: middle; text-align: left; padding: 5px; border-right: 1px solid rgba(255, 255, 255, 0.2); border-top: 1px solid rgba(255, 255, 255, 0.1); }';
    $style = $style.'tr:last-child {border-bottom: 1px solid rgba(255, 255, 255, 0.2); }';
    $style = $style.'tr:nth-child(even) {  background-color: rgba(0, 0, 0, 0.2); }';      
    $style = $style.'.th { color: rgb(255, 255, 255); background-color: rgb(160, 160, 0); font-weight:bold; background-image: linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); background-image: -o-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); background-image: -moz-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); background-image: -webkit-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); background-image: -ms-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,0.3) 50%,rgba(0,0,0,0.3) 100%); }';
    $style = $style.'.dotE { width: 15px; height: 15px; clear: both; background: #ff8080; border-radius: 50%;  margin-top: 1px; margin-left:5px; }';
    $style = $style.'.dotW { width: 15px; height: 15px; clear: both; background: #ffff80; border-radius: 50%; float:left; margin-top: 2px; margin-right:10px; }';
    $style = $style.'.dotS { width: 15px; height: 15px; clear: both; background: #80ff80; border-radius: 50%; float:left; margin-top: 2px; margin-right:10px; }';
    $style = $style.'.dotC { width: 15px; height: 15px; clear: both; background: #c0c0c0; border-radius: 50%; float:left; margin-top: 2px; margin-right:10px; }';
    $style = $style.'.dotN { width: 15px; height: 15px; clear: both; background: #ff80ff; border-radius: 50%; float:left; margin-top: 2px; margin-right:10px; }';
    $style = $style.'</style>';
    // HTML zusammenbauen    
    $html = $style;
    // Exceute Command
    $ret = exec($cmd, $out, $rc); 

    $html .= '<table>';
    $html .= '<tr><td class="fst th" style="width:30px;">Typ</td><td class="mid th" style="width:150px;">Uhrzeit</td><td class="mid th" style="width:120px;">Sender</td><td class="lst th">Meldung</td></tr>'; 

    $out = array_reverse($out);
    
    $vid = CreateVariableByName($_IPS['SELF'], "LogMessages", 3); 
        
    $objArray=IPS_GetObject($vid);
    $LogMsgInf = json_decode($objArray['ObjectInfo'], true);

    // HTML Tabellenanzeige definieren
    if ($LogMsgInf['lastkey'] == $LogMsgInf['key']){
       if ((time()-$LogMsgInf['pgdwntrg']) < $LogMsgInf['timestamp']){
                         $firstline = $LogMsgInf['lastline']+1;
                         $lastline = $firstline + $LogMsgInf['maxlines'];
       }else{
          $firstline = 0;
          $lastline = $firstline + $LogMsgInf['maxlines'];
       }
                         
    }else{
       $firstline = 0;
       $lastline = $firstline + $LogMsgInf['maxlines'];
    }
    $outIdx =0;
	
	/* 'Zeitraum von / bis' abfragen */
	$eventproperties = IPS_GetEvent($LogMsgInf['eid']);
	IPS_SetEventActive($LogMsgInf['eid'],false); /* Zeitanzeige im WebFront ausblenden (für evtl. zur Verwirrung) */
	
	foreach ($eventproperties['ScheduleActions'] as $action){
		if ($action['Name'] == '+'){$vonID = $action['ID'];}
		if ($action['Name'] == '-'){$bisID = $action['ID'];}
	}

	foreach ($eventproperties['ScheduleGroups'] as $Group){
	    $von = '00:00:00'; /* default value */
		
		foreach($Group['Points'] as $Point) {
		    if($Point['ActionID'] == $vonID){
			    $von=sprintf("%'.02d", $Point['Start']['Hour']).":".sprintf("%'.02d", $Point['Start']['Minute']).":".sprintf("%'.02d", $Point['Start']['Second']);
				
				$bis='23:59:59';
				$vonbisArray=array('von'=>$von,'bis'=>$bis);
			}
		    if($Point['ActionID'] == $bisID){
			    $bis = sprintf("%'.02d", $Point['Start']['Hour']).":".sprintf("%'.02d", $Point['Start']['Minute']).":".sprintf("%'.02d", $Point['Start']['Second']);
				$vonbisArray=array('von'=>$von,'bis'=>$bis);
			}			  
		}
	}	

	$IPSver = IPS_GetKernelVersion(); /* das Format der Logfile ist je nach Version unterschiedlich */

    foreach ($out as $line) { 
        $array = explode("|", $line);
        if($IPSver > "4.10"){
		  if(substr($array[0],11,8) >= $von and substr($array[0],11,8) <= $bis){} else {continue;} /* Zeile innerhalb des 'Zeitraum von / bis' */
		}else{
		  if($array[0] >= $von and $array[0] <= $bis){} else {continue;} /* Zeile innerhalb des 'Zeitraum von / bis' */
		}
        if(array_key_exists(1 ,$LogMsgInf['filteropt'][$filter_key]))
        {
          if(array_key_exists(2,$array))
          {
                // zusätzlicher Filter in der Tabellenausgabe. Es wird z.B. bei der Auswahl ERROR keine Ausgabe gemacht wenn ERROR in einer Meldung steht.
                if($LogMsgInf['filteropt'][$filter_key][1] != 'ALL'  )
                {
                      if( $LogMsgInf['filteropt'][$filter_key][1] != trim($array[2]))
                    {continue;}
                }
                if(
                    ($LogMsgInf['filteropt'][$filter_key][1] == 'CUSTOM'  )
                    AND
                    ($sender != '')
                  )
                {
                    if( !strpos($array[3], $sender))
                    {continue;}
                    
                }
                if(
                    ($LogMsgInf['filteropt'][$filter_key][1] == 'ALL'  )
                    AND
                    ($message_key_word != '')
                  )
                {
                    if( !strpos($array[4], $message_key_word))
                    {continue;}
                    
                }
        
        
                // Check LOG in LOG :-(
                if( trim($array[2]) == 'MESSAGE') continue;
                If( $outIdx >= $firstline and $outIdx <= $lastline){
                $color = trim($array[2]);
                $html .= '<tr><td class="fst"><div class="dot'.$color[0].'"></div>'.'</td><td class="mid">'.$array[0].'</td><td class="mid">'.$array[3].'</td><td class="lst">'.$array[4].'</td></tr>';
                }
        
                if($outIdx>=$lastline) {
                // $maxlines erreicht. Ausgabe letzte Tabellenzeile 
                    $html .= '<tr><td class="fst"><div class="dot'.$color[0].'"></div>'.'</td><td class="mid">*</td><td class="mid">*</td><td class="lst"> *** max. Tabellengröße von '. $LogMsgInf['maxlines'] .' Zeilen erreicht ***<br />*** erneutes anklicken der gleichen Auswahl innerhalb von '.$LogMsgInf['pgdwntrg'].' Sek. zeigt die nächsten '. $LogMsgInf['maxlines'] .' Zeilen an ***</td></tr>';
                    break ;
            }
          }
        }
      
		$outIdx++;      
        
    }
    

    $html.='</table>';
    
    // LogMsgInf aktualisieren
    $LogMsgInf['timestamp'] = time();
    $LogMsgInf['lastline'] = $lastline;
    $LogMsgInf['lastkey'] = $LogMsgInf['key'];
    IPS_SetInfo($vid, json_encode($LogMsgInf));
    
    // Zurück
    return $html;    
}

// Erzeugt eine Variable unterhalb {id} mit dem Namen {name} vom Typ [type}
// Existiert die Variable schon wird diese zurückgeliefert.
// Types: 0 = Boolean, 1 = Integer, 2 = Float, 3 = String
function CreateVariableByName($id, $name, $type) 
{ 
   $vid = @IPS_GetVariableIDByName($name, $id); 
   if($vid===false) { 
      $vid = IPS_CreateVariable($type); 
      IPS_SetParent($vid, $id); 
      IPS_SetName($vid, $name); 
   }
   return $vid; 
}

// Erzeugt ein Ereignis unterhalb {id} mit dem Namen {name}
// Existiert das Ereignis schon wird diese zurückgeliefert.
function CreateEventByName($id, $name) 
{ 
   $eid = @IPS_GetEventIDByName($name, $id); 
   if($eid===false) { 
      //Wochenplan Ereignis erstellen
      $eid = IPS_CreateEvent(2);
	  IPS_SetEventActive($eid,false);  
      IPS_SetParent($eid, $id); 
      IPS_SetName($eid, $name); 
	  
	  //Anlegen von Aktionen 
	  IPS_SetEventScheduleAction($eid, 1, "-", 1962342,"");  /* abwählen  */
	  IPS_SetEventScheduleAction($eid, 2, "+", 11942329,""); /* auswählen */
	  
	  //Anlegen einer Gruppe
	  IPS_SetEventScheduleGroup($eid, 0, 127); 
	  
	  //Anlegen von Schaltpunkten für Gruppe
	  IPS_SetEventScheduleGroupPoint ($eid, 0, 1, 0, 0, 1, 1 );  /* abwählen ab 00:00:01 Uhr  */
	  IPS_SetEventScheduleGroupPoint ($eid, 0, 2, 7, 0, 0, 2 );  /* auswählen ab 07:00:00 Uhr */
	  IPS_SetEventScheduleGroupPoint ($eid, 0, 3, 20, 0, 0, 1 ); /* abwählen ab 20:00:00 Uhr  */
	  
	  
   }
   return $eid; 
}

// Erzeugt ein Variablenprofil vom Typ {type} mit Name n{name} 
function CreateProfile($name, $type)
{
    if(!IPS_VariableProfileExists($name)) {
        IPS_CreateVariableProfile($name, $type);
    } 
    else {
      $profile = IPS_GetVariableProfile($name);
      if($profile['ProfileType'] != $type)
        throw new Exception("Variable profile type does not match for profile ".$name);
    }
}

// Erzeugt ein Integer-Variablenprofil
function CreateProfileInteger($name, $icon, $prefix, $suffix, $minvalue, $maxvalue, $step, $digits, $asso = NULL)
{
    CreateProfile($name, 1);

    IPS_SetVariableProfileIcon($name, $icon);
    IPS_SetVariableProfileText($name, $prefix, $suffix);
    IPS_SetVariableProfileDigits($name, $digits);
    
    if(($asso !== NULL) && (sizeof($asso) !== 0)){
      $minvalue = 0;
      $maxvalue = 0;
    } 
    IPS_SetVariableProfileValues($name, $minvalue, $maxvalue, $step);
    
    if(($asso !== NULL) && (sizeof($asso) !== 0)){
      foreach($asso as $ass) {
        IPS_SetVariableProfileAssociation($name, $ass[0], $ass[1], $ass[2], $ass[3]);
      }
    }         
}
################################################################################
?>

Moin,

und vielen Dank an pitti und die anderen User die dieses Skript betreuen :wink:

Da ich u. U. vorhabe das Log auf bestimmte Einträge hin zu überwachen, habe ich das Skript mal unter IPS 5.x ausgeführt. Hierbei ist mir aufgefallen, dass in Zeile 69 und 77 dies eingetragen ist.

    IPS_SetVariableCustomProfile($vid, '~String');

Unter IPS 5.x sollte dies geändert werden auf ein leeres Profil, da ~String nicht mehr zulässig ist.

    IPS_SetVariableCustomProfile($vid, '');

Gruß
Hans

Nachtrag: Ansonsten läuft es problemlos -nochmals Danke :wink:

Moin,

mir ist noch aufgefallen, dass die Log in Log Prüfung möglicherweise nicht immer korrekt funktioniert wie man hier sieht:

// Check LOG in LOG :-(
if( trim($array[2]) == 'MESSAGE') continue;

Reproduzieren kann ich den Vorgang wie folgt:

  • Variable LogMessages löschen und neu anlegen.
  • IPS runterfahren und neu starten
  • das WF mit Select all aufrufen - keine Probleme
  • nun einige andere Skripte wie das Wunderground oder das Kalender Skript aufrufen
  • nochmals das WF mit Select all aufrufen - man erhält die Log in Log Darstellung

Gruß
Hans

Hallo,

funktioniert das Skript noch?
Ich hab es in ein Leeres Skript kopiert und einmal manuell ausgeführt. Dabei wurden die Variablen für Filter etc. angelegt.
Wenn ich das Skript aber nun im Webfront ausführe, erscheint immer die Meldung im Anhang.

Was mache ich falsch?

Danke und Gruß
Marcel

meld.PNG

Das Skript darf nicht direkt über das WebFront ausgeführt werden.
Michael

Okay das heißt ich müsste mir ein anderes Skirpt anlegen, was ich über WF ausführe, welches das Logfile Skript ausführt?
Oder eine Variable die eben das Skript ausführt?

Nein, nachdem Du das Script in der Console ausgeführt hast, werden die Variablen „Filter“ & „LogMessage“ darunter angelegt. Diese verlinkst Du in die Visu.

Durch Klicken auf den entsprechenden Filter-Button werden die Nachrichten gelesen und dargestellt!

Mehr nicht!

Gruß Heiko

Hallo Heiko,

mmh das hört sich eigentlich ziemlich simpel an ja. Allerdings wird bei mir die HTML Box im WF nicht gefüllt. Sobald in im WF zwischen den Filtern hin und herspringe, ändert sich in der Variablen „LogMessages“ zwar der Inhalt (seh ich ja in der Console), aber es wird lediglich der Header der Tabelle neu geschrieben.
Ich habe auch mal versucht das Skript etwas zu debuggen. Müssten in der Variablen $cmd nicht die Nachrichten aus dem Logfile drin stehen? Diese hat immer nur den Inhalt: grep -E „( ERROR | WARNING | CUSTOM | NOTIFY | SUCCESS )“ /var/log/symcon/logfile.log

Der Pfad auf dem Raspberry stimmt und manuell über WINSCP zum Logfile zeigt mir auch, dass es nicht leer ist:confused:

Was gibt den


grep -E "( ERROR | WARNING | CUSTOM | NOTIFY | SUCCESS )" /var/log/symcon/logfile.log

aus, wenn Du es mit Putty mal direkt ausführst?

Gruß Heiko

Komisch den Effekt hatte ich heute auch !

Hatte dann „sift“ installiert. Dachte daran liegt es.
Habe dann hin und her probiert.
Der Zeitraum von/bis wurde nach jedem Lauf abgeschltet, das habe ich noch eliminiert

// IPS_SetEventActive($LogMsgInf['eid'],false); /* Zeitanzeige im WebFront ausblenden (für evtl. zur Verwirrung) */ Remarked lueralba

Es ging dann beim Testen plötzlich wieder…:confused: :eek:

lueralba

Hallo,

hatte nun endlich Zeit das mal zu testen.
Die Ausgabe:

grep -E "( ERROR | WARNING | CUSTOM | NOTIFY | SUCCESS )" /var/log/symcon/logfile.log

Gibt mir das in putty wieder, was im logfile steht, auch funktioniert der Filter hier. Hier z.b.
.

10/12/19 00:00:02 | 00000 | SUCCESS | Kernel | Log File Rotation after Midnight…
10/12/19 04:31:58 | 12256 | WARNING | ScriptEngine | Result for Event 48364
10/12/19 05:34:44 | 37102 | NOTIFY | Blind Controller | ‚Blind Controller - Schlafen‘ wurde manuell geöffnet.
10/12/19 05:36:42 | 12256 | WARNING | ScriptEngine | Result for Event 48364
.

Auch Filter, das hier zeigt mir nur die Zeilen mit SUCCESS an

grep -E "( SUCCESS )" /var/log/symcon/logfile.log

zeigt mir z.B. nur die Zeilen mit SUCCESS an.
:confused:

Hmm, merkwürdig!

Mach doch mal ein Screenshot vom Objektbaum („Vom Script und darunter“ & von deinen Links in der Visu).

Ansonsten müsste man mal eine Teamviewer Session machen!

Gruß Heiko

Sorry für die verspätete Antwort. Ich wollte das Skript erstmal eben versuchen zu verstehen, bevor ich wild schreie das nichts geht. Und die Zeit hatte ich bisher leider nicht :).

Also anbei die Fotos vom Objektbaum. Ich verlinke zwar die komplette Instanz, aber auch wenn ich nur die Variablen „Filter“ und „LogMessages“ ins WF verlinke ist der Effekt derselbe… Kein Anzeigen des Logfiles.

Ich komme im Skript bis zu Zeile 297:


foreach ($out as $line) { 
       $array = explode("|", $line);

Davor ein

var_dump($out); 

und ich sehe im WF die Ausgabe eines Arrays mit, je nachdem welchen Filter ich anwähle, unterschiedlichen vielen Feldern beschrieben.

Soweit sogut.

Danach geht es anscheinend in der Zeile 310 nicht mehr weiter, denn die Ausgabe „hallo“ sehe ich zwar vor dem if noch, darin aber nicht mehr.

     
if(array_key_exists(1 ,$LogMsgInf['filteropt'][$filter_key]))
        { echo("hallo");

Danke für weitere Infos.

VG

Zeile 295
Der substr ist falsch.


if(substr($array[0],11,8) >= $von and substr($array[0],11,8) <= $bis){} else {continue;} /* Zeile innerhalb des 'Zeitraum von / bis' */

Das Datum im Log sieht so aus:
10/12/19 00:00:02

Mit dem substr($array[0],11,8) wird alles vor dem 11. Zeichen abgeschnitten.
Das ergibt dann:
:00:02

Also ändern auf substr($array[0], 9, 8) dan wird alles vor dem 9. Zeichen abgeschnitten und die Stunden bleiben.
Dann kommt auch 00:00:02

Und dann sollte der Vergleich auch wieder etwas bringen.

oder noch besser, den substr weglassen und das Datum entsprechend formatieren.


$time = date("H:i:s", strtotime($array[0]));

if($time >= $von and $time <= $bis){} else {continue;} /* Zeile innerhalb des 'Zeitraum von / bis' */

Einfach nur ein grosses Danke für das tolle Script!

Hallo,

hat zu diesem Script ein funktionierende Endversion? Trotz Einbau der anschließenden Scriptänderungen kommen schlussendlich bei Wechsel zwischen den Filtern immer nicht näher dargestellt Fehlermeldungen im Webfront, die keiner Aufschluss über die Ursache geben.

Grüße

Was heißt „nicht näher dargestellt Fehlermeldungen“? Bissle mehr Infos braucht man schon, z.B. Screenshots usw.

Gruß Heiko

Regarding the ERROR message within the webfront just delete the empty space characters from the first and last lines of the script (lines with <? and ?>)

Seit der Verwendung des Wandtablets verwende ich dieses hilfreiche Script von pitti.
Schon länger wollte ich jedoch auch das wenn ich auf Logfile am Tablet navigiere, die aktuellen
Einträge schon da stehen ohne auf einen Button zu klicken.
Habe nun endlich Zeit gefunden das nun umzusetzen und ein Modul dafür zu erstellen. Falls es jemand beta testen möchte bitte ich um Rückmeldungen.

Habs mal installiert. Funktioniert soweit.
Bis jetzt aufgefallen

  • es gibt zwei Instanzen. Logfile und Logdatei. Sind offenbar indent

Wozu dient der „Debug“ Schalter?