NEWS
[gelöst] gefühlte Temperatur
-
@wendy2702 0_userdata.0.Hausdaten.gefühlte_Temperatur habe ich erstellt.
-
@peter666666 Woher kommen die "****" im Script? Sind die wirklich vorhanden oder hast du die im Thread eingefügt?
Gib es irgendeine Meldung/Log beim Script aktivieren im Adapter? Ist das Script aktiv? Wie hast du den DP angelegt bzw. was erwartet er? STring, Number, Boolean.... ?
-
@wendy2702 **** sind im original nicht vorhanden.
DP sind von dem Netatmo Adapter und stehen als State zur Verfügung wenn ich das richtig verstehe.
-
@peter666666 sagte in gefühlte Temperatur:
**** sind im original nicht vorhanden.
Doch:
Doppelte Multiplikation wird nicht funktionieren.
Ob der Rest der Formel stimmt, kann ich nicht beurteilen. Multiplikationen muss man eigentlich nicht klammern - es gilt auch in JS: Punkt- vor Strichrechnung.Rücke den Code mal sauber ein - macht das Lesen deutlich einfacher.
-
@codierknecht sagte in gefühlte Temperatur:
@peter666666 sagte in gefühlte Temperatur:
**** sind im original nicht vorhanden.
Doch:
Doppelte Multiplikation wird nicht funktionieren.
Ob der Rest der Formel stimmt, kann ich nicht beurteilen. Multiplikationen muss man eigentlich nicht klammern - es gilt auch in JS: Punkt- vor Strichrechnung.Rücke den Code mal sauber ein - macht das Lesen deutlich einfacher.
achso du meinst die doppelten ** . Lt. Netz schreibt man das so wenn ich Potenz rechnen will oder ist das falsch? (V hoch 0,16). Formel ist so im Original: W = 13,12 + 0,6215 x T – 11,37 x V0,16 + 0,3965 x T x V0,16
-
@peter666666 was mir noch fehlt, als laie, ist ein trigger um die Berechnung zu starten.
Da müsste wahrscheinlich zumindest ein Schedule rein
-
@codierknecht sagte: Doppelte Multiplikation wird nicht funktionieren.
Das ist ein Exponent.
-
@peter666666 sagte: w.toFixed(1)
.toFixed(1) macht aus der Zahl einen String! Eine Zahl rundet man so auf eine Nachkommastelle:
Math.round(w * 10) / 10
-
@paul53
Sieht aber äußerst strange aus.
Aber Du bist der Fachmann - ich gebe zu: Ich lerne noch.Ich finde das hier durchaus besser lesbar:
13.12 + (0.6215 * temp) - Math.pow((11.37 * wind), 0.16) + Math.pow((0.3965 * temp * wind), 0.16)
-
Was ist noch falsch?
function Start() { Berechne(); }function gefühlteTemperatur(temp, wind){ var t =temp var v = wind var w = 13.12+(0.6215*t)-11.37*v**0.16+0.3965*t*v**0.16; return w; } function Berechne(){ var t = parseFloat( getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.02-00-00-90-bd-80.Temperature.Temperature").val); var v =parseFloat( getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.06-00-00-06-b3-3a.Wind.WindStrength").val); var w = gefühlteTemperatur(t,v); setState("0_userdata.0.Hausdaten.gefühlte_Temperatur",Math.round(w * 10) / 10); } schedule("*/5 * * * *",function(){ Start(); });
-
@peter666666
Vorschlag:function windchill(temp, wind) { return 13.12 + 0.6215 * temp + (0.3965 * temp - 11.37) * Math.pow(wind, 0.16); } on({id: [].concat(['netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.02-00-00-90-bd-80.Temperature.Temperature']) .concat(['netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.06-00-00-06-b3-3a.Wind.WindStrength']), change: "ne"}, async function (obj) { var temp = parseFloat(getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.02-00-00-90-bd-80.Temperature.Temperature").val); var wind = parseFloat(getState("netatmo.0.631f3d2edc4bfdce530a3d09.70-ee-50-90-bd-7e.06-00-00-06-b3-3a.Wind.WindStrength").val); setState("0_userdata.0.Hausdaten.gefühlte_Temperatur", Math.round(windchill(temp, wind) * 10) / 10, true); });
Vielleicht hat @paul53 ja einen besseren
P.S.: Ich würde grundsätzlich auf Umlaute verzichten. Sowohl in JS als auch bei den ID's der Datenpunkte.
Edit: Formel korrigiert (Quelle: https://de.wikipedia.org/wiki/Windchill)
-
@codierknecht sagte: Ich würde grundsätzlich auf Umlaute verzichten. Sowohl in JS als aich bei den ID's der Datenpunkte.
Ich auch.
In der Berechnung würde ich den Exponenten nur einmal verwenden:
return 13.12 + 0.6215 * t + (0.3965 * t - 11.37) * Math.pow(v, 0.16);
oder
return 13.12 + 0.6215 * t + (0.3965 * t - 11.37) * v ** 0.16;
@Codierknecht Du wirst feststellen, dass Deine Formel anders aussieht.
-
@codierknecht danke. Habe die Umlaute entfernt und habe das Skript kopiert & mal gestartet - Keine Fehlermeldung aber "0_userdata.0.Hausdaten.gefühlte_Temperatur" noch leer. Mal schauen ob in ein paar Minuten ein Wert unter "0_userdata.0.Hausdaten.gefuehlte_Temperatur" steht.
-
@peter666666 sagte in gefühlte Temperatur:
@codierknecht danke. Habe die Umlaute entfernt und habe das Skript mal gestartet - Keine Fehlermeldung aber "0_userdata.0.Hausdaten.gefühlte_Temperatur" noch leer. Mal schauen ob in ein paar Minuten ein Wert unter "0_userdata.0.Hausdaten.gefuehlte_Temperatur" steht.
Da sollte etwas stehen, sobald sich einer der beiden Eingangswerte ändert.
-
@codierknecht danke, werde berichten. Leider schmiert der Fernzugriff über die Cloud immer ab wegen zu vieler Anfragen oder so. Jetzt muss ich immer 5 Minuten warten bevor ich mich wieder verbinden kann. Den Fehler muss ich erst Googlen.
-
@paul53 sagte in gefühlte Temperatur:
Du wirst feststellen, dass Deine Formel anders aussieht.
Solange das Ergebnis stimmt, soll's mir persönlich Wurscht sein.
Ich bin noch dabei herauszufinden, wie und wo Du da gekürzt hast. Mathematik dieser Kategorie hatte ich zuletzt vor vielleicht 30 Jahren - das fluppt nicht mehr so gut -
@peter666666 Hi bei mir funktioniert deine Methode. Der einzige Unterschied den ich zwischen mir und dir entdecken kann sind die doppelten Hochkommas bei der Stateauswahl. Probier's mal mit einfachen Singleticks.
function Start() { Berechne(); } function GefuehlteTemperatur(temp, wind){ var t =temp var v = wind var w = 13.12+(0.6215*t)-11.37*v**0.16+0.3965*t*v**0.16; return w; } function Berechne(){ var t = parseFloat( getState('netatmo.0.xxx.70-ee-50-03-da-44.02-00-00-03-d7-bc.Temperature.Temperature'/*Temperature*/).val); var v =parseFloat( getState('netatmo.0.xxxc.70-ee-50-03-da-44.06-00-00-00-1e-82.Wind.WindStrength'/*Wind strength*/).val); var w = GefuehlteTemperatur(t,v); log('Gefühlte Temperatur: ' + Math.round(w * 10) / 10 + ' °C'); } Start();
-
@peter666666 Versteh ich nicht, der Adapter kriegt doch die Daten geliefert, ich glaub so alle 10 Minuten. Das sollte dann so funktionieren wie @Codierknecht es vorgeschlagen hat.
-
Deine Formel ist richtig. Sie wird in verschiedenen Beiträgen im www falsch dargestellt.EDIT: Formel ist falsch.
-