+ Antworten
Ergebnis 1 bis 7 von 7
  1. #1
    Registriert seit
    Aug 2009
    Ort
    Lippe
    Beiträge
    1,569

    Standard Pi - Automatische Reaggregation aller geloggten Variablen

    Hallo,

    habe mal am Pi (Odroid) das Skript "Automatische Reaggregation aller geloggten Variablen" etwas umgebaut.
    Es reicht mir, um einen Trend zu sehen.
    Code:
    <?
    /*****
    *
    * Automatische Reaggregation aller geloggten Variablen
    *
    * Dieses Skript reaggregiert automatisch alle geloggten Variablen nacheinander
    * automatisiert bei Ausführung. Nach Abschluss des Vorgangs wird der Skript-Timer
    * gestoppt. Zur erneuten kompletten Reaggregation ist der Inhalt der automatisch
    * unterhalb des Skripts angelegten Variable 'History' zu löschen.
    *
    *****/
    
    $archiveHandlerID = IPS_GetInstanceIDByName("Archive", 0);
    
    $historyID = CreateVariableByName($_IPS['SELF'], "History", 3, "");
    // Neu rein, TS
    $historyIDdef = CreateVariableByName($_IPS['SELF'], "History defekte ID", 3, "");
    // Neu rein ENDE, TS
    $finished = true;
    $history = explode(',', GetValue($historyID));
    // Neu rein, TS
    $historydef = explode(',', GetValue($historyIDdef));
    // Neu rein ENDE, TS
    $variableIDs = IPS_GetVariableList();
    
    foreach ($variableIDs as $variableID)
    {
    // Raus,TS! 
    //       if(IPS_GetVariable($variableID)["VariableValue"]["ValueType"] != 3)
    // Raus ENDE
    
    	 if(IPS_GetVariable($variableID)["VariableType"] != 3)
        {
            if (AC_GetLoggingStatus($archiveHandlerID, $variableID) && !in_array($variableID,$history))
            {
                $finished = false;
    // Neu rein, TS
                    $history[] = $variableID;
                    SetValue($historyID, implode(',', $history));
    // Neu rein Ende, TS
                if (@AC_ReAggregateVariable($archiveHandlerID, $variableID))
                {
    // Neu raus, TS
    //                $history[] = $variableID;
    //                SetValue($historyID, implode(',', $history));
    //                print_r ($variableID);
    // Neu raus ENDE, TS
                }
    // Neu rein, TS
                else
    				{
    	                $historydef[] = $variableID;
    						 SetValue($historyIDdef, implode(',', $historydef));
    				}
    // Neu rein Ende, TS
                break;
            }
        }
    }
    
    if ($finished)
    {
        IPS_LogMessage('Reaggregation', 'Reaggregation completed!');
    }
    
    IPS_SetScriptTimer($_IPS['SELF'], $finished ? 0 : 5); //zum testen, da schneller auf Odroid....
    // IPS_SetScriptTimer($_IPS['SELF'], $finished ? 0 : 60); // Orginal
    
    function CreateVariableByName($id, $name, $type, $profile = "")
    {
        $vid = @IPS_GetVariableIDByName($name, $id);
        if($vid === false)
        {
            $vid = IPS_CreateVariable($type);
            IPS_SetParent($vid, $id);
            IPS_SetName($vid, $name);
            IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
            if($profile !== "")
            {
                IPS_SetVariableCustomProfile($vid, $profile);
            }
        }
        return $vid;
    }
    ?>
    Starte ich um ca 0:10 Nachts, vorher der diedie "Variablen" ($history und $historydef) per Timer gelöscht..
    lg Thomas
    IPS Raspberry Pi2(3) mit LCN, HM, Sonoff+Shelly per MQTT, SONOS und viel Eigenbau + Pi2(3) mit Heizungssteuerung über GPIO per IPS

  2. #2
    Registriert seit
    Jan 2018
    Ort
    97469 Gochsheim
    Beiträge
    119

    Hallo,

    eine Frage zum löschen derVariablen. wie löscht du die?

    Gruß

    Oliver

  3. #3
    Registriert seit
    Aug 2016
    Beiträge
    1,769

    Hallo,

    ich habe deinen Thread mal nach Anleitungen / Nützliche PHP Skripte verschoben.

    Grüße,
    Kai
    Meine IP-Symcon Module: https://schnittcher.info/category/ip-symcon-portfolio/

  4. #4
    Registriert seit
    Jan 2018
    Ort
    97469 Gochsheim
    Beiträge
    119

    Hallo,

    ich habe das Skript zur automatischen Aggregation eingeplant. und die Variablen werden wie beschrieben vorher immer gelöscht.

    wenn ich nun Zeiträume wie Woche, Monat oder Jahr aufrufen will, kommt die Meldung:


    "Rendering a week needs to start at 00:00:00"

    hab ich da noch einen Fehler im Script?
    Script wurde 1zu1 übernommen.


    PHP-Code:
    <?

    /*****
    *
    * Automatische Reaggregation aller geloggten Variablen
    *
    * Dieses Skript reaggregiert automatisch alle geloggten Variablen nacheinander
    * automatisiert bei Ausführung. Nach Abschluss des Vorgangs wird der Skript-Timer
    * gestoppt. Zur erneuten kompletten Reaggregation ist der Inhalt der automatisch
    * unterhalb des Skripts angelegten Variable 'History' zu löschen.
    *
    *****/

    $archiveHandlerID IPS_GetInstanceIDByName("Archive"0);

    $historyID CreateVariableByName($_IPS['SELF'], "History"3"");
    // Neu rein, TS
    $historyIDdef CreateVariableByName($_IPS['SELF'], "History defekte ID"3"");
    // Neu rein ENDE, TS
    $finished true;
    $history explode(','GetValue($historyID));
    // Neu rein, TS
    $historydef explode(','GetValue($historyIDdef));
    // Neu rein ENDE, TS
    $variableIDs IPS_GetVariableList();

    foreach (
    $variableIDs as $variableID)
    {
    // Raus,TS! 
    //       if(IPS_GetVariable($variableID)["VariableValue"]["ValueType"] != 3)
    // Raus ENDE

         
    if(IPS_GetVariable($variableID)["VariableType"] != 3)
        {
            if (
    AC_GetLoggingStatus($archiveHandlerID$variableID) && !in_array($variableID,$history))
            {
                
    $finished false;
    // Neu rein, TS
                    
    $history[] = $variableID;
                    
    SetValue($historyIDimplode(','$history));
    // Neu rein Ende, TS
                
    if (@AC_ReAggregateVariable($archiveHandlerID$variableID))
                {
    // Neu raus, TS
    //                $history[] = $variableID;
    //                SetValue($historyID, implode(',', $history));
    //                print_r ($variableID);
    // Neu raus ENDE, TS
                
    }
    // Neu rein, TS
                
    else
                    {
                        
    $historydef[] = $variableID;
                             
    SetValue($historyIDdefimplode(','$historydef));
                    }
    // Neu rein Ende, TS
                
    break;
            }
        }
    }

    if (
    $finished)
    {
        
    IPS_LogMessage('Reaggregation''Reaggregation completed!');
    }

    IPS_SetScriptTimer($_IPS['SELF'], $finished 5); //zum testen, da schneller auf Odroid....
    // IPS_SetScriptTimer($_IPS['SELF'], $finished ? 0 : 60); // Orginal

    function CreateVariableByName($id$name$type$profile "")
    {
        
    $vid = @IPS_GetVariableIDByName($name$id);
        if(
    $vid === false)
        {
            
    $vid IPS_CreateVariable($type);
            
    IPS_SetParent($vid$id);
            
    IPS_SetName($vid$name);
            
    IPS_SetInfo($vid"this variable was created by script #".$_IPS['SELF']);
            if(
    $profile !== "")
            {
                
    IPS_SetVariableCustomProfile($vid$profile);
            }
        }
        return 
    $vid;
    }
    ?>
    Ergänzung:
    einelne Tage kann ich Tageweise im Webfront ohne Probleme zurückblättern

    Gruß

    Oliver
    Geändert von jagu (31.10.18 um 12:14 Uhr)

  5. #5
    Registriert seit
    Jan 2018
    Ort
    97469 Gochsheim
    Beiträge
    119

    Hallo,

    hat sich auch erledigt. Der Aufruf erfolgte aus einer Windows Oberfläche, auf dem Rechner scheint das Symcon nicht korrekt installiert zu sein.
    Von den anderen Rechnern kommt der Fehler nicht

    Gruß

    Oliver

  6. #6
    Registriert seit
    Aug 2009
    Ort
    Lippe
    Beiträge
    1,569

    Sorry Oliver ,
    habe das länger nicht mehr benutzt, da damals ein Fehler im System war, und inzwischen andere Hardware als Odruid werkelt.
    lg Thomas
    IPS Raspberry Pi2(3) mit LCN, HM, Sonoff+Shelly per MQTT, SONOS und viel Eigenbau + Pi2(3) mit Heizungssteuerung über GPIO per IPS

  7. #7
    Registriert seit
    Aug 2018
    Beiträge
    22

    Hallo,

    ich bin bei der suche nach meinen zig Meldungen zur Aggregation ("invalid data for aggregation") nun auf das Skript hier gestoßen. Wenn ich es ausführe, kommt auch die Meldung für alle einzelnen Variablen und am Ende taucht das Reaggregation completed im Meldungsfenster auf.
    Was mich nun interessieren würde:
    - Warum wird das Ereignis direkt nach einmaligem Ausführen wieder inaktiv gesetzt?
    - Wie oft ist es sinnvoll die Aggregation auszuführen?
    - Und allgemein vielleicht noch: Was passiert wenn ich es nicht ausführe. Ausser der Fehlermeldung "invalid data..." sehe ich keine Auswirkungen im System.

    Danke und Grüße
    Marcel
    Angehängte Grafiken Angehängte Grafiken  

Ähnliche Themen

  1. Fehlermeldung bei Skript zum Automatischen Reaggregation aller geloggten Variablen
    Von fraggle im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 5
    Letzter Beitrag: 28.03.15, 09:06
  2. Uebetrag aller geloggten Daten auf Postgres
    Von aag im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 4
    Letzter Beitrag: 19.06.14, 23:37
  3. Graphen-Symbol bei geloggten Variablen weg
    Von Jimmy Neutron im Forum WebFront
    Antworten: 9
    Letzter Beitrag: 30.10.11, 19:23
  4. Einschaltdauer aus geloggten Variablen berechnen
    Von bbernhard im Forum Skripte, PHP, SQL
    Antworten: 12
    Letzter Beitrag: 10.06.11, 22:25
  5. Auflistung aller Variablen (IPS_GetChildren)
    Von mistljo im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 4
    Letzter Beitrag: 14.09.08, 14:53