NEWS
(erledigt) TS im History ändern
-
Hallo,
wie kann ich in den History Daten den TS ändern?
Da es sich zur Zeit noch um wenige Daten handelt kann ich das "zu Fuß" machen.
Grund ist: Ich habe einige Daten in den Historie verloren. Diese kann ich aber wieder herstellen. Problem ist nur das dann die falsche Zeit (TS von aktuell) in den History Daten eingetragen wird. Dann passt natürlich nicht die zeitliche Reihenfolge. -
@ubecker
Wenn es "zu Fuß" geht - so wie bei mir in seltenen Fällen - mache ich es wie folgt:Den korrekten Zeitstempel bekommst Du z. B. hier:
Umrechnung TSDann bitte 3 x Null anfügen, da in der history mit ms gewerkelt wird.
Beispiel:
history: 1746167038269
real: 02.05.2025, 08:23:58 Uhr
unix: 1746167038Dann schnappe ich mir eine json-Datei des betreffenden DP, bei der noch alle Daten vorhanden sind, als Vorlage.
Dann die Daten innerhalb dieser Datei ändern und im richtigen Datumsordner ablegen.Falls Du mit den richtigen Rechten unterwegs bist, kannst Du natürlich auch gleich via ssh oder SFTP ändern.
Daran denken: Punkt statt Dezimalkomma...Ich hoffe, meine Erinnerung hat mich nicht im Stich belassen und die Vorgehensweise ist richtig. Musste es schon längere Zeit nicht machen.
Aber vlt. gehts ja auch anders, genügend Spezialisten gibts hier ja
PS:
Mir ist so, als wenn das auch direkt in der history geht (?), also im User Interface -
@ubecker sagte in TS im History ändern:
Diese kann ich aber wieder herstellen.
Wie würdest Du die Daten denn wiederherstellen? In welchem Format liegen diese vor?
Du kannst auch ein Script bauen, welches die Daten schreibt (mit sendTo):
https://github.com/ioBroker/ioBroker.history/blob/master/docs/de/README.md#storestateDa kann man den korrekten Zeitstempel direkt mitgeben.
-
@wcag22
danke, so hatte ich das auch gedacht, da es den Datumsordner nicht gibt muss ich den auch noch dort anlegen.
@haus-automatisierung
Danke, das scheint der bessere Weg zu sein. Ich ändere ungern Strukturen (Datumsordner) wenn ich nicht genau weiß was ich da mache.
Werde es dann mit sendTo probieren. -
@haus-automatisierung
@wcag22
habe jetzt doch den Weg über kopieren und editieren der daten direkt im History Verzeichnis genommen. Nachdem ich auf einem Testsystem da Versuche gemacht habe, war mir die Struktur klar.
Mit sendTo bin ich nicht klargekommen, hatte immer Error falsche ID. -
@ubecker Zeig gerne dein sendTo und wir helfen
-
@haus-automatisierung said in (erledigt) TS im History ändern:
@ubecker Zeig gerne dein sendTo und wir helfen
hab es jetzt auch mit sendTo geschafft.
const timestamp = 1746474026000 const value = 1234.46 sendTo('history.0', 'storeState', { 'id': 'alias.0.Energie.Gas.Monat', 'state': {'ts': timestamp, 'val': value, 'ack': true} } , result => console.log('add'));
so wie in der doku geht es nicht
sendTo('history.0', 'storeState', [ id: 'mbus.0.counter.xxx', state: {ts: 1589458809352, val: 123, ack: false, from: 'system.adapter.whatever.0', ...} ], result => console.log('added'));
-
@ubecker Das ist doch exakt der gleiche Code?! Außer die drei Punkte am Ende, welche offensichtlich syntaktisch nicht korrekt sind und nur „usw…“ heißen sollen
-
@haus-automatisierung ich sehe noch zusätzlich [ und ]
ob das was zu sagen hat, ?? -
@homoran sagte in (erledigt) TS im History ändern:
ob das was zu sagen hat
Ja, laut Doku kann man entweder einen einzelnen Wert übergeben, oder eine Liste (ein Array) von Werten. Auszug:
Die Nachricht kann eines der folgenden drei Formate haben:
- eine ID und ein Objektstatus
- eine ID und ein Array von Objektstatus
- Array von mehreren IDs mit Objektstatus
-
@haus-automatisierung und das erste scheint nicht zu klappen.
wobei bei @ubecker die ID mit im array steht, also nur Fall3 zu funktionieren scheint
-
@homoran sagte in (erledigt) TS im History ändern:
und das erste scheint nicht zu klappen.
Dann am besten einen Issue im History-Adapter öffnen, mit Beispiel und Erklärung. Sonst gehen solche Reports wieder im Forum unter. Ich kann das gerade nicht ausführlich testen.
-
@haus-automatisierung said in (erledigt) TS im History ändern:
@ubecker Das ist doch exakt der gleiche Code?! Außer die drei Punkte am Ende, welche offensichtlich syntaktisch nicht korrekt sind und nur „usw…“ heißen sollen
kann schon sein das der code gleich ist (hab ich zu wenig Ahnung von)
nur das funktioniertconst timestamp = 1746474026000 const value = 1234.46 sendTo('history.0', 'storeState', { 'id': 'alias.0.Energie.Gas.Monat', 'state': {'ts': timestamp, 'val': value, 'ack': true} } , result => console.log('add'));
und das nicht
/* sendTo('history.0', 'storeState', [ id: 'alias.0.Energie.Gas.Monat', state: {ts: 1746474026000, val: 123, ack: true} ], result => console.log('added')); */
kleine Korrektur, hab das in Kommentar gesetzt.
-
@ubecker Okay, nochmal genauer nachgeschaut. Das kann ja so auch nicht gehen. Das ist syntaktisch falsch (Array und dann Eigenschaften übergeben? Gibt es nicht. Das müsste ein Objekt sein, wie Du schreibst):
// Falsche Syntax: sendTo('history.0', 'storeState', [ id: 'alias.0.Energie.Gas.Monat', state: { ts: 1746474026000, val: 123, ack: true } ], result => console.log('added'));
Das müsste sicherlich so lauten:
sendTo('history.0', 'storeState', { id: 'alias.0.Energie.Gas.Monat', state: { ts: 1746474026000, val: 123, ack: true } }, result => console.log('added'));
Die Anführungszeichen um die Attribute ändern jedenfalls nix. Kannst Du weg lassen.