Nachtrag: Skript ist fehlerhaft - angepasste Version siehe #5
--
Ungefähr so:
Code
// Farbwechselskript für Shelly Plus RGBW PM
// RGB-Werte von 0-100, Brightness von 0-100
let colorIndex = 0;
let brightness = 80; // Helligkeit (0-100)
let transitionTime = 2000; // Übergangszeit in ms
let pauseTime = 3000; // Pause zwischen Farbwechseln in ms
// Vordefinierte Farben (RGB 0-100)
let colors = [
{r: 100, g: 0, b: 0}, // Rot
{r: 100, g: 50, b: 0}, // Orange
{r: 100, g: 100, b: 0}, // Gelb
{r: 0, g: 100, b: 0}, // Grün
{r: 0, g: 100, b: 100}, // Cyan
{r: 0, g: 0, b: 100}, // Blau
{r: 50, g: 0, b: 100}, // Lila
{r: 100, g: 0, b: 100}, // Magenta
{r: 100, g: 100, b: 100} // Weiß
];
// Funktion zum Setzen der Farbe
function setColor(color) {
Shelly.call("RGBW.Set", {
id: 0,
red: color.r,
green: color.g,
blue: color.b,
brightness: brightness,
transition: transitionTime
});
}
// Funktion für sanften Farbwechsel
function changeColor() {
let currentColor = colors[colorIndex];
setColor(currentColor);
console.log("Wechsle zu Farbe:", colorIndex + 1, "RGB:", currentColor.r, currentColor.g, currentColor.b);
// Nächste Farbe vorbereiten
colorIndex++;
if (colorIndex >= colors.length) {
colorIndex = 0; // Zurück zum Anfang
}
// Timer für nächsten Farbwechsel setzen
Timer.set(pauseTime, false, changeColor);
}
// Script starten
console.log("Farbwechselskript gestartet");
console.log("Helligkeit:", brightness + "%");
console.log("Übergangszeit:", transitionTime + "ms");
console.log("Pause zwischen Farben:", pauseTime + "ms");
// RGBW einschalten und ersten Farbwechsel starten
Shelly.call("RGBW.Set", {
id: 0,
on: true
});
// Ersten Farbwechsel nach kurzer Verzögerung starten
Timer.set(1000, false, changeColor);
// Zusätzliche Funktionen für erweiterte Steuerung
// Helligkeit ändern (0-100)
function setBrightness(newBrightness) {
if (newBrightness >= 0 && newBrightness <= 100) {
brightness = newBrightness;
console.log("Helligkeit geändert auf:", brightness + "%");
}
}
// Geschwindigkeit ändern
function setSpeed(newTransitionTime, newPauseTime) {
transitionTime = newTransitionTime || transitionTime;
pauseTime = newPauseTime || pauseTime;
console.log("Geschwindigkeit geändert - Übergang:", transitionTime + "ms, Pause:", pauseTime + "ms");
}
// Script stoppen
function stopColorCycle() {
Timer.clear();
console.log("Farbwechsel gestoppt");
}
// Einzelne Farbe setzen (RGB 0-100)
function setSingleColor(r, g, b) {
if (r >= 0 && r <= 100 && g >= 0 && g <= 100 && b >= 0 && b <= 100) {
Timer.clear(); // Farbwechsel stoppen
setColor({r: r, g: g, b: b});
console.log("Einzelfarbe gesetzt - RGB:", r, g, b);
} else {
console.log("Error: RGB-Werte müssen zwischen 0 und 100 liegen");
}
}
// Regenbogen-Modus (sanfte Farbübergänge)
function rainbowMode() {
Timer.clear();
let hue = 0;
function nextRainbowColor() {
// HSV zu RGB Konvertierung für sanfte Regenbogenfarben
let rgb = hsvToRgb(hue, 100, 100);
setColor({r: rgb.r, g: rgb.g, b: rgb.b});
hue += 10;
if (hue >= 360) hue = 0;
Timer.set(500, false, nextRainbowColor);
}
console.log("Regenbogen-Modus gestartet");
nextRainbowColor();
}
// HSV zu RGB Konvertierung
function hsvToRgb(h, s, v) {
s = s / 100;
v = v / 100;
let c = v * s;
let x = c * (1 - Math.abs((h / 60) % 2 - 1));
let m = v - c;
let r, g, b;
if (h < 60) {
r = c; g = x; b = 0;
} else if (h < 120) {
r = x; g = c; b = 0;
} else if (h < 180) {
r = 0; g = c; b = x;
} else if (h < 240) {
r = 0; g = x; b = c;
} else if (h < 300) {
r = x; g = 0; b = c;
} else {
r = c; g = 0; b = x;
}
return {
r: Math.round((r + m) * 100),
g: Math.round((g + m) * 100),
b: Math.round((b + m) * 100)
};
}
Alles anzeigen
Steuerungsfunktionen:
- setBrightness(80) - Helligkeit ändern (0-100)
- setSpeed(2000, 3000) - Übergangszeit und Pausenzeit ändern
- setSingleColor(100, 0, 0) - Einzelne Farbe setzen (RGB)
- rainbowMode() - Sanfter Regenbogen-Modus
- stopColorCycle() - Farbwechsel stoppen