Script - console.log

Hallo zusammen

Kann mir jemand erklären, wie ich mehrere Werte in einem Skript einlese?
Möchte eine Durchschnittstemperatur berechnen.

Hier zwei Beispiele

Der Code funktioniert, aber er liest mir die Daten wohl falsch ein…?

Danke für eure Hilfe.

let temperatures = args[0];
console.log(temperatures);

Danke für die rasche Hilfe.
Ist aber immer noch das selbe Fehlerbild, wenn ich es so anpasse…

Du solltest uns schon das ganze Skript zeigen.
Was ist das für eine Funktion?
Und woher sollte der Parameter temps kommen, der zuvor nicht deklariert wurde?

/ Beispiel-Temperaturwerte
// let temperatures = [10, 20, 30, 40, 50];
// let temperatures = console.log(args[0]);
// let temperatures = console.log.args.temperatures || [10, 20, 30, 10, 500];

let temperatures = args[0];
console.log(temperatures);

// Funktion zum Berechnen des Durchschnitts ohne min und max Werte
function calculateAverageWithoutExtremes(temps) {
if (!Array.isArray(temps)) {
throw new Error(“Die Eingabewerte müssen ein Array sein”);
}
if (temps.length <= 2) {
throw new Error(“Nicht genügend Werte, um die Ausreißer zu entfernen”);
}

// Kopie des Arrays erstellen und sortieren
let sortedTemps = temps.slice().sort((a, b) => a - b);

// Entferne den ersten (min) und letzten (max) Wert
sortedTemps.shift();
sortedTemps.pop();

// Berechne den Durchschnitt der verbleibenden Werte
let sum = sortedTemps.reduce((acc, val) => acc + val, 0);
let average = sum / sortedTemps.length;

// Auf 2 Dezimalstellen runden und als Zahl zurückgeben
return Number(average.toFixed(2));
}

try {
// Prüfe, ob die Eingangswerte vorhanden und ausreichend sind
if (!Array.isArray(temperatures) || temperatures.length < 5) {
throw new Error(“Nicht genügend Werte, um die Ausreißer zu entfernen”);
}

// Durchschnitt berechnen
let averageTemperature = calculateAverageWithoutExtremes(temperatures);
return averageTemperature;
} catch (error) {
return { “message”: error.message };
}

Oben der Code. Er Code funktioniert, wenn ich
let temperatures = [10, 20, 30, 40, 50];
eingebe. Darum habe ich nicht den ganzen Code angehängt.

Der Flowkarten-Parameter ist ein Array mit Strings. Den musst du erst in ein Array parsen:

let temperatures = JSON.parse(args[0]);
Und dann temperatures als Funktionsparameter übergeben.

Btw. Bitte Code immer formatieren, damit es lesbar bleibt:
grafik

Dass es nicht sauber formatiert ist habe ich gesehen, wusste aber nicht wie ändern.
Habe das nächste Mal sicherlich mehr Zeit dafür.

Leider kommt aber ein Fehler:
:x: Script Error
:warning: SyntaxError: Unexpected token , in JSON at position 2

Du musst den Parameter als Array-String übergeben:
[ 10, 20 ]

Danke, so funktioniert es.
Wenn ich jetzt aber die Temperaturfühler einlese, geht es wieder nicht.

wenn ich jedoch eine Zahl davor eingebe, geht es. Die Temperaturfühler liest es mir ja sauber aus…?

P.S. Gibt es irgendwo tolle Anleitungen zu Homeyscript?

Jemand eine Ahnung, warum ich da eine Zahl eingeben muss und es mir die Temperaturfühler alleine nicht einlesen kann/will?

Danke

Nicht wirklich. Du kannst mal ein Leerzeichen zw. Die Klammer un das erste Token machen. Vllt. stört das.

Du bist mein Held, danke.
Leerzeichen zwischen der Klammer und dem ersten Token und es geht…

1 Like