NEWS
History Adapter richtig konfiguriert?
-
@pix:Bei jedem Aufruf wird die Öffnungszeit geprüft. Wenn zu, dann 0. `
Ich zitiere mich mal selbst und erkläre es gleich zu Unfug. Stimmt nicht, falsch erinnert:Der Code, der das macht, ist dieser:
! ```
`// alle Stationen durchgehen
for (var i = 0; i < 10; i++) {
var stationid = adapter.config.stationsarray[i][0]; // sowas "a7cdd9cf-b467-4aac-8eab-d662f082511e"
var stationname = adapter.config.stationsarray[i][1]; // sowas "Esso Hamburg Flughafenstraße"// hier alle States für Status und Preise leeren (0.00 oder 0), falls nicht alle 10 Felder ausgefüllt sind (ohne ack true) adapter.setState('stations.' + i + '.status', ''); adapter.setState('stations.' + i + '.e5.feed', 0); adapter.setState('stations.' + i + '.e5.short', 0); adapter.setState('stations.' + i + '.e5.3rd', 0); adapter.setState('stations.' + i + '.e5.combined', ""); adapter.setState('stations.' + i + '.e10.feed', 0); adapter.setState('stations.' + i + '.e10.short', 0); adapter.setState('stations.' + i + '.e10.3rd', 0); adapter.setState('stations.' + i + '.e10.combined', ""); adapter.setState('stations.' + i + '.diesel.feed', 0); adapter.setState('stations.' + i + '.diesel.short', 0); adapter.setState('stations.' + i + '.diesel.3rd', 0); adapter.setState('stations.' + i + '.diesel.combined', ""); if (stationid.length == 36) { // wenn StationID bekannt, also Settings-Feld gefüllt adapter.log.debug('Station ' + stationid + ' ' + stationname + ' wird bearbeitet ...'); var status = result.prices[stationid].status; // Namen und Status in jedem Fall schreiben adapter.setState('stations.' + i + '.name', {ack: true, val: stationname}); adapter.setState('stations.' + i + '.status', {ack: true, val: status}); // status checken if (status.indexOf("not found") != -1) { adapter.log.warn('Station ' + stationid + ' nicht gefunden'); adapter.setState('stations.' + i + '.e5.combined', 'nicht gefunden'); adapter.setState('stations.' + i + '.e10.combined', 'nicht gefunden'); adapter.setState('stations.' + i + '.diesel.combined', 'nicht gefunden'); } else if (status.indexOf("closed") != -1) { adapter.log.debug('Station ' + stationid + ' ' + stationname + ' geschlossen'); adapter.setState('stations.' + i + '.e5.combined', 'geschlossen'); adapter.setState('stations.' + i + '.e10.combined', 'geschlossen'); adapter.setState('stations.' + i + '.diesel.combined', 'geschlossen'); } else if (status.indexOf("open") != -1) { // wenn false im Preis für e5 steht, ... 0 bleibt stehen if (!result.prices[stationid].e5) { adapter.log.debug('In Station ' + stationid + ' ' + stationname + ' kein E5 vefügbar'); } else { //adapter.log.debug('In Station ' + stationid + ' ' + stationname + ' kostet E5: ' + result.prices[stationid].e5 + '€'); adapter.setState('stations.' + i + '.e5.feed', {ack: true, val: parseFloat(result.prices[stationid].e5)}); adapter.setState('stations.' + i + '.e5.short', {ack: true, val: cutPrice(result.prices[stationid].e5).priceshort});// zweistellig adapter.setState('stations.' + i + '.e5.3rd', {ack: true, val: cutPrice(result.prices[stationid].e5).price3rd});// dritte stelle adapter.setState('stations.' + i + '.e5.combined', '' + cutPrice(result.prices[stationid].e5).priceshort + '<sup style="font-size: 50%">' + cutPrice(result.prices[stationid].e5).price3rd + '</sup> €'); // Niedrigsten Preis E5 ermitteln adapter.log.debug('E5-Preis-Feld ' + i + ' gefüllt'); if ( parseFloat(result.prices[stationid].e5) < parseFloat(result.prices[cheapest_e5_stationid].e5) ) { cheapest_e5 = i; cheapest_e5_stationid = adapter.config.stationsarray[i][0]; adapter.log.debug('Billigster E5 bisher: ' + cheapest_e5 + '. Tankstelle' ); } else adapter.log.debug('E5: Station ' + i + ' teurer als bisher billigste Station ' + cheapest_e5); } if (!result.prices[stationid].e10) { adapter.log.debug('In Station ' + stationid + ' ' + stationname + ' kein E10 vefügbar'); } else { //adapter.log.debug('In Station ' + stationid + ' ' + stationname + ' kostet E10: ' + result.prices[stationid].e10 + '€'); adapter.setState('stations.' + i + '.e10.feed', {ack: true, val: parseFloat(result.prices[stationid].e10)}); adapter.setState('stations.' + i + '.e10.short', {ack: true, val: cutPrice(result.prices[stationid].e10).priceshort}); adapter.setState('stations.' + i + '.e10.3rd', {ack: true, val: cutPrice(result.prices[stationid].e10).price3rd}); adapter.setState('stations.' + i + '.e10.combined', '' + cutPrice(result.prices[stationid].e10).priceshort + '<sup style="font-size: 50%">' + cutPrice(result.prices[stationid].e10).price3rd + '</sup> €'); /// Niedrigsten Preis E10 ermitteln adapter.log.debug('E10-Preis-Feld ' + i + ' gefüllt'); if ( parseFloat(result.prices[stationid].e10) < parseFloat(result.prices[cheapest_e10_stationid].e10) ) { cheapest_e10 = i; cheapest_e10_stationid = adapter.config.stationsarray[i][0]; adapter.log.debug('Billigster E10 bisher: ' + cheapest_e10 + '. Tankstelle' ); } else adapter.log.debug('E10: Station ' + i + ' teurer als bisher billigste Station ' + cheapest_e10); } if (!result.prices[stationid].diesel) { adapter.log.debug('In Station ' + stationid + ' ' + stationname + ' kein Diesel vefügbar'); } else { //adapter.log.debug('In Station ' + stationid + ' ' + stationname + ' kostet Diesel: ' + result.prices[stationid].diesel + '€'); adapter.setState('stations.' + i + '.diesel.feed', {ack: true, val: parseFloat(result.prices[stationid].diesel)}); adapter.setState('stations.' + i + '.diesel.short', {ack: true, val: cutPrice(result.prices[stationid].diesel).priceshort}); adapter.setState('stations.' + i + '.diesel.3rd', {ack: true, val: cutPrice(result.prices[stationid].diesel).price3rd}); adapter.setState('stations.' + i + '.diesel.combined', '' + cutPrice(result.prices[stationid].diesel).priceshort + '<sup style="font-size: 50%">' + cutPrice(result.prices[stationid].diesel).price3rd + '</sup> €'); // Niedrigsten Preis Diesel ermitteln adapter.log.debug('Diesel-Preis-Feld ' + i + ' gefüllt'); if ( parseFloat(result.prices[stationid].diesel) < parseFloat(result.prices[cheapest_diesel_stationid].diesel) ) { cheapest_diesel = i; cheapest_diesel_stationid = adapter.config.stationsarray[i][0]; adapter.log.debug('Billigster Diesel bisher: ' + cheapest_diesel + '. Tankstelle' ); } else adapter.log.debug('Diesel: Station ' + i + ' teurer als bisher billigste Station ' + cheapest_diesel); } } // Ende Status "open" } // Ende Station } // Ende Schleife`
Der Grund war der gleiche: Sollte während der Adapter läuft ein Problem mit der Verbindung zum tankerkönig-Server auftreten oder irgendwas nicht stimmen, dann soll der Preis auf 0 gesetzt werden.
! Nicht, dass jemand wegen eines veralteten Preises extra zur Tankstelle fährt. Lieber empfiehlt der Adapter nix, als dass er was falsches empfiehlt. Des das RESET jedes feeds vorm Neueinlesen.
! Ich habe das auch so gemacht, da ich annahm, dass flot (etc.) Nullen (0 oder null) auf Wunsch aus einer Linie von Daten herausstreichen können.
! Gruß
! Pix[/i][/i][/i][/i][/i] -
Auch da muss ich dich enttäuschen.
Die Anzeige zeigt(e) immer Eiben gültigen Preis an.
Was flot angeht kann man dort nur Werte mit null, nicht jedoch mit 0 beeinflussen.
Das wat mein allerersten Versuch mit allen möglichen Varianten.
Gruß
Rainer
-
Hallo
dann könnte der Adapter statt der numerischen "0" doch besser "null" oder "" (leeres Feld) in die Datenbank schreiben ?
Also beim "Reset" vor der neuen Abrage nicht "0" eintragen, sondern die Daten leeren?
-
Der Adapter schreibt bei jedem Durchlauf zuerst 0 und dann - falls vorhanden - den Preis in den Datenpunkt feed. Das kann sich im ms-Bereich abspielen. Wenn kein Preis da, dann bleibt es bei 0. Natürlich kann ich auch "null" schreiben lassen. Wenn die Grafikaufbereitung dadurch leichter wird, ist das ein schnell gmeachtes Update.
Mit etwas Arbeit und Zeit kann man das sogar einstellbar machen:
"Wenn kein neuer Preis vorhanden, schreibe Wert: "
-
Auswahl:
-
null
-
0
-
" " (leer)
-
letzten Wert belassen
Das wär vielleicht ein guter Grund für ein Update.
Gibt es überhaupt viele Nutzer, die damit ein Problem haben?
Ich habe nämlich keins, meine Kurven sehen gut aus:
Gruß
Pix
-
-
Hier noch schnell meine History Einstellungen (SQL)
Gruß
Pix
-
OK, da kommen wir dem Problem wohl näher.
1. obwohl du auch nur Änderungen speichern willst, hast du alle 5 Minuten einen Wert, auch wenn er identisch war.
2. Wenn erst 0 und dann ein aktueller Wert gesetzt werden soll, könnte es an einer zu langsamen Antwort vom tankerkönig liegen?
Hat das vielleicht mit dem ACK false zu tun?
Gruß
Rainer
-
Es liegt daran, dass die Werte werden erst auf 0 gesetzt before die neue Werte ausgewertet werden.
https://github.com/Pix---/ioBroker.tank ... ain.js#L91
https://github.com/Pix---/ioBroker.tank ... in.js#L122
Das verursacht eine Änderung immer wenn die ein Lesevorgang stattfindet. Bei jedem Lesevorgang werden 2 States generiert {val: 0, ack: false} und gleich danach {val: WERT, ack: true}
Dass muss anders behandelt werden. Z.B. beim Start erst alles lesen:
adapter.getStates('*', function (err, states) { // und dann // update values states['stations.cheapest.e5.feed'].val = newValue; states['stations.cheapest.e5.feed'].changed = true; // Danach irgendwie so for (var id in states) { if (states[id].changed) { adapter.setState(id, states[id].val, true); } else { adapter.setState(id, 0/''/'keine Daten'); } } });
-
Ich habe aber auch noch andere Datenpunkte, die identische Werte speichern, obwohl nur geänderte gespeichert werden sollen.
Hier z.b. ein tiltsensor in der Markise:
Hier könnte ich mir vorstellen, dass der Sensor zwar vom Wind geschüttelt wird so dass der Kontakt kurz unterbrochen aber der andere noch nicht geschlossen wird.Ich weiß leider nicht wie der tiltsensor funktioniert.
Gruß
Rainer
-
Es liegt daran, dass die Werte werden erst auf 0 gesetzt before die neue Werte ausgewertet werden. `
Hallo
dann darf der Wert nicht vor der Abfrage auf 0 gesetzt werden, sondern danach, wenn die Abfrage erfolglos war.
Besser noch auf NULL oder "" (leer)
Ein Flag, ob die Abfrage erfolgreich war, gibt es ja offenbar.
-
Habe jetzt mal den Haken bei "Nur Änderungen aufzeichnen" herausgenommen.
Jetzt läuft es richtig:
Die lila Tankstelle hat tatsächlich zu.Gruß
Rainer
-
HI,
ist das ganze angepasst worden inzwischen? Kann nix entsprechendes finden.
Meine Diagramme sehen auch etwas durcheinander aus leider…