NEWS
[Gelöst] Das Wetter - Temperatur in 3 Stunden abfragen
-
Hallo Leute,
ich steuere meine ganze Heizung für Iobroker mit VIS,
für die Fussbodenheizung habe ich eine witterungsgeführte Heizkennlinie hinterlegt -
die Festwertregelung habe ich durch ein HeizkörperThermostat (umgebauter HM-CC-RT-DN verwende davon nur Motor Gehäuse und Batteriefach)+4-fach Funk-Schaltaktor (HM-LC-SW4-WM gibt AUF / ZU Signal für das HeizkörperThermostat über Blockly-Programm)so aber jetzt zu meine Frage / Hilfeanfrage.
ich würde gerne aus dem installierten DASWETTER Adapter die vorgegebene Temp in 3 Stunden wissen,
(da die Fussbodenheizung ein gewisse Trägheit hat. )
die Daten stehen da in der Objektaufzählung ja ganz toll mit Day_1/ Hour_x drinnenNur wie bekomme ich die immer im 3 Stunden Rhytmus auf einen Variable zb "Temp_in-3H"
dafür reichen meine Logikkenntnisse einfach nicht aus.
hätte da bitte jemand eine Idee oder ein CodeSchnippsel für mich !Vielen Dank schon mal vorab für jede zielführende Antwort im voraus
LG Chris -
@checkitout sagte: CodeSchnippsel für mich
const idTemp = '0_userdata.0.Wetter.Temperatur_in_3h'; schedule('1 * * * *', function() { let hours3 = Math.ceil(new Date().getHours() / 3) + 1; let id = 'daswetter.0.NextHours2.Location_1.Day_1.Hour_' + hours3 + '.temp'; if(hours3 > 8) id = 'daswetter.0.NextHours2.Location_1.Day_2.Hour_1.temp'; setState(idTemp, getState(id).val, true); });
EDIT: ID für Zeiten ab 22:00 Uhr angepasst.
-
@paul53 sagte in Das Wetter - Temperatur in 3 Stunden abfragen:
let hours3 = Math.ceil(new Date().getHours() / 3) + 1;
if(hours3 > 8 ) hours3 = 8;Ev. verstehe ich die Frage falsch, aber soll bspw. um 12:00 Uhr nicht die erwartete Temperatur für 15:00 Uhr ausgelesen werden? Dann wäre doch eher richtig: ( ? )
const idTemp = '0_userdata.0.Wetter.Temperatur_in_3h'; schedule('1 * * * *', function() { let hours3 = new Date().getHours() + 3; if(hours3 > 24) { hours3-=24; let id = 'daswetter.0.NextHours2.Location_1.Day_2.Hour_' + hours3 + '.temp'; } else { let id = 'daswetter.0.NextHours2.Location_1.Day_1.Hour_' + hours3 + '.temp'; } setState(idTemp, getState(id).val, true); });
...und jetzt gibt es Haue von @paul53
-
@sborg sagte: Dann wäre doch eher richtig: ( ? )
"Das Wetter" liefert die Voraussagen nur im Abstand von 3 Stunden: "Hour_1" für 02:00 Uhr, ... "Hour_8" für 23:00 Uhr. Um 22:01 und 23:01 Uhr sollte man natürlich Werte vom nächsten Tag nehmen. Habe es oben angepasst.
-
@paul53 Ok, dann würde mir der Quellcode einleuchten und ich verstehe ihn nun auch, aber....
...ich habe eben noch mal nachgeschaut, bei mir enthält Hour_1...25 verschiedene Werte, also wahrscheinliche Vorhersagen:
Hour_1 = 4 °C
Hour_2 = 3 °C
Hour_3 = 1 °C
usw.
Kann ich für heute Nacht mit einer Drift von ~ +3 °C sogar bestätigen.
Durch C&P habe ich eine "2" zu viel übernommen:daswetter.0.NextHours.Location_1.Day_2.Hour_ daswetter.0.NextHours.Location_1.Day_1.Hour_
-
@sborg sagte: bei mir enthält Hour_1...25 verschiedene Werte
Dann liegt es wohl an meiner Konfiguration, dass ich nur alle 3 Stunden Werte habe?
-
@paul53 sagte in Das Wetter - Temperatur in 3 Stunden abfragen:
Dann liegt es wohl an meiner Konfiguration, dass ich nur alle 3 Stunden Werte habe?
Jupp, du nutzt wahrscheinlich nur "Pfad 2" = alle 3 Stunden.
Bei "Pfad 3" steht stündliche VorhersageBisserl OT:
Was ist eigentlich besser, performanter, "schöner" :
Erst die id "falsch" initialisieren und dann ggf. mittels if... korrekt "gerade bügeln" (deine Version)
oder mittels if...else - Konstrukt (meine Version) ? -
@sborg sagte: du nutzt wahrscheinlich nur "Pfad 2" = alle 3 Stunden.
Ich hatte "Pfad 4" genutzt, der auch nur alle 3 Stunden liefert. Habe jetzt auf "Pfad 3" umgestellt. Dann sieht das Skript etwas anders aus.
const idTemp = '0_userdata.0.Wetter.Temperatur_in_3h'; schedule('* * * * *', function() { let hours3 = new Date().getHours() + 3; let id = 'daswetter.0.NextHours.Location_1.Day_1.Hour_' + hours3 + '.temp_value'; if(hours3 > 24) { hours3 -= 24; id = 'daswetter.0.NextHours.Location_1.Day_2.Hour_' + hours3 + '.temp_value'; } setState(idTemp, getState(id).val, true); });
@sborg sagte in Das Wetter - Temperatur in 3 Stunden abfragen:
Was ist eigentlich besser, performanter, "schöner" :
Erst die id "falsch" initialisieren und dann ggf. mittels if... korrekt "gerade bügeln" (deine Version)
oder mittels if...else - Konstrukt (meine Version) ?Das macht keinen Unterschied.
-
@paul53 sagte in Das Wetter - Temperatur in 3 Stunden abfragen:
const idTemp = '0_userdata.0.Wetter.Temperatur_in_3h'; schedule('* * * * *', function() { let hours3 = new Date().getHours() + 3; let id = 'daswetter.0.NextHours.Location_1.Day_1.Hour_' + hours3 + '.temp_value'; if(hours3 > 24) { hours3 -= 24; id = 'daswetter.0.NextHours.Location_1.Day_2.Hour_' + hours3 + '.temp_value'; } setState(idTemp, getState(id).val, true); });
@paul53 @SBorg
Hallo Paul53, Hallo SBorg,
Vielen Dank für die tolle Unterstützung , da ich mit Skipts noch gar nicht gearbeitet habe, war es dann doch gar nicht so einfach wie gedacht, weil mir die "basics" gefehlt haben, aber ich hab es jetzt geschafft die Variable anzulegen und auch auch eine Wert bekommen der schlüssig ist.Vielen Dank Chris