[Modul] Grafana

Hallo
Zu viele Daten kann nicht sein. Maximale Datenmenge die IPSymcon bei Abfrage der Daten ist von IPSymcon auf 10000 beschraenkt.
Im Log ist zu sehen das er 4 Versuche braucht bis er unter 10000 kommt.
Dann liefert aber aber 26 Datensaetze an Grafana zurueck.
Eingabe des Payloads ist wohl falsch , sonst wuerde er nicht 99 annehmen.
Das ist eine korrekte Schreibweise:
{ „Aggregationsstufe“ : 6 }
Und 6 ist eine 1-Minütige Aggregation (Aus Rohdaten berechnet)
Was wird in Grafana bei Inspect und DATA angezeigt?

Hallo
Am Ende steht eine Hooklaufzeit von 83 Sekunden !
Mit was ist er denn so lange beschaeftigt ?
Mehr als eine Variable ???

4 Variablen habe ich eingetragen. Die Laufzeiten sind irgendwie bei jeder Anfrage so Lange. Verstehe ich nicht. Und immer wieder 4 Versuche beim Datacount

Die Schreibweise habe ich noch mal so wie von dir geschrieben, übernommen. Bringt aber auch nichs.

Hallo
Da er bei jedem Versuch mehr als 10000 Daten zurueck bekommt probiert
er automatisch eine Aggregationsstufe niedriger. Deshalb 4 Versuche bis er weniger als
10000 Daten bekommt.
image
Ist der Text mit einer roten Linie underlined ?
Welche Version vom Modul ?

Version 9.02

Hallo
Rote Linie sagt Syntax Error !
Anfuehrungszeichen unten! ist falsch
Und tausche mal die 6 mit 0.

Beides gemacht, rote Linie ist weg.
Jetzt macht er etwas. Mal schauen was gleich passiert

Query Manager bricht wieder mit Timeout ab. Unter Data sind keine Daten.

Stats: total request time 30.3s
queries 4
number rows 0

Update: Ich habe jetzt mal alle Variablen bis auf eine gelöscht. Jetzt zeigt er mir was an. Laufzeit 28s bei 7 Tagen Zeitraum.
Ich versuche jetzt einmal eine weitere Variabe hinzuzufügen.

OK, also sobald eine zweite Variable dazu kommt, bekommt er keine Daten mehr.
Laufzeit bei einer Variablen 28sec, bei zwei Variablen schon bei 85sec.

Hat jemand eine Idee wie ich die Verarbeitungszeiten verbessern kann?
Minutenwerte der Variablen wären denke ich besser, aber wie kann ich diese am besten u d schnellsten Bearbeiten?

Hallo
Kannst du mal folgendes Testen wie lange bei dir eine Abfrage dauert.

$RecordLimit = IPS_GetOption('ArchiveRecordLimit');
echo "\nRecord Limit:" . $RecordLimit;

$RecordLimit = 10000;

$archiv = 25204;
$variable = 43687;

$start = time();
$werte = AC_GetLoggedValues($archiv, $variable, 0, time(), $RecordLimit);
$ende = time();
$diff = $ende - $start;
echo "\nLaufzeit : ". $diff . " Sekunden / Werte : " . count($werte);

$start = time();
$werte = AC_GetAggregatedValues($archiv, $variable, 5, 0,time(), $RecordLimit );   // 5-Minuetige Aggregation
$ende = time();
$diff = $ende - $start;
echo "\nLaufzeit : ". $diff . " Sekunden / Werte : " . count($werte);

Bei mir sieht das Ergebnis so aus :
Laufzeit : 0 Sekunden / Werte : 10000
Laufzeit : 0 Sekunden / Werte : 10001

Record Limit:10000
Laufzeit : 8 Sekunden / Werte : 10000
Warning: Read too many values when computing minutely aggregation in /mnt/data/symcon/scripts/37872.ips.php on line 18

Warning: count(): Parameter must be an array or an object that implements Countable in /mnt/data/symcon/scripts/37872.ips.php on line 21

Laufzeit : 8 Sekunden / Werte : 1

Ich war heute bei einem Kumpel der viel mit Grafana macht.
Er nutzt FHEM mit einer Datenbank. Geloggte Daten sind auch Sekundenwerte.
Bei ihm Funktioniert es ohne Probleme diese Werte in Grafana anzuzeigen und das fast Live. Glaube alle 5 oder 10s aktualisieren sich die Grafana Werte.

Warum funktioniert das in Verbindung mit Symcon nicht. :smirk:

Hallo
8 Sekunden fuer eine Datenbankabfrage ist schon ziemlich viel.
Bei mir sind 10000 Werte unter einer Sekunde.
Das hat nichts mit Grafana zu tun sondern mit der Datenbank.
Welche CPU Auslast hast du den im „Normalbetrieb“
Moeglich schon ziemlich viel CPU-Last, deshalb beim
Abrufen von Daten schon ausgelastet. Kannst du die mal checken?

Hier nochmal ein Script welche die Fehlermeldung nicht hat :

$archiv = 25204;
$variable = 43687;

for ($RecordLimit=10000;$RecordLimit>=1000;$RecordLimit=$RecordLimit-1000)
    {
    echo "\nRecord Limit:" . $RecordLimit;    
    $starttime = 0;
    
    $start = time();
    $werte = @AC_GetAggregatedValues($archiv, $variable, 5 , $starttime, time(), $RecordLimit);
    $ende = time();
    $diff = $ende - $start;
    if ( $werte === false )
            {
            $s = "Fehler";
            $startdata = 0;
            }
        else
            {
            $s = count($werte);
            $startdata = @$werte[$s-1]['TimeStamp'];
            }
        
    echo " Start : " .date('d.m.Y H:i:s',$startdata) . " Laufzeit : ". $diff . " Sekunden / Werte : " . $s ;

    
    }


