Ja, natürlich. Aber ich denke du bist erst beim programmieren am Anfang.
Hier ein paar Tips die dich später nicht verzweifeln lassen.
Versuche immer einzelne Aktionen über Funktionen abzubilden.
Sie können entweder ein Wert berechnen mit Rückgabe oder etwas Schalten.
Der Sinn dahinter ist sie wiederverwendbar im Code zu machen.
Ein Beispiel Temperatur:
Code
var tempHome;
function readTemperaturSensor() {
// HTTP-Aufruf, um die Temperaturdaten abzurufen
Shelly.call(
"HTTP.GET",
{ url: "http://192.168.178.70/rpc/Temperature.GetStatus?id=100" },
function(result, error_code, error_message) {
if (error_code !== 0) {
print('Error beim Abrufen der Temperatur:', error_message);
} else {
let jsonData = JSON.parse(result.body);
tempHome = jsonData.tC;
print("Temp Home:", tempHome); // Temperatur wird hier korrekt ausgegeben
}
}
);
}
function timerLoop() {
readTemperaturSensor(); // Temperatur aktualisieren
if (tempHome !== undefined) {
print("Aktuelle Temperatur:" + tempHome + " °C"); // Ausgabe der aktuellen Temperatur
frostschutz(tempHome);
// Hier könnten weitere function gestartet werden...
} else {
print("Temperatur ist noch nicht verfügbar.");
}
}
function frostschutz(temp) { //
print ("Abfrage Frostschutz");
// Ist temp < als Vorgabe ? = Lüfter An.
if (temp < 1.5) { // Unter 1,5 °C ?
ioLuefter(true);
} else { // Größer = aus.
ioLuefter(false);
}
}
function ioLuefter(io) {
if (io) { // Wenn io = true ist
callOn()
// Hier könnten noch weitere Aktionen gestartet werden.
} else { // Wenn io false ist
callOff()
// Hier auch...
}
}
function callOn() { // Die Funktion sollte nur den Aufruf für das Relais zum schalten haben.
// HTTP aufruf --> Relais vom Shelly ON
print("Lüfter Relais ON");
}
function callOff() { // Die Funktion sollte nur den Aufruf für das Relais zum schalten haben.
// HTTP aufruf --> Relais vom Shelly OFF
print("Lüfter Relais OFF");
}
// Timer einrichten: Wiederholung alle 1000 ms
Timer.set(1000, true, timerLoop);
Alles anzeigen
Du siehst im Code das jede function eine Funktion hat. Entweder entscheidet sie was, oder führt was aus.
Ich habe den einfachen Temp lese Code wieder verwand. Da jetzt die Abfrage im Loop abläuft.
Im ersten Durchlauf ist die Temperatur noch nicht in der Globalen Variable var tempHome; gespeichert.
Beim 2. durchlauf liegt sie jetzt vor und kann verarbeitet werden.