NEWS
Tuya Thermostat soll GPIO Klemme steuern
-
Hallo liebe Forengemeinde,
ich habe irgendwie bei mir so ein bisschen den Faden verloren.
Vielleicht könnt ihr mir weiterhelfen.
Ich möchte gerne wenn mein Thermostat auf Open geht, das der GPIO auf FALSE geht und wenn es auf Close geht das der GPIO auf TRUE schaltet. Da ich in der Vergangenheit immer das Problem hatte, das selbst wenn er laut IOB auf TRUE steht. War die Hardware immer noch auf FALSE. Das ganze hatte ich bei Wertänderung immer nur durchgeführt. Jetzt soll das ganze im Interval von 5 Minuten passieren ( Test gerade auf 10 s). Aber ich sicher gehen kann, das er dann auch irgendwann mal schaltet.
Aber ich habe den Eindruck das ich hier den verkehrten Datentyp nehme.
Wer kann mir hier helfen ? Wo liegt der Fehler ?
// Funktion zur Überprüfung und Aktualisierung des GPIO-Werts async function updateGPIO() { // Den aktuellen Wert von tuya.0.70412616a4e57c975a09.36 abrufen let tuyaValue = getState("tuya.0.70412616a4e57c975a09.36").val; // Protokollieren des aktuellen Werts console.log("Aktueller Wert von tuya.0.70412616a4e57c975a09.36:", tuyaValue); // Überprüfen, ob der Wert gültig ist if (String(tuyaValue) === "Close(1)") { // Wenn der Wert "Close" ist, setzen wir GPIO auf TRUE setState("rpi2.0.gpio.11.state"/*GPIO 11*/, true); console.log("GPIO auf TRUE gesetzt."); } else if (String(tuyaValue) === "Open(0)") { // Wenn der Wert "Open" ist, setzen wir GPIO auf FALSE setState("rpi2.0.gpio.11.state"/*GPIO 11*/, false); console.log("GPIO auf FALSE gesetzt."); } else { // Wenn der Wert ungültig ist, geben wir eine Fehlermeldung aus console.error("Ungültiger Wert für tuya.0.70412616a4e57c975a09.36:", tuyaValue); } } // Die Funktion updateGPIO initial ausführen updateGPIO(); // Alle zwei Minuten die Funktion updateGPIO ausführen setInterval(updateGPIO, 10000);
-
@Zimbl
Es sieht so aus, als liefere der DP "tuya.0.70412616a4e57c975a09.36" die Zahlenwerte 0 und 1 für "Open" und "Close". Dann genügt es, daraus einen booleschen Wert zu machen.setState("rpi2.0.gpio.11.state"/*GPIO 11*/, !!tuyaValue);
Weshalb ein Intervall anstelle eines Triggers auf "tuya.0.70412616a4e57c975a09.36"?
const idTuya = 'tuya.0.70412616a4e57c975a09.36'; const idGPIO = 'rpi2.0.gpio.11.state'/*GPIO 11*/; // Funktion zur Überprüfung und Aktualisierung des GPIO-Werts function updateGPIO(tuyaValue) { // Protokollieren des aktuellen Werts console.log("Aktueller Wert von tuya.0.70412616a4e57c975a09.36: " + tuyaValue); // Überprüfen, ob der Wert gültig ist if (tuyaValue === 1 || tuyaValue === 0) { setState(idGPIO, !!tuyaValue); } else { // Wenn der Wert ungültig ist, geben wir eine Fehlermeldung aus console.error("Ungültiger Wert für tuya.0.70412616a4e57c975a09.36: " + tuyaValue); } } // Die Funktion updateGPIO initial ausführen updateGPIO(getState(idTuya).val); on(idTuya, function(dp) { updateGPIO(dp.state.val); });
-
Ja, ich hatte an ein Intervall gedacht, denn gelegentlich wird der Befehl auf meinem GPIO (Hardware) nicht umgesetzt. Im IoBroker wird zwar angezeigt, dass beispielsweise TRUE sein sollte, aber in der Hardware bleibt es weiterhin auf 0 bzw. FALSE