Re: Widget für iOS
Verfasst: Fr Mai 28, 2021 7:19 pm
Das wäre wohl die einfachere Wahl gewesen, habe jetzt aber schon die Monats-CSV ausgewertet. War bloß noch nicht 100% zufrieden
Das wäre wohl die einfachere Wahl gewesen, habe jetzt aber schon die Monats-CSV ausgewertet. War bloß noch nicht 100% zufrieden
Gute Idee, ich wollte das ganze nicht überstürzen.
Jup, da habe ich eine Klammer vergessen. Sollte mit der neuen Version (auf Gist GitHub) passen.
Danke für die schnelle Korrektur!JSAnyone hat geschrieben: ↑Do Jun 03, 2021 3:30 pmGute Idee, ich wollte das ganze nicht überstürzen.
Hier könnt ihr spenden: https://www.paypal.com/donate?hosted_bu ... 3FYZP9N2RG
Ich würde mich freuen!
Jup, da habe ich eine Klammer vergessen. Sollte mit der neuen Version (auf Gist GitHub) passen.
Habe gerade bei dir auch gesehen, dass „Leistung“ ja nicht ganz hinpasst, ist jetzt zu „Leist.“ abgekürzt.
Bei dir ist die Überschrift auch nicht ganz mittig. Die ganzen Optionen für die Überschrift waren wohl nicht mehr wirklich aufeinander abgestimmt, jetzt sollte es besser sein.
Viel Dank für deinen Fleiß, hoffe das funktioniert mit Version 2.0 dann nochJSAnyone hat geschrieben: ↑Do Jun 03, 2021 3:30 pm Gute Idee, ich wollte das ganze nicht überstürzen.
Hier könnt ihr spenden: https://www.paypal.me/JulianSchmidt04
Code: Alles auswählen
// ----Energie im aktuellen Monat-------------
let monthlyUsed = true;
// 50: PV Erzeugung
// 51: Einspeisung
// 52: Eigennutzung
// 53: Bezug
// 54: Lademenge
// 55: Hausverbrauch
// --- Energie heute ------
let dailyUsed = true;
// 60: PV Erzeugung
// 61: Einspeisung
// 62: Eigennutzung
// 63: Bezug
// 64: Lademenge
// 65: Hausverbrauch
// --- KPIs, Eigennutzungsquoten, Autarkiequote, ------
// Monatsquoten
// 70: AQ Gesamt
// 71: AQ Haus - ohne LPGesamt mit Annahme 100% PV geladen
// 72: EQ PV
// Tagesquoten
// 80: AQ Gesamt
// 81: AQ Haus - ohne LPGesamt mit Annahme 100% PV geladen
// 82: EQ PV
Code: Alles auswählen
let WidgetParameter = args.widgetParameter;
if (WidgetParameter == null){ //damit Widget-Runtime aus Scriptable App funktioniert und keinen Fehler ausgibt
widgetTitle = "";
}
else if (WidgetParameter != null){
widgetTitle = WidgetParameter; //Titel im Widget
logo =0;
Code: Alles auswählen
let MonatsPV;
let MonatsEinspeisung;
let MonatsEigennutzung
let MonatsBezug;
let MonatsLPGesamt
let MonatsHausverbrauch;
let TagesPV;
let TagesEinspeisung;
let TagesEigennutzung
let TagesBezug;
let TagesLPGesamt
let TagesHausverbrauch;
// Monatswerte holen
if(monthlyUsed == true){
MonatsPV = (Number(dataMonthly[dataMonthly.length-2]["PV"]) - Number(dataMonthly[0]["PV"]))/1000;
MonatsEinspeisung = (Number(dataMonthly[dataMonthly.length-2]["Einspeisung"]) - Number(dataMonthly[0]["Einspeisung"]))/1000;
MonatsBezug = (Number(dataMonthly[dataMonthly.length-2]["Bezug"]) - Number(dataMonthly[0]["Bezug"]))/1000;
MonatsLPGesamt = (Number(dataMonthly[dataMonthly.length-2]["LPGesamt"]) - Number(dataMonthly[0]["LPGesamt"]))/1000;
MonatsEigennutzung = MonatsPV - MonatsEinspeisung;
MonatsHausverbrauch = MonatsEigennutzung + MonatsBezug - MonatsLPGesamt;
}
// Tageswerte holen
if(dailyUsed == true){
TagesPV = (await getData("daily_pvkwhk")*1);
TagesEinspeisung = (await getData("daily_einspeisungkwh")*1);
TagesBezug = (await getData("daily_bezugkwh")*1);
TagesLPGesamt = (await getData("daily_llakwh")*1);
TagesEigennutzung = round((TagesPV - TagesEinspeisung),2);
TagesHausverbrauch = round((TagesEigennutzung + TagesBezug - TagesLPGesamt), 2);
Code: Alles auswählen
// Monatswerte
case 50:
// PV Erzeugung im aktuellen Monat
wert = Math.round(MonatsPV);
value = wert.toString();
valueColor = "";
name = "PV";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 51:
// Einspeisung im aktuellen Monat
wert = Math.round(MonatsEinspeisung);
value = wert.toString();
valueColor = "";
name = "Einspeisung";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 52:
// PV Eigennutzung (Selbstentnahme) im aktuellen Monat
wert = Math.round(MonatsEigennutzung);
value = wert.toString();
valueColor = "";
name = "PV Eigennutzung";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 53:
// Energiebezug (EVU) im aktuellen Monat
wert = Math.round(MonatsBezug);
value = wert.toString();
valueColor = "";
name = "Bezug";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 54:
// Lademenge (alle Ladepunkte) im aktuellen Monat
wert = Math.round(MonatsLPGesamt);
value = wert.toString();
valueColor = "";
name = "Lademenge";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 55:
// Hausverbrauch im aktuellen Monat
wert = Math.round(MonatsHausverbrauch);
value = wert.toString();
valueColor = "";
name = "Hausverbrauch";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
// Tageswerte
case 60:
// PV Erzeugung heute
wert = TagesPV;
value = wert.toString();
valueColor = "";
name = "PV";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 61:
// Einspeisung heute
wert = TagesEinspeisung;
value = wert.toString();
valueColor = "";
name = "Einspeisung";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 62:
// PV Eigennutzing (Selbstentnahme) heute
wert = TagesEigennutzung;
value = wert.toString();
valueColor = "";
name = "PV Eigennutzung";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 63:
// Energiebezug (EVU) heute
wert = TagesBezug;
value = wert.toString();
valueColor = "";
name = "Bezug ";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 64:
// Lademenge (alle Ladepunkte) heute
wert = TagesLPGesamt;
value = wert.toString();
valueColor = "";
name = "Lademenge";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
case 65:
// Hausverbrauch heute
wert = TagesHausverbrauch;
value = wert.toString();
valueColor = "";
name = "Hausverbrauch";
footnote = "kWh";
borderColor = borderColorLP1;
chart = 0;
break;
// KPIs ... Nutzungsquoten ... runden für Ganzzahlen
case 70:
// Monats AQ Gesamt - Annahme LPGesamt 100% aus PV
wert = Math.round(100 - MonatsBezug / (MonatsHausverbrauch + MonatsLPGesamt) * 100);
value = wert.toString() + "%";
valueColor = "";
name = "AQ";
footnote = "Gesamt";
borderColor = borderColorLP1;
chart = 0;
break;
case 71:
// Monats AQ Haus
wert = Math.round(100 - MonatsBezug / MonatsHausverbrauch * 100);
value = wert.toString() + "%";
valueColor = "";
name = "AQ";
footnote = "Haus";
borderColor = borderColorLP1;
chart = 0;
break;
case 72:
// Monats EQ: PV Eigennutzung zu Erzeugung
wert = Math.round(MonatsEigennutzung / MonatsPV * 100);
value = wert.toString() + "%";
valueColor = "";
name = "EQ";
footnote = "PV";
borderColor = borderColorLP1;
chart = 0;
break;
case 80:
// AQ Gesamt heute
wert = Math.round(100 - TagesBezug / (TagesHausverbrauch + TagesLPGesamt) *100);
value = wert.toString() + "%";
valueColor = "";
name = "AQ";
footnote = "Gesamt";
borderColor = borderColorLP1;
chart = 0;
break;
case 81:
// AQ Haus ohne Auto heute; Annahme 100%PV Laden
wert = Math.round(100 - TagesBezug / TagesHausverbrauch *100);
value = wert.toString() + "%";
valueColor = "";
name = "AQ";
footnote = " Haus";
borderColor = borderColorLP1;
chart = 0;
break;
case 82:
// EQ: PV Eigennutzung zu Erzeugung heute
wert = Math.round(TagesEigennutzung / TagesPV *100);
value = wert.toString() + "%";
valueColor = "";
name = "EQ";
footnote = "PV";
borderColor = borderColorLP1;
chart = 0;
break;
Code: Alles auswählen
// Runden auf Dezimalstellen, siehe: https://www.ramschkasten.de/javascript-round-runden-dezimalstellen/2016/04/01/
function round(value, decimals) {
return Number(Math.round(value+'e'+decimals)+'e-'+decimals);
}
Gerne! Zu 2.0:
Klar das wäre möglich. Aber wo liegt der Vorteil gegenüber das Skript einfach mehrmals in Scriptable abzuspeichern?
Das klingt interessant, da überleg ich mir mal was.
Allgemein bringt das nichts. Bei MonthlyUsed oder aber auch bei den Ramdisk-Abfragen in der Switch-Case werden aber HTTP-Requests ausgeführt, die brauchen schon etwas Zeit und Datenlast, gerade die CSVs können ja richtig groß werden. Auch sind manche Werte in der Ramdisk nur vorhanden, wenn diese Einstellung konfiguriert wurde. Wenn das Widget also z.B. immer Awwater Abfragen würde (nicht nur dann wenn es im Widget verwendet wird) würde es bei Leuten ohne Awattar wahrscheinlich zu Fehlern kommen, weil die Datei nicht vorhanden ist. Awattar nur als Beispiel, ich weis nicht ob es da so ist.
Dafür bräuchte die Verknüpfung ein URL-Schema:
Super, drei einzelne Widgets sehen definitiv viel übersichtlicher aus als ein großes._daniel hat geschrieben: ↑Do Jun 10, 2021 3:33 pm Dank deinem CSV Zugriff, war es einfach ein paar Erweiterungen vorzunehmen. Ich hab das Skript um ein paar statistische Werte ergänzt. Die Anzeige mache ich in einem extra Widget (deswegen die Frage nach Profilen), damit es nicht zu übersichtlich wird (wie mit "widget.presentLage"). Anbei mal ein BIld wie es aussehen könnte und der Code dazu, falls du etwas aufgreifen willst. Muss sicherlich optimiert werden, war mehr für den Eigenbedarf mit dem Schwerpunkt: Funktion & Spielerei