Vor laengerer Zeit hatten wir schon das Thema mit der Fehlermeldung.
Liest mal hier und die Antwort von Niels

CPU Auslastung schwankt zwischen 12 und 25%.

Wenn ich dein Script ausführe, geht es kurz auf 51% Auslastung, dann aber wieder runter.

Antwort auf dein Script:

Record Limit:10000 Start : 01.01.1970 01:00:00 Laufzeit : 8 Sekunden / Werte : Fehler
Record Limit:9000 Start : 01.01.1970 01:00:00 Laufzeit : 4 Sekunden / Werte : Fehler
Record Limit:8000 Start : 01.01.1970 01:00:00 Laufzeit : 5 Sekunden / Werte : Fehler
Record Limit:7000 Start : 01.01.1970 01:00:00 Laufzeit : 4 Sekunden / Werte : Fehler
Record Limit:6000 Start : 01.01.1970 01:00:00 Laufzeit : 4 Sekunden / Werte : Fehler
Record Limit:5000 Start : 01.01.1970 01:00:00 Laufzeit : 4 Sekunden / Werte : Fehler
Record Limit:4000 Start : 01.01.1970 01:00:00 Laufzeit : 2 Sekunden / Werte : Fehler
Record Limit:3000 Start : 01.01.1970 01:00:00 Laufzeit : 2 Sekunden / Werte : Fehler
Record Limit:2000 Start : 01.01.1970 01:00:00 Laufzeit : 1 Sekunden / Werte : Fehler
Record Limit:1000 Start : 01.01.1970 01:00:00 Laufzeit : 2 Sekunden / Werte : Fehler

Vielleicht magst mal die anderen Stufen probieren

Aggregationsstufe	
AGGREGATIONSSTUFE	BESCHREIBUNG
0	Stündliche Aggregation
(00:00 - 59:59)
1	Tägliche Aggregation
(00:00:00 - 23:59:59)
2	Wöchentliche Aggregation
(Montag 00:00:00 - Sonntag 23:59:59)
3	Monatliche Aggregation
(Erster Monatstag 00:00:00 - Letzter Monatstag 23:59:59)
4	Jährliche Aggregation
(01.01. 00:00:00 - 31.12. 23:59:59)
5	5-Minütige Aggregation (Aus Rohdaten berechnet)
6	1-Minütige Aggregation (Aus Rohdaten berechnet)

In dieser Zeile :

$werte = @AC_GetAggregatedValues($archiv, $variable, 5 , $starttime, time(), $RecordLimit);

Bei den Aggregationsstufen 0-4 ist die Laufzeit 0 Sekunden.
5 und 6 laufen auf einen Fehler.
Das ist doch Mist.

5 und 6 werden aus den Rohwerten beim Aufruf berechnet.
Nach meiner Rechnung hast du pro Tag 43200 Werte.
Wenn du die als nicht Aggregated Werte ausliest kriegts du nur 10000 (MaxLimit)
Also folgendes Script liefert dir 10000 Werte aber nicht den ganzen Tag.
Mal die Startzeit auf 4 Stunden stellen, da solltest du alle Werte bekommen.
In welcher Zeit ?

$archiv = 25204;
$variable = 43687;

    
$starttime = time() - ( 24*60*60 );     // 24 Stunden zurueck
    
$start = time() ;
$werte = AC_GetLoggedValues($archiv, $variable,  $starttime, time(),0);
$ende = time();
$diff = $ende - $start;
    
$s = count($werte);
$startdata = @$werte[$s-1]['TimeStamp'];
             
echo "Start : " .date('d.m.Y H:i:s',$startdata) . " Laufzeit : ". $diff . " Sekunden / Werte : " . $s ;   

Start : 17.07.2022 11:25:43 Laufzeit : 1 Sekunden / Werte : 10000

1 „Gefällt mir“

10000 ist das normale Limit. Wenn man keine Agg-Stufe will gibt er genau 10000
zurueck , Startzeit ist dementsprechend.
Man kann dieses Limit in den Spezialschaltern erhoehen.
Lies dir mal diesen Thread durch

Ich noch mal, mit meinem letzten Versuch mit Grafana zu arbeiten.
Folgende Abfrage eine Variable die sekündlich geloggt wird.
Zeitraum in Grafana 5 Minuten.
Payload Aggregationsstufe 0

Im Log sagt er
18.07.2022, 16:40:45 | GetAdditionalData[468] | Input-$Aggregationsstufe[0]
18.07.2022, 16:40:45 | GetAdditionalData[505] | Output-Aggregationsstufe[-1]
18.07.2022, 16:40:45 | CheckZeitraumForAggregatedValues[565] | Keine Aggregation uebergeben
18.07.2022, 16:40:45 | CheckZeitraumForAggregatedValues[613] | Anzahl Tage:0.0034722222222222 Aggreagationsstufe:99 Aggregationstype:0

Hook Laufzeit 30s

Für mich sieht es danach aus als wenn er die Aggregationsstufe nicht beachtet. Vielleicht täusche ich mich auch.
Verstehen tue ich nicht, das eine Abfrage von 5 Minuten geloggter Werte aus der Datenbank 30s dauert.

Hallo
Das $ Zeichen sollte da nicht stehen sondern nur Input-Aggregationsstufe[0]