Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. History Adapter richtig konfiguriert?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    History Adapter richtig konfiguriert?

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      Ich wollte gestern mal den Verlauf der Benzinpreise in einem flot Chart dartellen

      Nachdem jetzt die ersten Daten geloggt wurden sah ich mir den Chart an.

      Irgendwie komisch. Daraufhin unter Objekteeinen Datenpunkt mit den logdaten angesehen. Die Chart sah genauso aus:
      144_img_20160719_174248_086.jpg
      Was ist da schief gelaufen?

      die Datenpunkte:
      144_img_20160719_174157_469.jpg

      Außer den echten Werten immer wieder eine 0. Dies aber mit false in der Bestätigung!

      Außerdem alle 10 Minuten ein Wert, obwohl ich nur geänderte Daten loggen wollte:
      144_img_20160719_174124_539.jpg
      Im Prinzip passiert das ja auch, nur dass bei Aktualisierung immer eine 0 gespeichert wird nur bei einer wirklichen Änderung der echte Wert.

      Was muss ich anders konfigurieren?

      Gruß

      Rainer

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo Rainer,

        die 0 ist korrekt so. Liegt am Adapter. Bei jedem Aufruf wird die Öffnungszeit geprüft. Wenn zu, dann 0.

        Damit verhindere ich, dass ein alter Preis von Vorabend angezeigt wird.

        Seltsam nur, dass da ein einzelner Wert in der Nacht empfangen wurde.

        Ack False muss ich prüfen.

        Pix

        Gesendet mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators last edited by

          Hallo pix,

          Danke für die schnelle Antwort.

          Diese Tankstelle hat 24 Stunden geöffnet. Es handelt sich hier nicht um die 0 für geschlossen.

          Die störenden Nullen sind bei jeder Abfrage, bei der der vorhandene Preis sich nicht ändert.

          Ich denke daher, dass es ein Problem des Historyadapters ist.

          Auch das fehlende ack würde in diese Richtung passen.

          Gruß

          Rainer

          1 Reply Last reply Reply Quote 0
          • Bluefox
            Bluefox last edited by

            @Homoran:

            Hallo pix,

            Danke für die schnelle Antwort.

            Diese Tankstelle hat 24 Stunden geöffnet. Es handelt sich hier nicht um die 0 für geschlossen.

            Die störenden Nullen sind bei jeder Abfrage, bei der der vorhandene Preis sich nicht ändert.

            Ich denke daher, dass es ein Problem des Historyadapters ist.

            Auch das fehlende ack würde in diese Richtung passen.

            Gruß

            Rainer `
            Kannst du die Ausgaben von influxdb und history vergleichen?

            1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators last edited by

              Die sind identisch (gewesen).

              Im Moment ist aber influxdb deaktiviert

              Gruß Rainer

              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                @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]

                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators last edited by

                  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

                  1 Reply Last reply Reply Quote 0
                  • nieIP
                    nieIP last edited by

                    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?

                    1 Reply Last reply Reply Quote 0
                    • P
                      pix last edited by

                      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: 261_bildschirmfoto_2016-07-21_um_12.12.56.png

                      Gruß

                      Pix

                      1 Reply Last reply Reply Quote 0
                      • P
                        pix last edited by

                        Hier noch schnell meine History Einstellungen (SQL) 261_bildschirmfoto_2016-07-21_um_12.18.32.jpg 261_bildschirmfoto_2016-07-21_um_12.18.38.jpg 261_bildschirmfoto_2016-07-21_um_12.18.46.jpg

                        Gruß

                        Pix

                        1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators last edited by

                          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

                          1 Reply Last reply Reply Quote 0
                          • Bluefox
                            Bluefox last edited by

                            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');
                            		}
                            	}
                            });
                            
                            
                            1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators last edited by

                              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:
                              144_img_20160721_172843_207.jpg
                              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

                              1 Reply Last reply Reply Quote 0
                              • nieIP
                                nieIP last edited by

                                @Bluefox:

                                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.

                                1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators last edited by

                                  Habe jetzt mal den Haken bei "Nur Änderungen aufzeichnen" herausgenommen.

                                  Jetzt läuft es richtig:
                                  144_img_20160723_182052_014.jpg
                                  Die lila Tankstelle hat tatsächlich zu.

                                  Gruß

                                  Rainer

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    Dice19 last edited by

                                    HI,

                                    ist das ganze angepasst worden inzwischen? Kann nix entsprechendes finden.

                                    Meine Diagramme sehen auch etwas durcheinander aus leider…

                                    Tobias
                                    2120_iobroker_fehler_flot_chart.jpg

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    810
                                    Online

                                    31.7k
                                    Users

                                    79.9k
                                    Topics

                                    1.3m
                                    Posts

                                    5
                                    16
                                    2195
                                    Loading More Posts
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                    The ioBroker Community 2014-2023
                                    logo