AC_AddLoggedValues TimeStamp Fehler

Guten Tag,
ich versuche mit einer SQL Query Daten in eine Variable zu schieben und diese zu Archivieren, um später darauf Grafana Graphen zu erstellen. Diesbezüglich nutze ich „AC_AddLoggedValues“. Jedoch bekomme ich dauerhaft den Fehler, dass mein Parameter „TimeStamp“ nicht passen würde.

Auf den ersten Blick würde mich irritieren, dass TimeStamp bei dir ein String ist. Normalerweise sollte das Integer sein.
Jetzt vermute ich mal: Wenn du deine Variable $queryPaeckchen vorher als Array mit den Elementen richtig definierst (also TimeStamp als Integer), vielleicht gehts dann.

2 „Gefällt mir“

Hat leider auch nicht funktioniert. Ich habe jetzt mal „per Hand“ die Werte für einen Eintrag in Integer umgewandelt (for each). Jetzt ist mein TimeStamp und Value ein Integer Wert. Die Globale Variable in der die Werte eingetragen werden sollen ist ebenfalls ein Integer. Trotzdem bekomme ich folgenden Fehler:

Welcher Typ ist die Variable „11273 LeerePaeckchen“? Auch das muss mit dem Typ zusammenpassen.
https://www.symcon.de/service/dokumentation/modulreferenz/archive-control/ac-addloggedvalues/

Ps: Steht ja eh in der Fehlermeldung :wink: „type of Value does not match“

Ist eine Integer Variable:

Ich habe jetzt die Werte einzeln eingeladen:
AC_AddLoggedValues(20601, 11273, [
[
‚TimeStamp‘ => $paeckchen[„TimeStamp“],
‚Value‘ => $paeckchen[„Value“]
]
]);

Damit funktioniert das wenigstens. Keine Ahnung warum.

Ist das var_dump jetzt nur ein Datensatz oder der ganze Inhalt der Variable von der Funktion AC_AddLoggedValues?
Im deinem ersten Beitrag ist der Aufbau korrekt, mit einem Array von Arrays.
Hier beim vorletzten Beitrag von dir ist aber nur ein Timestamp und ein value enthalten.
Michael

Da es nicht geklappt hat, das Array direkt über AC_AddLoggedValues weg zu schreiben, iteriere ich mich jetzt durchs Array und wandle für jeden Eintrag im Array die String Werte in Integer Werte um. Darauf folgend lade ich sie einzeln in die Globale Variable. Das Problem beim direkten schreiben ist, dass mein Array immer ein String Type ist aber Interger erwartet wird. Cast im SQL Befehl hat nichts gebracht und das Array selber mit array_map auf Interger umwandeln klappt auch nicht.
Ein weiterer merkwürdiger Fehler ist, wenn ich:
AC_AddLoggedValues(20601, 11273, $paeckchen);
schreibe, kommt wieder der Fehler, dass Value vom falschen Typ ist. Wenn ich aber $paeckchen[„Value“] verwende klappt es…

Bitte den Code hier als Text (mit dem Code Symbol) einfügen, dann kann ich dir zeigen wo der Fehler liegt.
Michael

$db->SetFetchMode(ADODB_FETCH_ASSOC); 

$queryPaeckchen = $db->getArray(" 
                                select top 1000 DATEDIFF(s, '1970-01-01 00:00:00', XXXXXXX_Zeit) as TimeStamp, XXXXXXX_Leer as Value
                                from Paeckchen
                             ");

foreach($queryPaeckchen as $paeckchen) {
	if($paeckchen && $paeckchen['TimeStamp'])
	$paeckchen['TimeStamp'] = intval($paeckchen['TimeStamp']);
    if($paeckchen && $paeckchen['Value'])
	$paeckchen['Value'] = intval($paeckchen['Value']);

    AC_AddLoggedValues(20601, 11273, [
    [
        'TimeStamp' => $paeckchen["TimeStamp"],
        'Value' => $paeckchen["Value"]
    ]
    ]);
}

var_dump( (array) $paeckchen );

Sorry, hat etwas gedauert :smiley:

$db->SetFetchMode(ADODB_FETCH_ASSOC); 

$queryPaeckchen = $db->getArray(" 
                                select top 1000 DATEDIFF(s, '1970-01-01 00:00:00', XXXXXXX_Zeit) as TimeStamp, XXXXXXX_Leer as Value
                                from Paeckchen
                             ");

foreach($queryPaeckchen as &$paeckchen) {
	$paeckchen['TimeStamp'] = intval($paeckchen['TimeStamp']);
	$paeckchen['Value'] = intval($paeckchen['Value']);
}
AC_AddLoggedValues(20601, 11273, $queryPaeckchen);
var_dump($queryPaeckchen);

Michael

Vielen Dank Michael.