Hallo Leute bin neu hier und auch nicht fit mit dem coden aber Chat-gtp usw. machts möglich.
Ich habe einen Shelly PM1 Plus mit Add on bei meiner Ölheizung installiert (funktioniert super) um hauptsächlich diese zu kontrollieren>>> noch kein Eingriff in die Heizungssteuerung (momentan auch nicht erwünscht). Meine Sensoren sind DS18b20. D. h. genauer Leitungstemperatur (100), Warmwasserspeichertemp. (101) Vorlauf (102) & Rückauftemp. (103) und Warmwasserkreis (104).
Wichtig und wenn ich das richtig versehe relativ leicht möglich, wäre jetzt ein Google Apps skript zu schreiben (Versuch siehe unten), dass einmal Täglich (23.59 Uhr) die Tagestemperaturenhistorie (Minimal und Maximalwert). Daten von allen 5 Sensoren ausliest bzw. mir in meine Google sheets tabelle (Shelly) ausgibt.
Danach würde ich natürlich gerne mit Makros usw. diese Daten verwenden und Heizenergie (kWh & Heizkosten) täglich automatisiert auswerten, sowie ein paar Diagramme machen. Dies ist aber momentan nicht das Problem.
Mein Problem ist, dass er mir mit meinem fabrizierten Code keine Daten ausliest bzw. nicht ins Test sheet von Google schreibt (3x jede dritte Spalte). Server, ID, API-Key usw. habe ich natürlich verändert. Hat jemand eine Ahnung was in meinem Google apps script falsch ist?
Ausführungsprotokoll
12:35:47
Hinweis
Ausführung begonnen
12:35:49
Hinweis
Ausführung abgeschlossen
// Funktion zur Erstellung eines täglichen Triggers
function createDailyTrigger() {
ScriptApp.newTrigger('grabDailyData')
.timeBased()
.atHour(23) // Festlegen der Stunde (23 Uhr)
.nearMinute(59) // Festlegen der Minute (59 Minuten nach der Stunde)
.everyDays(1) // Jeden Tag ausführen
.create();
}
// Funktion zum Abrufen und Speichern der Temperaturdaten von Shelly
functiongrabDailyData() {
vartemperatureData = [];
varsensorIds = [100, 101, 102, 103, 104]; // IDs der 5 Sensoren
vartimestamp = newDate(); // Aktuelles Datum
varsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Shelly Datatabelle Test');
// API für jeden Sensor abfragen
for (var i = 0; i < sensorIds.length; i++) {
try {
var sensorId = sensorIds[i];
var url = 'https://shelly-xxx-eu.shelly.cloud/device/status?…xxxxxxx&sensor=' + sensorId;
var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
var data = JSON.parse(response.getContentText());
// Überprüfen, ob Temperaturdaten für den Sensor vorhanden sind
if (data.device_status && data.device_status.temperature) {
vartemperature = data.device_status.temperature; // Temperaturwert des Sensors
temperatureData.push(temperature); // Temperatur speichern
} else {
Logger.log("Keine Temperaturdaten für Sensor " + sensorId + " verfügbar.");
}
} catch (e) {
Logger.log("Fehler beim Abrufen der Daten für Sensor " + sensorId + ": " + e);
}
}
// Temperaturdaten in das Tabellenblatt einfügen (jede dritte Spalte A, D, G, ...)
if (temperatureData.length > 0) {
var lastRow = sheet.getLastRow();
var dataRow = [new Date()]; // Erstes Element ist das aktuelle Datum
varcolumnOffset = 0;
// Temperaturdaten in jede dritte Spalte einfügen (Spalten A, D, G, ...)
for (var j = 0; j < temperatureData.length; j++) {
var col = 1 + (j * 3); // A=1, D=4, G=7, usw.
sheet.getRange(lastRow + 1, col).setValue(temperatureData[j]);
}
// Datum in die erste Spalte einfügen (A-Spalte)
sheet.getRange(lastRow + 1, 1).setValue(timestamp);
} else {
Logger.log("Keine Daten zum Einfügen verfügbar.");
}
}