Das wäre wohl die einfachere Wahl gewesen, habe jetzt aber schon die Monats-CSV ausgewertet. War bloß noch nicht 100% zufrieden
Widget für iOS
Re: Widget für iOS
Re: Widget für iOS
Ich habe den Widget-Code nun nochmal etwas aufgeräumt und folgendes neu implementiert:
- Die letzte Lademenge kann jetzt für LP1, LP2 oder beide summiert angezeigt werden
- Die Lademenge des aktuellen Monats kann jetzt für LP1, LP2 oder beide summiert angezeigt werden
- Die Farbmöglichkeiten für Rahmen und Graphen wurden vereinheitlich und vereinfacht, “gleiches” (z.B. Speicher SoC und Speicher Leistung) hat jetzt die gleiche Farbe. Die Farben von Graph und Rahmen können natürlich immer noch separat eingestellt werden
- LP2 ist jetzt gleichwertig mit LP1, es gibt z.B. jetzt einen Hintergrundgraphen für Leistung und SoC von LP2 usw.
- Die SmartHome 2.0 Geräte unterstützen jetzt bei Bedarf Hintergrundgraphen
Bei der Datenquelle bin ich dann doch noch bei den alten Monats-CSV geblieben (statt den neuen mit Header von okaegi), damit niemand wegen dem Widget auf eine OpenWB-Beta/Nightly updaten muss. Außerdem würde sowieso noch die alte Tages-CSV benötigt werden, da die erstmal nicht erneuert wird.
Wie immer konnte ich nicht alle Funktionen zu 100% testen, meldet euch also gerne, wenn etwas nicht wie erwartet funktioniert oder wenn ihr sonst noch Wünsche oder Anregungen habt!
Das Widget ist mit aktualisierter Anleitung jetzt hier unter Gist-GitHub verfügbar:
Code: https://gist.github.com/JSAnyone/74edf5 ... 87f63c1a70
Anleitung: https://gist.github.com/JSAnyone/74edf5 ... nt-3730115
Das Importieren in Scriptable ist zwar immer noch etwas umständlich, es ist denke ich aber einfacher als das nervige Ändern der Endung, was ja immer am PC/Mac gemacht werden musste. So geht zumindest alles direkt am iPhone/iPad.
In eigener Sache:
Ich habe mittlerweile doch ziemlich viel Zeit in dieses Widget gesteckt, auch wenn das sicherlich auch daran lag, das meine Programmierkenntnisse noch relativ „primitiv“ waren/sind. Nachdem hier aber doch viele Leute zufrieden mit dem Widget sind und es nützlich finden, wäre die Frage, inwiefern ihr „bereit“ wärt mir dafür eine Kleinigkeit zu spenden, z.B. über PayPal.
Es soll sich aber natürlich auch niemand dazu verpflichtet fühlen, deswegen wollte ich erstmal nachfragen wie ihr so dazu steht.
Dass das Widget aber grundsätzlich für alle kostenlos bleibt ist natürlich klar, das ist ja das schöne an open-source Projekten wie OpenWB.
- Die letzte Lademenge kann jetzt für LP1, LP2 oder beide summiert angezeigt werden
- Die Lademenge des aktuellen Monats kann jetzt für LP1, LP2 oder beide summiert angezeigt werden
- Die Farbmöglichkeiten für Rahmen und Graphen wurden vereinheitlich und vereinfacht, “gleiches” (z.B. Speicher SoC und Speicher Leistung) hat jetzt die gleiche Farbe. Die Farben von Graph und Rahmen können natürlich immer noch separat eingestellt werden
- LP2 ist jetzt gleichwertig mit LP1, es gibt z.B. jetzt einen Hintergrundgraphen für Leistung und SoC von LP2 usw.
- Die SmartHome 2.0 Geräte unterstützen jetzt bei Bedarf Hintergrundgraphen
Bei der Datenquelle bin ich dann doch noch bei den alten Monats-CSV geblieben (statt den neuen mit Header von okaegi), damit niemand wegen dem Widget auf eine OpenWB-Beta/Nightly updaten muss. Außerdem würde sowieso noch die alte Tages-CSV benötigt werden, da die erstmal nicht erneuert wird.
Wie immer konnte ich nicht alle Funktionen zu 100% testen, meldet euch also gerne, wenn etwas nicht wie erwartet funktioniert oder wenn ihr sonst noch Wünsche oder Anregungen habt!
Das Widget ist mit aktualisierter Anleitung jetzt hier unter Gist-GitHub verfügbar:
Code: https://gist.github.com/JSAnyone/74edf5 ... 87f63c1a70
Anleitung: https://gist.github.com/JSAnyone/74edf5 ... nt-3730115
Das Importieren in Scriptable ist zwar immer noch etwas umständlich, es ist denke ich aber einfacher als das nervige Ändern der Endung, was ja immer am PC/Mac gemacht werden musste. So geht zumindest alles direkt am iPhone/iPad.
In eigener Sache:
Ich habe mittlerweile doch ziemlich viel Zeit in dieses Widget gesteckt, auch wenn das sicherlich auch daran lag, das meine Programmierkenntnisse noch relativ „primitiv“ waren/sind. Nachdem hier aber doch viele Leute zufrieden mit dem Widget sind und es nützlich finden, wäre die Frage, inwiefern ihr „bereit“ wärt mir dafür eine Kleinigkeit zu spenden, z.B. über PayPal.
Es soll sich aber natürlich auch niemand dazu verpflichtet fühlen, deswegen wollte ich erstmal nachfragen wie ihr so dazu steht.
Dass das Widget aber grundsätzlich für alle kostenlos bleibt ist natürlich klar, das ist ja das schöne an open-source Projekten wie OpenWB.
Re: Widget für iOS
Top Projekt, vielen Dank fürs Teilen. PN mir doch mal Deine PayPal Adresse.
Konfiguration: OpenWB auf Raspberry Pi 3 B+, 2x Keba P30, EVU über Smartme Zähler, PV per MQTT
Re: Widget für iOS
Stell doch einfach deine paypal- adresse rein, glaube der ein oder andere zufriedene Widget-User spendet da gerne.
Was mir eben aufgefallen ist: Bei der Summation der Monatswerte LP1+2 stimmt der Wert um Faktor 1000 nicht.
grüße
Tobias
Was mir eben aufgefallen ist: Bei der Summation der Monatswerte LP1+2 stimmt der Wert um Faktor 1000 nicht.
grüße
Tobias
Fahrzeuge: VW eUP & Audi Q4 & Q7PHEV
PV: 8,4kWp & 15,2kWp
WB: 2x openWB Series 2+ & 2x openWB Series 2
PV: 8,4kWp & 15,2kWp
WB: 2x openWB Series 2+ & 2x openWB Series 2
Re: Widget für iOS
Gute Idee, ich wollte das ganze nicht überstürzen.
Hier könnt ihr spenden: https://www.paypal.me/JulianSchmidt04
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.
Zuletzt geändert von JSAnyone am Do Jun 03, 2021 4:21 pm, insgesamt 1-mal geändert.
Re: Widget für iOS
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.
Fahrzeuge: VW eUP & Audi Q4 & Q7PHEV
PV: 8,4kWp & 15,2kWp
WB: 2x openWB Series 2+ & 2x openWB Series 2
PV: 8,4kWp & 15,2kWp
WB: 2x openWB Series 2+ & 2x openWB Series 2
-
- Beiträge: 116
- Registriert: Fr Apr 09, 2021 6:03 pm
- Has thanked: 1 time
- Been thanked: 2 times
Re: Widget für iOS
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
Ich würde mich den Unterstützern auch anschließen.
Hätte das selbst nicht hinbekommen, ich benötige schon viel Zeit für kleine Änderungen und Spielereien.
Hier ein paar kleine Erweiterungsvorschläge und Fragen:
- Könnte man Profile anlegen? z.B. um für mehrere Widgets dasselbe Skript aufzurufen. z.B. mit der Parameterübergabe (args.widget.Parameter)
- Bei den Farben wären Abhängigkeiten genial. D.h. kein statitschen Grenzen, sondern PV grün, wenn größer als Hausverbrauch und Laden...
- Bringt es etwas Skriptteile zu überspringen, beipsielsweise wie bei dir mit monthlyused (csv Abfragen)? Oder ist das eher Kosmetik?
- Man kann OpenWB über Safari im FullScreen öffnen (Anleitung von dir). Hast du eine Idee, um beim Klick auf das Widget die "App" statt den Standardbrowser zu öffnen?
- 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
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);
}
Re: Widget für iOS
Gerne! Zu 2.0:
LutzB hat ja schon mal angekündigt, dass es die Ramdisk in 2.0, zumindest so wie sie aktuell ist, nicht mehr geben wird. Einfach so weiterlaufen wird es also nicht. MQTT kann Scriptable leider nicht bis jetzt, aber vielleicht tut sich da ja was. Die nicht mehr weiterentwickelte HTTP-API liefert viel zu wenig Daten. Im letzten Notfall müsste ich halt selbst noch ein kleines Skript basteln, das einfach die fürs Widget benötigten Daten von MQTT geh holt und per HTTP bereitstellt. Ich denke dass das OpenWB-Team einen solchen PR mergen würde.
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.
Aber aktuelle bin ich auch nicht glücklich, weil für doppelt benötigte Werte doch zwei HTTP-Requests ausgeführt werden. Das muss ich noch ändern.
Dafür bräuchte die Verknüpfung ein URL-Schema:
https://ios.gadgethacks.com/how-to/alwa ... s-0184033/
Habe dazu aber leider nichts gefunden.
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
Dein Code mit den statischen Werten sieht gut aus, das werde ich etwas angepasst auf jeden Fall übernehmen!
-
- Beiträge: 116
- Registriert: Fr Apr 09, 2021 6:03 pm
- Has thanked: 1 time
- Been thanked: 2 times
Re: Widget für iOS
Top. Mal gespannt was im Sommer kommt.
Wenn die Titelzeile und die Werte (vll. mehrdimensionale Objekte) abhängig vom Profil (Tag, Monat, Monitoring) wären, ist es „einfacher“ alles in einem Skript zu haben.
Vorteil, man muss nur ein Skript parametrieren (Panels) und warten (Änderungen).
Die Frage ist eher, ob es den Aufwand wert ist…
Wenn die Titelzeile und die Werte (vll. mehrdimensionale Objekte) abhängig vom Profil (Tag, Monat, Monitoring) wären, ist es „einfacher“ alles in einem Skript zu haben.
Vorteil, man muss nur ein Skript parametrieren (Panels) und warten (Änderungen).
Die Frage ist eher, ob es den Aufwand wert ist…
Re: Widget für iOS
Auf meiner "alten" OpenWB (Software auf raspi) läuft das aktuelle Widget, auf der vor 1 Woche installierten Duo leider nicht. Wo kann ich nach der Ursache suchen?
Seit 2019: OpenWB Software mit EVU-Kit & go-e-Charger
Seit 07/21: OpenWB Duo
->>> Zoe & Tesla Model Y
Seit 07/21: OpenWB Duo
->>> Zoe & Tesla Model Y