Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. ThomKast

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    T
    • Profile
    • Following 1
    • Followers 1
    • Topics 13
    • Posts 191
    • Best 25
    • Groups 2

    ThomKast

    @ThomKast

    44
    Reputation
    91
    Profile views
    191
    Posts
    1
    Followers
    1
    Following
    Joined Last Online
    Location Region Hannover Age 58

    ThomKast Follow
    Pro Starter

    Best posts made by ThomKast

    • Waschmaschine/Spülmaschine bei PV-Überschuss starten

      Die hier beschriebene Lösung wurde mit der Funktion "Betrieb zu günstigen Strom-Stundenpreisen" erweitert. Dazu wurde ein neuer Artikel verfasst. In dem neuen Artikel wird die anfängliche Lösung fortgeführt und ausgebaut. Die Ausführungen unten bilden damit die Grundlage für die neue erweiterte Lösung.


      V1.3 vom 12.11.2022

      • Bugfix: In Betriebsart "Start sofort" wurde am Waschvorgangsende der Status "end" gesetzt. Damit würde beim nächsten Start die TSD abgeschaltet und auf Freigabe gewartet, was in Betriebsart "Start sofort" nicht gewünscht ist. Korrektur auf Status "bst". Eingehängtes Script aktualisiert. Screenshots nicht erneuert.

      V1.2 vom 09.11.2022

      • Bugfix: Es wurde ein WM-Beginn gemeldet, obwohl die WM nur geöffnet/geschlossen wurde. Änderung der Abfrage des Status.
      • Ausgabe der Stati "begonnen" und beendet" über ALEXA ergänzt. Die Seriennummer ist durch "xxxxx" ersetzt worden und ist entsprechend zu ersetzen.
      • Screenshots und Download-Dateien wurden aktualisiert

      V1.1 vom 08.11.2022

      • Script-Änderung für das Umschalten zwischen "sofort" und "Freigabe". Nu wird auch der Status "waschvorgang" korrekt gesetzt. Eingehängtes Script aktualisiert und mit Datum versehen. Screenshots nicht erneuert.
      • Spülmaschine wurde in Betrieb genommen. Beschreibung im letzten Topic ergänzt.
      • "stoppleistung" zu gering gewählt. Auswirkung im letzten Topic beschrieben.

      Hallo zusammen,

      vielleicht interessiert den ein oder anderen die nachfolgende Umsetzung. Die Beschreibung ist bewusst umfangreich, so dass auch Einsteiger ein gutes Verständnis erlangen dürften. Das hat mir nämlich bei meinen ersten Schritte oft gefehlt ;-).

      Auf Euer Feedback und Eure Anregungen freue ich mich und hoffe die Umsetzung findet Nachahmer.

      DANKEn möchte ich noch Matthias Kleine - haus-automatisierung.com. Anhand von Matthias' Informationen, Kursen und Videos fand ich meinen Einstieg in smarthome und ioBroker. Danke Matthias für Dein Engagement 👍.

      Genug der Vorreden. Die Beschreibung wird noch lang genug 😂

      Viel Erfolg beim Nachbauen oder beim sich Inspirierenlassen.

      Beste Grüße, Thomas


      Vorbereitung / Voraussetzung:
      Unsere Waschmaschine (WM) ist nicht "smart" und sollte dennoch bei ausreichend PV-Überschuss den Waschvorgang beginnen. Dazu ist es nötig zu prüfen, ob die Waschmaschine nach einem Stromausfall den Waschvorgang fortsetzt. Ist dies der Fall, kann die Waschmaschine über eine Schaltsteckdose gesteuert werden.
      Also Waschprogramm einstellen und WM starten - nach einiger Zeit den Stecker der WM ziehen - ein wenig warten - und den Stecker wieder einstecken - setzt die WM nun ungestört den Waschvorgang fort, wird das Projekt sehr wahrscheinlich erfolgreich abgeschlossen werden können.

      Zur Umsetzung wird eine Schaltsteckdose und der aktuelle Wert des PV-Überschusses benötigt. Im weiteren wird beides als vorhanden vorausgesetzt.
      In meiner Umsetzung kommt eine NOUS A1 Steckdose, die mit TASMOTA geflashed ist, zum Einsatz. Der PV-Überschuss wird am Hausanschlusszähler (2-8-0 Lieferung) ermittelt, steht aber auch am KOSTAL KSEM und einem weiteren 3-Phasen-Zähler zur Verfügung

      Anforderung:
      Bei Erreichen eines bestimmten PV-Überschusses für eine gewisse Zeit, soll die Waschmaschine den Waschvorgang beginnen. Kommt es nach dem Start des Waschvorgangs zu PV-Leistungseinbrüchen, soll der Waschvorgang unverändert fortgesetzt werden.
      Sollte zu einer bestimmten Zeit noch kein ausreichender PV-Überschuss vorhanden gewesen sein, so soll der Vorgang unabhängig des PV-Überschusses starten. Damit soll sichergestellt werden, dass die Wäsche z.B. abends gewaschen ist.
      Es soll auch eine Betriebsart geben, bei der die PV-Überschuss-Steuerung ausgesetzt werden kann und die Waschmaschine sofort genutzt werden kann.

      Folgende Parameter zur Steuerung kommen zum Einsatz: (Download unterhalb des Screens)

      e95ea3e2-94b8-43ad-9274-4c4f33d5fc76-image.png
      Zugehörige JSON zum Download: 2022-11-09-0_userdata.0.Waschmaschine.json

      • verbrauch = Verbrauch des letzten Waschvorgangs. Wird anhand der Werte der TASMOTA-Steckdose (TSD) ermittelt
      • beginnleistung = Aktuelle Leistung (W) der TSD. Bei Erreichen der Leistung wird der Status [Waschvorgang = "lfd" = laufend] gesetzt
      • betriebsart = Umschaltung zwischen "Start mit Freigabe" oder "Start sofort"
      • endeleistung = Aktuelle Leistung (W) der TSD. Leistung, bei der der Waschvorgang als "beendet" bewertet wird
      • endeleistung-dauer = Dauer, für die die "endeleistung" durchgängig erreicht sein muss, damit der Status [Waschvorgang = "end" = beendet] gesetzt wird
      • pv-ueberschuss = Aktueller Wert des PV-Überschusses (W) . Überschuss, bei der der Waschvorgang als "freigegeben" bewertet wird
      • pv-ueberschuss-dauer = Dauer, für die der "pv-ueberschuss" durchgängig erreicht sein muss, damit der Status [Waschvorgang = "fgg" = freigegeben] gesetzt wird
      • spaetstartzeit = Uhrzeit, zu der der Waschvorgang freigegeben wird, auch wenn kein ausreichender PV-Überschuss vorliegt
      • stoppleistung = Aktuelle Leistung (W) der TSD. Bei Erreichen der Leistung wird die TSD abgeschaltet und der Status [Waschvorgang = "wtd" = wartend] gesetzt
      • waschvorgang = kann folgende Stati annehmen:
        • wtd = wartend
        • fgg = freigegeben
        • bst = bestromt
        • lfd = laufend
        • end = beendet

      Des Weiteren werden die Werte für den aktuellen PV-Überschuss
      56f11c7a-b4cc-4d9b-9798-7125fbc14734-image.png
      und die aktuellen Leistungswerte der WM an der TSD
      977aac28-4a5d-49eb-b4c8-b193360d1dad-image.png
      und der Datenpunkt für das Schalten der TSD
      12eafc63-6438-4eef-a29d-f541fd1c0615-image.png benötigt.


      Zugehöriges BLOCKLY-Script zur Steuerung: (Download unterhalb der Screens)
      fd50e183-99d3-4ab7-9b04-5c4b2169518c-image.png 69b7af66-2c71-46a2-aae9-eb229c0afe21-image.png fe4d0b96-d187-42a2-b26c-3624226ffdbe-image.pngdd5a7a4c-a468-4927-9b23-270af67a1bba-image.png b618fa69-a315-4fb2-a15f-1b7205c56ecf-image.png

      Zugehöriges Script zum Download: 2022-11-12-pv-ueberschuss-waschmaschine.json


      Ablauf, Stati und Meldungen:
      Die Informationen finden sich ebenfalls im BLOCKLY hinter dem "?" der Kommentare, bzw nachfolgend:

      Waschvorgang/Betriebsart, Stati und Abkürzungen:

      • Betriebsart = "false" = "Start bei Freigabe"
      • Betriebsart = "true" = "Start sofort"
      • Status "waschvorgang" = "end" = Waschvorgang beendet
      • Status "waschvorgang" = "wtd" = Tasmota-Steckdose ist abgeschaltet und WM wartet auf Sonne oder Spät-Startzeit
      • Status "waschvorgang" = "fgg" = ausreichend PV-Überschuss vorhanden oder Spät-Startzeit erreicht
      • Status "waschvorgang" = "bst" = Tasmota-Steckdose ist eingeschaltet
      • Status "waschvorgang" = "lfd" = Waschvorgang gestartet/läuft
      • Status "waschvorgang" = "end" = Waschvorgang beendet

      Grundlegender Ablauf wie folgt:

      1. Wird die Betriebsart = "Start sofort" gesetzt":
        • erfolgt die Aktivierung der Tasmota-Steckdose;
        • damit kann die WM jederzeit genutzt/gestartet werden;
        • zu jeder Zeit erfolgt die Überprüfung der aktuellen Leistungsaufnahme an der Steckdose;
        • sobald die "beginnleistung" erreicht ist erfolgt:
        • Meldung "Waschvorgang gestartet"
        • und der "waschvorgang" wird = "lfd" gesetzt
        • zu jeder Zeit erfolgt die Überprüfung der aktuellen Leistungsaufnahme an der Steckdose;
        • bei erreichen des Mittelwerts "endeleistung" für Zeitraums "endeleistung-dauer" erfolgt:
        • Meldung "Waschvorgang abgeschlossen"
        • und der "waschvorgang" wird = "bst" gesetzt

      1. Wird die Betriebsart "Start bei Freigabe" gesetzt:
        ... nachfolgend wird vom Waschvorgang = "end" ausgegangen
        • zu jeder Zeit erfolgt die Überprüfung der aktuellen Leistungsaufnahme an der Steckdose;
        • sobald die "stoppleistung" erreicht ist erfolgt:
        • Meldung "WM wartet auf Sonne oder Spät-Startzeit";
        • und der "waschvorgang" wird = "wtd" gesetzt;
          --> nun hat die WM keinen Strom und bleibt stehen
        • zu jeder Zeit erfolgt die Überprüfung des aktuellen PV-Überschusses;
        • sobald der Mittelwert von "pv-ueberschuss" für den Zeitraum "pv-ueberschuss-dauer" erreicht ist erfolgt;
        • Meldung "PV-Überschuss: Freigabe erteilt";
        • und der "waschvorgang" wird = "fgg" gesetzt;
        • zu jeder Zeit erfolgt die Überprüfung der aktuellen Uhrzeit;
        • sobald die "spätstartzeit" erreicht ist erfolgt:
        • Meldung "Spätstartzeit: Freigabe erteilt";
        • und der "waschvorgang" wird = "fgg" gesetzt;
        • zu jeder Zeit erfolgt die Überprüfung des Status "waschvorgang";
        • sobald "waschvorgang" auf "fgg" wechselt erfolgt:
        • Meldung "WM Steckdose ON";
        • und der "waschvorgang" wird = "bst" gesetzt;
          --> nun setzt die WM den Waschvorgang fort
        • zu jeder Zeit erfolgt die Überprüfung der aktuellen Leistungsaufnahme an der Steckdose;
        • sobald die "beginnleistung" erreicht ist erfolgt:
        • Meldung "Waschvorgang gestartet"
        • und der "waschvorgang" wird = "lfd" gesetzt
        • zu jeder Zeit erfolgt die Überprüfung der aktuellen Leistungsaufnahme an der Steckdose;
        • bei erreichen des Mittelwerts "endeleistung" für den Zeitraums "endeleistung-dauer" erfolgt:
        • Meldung "Waschvorgang abgeschlossen"
        • und der "waschvorgang" wird = "end" gesetzt

      In den Triggern erfolgt die Bewertung verschiedener Schwellwerte/Stati, um daraus den aktuellen Status des Waschvorgangs zu bestimmen oder den Wechsel in den nächsten Status durchzuführen. Folgende Stati sind abhängig der Betriebsart möglich

      (1) Betriebsart = false = "Start sofort"

      • (1).3.7 Prüfung auf Sofortstart
      • (1).3.5 WM-Steckdose einschalten
      • (1).3.6 Waschbeginn melden
      • (1).3.1 Waschende melden

      (2) Betriebsart = true = "Start bei Freigabe"

      • (2.)3.1 Waschende melden
      • (2.)3.2 WM-Steckdose ausschalten
      • (2.)3.3 PV-Überschuss Freigabe
      • (2.)3.4 Spät-Startzeit Freigabe
      • (2.)3.5 WM-Steckdose einschalten
      • (2.)3.6 Waschbeginn melden
      • (2.)3.1 Waschende melden

      Anm: Die angegebene Nummerierung findet sich in den Kommentare bei den Triggern


      Vorbereitung/Inbetriebnahme:
      Zur Bestimmung der Werte "beginnleistung", "endeleistung" und "stoppleistung" ist die Leistungsaufnahme an der TSD, während eines Waschvorgangs, zu beobachten. Hierzu ist kein kompletter Waschvorgang mit Wäsche nötig. Beim meiner WM brach ich den Waschvorgang nach Ermittlung der Anfangswerte ab und ermittelte dann die "endeleistung".
      Im Endeffekt sind die Werte so zu wählen, dass

      • die "stoppleistung" die TSD nicht allzu früh abschaltet, damit der Waschvorgang ohne Schwierigkeiten, beim Wiedereinschalten der Steckdose, fortgesetzt wird.
      • die "beginnleistung" nicht zu klein gewählt wird. Je größer der Wert, desto später, aber auch zuverlässiger, wird die Meldung "Waschvorgang gestartet" abgesetzt.
      • die "endeleistung" nicht zu groß gewählt wird, denn auch während des Waschvorgangs kommt es zu Einweich-Pausen und damit zu einer geringen Leistungsaufnahme der WM.

      Um das Ein-/Ausschalten der TSD mit PV-Überschuss zu testen, muss der Status [Waschvorgang = "end" = beendet] anfänglich gesetzt werden. Dies ist der Ausgangsstatus für den Ablauf. Mit einem geringen PV-Überschuss-Wert kann dann der Test initiiert werden. Ebenso ist es möglich den Status [Waschvorgang = "fgg" = freigegeben] manuell zu setzen.


      Erfahrungen / Anpassungen / Ausblick

      • STOPPLEISTUNG ZU GERING GEWÄHLT
        Die "stoppleistung" war anfangs zu gering eingestellt. So stoppte die Waschmaschine zu früh. Nach erfolgter Freigabe und Bestromung der TSD, zeigte das Display zwar einen laufenden Waschvorgang, allerdings bewegte sich die Waschmaschine nicht. Der Waschvorgang wurde offensichtlich zu einem zu frühen Beginn unterbrochen. Mit einem höheren Wert für "stoppleistung" erfolgte das Abschalten der TSD später und die Waschmaschine nach anschließend den Waschvorgang problemlos auf.

      • NUN AUCH SPÜLMASCHINE
        Die Datenpunkte und das Script wurden kopiert und entsprechend auf die Termini "Spülmaschine" angepasst. Spülmaschine ist somit auch smart :-).

      • AUSBLICK
        Da mit Steuerung der Spülmaschine nun der PV-Überschuss bereits in 2 Scripten parallel ermittelt wird, macht es Sinn diesen Teil des Scripts in eine übergeordnete Ebene, in einem separaten Script laufen zu lassen. Dort soll die Prüfung auf verschiedene PV-Überschuss-Schwellwerte durchgeführt werden. Das Ergebnis der Prüfungen soll dann in den Geräte bezogenen Scripts verwendet werden.

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • TIBBER Pulse Livedaten mit NodeRed abholen

      Die Beschreibung dient dem Abholen von Live-Daten des Tibber Pulse Infrarot Zählerkopfes.
      Die Beschreibung setzt ein paar Grundkenntnisse im ioBroker voraus. Sollte Euch etwas unbekannt vorkommen , schreibt einfach kurz in den Chat.

      Ganz besonders möchte ich auf die Tutorials von https://haus-automatisierung.com/ hinweisen. Diese sind jeden Cent wert und haben wir einen Großteil des Wissens vermitelt, welches ich jetzt gerne weitergeben.

      Voraussetzungen

      Unter https://developer.tibber.com ist ein Tibber-API-Token zu generieren
      929fd383-cccc-4c87-af0b-f492d8699af4-image.png

      Unter https://developer.tibber.com/explorer ist die Tibber HomeId zu ermitteln.
      b28f47fa-be31-4536-b592-e89fe5fb53cc-image.png

      Im ioBroker ist ein Datenpunkt vom Typ „JSON“ zu erzeugen.
      5c61eae8-3ebe-4484-859f-d3ae77088ff6-image.png

      Grundlegender Ablauf

      1. Installation node-red Adapter unter ioBroker
      2. Einrichtung des node-red Adapters in ioBroker
      3. Installation der Tibber Nodes in NodeRed
      4. Aufbau eines „Flows“ in NodeRed
      5. Einrichtung der Node „Tibber-feed“ mit WebSocket-Verbindung und Authentifizierung
      6. Einrichten der Node „ioBroker out“ mit Anbindung des ioB-Datenpunkts
      7. Compilieren/Deploy des Flows und hoffen, dass alles passt 😉

      Datenfluss

      1. Der Stromzähler sendet seine Informationen als IR-Impulse.
      2. Der TIBBER Pulse liest diese Daten aus, interpretiert diese und sendet sie über die Tibber-Bridge zum TIBBER Server.
      3. Der Tibber-Server verarbeitet die Daten als Grundlage zur Abrechnung, Anzeige in der Tibber-App und Steuerung verschiedener Tibber-Aktoren.
      4. Parallel stellt der Tibber Server die Daten als „LiveStream“ über eine WebSocketverbindung zur Verfügung
      5. Diese Daten werden über NodeRed abgeholt und im Datenpunkt des ioBrokers abgelegt.
        Quasi einmal um die Welt und wieder zurück ins heimische Netzwerk 😉. Und das fast in Echtzeit. Ich finde das echt Beeindruckend.

      Installation und Einrichtung NodeRed-Adapter im ioBroker

      NodeRed wird als Adapter im ioBroker installiert. Dies ist vermutlich die einfachste Art NodeRed nutzen zu können. NodeRed kann auch eigenständig als Paket auf z.B. einem Raspi oder Docker installiert werden. Dies ist aber kein Teil der Beschreibung.
      ef79990d-e19a-4ce9-8ac6-99d6496b7102-image.png
      Bei der Suche nach dem Adapter ist bitte auf den „Bindestrich“ zu achten.

      Ist der Adapter installiert muss dieser wie folgt eingerichtet werden.
      c96e61fb-9612-4d69-a1bb-4154bb915ac5-image.png
      Achtet darauf, den „Palettenmanager“ zu aktivieren.

      Mit Klick auf den Link oder direktem Aufruf von http://ip-adresse:1880 wird NodeRed in separatem Fenster geöffnet.
      ce9bdf6f-1ab9-456f-9ab7-c541ccbccf81-image.png

      Einrichtung NodeRed mit den TIBBER Nodes

      In NodeRed erfolgt die „Programmierung“ in den „Flows“. Zum Einsatz kommen dabei die sog. „Nodes“, die sich am linken Rand finden. Die Nodes für die TIBBER-Funktionalitäten müssen erst noch eingebunden werden. Dies erfolgt als nächstes.
      c7cbd74b-9266-4010-8da5-dbcae97fdad0-image.png

      Wähle im Hamburger-Menu den Eintrag „Palette verwalten“ aus. Dieser Eintrag ist nur vorhanden, wenn vorab in den Einstellungen des NodeRed Adapter „Palettenmanager benutzen“ aktiviert wurde – s.o.

      1670fe8e-4618-472b-ad4c-0c1bbdf159bc-image.png

      Suche im Palettenmanager nach „tibber“ und klicke auf „installieren“.

      Die Installation wird durchgeführt und die „node-red-contrib-tibber.api“ angezeigt. Nun muss der komplette NodeRed Adapter im ioBroker gestoppt und neu gestartet werden..
      6694dbfb-a076-4274-8e79-4593816e9039-image.png

      Sobald der Adapter wieder „grün“ ist, können wir loslegen.

      TIBBER Livedaten abholen und als JSON-String zur Verfügung stellen

      Klappt zuerst mal alle Nodes auf der linken Seite zu. Dafür unten auf die Doppelpfeile klicken.
      9c3989ec-0452-4ad3-9102-518af5fcdc1a-image.png

      Wenn Ihr dann ein wenig rollt, findet Ihr die Kategorie „Tibber API“ mit den zugehörigen Nodes.
      00bef124-29f2-4dd7-a9b2-d5afd54d1bf8-image.png

      Wählt nun aus den genannten Kategorien die folgenden Nodes aus und ordnet diese per „drag&drop“ wie abgebildet an
      6f0e2e8e-44a5-4487-a641-1b8c24133a00-image.png

      Aus der Kategorie „Tibber“ die Node „tibber-feed“. Aus der Kategorie „Parser“ die Node „JSON“. Aus der Kategorie „ioBroker“ die Node „ioBroker out“. Aus der Kategorie „Allgemein“ die Node „Debug“

      Verbindet die Nodes nun, durch „drag&drop“ der grauen Kästchen. Danach sollte es so aussehen.
      7e2ac360-23e3-46f1-9728-e32eb689e90c-image.png

      Damit haben wir den Aufbau unseres Flows abgeschlossen und wollen diesen noch umbenennen.
      b0f560e7-2a88-49b6-9eac-205ecfa6b637-image.png

      Dazu bitte doppelt auf den Reiter „Flow1“ klicken und einen Namen vergeben und mit „Fertig“ bestätigen.

      Flow einrichten und Datenabholen

      Tibber WebSocket-Verbindung einrichten

      Damit der Flow Daten von Tibber abholen und in einem Datenpunkt im ioBroker ablegen kann, bedarf es noch folgender Angaben.
      Durch Doppelklick auf die Node „tibber-feed“ können wir folgende Daten hinterlegen.
      5b48348e-022f-484e-87aa-084d63ae84a7-image.png

      Zuerst richten wir die WebSocket-Verbindung zum TIBBER-Server ein. Dazu bitte auf den „Stift“ klicken.
      9c35a989-03af-4a1a-b4be-cba6bc3ec29a-image.png

      Danach sind die Angaben wie abgebildet zu ergänzen. Der QraphQL-Endpoint lautet: https://api.tibber.com/v1-beta/gpl.
      Im Feld „Access Token“ ist Euer TIBBER-API-Token einzutragen.

      Die Angaben mit „Hinzufügen“ speichern.
      2f0ba41a-26f8-4e0d-bf90-0f0c7ab07edd-image.png

      Dann muss Eure TIBBER-API-HomeID im Feld „Home ID” eingetragen werden und noch ein Name für die Node vergeben werden.
      Mit den Checkboxen könnt Ihr festlegen, welche Daten von Tibber abholt werden sollen.
      GANZ WICHTIG: oben muss „active“ angehakt sein.
      Speicher über „Fertig“ nicht vergessen 😊.

      Es kann sein, dass die Nodes nun ein wenig verrutsch sind. Zieht diese einfach wieder in Position.
      3d6fd490-d628-48b5-a402-10d76cf8e30c-image.png
      8682580e-eae8-43b5-82f0-0c6caa2b934b-image.png

      Ablage der Daten im ioBroker Datenpunkt

      Mit Doppelklick öffnet Ihr die Einstellung der „ioBroker Out Node“

      6dc53004-8f24-44d5-85b7-d9a9e845965e-image.png

      Hinterlegt die Angaben wie abgebildet und klickt auf die 3 Punkte „…“, um den Datenpunkt im ioBroker auszuwählen, in den die Tibber-Daten geschrieben werden sollen.
      89d006af-e990-4933-8bb5-f6c314687e08-image.png

      Sollte Euer ioBroker Datenpunkt noch nicht angezeigt werden, dann müsst Ihr die Liste vorab aktualisieren – Symbol oben links.
      Nicht vergessen unten links über „select“ zu speichern 😊.
      3a194d4f-d900-47e7-bbca-7f85f3c72040-image.png

      Auch hier abschließend mit „Fertig“ speichern.

      Datenabholung Starten und im ioBroker prüfen

      Mit Klick auf „Übernahme (deploy)“ erfolgt die Ausführung der Logik. Das heißt es sollen bestenfalls Daten abgeholt und im Datenpunkt abgelegt werden.
      8db84819-7c8f-49d0-865f-c66d56a341b9-image.png

      Wenn alles korrekt eingerichtet wurde sieht es dann so aus:
      b107feb3-5ba8-43a8-a04a-2c219603dd27-image.png

      Oben seht Ihr, dass der „deploy“ erfolgreich durchgeführt wurde.
      An den grünen Kästchen seht Ihr, dass die Verbindung zu Tibber und zum ioBroker erfolgreich aufgebaut wurde.
      Und im rechten Bereich seht Ihr die Debug-Ausgabe der Debug-Node, mit den abgeholten Daten.

      Im ioBroker kommen die Daten nun wie folgt an:
      04437c43-117a-4af6-90f3-3ae749011e69-image.png

      Abschalten der Debug-Daten in NodeRed

      Sobald die Verbindung funzt und die Daten im ioB-Datenpunkt ankommen, kann der „Debug“ abgeschaltet werden.
      06d6df72-76e0-4cbb-8822-421942438a56-image.png
      Klickt dazu in das größere grüne Kästchen. Es verändert sich die Farbe.
      Danach wieder auf „Übernahme (deploy)“ klicken.

      Im Endeffekt werden alle Änderungen in NodeRed erst durch den „deploy“ verarbeitet.

      Prüfen und Aktualisieren der Tibber-Nodes

      Leider aktualisieren sich die eingebundenen Nodes nicht von selbst. Daher ist wiederkehrend manuell auf Aktualisierungen zu prüfen.

      Im Hamburger-Menu die Funktion "Palette verwalten" anwählen.
      d3aad797-97dc-47be-ab89-76e073e1d48a-image.png

      Im Suchfeld nach "tibber" suchen und schauen, ob Aktualisierungen vorliegen.
      0bd858fb-cd78-4d84-aa4f-dca2f894d3e5-image.png
      Wenn ja aktualisieren 😉
      Und bitte daran denken, dass der Tibber-Adapter im ioBroker neu gestartet werden muss. s.o.

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • RE: Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

      @shellyrulestheworld

      Hallo, das freut mich. Vielen Dank 🤗

      Der neuere Artikel hat das aktuelle Script. Und da ich nur an dem aktuellen Script weiterarbeite, wäre es besser dieses zu verwenden.´
      Wie @Schimi geschrieben hat, kommt kein Adapter zum Einsatz. Im Script ist es dafür nötig Dein Tibber-Token einzutragen.

      Neidisch bin ich ja schon..., denn ich würde auch mal gerne wieder PV-Überschuss verwenden können. Bei uns regnet es gefühlt seit Wochen und Erträge von rund 8 kWh werden direkt verfrühstückt. Wann wird's mal wieder richtig Sommer... 🤷‍♂️ 😊

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • RE: TIBBER Pulse Livedaten mit NodeRed abholen

      @michaelnorge

      Michaelnorge vor 4 Stunden
      @thomkast Erst einmal vielen Dank für das geniale Tutorial, hat super funktioniert.

      Ich brauche ja wie gesagt nur den RealTime-Verbrauch von Pulse, alle anderen Daten ziehe ich immer noch über den immer noch funktionierenden Test Adapter tibber v0.1.x. (Die Funktion, das dieser Adapter ausrechnen kann, wann der Strompreis in den nächsten Stunden am billigsten ist, ist unverzichtbar für mich.)

      Um meine Balkenanzeige in VIS zu reaktivieren habe ich mir behelfsmäßig ein Blockly zusammengewürfelt, um an die "reine" Zahl in der Node-Red Ausgabe zu kommen.

      ec559d16-7a40-4537-a8d3-ca0d497d7914-image.png dfc2a694-457e-4738-990c-8e1db30a43ad-image.png
      Gibt bestimmt was eleganteres, bestimmt auch direkt in Node-Red - aber da müßte ich mich reinfuchsen und da fehlt mir momentan leider die Zeit!

      Trotzdem vielen Dank für Deine Hilfe!


      Zu Deiner Frage... "Eleganter" kann man ja trefflich diskutieren 😉

      Der Begriff "Real Time Verbrauch" soll wahrscheinlich der aktuelle Strom-Bezugswert am Hausanschlusszähler sein. Also der, an dem der Tibber-Pulse hängt.

      Tibber-JSON-Daten im ioBroker aufsplitten:
      Da die Tibber-Daten im JSON-Format abgelegt werden, kann man einzelne Daten quasi "adressieren". Die Grundlagen zu JSON habe ich HIER mal ganz rudimentär erklärt. Für unsere Daten bedeutet dies:

      Du möchtest nur den Wert "power" aus dem JSON verwenden. Dies kannst Du wie folgt extrahieren.
      5663e8c4-df05-45d3-90e2-668574c971c6-image.png Diese Funktion beansprucht weniger Performance Deines Raspi.

      Tibber-JSON-Daten in NodeRed aufsplitten:

      Wenn die Aufteilung direkt in NodeRed erfolgt ist es noch performanter.
      Dies könnte so erfolgen:
      1a08dfb2-6734-480f-b1c9-98cfdc610f29-image.png
      Dabei kommt die Node "function" zum Einsatz.
      000c32f7-a22f-45bc-973e-7b833baec27c-image.png
      Stelle diese Node wie abgebildet ein:
      22f41515-fd3c-4b93-8439-119f34cc1db4-image.png

      ... und immer an den "deploy" denken, sonst ändert sich nix 🙂

      Und schon sind die reinen Zahl-Werte des aktuellen Bezugs im ioBroker 😉
      c9604077-930a-482a-aa5f-ef0522922491-image.png

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • RE: Grafana nach Update über Port 3000 nicht erreichbar

      @Meister-Mopper
      @Thomas-Braun
      @crunchip

      Dann möchte ich mich zum Schluss für Eure Geduld und unglaubliche Unterstützung bedanken. Vielen herzlichen Dank.
      Zukünftig werde ich deutlich zurückhaltender agieren und noch viel mehr lesen.

      Ich wünsche Euch schöne Festtage und einen gelungenen Start ins neue Jahr. Passt auf Euch auf und bleibt gesund. 🍀

      posted in Grafana
      T
      ThomKast
    • RE: Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse

      @michaelnorge
      @theGrinch

      Entschuldigt bitte, dass ich den Beitrag so häufig korrigiere... Die Verwendung des normalen "timeouts" wird mir vermutlich noch länger ein Rätsel bleiben... Mit dem abgebildeten "Ausführen Timeout in..." läuft es nun wie gewünscht.

      Hallo Zusammen und vielen Dank an Michael für den Script-Vorschlag. Habe es bei mir ein wenig anders und eher in die Richtung von TheGrinch gelöst...

      9c1e621c-fad6-4b6c-b244-2990be893309-image.png
      Sobald der Adapter die Verbindung verliert, wird nach Ablauf von 3 Minuten, der Adapter gestoppt und neu gestartet. Sollte sich der Adapter, innerhalb der 3 Minuten wieder verbunden haben, wird das Beenden/Neustarten unterbrochen und der Adapter läuft ungehindert weiter.

      Es wurden deshalb 3 Minuten gewählt, weil bislang der Adapter erst nach 3 Minuten komplett ausgefallen war. Diese Zeit wollte ich warten.

      Außerdem musste ich die Zeit zwischen Stop und Start auf 30 Sekunden setzen, um LOG-Einträge zu vermeiden, dass der Start zu schnell nach dem Stop erfolgte... fc5be995-7a47-4432-ac71-1b9801173f52-image.png

      Beste Grüße, Thomas

      posted in Tester
      T
      ThomKast
    • RE: EMU professional 3/75 TCP einbinden

      @glasfaser
      GENAU. Habe ich auch gerade durch probieren rausbekommen.
      Super. Noch mal vielen Dank für Deine Hilfe.

      posted in Hardware
      T
      ThomKast
    • RE: Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

      @dieterh
      Entschuldige bitte, dass es so nicht funktioniert. Versuch mal bitte folgenden Weg mit der Datei zum downloaden.

      2022-12-23_Tibber_Script_Blöcke_export_import.html

      • Download der Datei
      • Eröffne ein neues, leeres Blockly Script
      • Öffne die Datei mit einem Editor OHNE JEGLICHE Zeichen einzufügen oder zu ändern
      • Markiere den kompletten Inhalt und kopiere diesen in die Zwischenablage (STRG+A dann STRG+C)
      • Im leeren Blockly Script über "Blöcke importieren" die leere Import-Seite öffnen und den Inhalt der Zwischenablage dort einfügen (STRG-V)
      • Durch klick auf "IMPORT" wird alles importiert
      • Script unbedingt speichern, bevor etwas anderes aufgerufen wird. Bei einem Refresh der Seite ist der importierte Inhalt sonst nämlich weg

      Ich nutze es immer auf diesem Weg. Hoffe es klappt auch für Dich.
      LG, Thomas

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • RE: Test Adapter TibberConnect 0.0.x inkl. Tibber Pulse

      Hi @michaelnorge wie sieht es aus? Ist es jetzt etwas für Dich? 🙂

      posted in Tester
      T
      ThomKast
    • RE: Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

      @wesertaler
      Moin Peter, schön, dass es Dein Interesse trifft. Ich bin auch schon gespannt. In ein paar Tage geht es los. und wenn ich die aktuell günstigen Stundenpreise sehe, dann bin ich schon ziemlich sicher, dass der Umstieg die richtige Entscheidung ist. Genaues sehen wir am Jahresende ;-).

      So ganz verstehe ich Deine Frage nicht. Vermutlich ist nicht die Download-Datei das Problem, sondern die unterschiedliche Art des Imports.
      Die aktualisierte Datei 2022-12-26_TIBBER_scriptt.json kannst Du nun über "3-Punkte-Menu" --> "Skripte importieren" einbinden. Bitte daran denken die "*****" mit dem eigenen Token auszutauschen 😉
      c02a026a-049a-4021-9aa1-4b9cb9c36f23-image.png
      Es handelt sich um die aktuellste Version mit kleinen Ergänzungen, die ich noch nicht beschrieben habe. Hinweise findest Du in den zugeklappten "?"-Kommentaren der einzelnen Bausteine.

      Der Export der alten Datei vom 10.12.2022 wäre mit copy-and-paste über die Funktion "Blöcke importieren" in ein leeres Script zu importieren. Aber die Version würde ich nicht mehr verwenden.
      16a69435-9666-44fb-8577-c3c5cf45c5d4-image.png

      Zur "manuellen Bedienung" in den Fällen, dass TIBBER die Daten nicht rechtzeitig bereitgestellt hat oder technische Probleme die Abholung nicht ermöglichen, kannst Du die Script-Teile auch manuell nutzen.

      • Zur Abholung zu einer späteren Zeit einfach die "Abholzeit" ändern - z.B. auf aktuelle Zeit plus 2 Minuten, um die Werte "quasi jetzt" abzuholen. Nach dem Abholen, die "Abholzeit" dann wieder auf einen Wert nach "14:30" ändern.
      • Um die Preise manuell zu splitten und günstigsten Preis/Stunde zu ermitteln, können die deaktivierten Blöcke unter "2." aktiviert werden. Details im Kommentar.

      Zusätzlich wird in der aktuellen Version noch ein "ungewichteter Durchschnittspreis" ermittelt. Es werden also alle Stundenpreise addiert und durch 24 geteilt. Dazu sind 2 weitere Datenpunkte nötig:
      "0_userdata.0.Tibber.EPEX_Spot_DE_heute.ESDE_heute_Mittel_ungewichtet"
      "0_userdata.0.Tibber.EPEX_Spot_DE_morgen.ESDE_morgen_Mittel_ungewichtet"

      Kannst ja noch mal Bescheid geben, ob es geklappt hat.

      Beste Grüße und viel Erfolg, Thomas

      PS: Die obige Beschreibung werde ich noch überarbeiten. Zur Zeit fehlt die Zeit 😉

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast

    Latest posts made by ThomKast

    • RE: request package is deprecated - please use httpGet

      Moin zusammen,
      erstmal vielen Dank, dass es nun endlich einen richtigen Block für den post gibt. In den verganenen Lösungen bedurfte es viel Unterstützung, um doch eine Lösung über Axios zu realisieren. Das neue Block ist eine riesen Hilfe und Erleichtung.

      Ich stelle fleißig auf httpget/post um und komme grundsätzlich klar, habe aber eine Konstellation, die sich nicht auflösen lässt... Vielleicht findet Ihr die Zeit mal draufzuschauen und mir einen Tipp zu geben:

      • Im Einsatz ist ein Relaisboard über welches meine Fussbodenheizungsventile angesteuert werden.
      • Der STATE des Boards wird über MQTT ausgelesen, was so aussieht und originär vom Typ "number" ist
        0785671d-353d-4b0b-aef9-2e7773214dc7-image.png
      • Geschaltet wird das Relais über einen http-request wie folgt:
        6fb15c8e-f6ae-489e-9d3f-aca642b2667a-image.png
      • Das funktioniert technisch auch, führt aber zu dem Hinweis
        6e57c012-50a6-4003-8048-64120bccad30-image.png
      • Ändere ich nun den Typ von STATE auf "string", erhalte ich folgende Meldung
        d676b0b6-57cc-411e-9e8d-33c76a07f465-image.png

      Damit drehe ich mich nun im Kreis und denke, dass der korrekte Typ unter MQTT "number" sein muss. Dann weiß ich aber nicht, wie ich den Wert als "number" in einem "string" verpacke... Denn der "?cmd=gpio,15,1" wird doch immer ein "string" bleiben.

      Ich bin sicher, dass ich hier etwas noch nicht komplett verstanden habe ;-).
      Vielen Dank im Voraus und viele Grüße, Thomas

      posted in Blockly
      T
      ThomKast
    • RE: Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

      @Peter666666 Hi Peter, nun hat es doch etwas länger gedauert... Aber 🙂

      Anbei das überarbeitete Skript. 2024-01-26_APIS_AT_EPEX-Steuerung.json
      Die verwendeten Datenpunkte sind unverändert geblieben.

      Das Skript setzte nun den DP "WP_Freigabe" bei passender Stunde auf "true" und setzt den DP nach überschreiten der "Anzahl_Heiz-Lade-Stunden" wieder auf "false" zurück.

      Beachte bitte, dass das Skript beim Start (, bzw. wenn Du es dann aufrufst) direkt auf die "aktuelle Stunde" prüft. Sollte die aktuelle Stunde eine der günstigsten Stunden sein, wird der DP direkt auf "true" gesetzt. Je nach dem wieviel Minuten bereits von der aktuellen Stunde vergangen sind, steht in dieser Stunde dann natürlich keine komplette Stunde mehr zur Verfügung...
      Bsp: es ist 10:23 Uhr -> das Script wird aufgerufen
      -> günstigste Stunden werden zusammengestellt
      -> die erste günstige Stunde liegt von 10:00 bis 10:59
      -> Es wird geprüft, ob die aktuelle eine günstige Stunde ist
      -> ja aktuelle Stunde ist günstige Stunde
      -> DP wird auf "true" gesetzt
      -> die nächste Prüfung auf günstige Stunde erfolgt erst um 11:01
      ... solltest Du mit einer "Anzahl_Heiz-Lade-Stunden" = 1 arbeiten, bleibt der DP nur noch für 37 Minuten auf "true".

      -----------------------------------------
      Eines ist noch gaaaaaanz wichtig !
      Solltest Du den Skript-Teil in Deine Lösung einbinden, ist es wichtig, dass Du den CRON im Script-Teil immer stoppst. Mit jedem Aufruf wird ein CRON gesetzt. Rufst Du den Script-Teil mehrfach auf, laufen mehrfach die CRONs ab. Also immer beim Aufruf den STOP davor setzen...00cc1b08-d610-4556-8226-5b9105776119-image.png
      Oder Du setzt den STOP direkt am Anfang des Scripts. Das wäre das Sicherste.
      ... habe ich jetzt nicht mehr gemacht, da ich das Script bereits exportiert hatte 😉 ...

      Ich hoffe dies hilft Dir weiter ;-). Gruß, Thomas

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • RE: Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

      @peter666666 Hi Peter. Anbei das Skript mit den Änderungen, so dass die bereits vergangenen Stunden nicht mehr berücksichtigt werden und die Meldungen der nächsten Aufheiz-/Ladestunde nur einmal abgesetzt wird. Gruß, Thomas

      2024-01-10_APIS_EPEX_sortieren_und_Laden-Aufheizen.json

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • RE: Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

      @Peter666666 @Qlink
      Jetzt hat es doch etwas länger gedauert einen Lösungsansatz zu finden. Vielleicht hilft Euch folgende Umsetzung...

      Skript: 2024-01-07_APIS_EPEX_sortieren_und_Laden-Aufheizen.json

      Dazu ist wieder der Datenpunkt zur Aufnahme der APIS EPEX Preise nötig ;-).

      Idee und Ablauf sind wie folgt:

        1. Die APEX Daten werden (bitte nur 1malig am Tag) geladen.
          Erfolgt dies nach ??:?? Uhr, stehen auch gleich die Daten des Folgetages bereit.
        1. Die Daten werden in einem Array aufbereitet und nach Preis aufsteigend sortiert.
          Somit stehen die Stunden mit den günstigsten EPEX-Preisen am Anfang des Arrays.
        1. Mit dem Wert 93cef3b9-6e40-4a23-a57c-92f6e03efb61-image.png wird festgelegt, für wieviele Stunden eine Ladung/Aufheizung vorgenommen werden soll. Dies sind "NICHT" die "NÄCHSTEN" z.B. 5h, sondern erstmal nur 5 Stunden.
        1. Dann werden die günstigsten 5h wieder in die ursprüngliche Reihenfolge gebracht, da die günstigsten Stunden ja nicht unbedingt alle hintereinander liegen müssen.
        1. Dann wird ein Zeitplan gestartet, der zu jedem Stundenbeginn 8514ea27-bac9-418a-861e-e806f9b79e1e-image.png prüft, ob die aktuelle Stunde eine der günstigen 5 Stunden ist.
        1. Abhängig, ob dies zutrifft, wird die Ladung/Aufheizung gestartet oder beendet.
          Dazu werden dann noch Nachrichten abgesetzt, die den Verlauf aufzeigen.
          *7. Sind die 5 (im Beispiel) günstigsten Lade-/Aufheizstunden durchlaufen worden, wird eine finale Nachricht 93295ed7-2590-4e71-89b7-129f55c591f9-image.png abgesetzt und der Zeitplan beendet.

      Die gesamte Routine muss also wiederkehrend gestartet werden und kalkuliert immer wieder neu.

      Hoffe es ist was für Euch dabei und freue mich auf Eure Rückmeldung. Gruß, Thomas

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • RE: JSON Liste sortieren (Funktion)

      @liv-in-sky So... Habe nun auch rausbekommen, an welcher Stelle die Erstellung eine JSON unter Blockly hakte. Es fehlten die ständigen Konvertierungen "JSON nach Objekt" und "Objekt nach JSON". Es wird halt kein JSON weggeschrieben sondern "nur" ein String, der immer wieder hin-und-her zu konvertieren ist, je nachdem was gebraucht wird...

      Ich bin voll und ganz bei Dir. Direkt in JS wäre das sicher kein Problem, da direkt mit Typ JSON gearbeitet wird. Leider bin ich in JS nicht firm genug...

      Rein Zur Info mal das Ergebnis mit funktionalen Sortierungen... Sofern Du es ausprobieren möchtest, bedarf es noch eines STRING-Datenpunktes
      c7bfed15-c0de-417e-a9a8-597aaf07a2d2-image.png

      Skript: 2024-01-07_APIS_EPEX_sortieren_und_Laden-Aufheizen.json

      Herzlichen Dank für Deine Unterstützung und damit verbundene Zeit und Mühe. Du hast mir riesig geholfen. 👏 👏 👏

      posted in JavaScript
      T
      ThomKast
    • RE: JSON Liste sortieren (Funktion)

      @liv-in-sky OKAY 👏 😀 ... Da muss ich mich erst mal reinarbeiten. Wird ein wenig dauern und ich melde mich dann wieder 👍

      posted in JavaScript
      T
      ThomKast
    • RE: JSON Liste sortieren (Funktion)

      Hi und vielen Dank für Deine Antwort 👍 .

      @liv-in-sky sagte in JSON Liste sortieren (Funktion):

      @thomkast
      ich denke, du erzeugst kein array in einem array sondern ein array, welches aus strings (z.b. "[9.87,"06.01.2024",0,1]") besteht

      Das hatte ich schon fast vermutet, da dies der einzige Unterschied zum anderen Script war. Allerdings weiß ich nicht, wie ich einen korrekten JSON Aufbau erzeugen könnte.
      Denn es wäre nötig die JSON-Struktur der "inneren" 4 zusammenhängenden Werte aufrecht zu erhalten. Denn alle 4 Werte gehören zu einer Stunde, auf die ich später adressieren möchte.

      Dein Script funz't natürlich, wobei ich überhaupt nicht kapiere was "oPushList / ListOfFour" macht. Und "SortedArray" ebenfalls... 🤷‍♂️ . Hättest Du einen Link, mit dem ich mich dazu mal einlesen kann. Ich stehe da gerade echt wie der Ochs vor'm Berg.

      Ist es unverschämt, wenn ich frage, ob Du noch einen Lösungsansatz mit korrektem, bzw für die Erstellung eines korrekten JSON Array hättest...

      posted in JavaScript
      T
      ThomKast
    • RE: Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

      @Peter666666 @Qlink Nur als kurzes Update. Ich bin noch an einem Lösungsansatz dran, hänge aber gerade etwas fest. Melde mich aber auf alle Fälle wieder/noch.

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    • RE: JSON Liste sortieren (Funktion)

      Hallo Zusammen. Auch wenn der Thread älter ist, hänge ich gerade in einer nicht mehr funktionierenden Sortierung fest. Es wäre klasse, wenn Ihr Euch das mal anschauen könntet...

      Folgende Situation:

      Dies sind die Ausgangsdaten, die ich in einer Liste abbilde und anschließend unterschiedlich sortieren möchte:

      {
       "tariff": "EPEXSPOTAT",
       "unit": "ct/kWh",
       "interval": 15,
       "data": [
         {
           "date": "2024-01-06T00:00:00+01:00",
           "value": 9.87
         },
         {
           "date": "2024-01-06T00:15:00+01:00",
           "value": 9.87
         },
         {
           "date": "2024-01-06T00:30:00+01:00",
           "value": 9.87
         },
         {
           "date": "2024-01-06T00:45:00+01:00",
           "value": 9.87
         },
         {
           "date": "2024-01-06T01:00:00+01:00",
           "value": 9.624
         },
         {
           "date": "2024-01-06T01:15:00+01:00",
           "value": 9.624
         },
         {
           "date": "2024-01-06T01:30:00+01:00",
           "value": 9.624
         },
         {
           "date": "2024-01-06T01:45:00+01:00",
           "value": 9.624
         },
         {
           "date": "2024-01-06T02:00:00+01:00",
           "value": 9.136
         },
         {
           "date": "2024-01-06T02:15:00+01:00",
           "value": 9.136
         },
         {
           "date": "2024-01-06T02:30:00+01:00",
           "value": 9.136
         },
         {
           "date": "2024-01-06T02:45:00+01:00",
           "value": 9.136
         },
         {
           "date": "2024-01-06T03:00:00+01:00",
           "value": 8.761
         },
         {
           "date": "2024-01-06T03:15:00+01:00",
           "value": 8.761
         },
         {
           "date": "2024-01-06T03:30:00+01:00",
           "value": 8.761
         },
         {
           "date": "2024-01-06T03:45:00+01:00",
           "value": 8.761
         },
         {
           "date": "2024-01-06T04:00:00+01:00",
           "value": 8.761
         },
         {
           "date": "2024-01-06T04:15:00+01:00",
           "value": 8.761
         },
         {
           "date": "2024-01-06T04:30:00+01:00",
           "value": 8.761
         },
         {
           "date": "2024-01-06T04:45:00+01:00",
           "value": 8.761
         },
         {
           "date": "2024-01-06T05:00:00+01:00",
           "value": 8.951
         },
         {
           "date": "2024-01-06T05:15:00+01:00",
           "value": 8.951
         },
         {
           "date": "2024-01-06T05:30:00+01:00",
           "value": 8.951
         },
         {
           "date": "2024-01-06T05:45:00+01:00",
           "value": 8.951
         },
         {
           "date": "2024-01-06T06:00:00+01:00",
           "value": 9.012
         },
         {
           "date": "2024-01-06T06:15:00+01:00",
           "value": 9.012
         },
         {
           "date": "2024-01-06T06:30:00+01:00",
           "value": 9.012
         },
         {
           "date": "2024-01-06T06:45:00+01:00",
           "value": 9.012
         },
         {
           "date": "2024-01-06T07:00:00+01:00",
           "value": 9.767
         },
         {
           "date": "2024-01-06T07:15:00+01:00",
           "value": 9.767
         },
         {
           "date": "2024-01-06T07:30:00+01:00",
           "value": 9.767
         },
         {
           "date": "2024-01-06T07:45:00+01:00",
           "value": 9.767
         },
         {
           "date": "2024-01-06T08:00:00+01:00",
           "value": 10.608
         },
         {
           "date": "2024-01-06T08:15:00+01:00",
           "value": 10.608
         },
         {
           "date": "2024-01-06T08:30:00+01:00",
           "value": 10.608
         },
         {
           "date": "2024-01-06T08:45:00+01:00",
           "value": 10.608
         },
         {
           "date": "2024-01-06T09:00:00+01:00",
           "value": 11.068
         },
         {
           "date": "2024-01-06T09:15:00+01:00",
           "value": 11.068
         },
         {
           "date": "2024-01-06T09:30:00+01:00",
           "value": 11.068
         },
         {
           "date": "2024-01-06T09:45:00+01:00",
           "value": 11.068
         },
         {
           "date": "2024-01-06T10:00:00+01:00",
           "value": 11.676
         },
         {
           "date": "2024-01-06T10:15:00+01:00",
           "value": 11.676
         },
         {
           "date": "2024-01-06T10:30:00+01:00",
           "value": 11.676
         },
         {
           "date": "2024-01-06T10:45:00+01:00",
           "value": 11.676
         },
         {
           "date": "2024-01-06T11:00:00+01:00",
           "value": 12.052
         },
         {
           "date": "2024-01-06T11:15:00+01:00",
           "value": 12.052
         },
         {
           "date": "2024-01-06T11:30:00+01:00",
           "value": 12.052
         },
         {
           "date": "2024-01-06T11:45:00+01:00",
           "value": 12.052
         },
         {
           "date": "2024-01-06T12:00:00+01:00",
           "value": 11.899
         },
         {
           "date": "2024-01-06T12:15:00+01:00",
           "value": 11.899
         },
         {
           "date": "2024-01-06T12:30:00+01:00",
           "value": 11.899
         },
         {
           "date": "2024-01-06T12:45:00+01:00",
           "value": 11.899
         },
         {
           "date": "2024-01-06T13:00:00+01:00",
           "value": 11.359
         },
         {
           "date": "2024-01-06T13:15:00+01:00",
           "value": 11.359
         },
         {
           "date": "2024-01-06T13:30:00+01:00",
           "value": 11.359
         },
         {
           "date": "2024-01-06T13:45:00+01:00",
           "value": 11.359
         },
         {
           "date": "2024-01-06T14:00:00+01:00",
           "value": 11.096
         },
         {
           "date": "2024-01-06T14:15:00+01:00",
           "value": 11.096
         },
         {
           "date": "2024-01-06T14:30:00+01:00",
           "value": 11.096
         },
         {
           "date": "2024-01-06T14:45:00+01:00",
           "value": 11.096
         },
         {
           "date": "2024-01-06T15:00:00+01:00",
           "value": 11.306
         },
         {
           "date": "2024-01-06T15:15:00+01:00",
           "value": 11.306
         },
         {
           "date": "2024-01-06T15:30:00+01:00",
           "value": 11.306
         },
         {
           "date": "2024-01-06T15:45:00+01:00",
           "value": 11.306
         },
         {
           "date": "2024-01-06T16:00:00+01:00",
           "value": 11.795
         },
         {
           "date": "2024-01-06T16:15:00+01:00",
           "value": 11.795
         },
         {
           "date": "2024-01-06T16:30:00+01:00",
           "value": 11.795
         },
         {
           "date": "2024-01-06T16:45:00+01:00",
           "value": 11.795
         },
         {
           "date": "2024-01-06T17:00:00+01:00",
           "value": 12.516
         },
         {
           "date": "2024-01-06T17:15:00+01:00",
           "value": 12.516
         },
         {
           "date": "2024-01-06T17:30:00+01:00",
           "value": 12.516
         },
         {
           "date": "2024-01-06T17:45:00+01:00",
           "value": 12.516
         },
         {
           "date": "2024-01-06T18:00:00+01:00",
           "value": 12.436
         },
         {
           "date": "2024-01-06T18:15:00+01:00",
           "value": 12.436
         },
         {
           "date": "2024-01-06T18:30:00+01:00",
           "value": 12.436
         },
         {
           "date": "2024-01-06T18:45:00+01:00",
           "value": 12.436
         },
         {
           "date": "2024-01-06T19:00:00+01:00",
           "value": 11.88
         },
         {
           "date": "2024-01-06T19:15:00+01:00",
           "value": 11.88
         },
         {
           "date": "2024-01-06T19:30:00+01:00",
           "value": 11.88
         },
         {
           "date": "2024-01-06T19:45:00+01:00",
           "value": 11.88
         },
         {
           "date": "2024-01-06T20:00:00+01:00",
           "value": 11.057
         },
         {
           "date": "2024-01-06T20:15:00+01:00",
           "value": 11.057
         },
         {
           "date": "2024-01-06T20:30:00+01:00",
           "value": 11.057
         },
         {
           "date": "2024-01-06T20:45:00+01:00",
           "value": 11.057
         },
         {
           "date": "2024-01-06T21:00:00+01:00",
           "value": 10.56
         },
         {
           "date": "2024-01-06T21:15:00+01:00",
           "value": 10.56
         },
         {
           "date": "2024-01-06T21:30:00+01:00",
           "value": 10.56
         },
         {
           "date": "2024-01-06T21:45:00+01:00",
           "value": 10.56
         },
         {
           "date": "2024-01-06T22:00:00+01:00",
           "value": 10.388
         },
         {
           "date": "2024-01-06T22:15:00+01:00",
           "value": 10.388
         },
         {
           "date": "2024-01-06T22:30:00+01:00",
           "value": 10.388
         },
         {
           "date": "2024-01-06T22:45:00+01:00",
           "value": 10.388
         },
         {
           "date": "2024-01-06T23:00:00+01:00",
           "value": 9.584
         },
         {
           "date": "2024-01-06T23:15:00+01:00",
           "value": 9.584
         },
         {
           "date": "2024-01-06T23:30:00+01:00",
           "value": 9.584
         },
         {
           "date": "2024-01-06T23:45:00+01:00",
           "value": 9.584
         },
         {
           "date": "2024-01-07T00:00:00+01:00",
           "value": 10.09
         },
         {
           "date": "2024-01-07T00:15:00+01:00",
           "value": 10.09
         },
         {
           "date": "2024-01-07T00:30:00+01:00",
           "value": 10.09
         },
         {
           "date": "2024-01-07T00:45:00+01:00",
           "value": 10.09
         },
         {
           "date": "2024-01-07T01:00:00+01:00",
           "value": 9.578
         },
         {
           "date": "2024-01-07T01:15:00+01:00",
           "value": 9.578
         },
         {
           "date": "2024-01-07T01:30:00+01:00",
           "value": 9.578
         },
         {
           "date": "2024-01-07T01:45:00+01:00",
           "value": 9.578
         },
         {
           "date": "2024-01-07T02:00:00+01:00",
           "value": 9.211
         },
         {
           "date": "2024-01-07T02:15:00+01:00",
           "value": 9.211
         },
         {
           "date": "2024-01-07T02:30:00+01:00",
           "value": 9.211
         },
         {
           "date": "2024-01-07T02:45:00+01:00",
           "value": 9.211
         },
         {
           "date": "2024-01-07T03:00:00+01:00",
           "value": 8.815
         },
         {
           "date": "2024-01-07T03:15:00+01:00",
           "value": 8.815
         },
         {
           "date": "2024-01-07T03:30:00+01:00",
           "value": 8.815
         },
         {
           "date": "2024-01-07T03:45:00+01:00",
           "value": 8.815
         },
         {
           "date": "2024-01-07T04:00:00+01:00",
           "value": 8.623
         },
         {
           "date": "2024-01-07T04:15:00+01:00",
           "value": 8.623
         },
         {
           "date": "2024-01-07T04:30:00+01:00",
           "value": 8.623
         },
         {
           "date": "2024-01-07T04:45:00+01:00",
           "value": 8.623
         },
         {
           "date": "2024-01-07T05:00:00+01:00",
           "value": 8.65
         },
         {
           "date": "2024-01-07T05:15:00+01:00",
           "value": 8.65
         },
         {
           "date": "2024-01-07T05:30:00+01:00",
           "value": 8.65
         },
         {
           "date": "2024-01-07T05:45:00+01:00",
           "value": 8.65
         },
         {
           "date": "2024-01-07T06:00:00+01:00",
           "value": 8.988
         },
         {
           "date": "2024-01-07T06:15:00+01:00",
           "value": 8.988
         },
         {
           "date": "2024-01-07T06:30:00+01:00",
           "value": 8.988
         },
         {
           "date": "2024-01-07T06:45:00+01:00",
           "value": 8.988
         },
         {
           "date": "2024-01-07T07:00:00+01:00",
           "value": 9.323
         },
         {
           "date": "2024-01-07T07:15:00+01:00",
           "value": 9.323
         },
         {
           "date": "2024-01-07T07:30:00+01:00",
           "value": 9.323
         },
         {
           "date": "2024-01-07T07:45:00+01:00",
           "value": 9.323
         },
         {
           "date": "2024-01-07T08:00:00+01:00",
           "value": 9.815
         },
         {
           "date": "2024-01-07T08:15:00+01:00",
           "value": 9.815
         },
         {
           "date": "2024-01-07T08:30:00+01:00",
           "value": 9.815
         },
         {
           "date": "2024-01-07T08:45:00+01:00",
           "value": 9.815
         },
         {
           "date": "2024-01-07T09:00:00+01:00",
           "value": 10.183
         },
         {
           "date": "2024-01-07T09:15:00+01:00",
           "value": 10.183
         },
         {
           "date": "2024-01-07T09:30:00+01:00",
           "value": 10.183
         },
         {
           "date": "2024-01-07T09:45:00+01:00",
           "value": 10.183
         },
         {
           "date": "2024-01-07T10:00:00+01:00",
           "value": 10.457
         },
         {
           "date": "2024-01-07T10:15:00+01:00",
           "value": 10.457
         },
         {
           "date": "2024-01-07T10:30:00+01:00",
           "value": 10.457
         },
         {
           "date": "2024-01-07T10:45:00+01:00",
           "value": 10.457
         },
         {
           "date": "2024-01-07T11:00:00+01:00",
           "value": 10.696
         },
         {
           "date": "2024-01-07T11:15:00+01:00",
           "value": 10.696
         },
         {
           "date": "2024-01-07T11:30:00+01:00",
           "value": 10.696
         },
         {
           "date": "2024-01-07T11:45:00+01:00",
           "value": 10.696
         },
         {
           "date": "2024-01-07T12:00:00+01:00",
           "value": 10.639
         },
         {
           "date": "2024-01-07T12:15:00+01:00",
           "value": 10.639
         },
         {
           "date": "2024-01-07T12:30:00+01:00",
           "value": 10.639
         },
         {
           "date": "2024-01-07T12:45:00+01:00",
           "value": 10.639
         },
         {
           "date": "2024-01-07T13:00:00+01:00",
           "value": 10.177
         },
         {
           "date": "2024-01-07T13:15:00+01:00",
           "value": 10.177
         },
         {
           "date": "2024-01-07T13:30:00+01:00",
           "value": 10.177
         },
         {
           "date": "2024-01-07T13:45:00+01:00",
           "value": 10.177
         },
         {
           "date": "2024-01-07T14:00:00+01:00",
           "value": 10.121
         },
         {
           "date": "2024-01-07T14:15:00+01:00",
           "value": 10.121
         },
         {
           "date": "2024-01-07T14:30:00+01:00",
           "value": 10.121
         },
         {
           "date": "2024-01-07T14:45:00+01:00",
           "value": 10.121
         },
         {
           "date": "2024-01-07T15:00:00+01:00",
           "value": 10.561
         },
         {
           "date": "2024-01-07T15:15:00+01:00",
           "value": 10.561
         },
         {
           "date": "2024-01-07T15:30:00+01:00",
           "value": 10.561
         },
         {
           "date": "2024-01-07T15:45:00+01:00",
           "value": 10.561
         },
         {
           "date": "2024-01-07T16:00:00+01:00",
           "value": 11.21
         },
         {
           "date": "2024-01-07T16:15:00+01:00",
           "value": 11.21
         },
         {
           "date": "2024-01-07T16:30:00+01:00",
           "value": 11.21
         },
         {
           "date": "2024-01-07T16:45:00+01:00",
           "value": 11.21
         },
         {
           "date": "2024-01-07T17:00:00+01:00",
           "value": 12.212
         },
         {
           "date": "2024-01-07T17:15:00+01:00",
           "value": 12.212
         },
         {
           "date": "2024-01-07T17:30:00+01:00",
           "value": 12.212
         },
         {
           "date": "2024-01-07T17:45:00+01:00",
           "value": 12.212
         },
         {
           "date": "2024-01-07T18:00:00+01:00",
           "value": 12.582
         },
         {
           "date": "2024-01-07T18:15:00+01:00",
           "value": 12.582
         },
         {
           "date": "2024-01-07T18:30:00+01:00",
           "value": 12.582
         },
         {
           "date": "2024-01-07T18:45:00+01:00",
           "value": 12.582
         },
         {
           "date": "2024-01-07T19:00:00+01:00",
           "value": 12.425
         },
         {
           "date": "2024-01-07T19:15:00+01:00",
           "value": 12.425
         },
         {
           "date": "2024-01-07T19:30:00+01:00",
           "value": 12.425
         },
         {
           "date": "2024-01-07T19:45:00+01:00",
           "value": 12.425
         },
         {
           "date": "2024-01-07T20:00:00+01:00",
           "value": 12.06
         },
         {
           "date": "2024-01-07T20:15:00+01:00",
           "value": 12.06
         },
         {
           "date": "2024-01-07T20:30:00+01:00",
           "value": 12.06
         },
         {
           "date": "2024-01-07T20:45:00+01:00",
           "value": 12.06
         },
         {
           "date": "2024-01-07T21:00:00+01:00",
           "value": 11.197
         },
         {
           "date": "2024-01-07T21:15:00+01:00",
           "value": 11.197
         },
         {
           "date": "2024-01-07T21:30:00+01:00",
           "value": 11.197
         },
         {
           "date": "2024-01-07T21:45:00+01:00",
           "value": 11.197
         },
         {
           "date": "2024-01-07T22:00:00+01:00",
           "value": 10.94
         },
         {
           "date": "2024-01-07T22:15:00+01:00",
           "value": 10.94
         },
         {
           "date": "2024-01-07T22:30:00+01:00",
           "value": 10.94
         },
         {
           "date": "2024-01-07T22:45:00+01:00",
           "value": 10.94
         },
         {
           "date": "2024-01-07T23:00:00+01:00",
           "value": 10.063
         },
         {
           "date": "2024-01-07T23:15:00+01:00",
           "value": 10.063
         },
         {
           "date": "2024-01-07T23:30:00+01:00",
           "value": 10.063
         },
         {
           "date": "2024-01-07T23:45:00+01:00",
           "value": 10.063
         }
       ]
      }
      

      Nach der Abbildung als Liste, liegen folgende Informationen vor:

      [11.068,"06.01.2024",9,10],[11.676,"06.01.2024",10,11],[12.052,"06.01.2024",11,12],[11.899,"06.01.2024",12,13],[11.359,"06.01.2024",13,14],[11.096,"06.01.2024",14,15],[11.306,"06.01.2024",15,16],[11.795,"06.01.2024",16,17],[12.516,"06.01.2024",17,18],[12.436,"06.01.2024",18,19],[11.88,"06.01.2024",19,20],[11.057,"06.01.2024",20,21],[10.56,"06.01.2024",21,22],[10.388,"06.01.2024",22,23],[9.584,"06.01.2024",23,24],[10.09,"07.01.2024",0,25],[9.578,"07.01.2024",1,26],[9.211,"07.01.2024",2,27],[8.815,"07.01.2024",3,28],[8.623,"07.01.2024",4,29],[8.65,"07.01.2024",5,30]
      

      In einem anderen Script sortiere ich bereits ähnliche Werte mit dieser Logik:
      2bc87894-8f96-453d-860f-b387064f636c-image.png
      Der Wert "1" soll dazu führen, dass die Liste nach dem ersten Wert in der Klammer (EPEX Preis) sortiert wird. Im weiteren Verlauf, sollen die Daten nach dem 4. Wert sortiert werden.
      Egal nach welchem Wert "0" bis "4" ich sortiere, die Ergebnisse wirken irgendwie "unsortiert".

      Wie gesagt... In einem anderen Skript funktioniert das. Ich finde nur die Ursache in dieser Konstellation nicht. Wobei ich zugebe, dass ich den Funktionsaufruf auch noch nicht komplett verstanden habe und mir deshalb nicht selbst helfen kann...

      Anbei noch das komplette Skript

      <xml xmlns="https://developers.google.com/blockly/xml">
       <variables>
         <variable id="4iEXXd([z~lkR3U/0,vs">ViertelStundenZähler</variable>
         <variable id="yL4@)A%FDg3ItY38[eAK">Liste</variable>
         <variable id="9ww3W7K/P1HOvHjW@RBt">Wert</variable>
         <variable id="]SJwgq[O)2TfMC5NvFBv">Reihenfolge</variable>
         <variable id="}*+,Qt.$dflnL[W+E#Rl">EPEX-Preise</variable>
         <variable id="?%P;uTe`,@oj4eel)V{|">Array</variable>
       </variables>
       <block type="variables_set" id="4o=$50,(_Z-$C`$5DlXz" x="13" y="13">
         <field name="VAR" id="4iEXXd([z~lkR3U/0,vs">ViertelStundenZähler</field>
         <value name="VALUE">
           <block type="math_number" id="]b_U!:{srWPCh4~]%((+">
             <field name="NUM">0</field>
           </block>
         </value>
         <next>
           <block type="variables_set" id="d|u$wD@VlyBHUp%T`xX?">
             <field name="VAR" id="]SJwgq[O)2TfMC5NvFBv">Reihenfolge</field>
             <value name="VALUE">
               <block type="math_number" id="4mDWoP!X)dES%(C*bAN,">
                 <field name="NUM">0</field>
               </block>
             </value>
             <next>
               <block type="variables_set" id="yA*;O5IM3TV-KmOI6(E{">
                 <field name="VAR" id="}*+,Qt.$dflnL[W+E#Rl">EPEX-Preise</field>
                 <value name="VALUE">
                   <block type="get_value" id="=ib[-vijK[,xj?6oPljD">
                     <field name="ATTR">val</field>
                     <field name="OID">0_userdata.0.APIS_AT.Preise_heute</field>
                   </block>
                 </value>
                 <next>
                   <block type="comment" id="_CcE7`lr`hqfhPqD`sLt">
                     <field name="COMMENT">Original APIS EPEX Preise</field>
                     <next>
                       <block type="debug" id="38lvoFM?W,t;@)EDmmh8" disabled="true">
                         <field name="Severity">log</field>
                         <value name="TEXT">
                           <shadow type="text" id="Pn:k{a.ZXJN)1{Va;Waa">
                             <field name="TEXT">test</field>
                           </shadow>
                           <block type="variables_get" id="y!9H$/TeM*cU]0Ro0_e7">
                             <field name="VAR" id="}*+,Qt.$dflnL[W+E#Rl">EPEX-Preise</field>
                           </block>
                         </value>
                         <next>
                           <block type="comment" id="Kj9E$Tv01XqXRZq4H3/p">
                             <field name="COMMENT">2 dimensionales Array für alle Informationen</field>
                             <next>
                               <block type="comment" id="8vD0Xpz4uq{*lk95]D9f">
                                 <field name="COMMENT">  1. Ebene: 2 Tage á 24h =&gt; Liste mit 48 Elementen</field>
                                 <next>
                                   <block type="comment" id="7+0%9xv!F7#F}F!O6i/J">
                                     <field name="COMMENT">  2. Ebene: Preis, Tag, Stunde, Zähler</field>
                                     <next>
                                       <block type="variables_set" id=",DpgD`_y%CC9[+jpp)gk">
                                         <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                         <value name="VALUE">
                                           <block type="lists_repeat" id="[,SsLBIM@2+Faly;[uH9">
                                             <value name="NUM">
                                               <shadow type="math_number" id="wLsR3rYNR25J0bM(wfpS">
                                                 <field name="NUM">48</field>
                                               </shadow>
                                             </value>
                                             <value name="ITEM">
                                               <block type="convert_object2json" id="]M(sqJW[M^464at7^/dt">
                                                 <field name="PRETTIFY">FALSE</field>
                                                 <value name="VALUE">
                                                   <block type="lists_repeat" id="OJQ[-/,RKWD8/XVvJh|Q">
                                                     <value name="NUM">
                                                       <shadow type="math_number" id="!^p.eT9^/Z/wL[@s|pG0">
                                                         <field name="NUM">4</field>
                                                       </shadow>
                                                     </value>
                                                     <value name="ITEM">
                                                       <block type="math_number" id="X2ky}5Q0#-rr6NytP$)R">
                                                         <field name="NUM">0</field>
                                                       </block>
                                                     </value>
                                                   </block>
                                                 </value>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                         <next>
                                           <block type="controls_whileUntil" id="5W5Kqa3)ef]R?sL#3X@7">
                                             <field name="MODE">UNTIL</field>
                                             <value name="BOOL">
                                               <block type="logic_compare" id="coJXF|lKuO8.L89d/Zcs">
                                                 <field name="OP">EQ</field>
                                                 <value name="A">
                                                   <block type="convert_type" id="~X)EZn~9|0z;v?cQ%`3:">
                                                     <value name="ITEM">
                                                       <block type="convert_jsonata" id="EG~6+8hxq_z$hGrUgF?7">
                                                         <value name="EXPRESSION">
                                                           <shadow type="text" id="I3vtHrq/NASp|=M@^~@}">
                                                             <field name="TEXT">data[0].value</field>
                                                           </shadow>
                                                           <block type="text_join" id="Mr!TY$THJy2te7xEIxS/">
                                                             <mutation items="3"></mutation>
                                                             <value name="ADD0">
                                                               <block type="text" id=":#Q^8uqn@4H28@yIoD3#">
                                                                 <field name="TEXT">data[</field>
                                                               </block>
                                                             </value>
                                                             <value name="ADD1">
                                                               <block type="variables_get" id="}v*AZzc(h_a^s:W7~w]X">
                                                                 <field name="VAR" id="4iEXXd([z~lkR3U/0,vs">ViertelStundenZähler</field>
                                                               </block>
                                                             </value>
                                                             <value name="ADD2">
                                                               <block type="text" id="bdBqys`^!e5{x=A.K}$^">
                                                                 <field name="TEXT">].value</field>
                                                               </block>
                                                             </value>
                                                           </block>
                                                         </value>
                                                         <value name="TARGET">
                                                           <block type="convert_json2object" id="+?e!`SDH8Alw.3(T5T*j">
                                                             <value name="VALUE">
                                                               <block type="variables_get" id=";76BnbsFM|Apjl-ZeX*5">
                                                                 <field name="VAR" id="}*+,Qt.$dflnL[W+E#Rl">EPEX-Preise</field>
                                                               </block>
                                                             </value>
                                                           </block>
                                                         </value>
                                                       </block>
                                                     </value>
                                                   </block>
                                                 </value>
                                                 <value name="B">
                                                   <block type="text" id="RPuiqhYV8B|PLQ,Y.{KB">
                                                     <field name="TEXT">undefined</field>
                                                   </block>
                                                 </value>
                                               </block>
                                             </value>
                                             <statement name="DO">
                                               <block type="math_change" id="H566lhms:RTjkn|`imtS">
                                                 <field name="VAR" id="]SJwgq[O)2TfMC5NvFBv">Reihenfolge</field>
                                                 <value name="DELTA">
                                                   <shadow type="math_number" id="Y3Rqm$^:}QEz:iQ4^nLB">
                                                     <field name="NUM">1</field>
                                                   </shadow>
                                                 </value>
                                                 <next>
                                                   <block type="lists_getIndex" id="|u]=fX+dC34XlUvqsN#`">
                                                     <mutation statement="true" at="false"></mutation>
                                                     <field name="MODE">REMOVE</field>
                                                     <field name="WHERE">FIRST</field>
                                                     <value name="VALUE">
                                                       <block type="variables_get" id="AEuV:H~n3,2M`^bIn7:H">
                                                         <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                       </block>
                                                     </value>
                                                     <next>
                                                       <block type="lists_setIndex" id="LFgVh#CVnUlSA3?D_xwa">
                                                         <mutation at="false"></mutation>
                                                         <field name="MODE">INSERT</field>
                                                         <field name="WHERE">LAST</field>
                                                         <value name="LIST">
                                                           <block type="variables_get" id="W,y54jtxau@0rI1sfSpl">
                                                             <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                           </block>
                                                         </value>
                                                         <value name="TO">
                                                           <block type="convert_object2json" id="n0ZMsJMN9aIb@yq/87,{">
                                                             <field name="PRETTIFY">FALSE</field>
                                                             <value name="VALUE">
                                                               <block type="lists_create_with" id="h0?@Nb;^9x0:uz=n}E1V">
                                                                 <mutation items="4"></mutation>
                                                                 <value name="ADD0">
                                                                   <block type="convert_tonumber" id="etcIh)y6FHa)dHe1+n!]">
                                                                     <value name="VALUE">
                                                                       <block type="convert_jsonata" id="P~pWP-qbv4a+xJ_K`^EE">
                                                                         <value name="EXPRESSION">
                                                                           <shadow type="text" id="I3vtHrq/NASp|=M@^~@}">
                                                                             <field name="TEXT">data[0].value</field>
                                                                           </shadow>
                                                                           <block type="text_join" id="wE@4J]9+3Myik3*Iv_3w">
                                                                             <mutation items="3"></mutation>
                                                                             <value name="ADD0">
                                                                               <block type="text" id="O[m/P^g3w@OB`YB%;oD)">
                                                                                 <field name="TEXT">data[</field>
                                                                               </block>
                                                                             </value>
                                                                             <value name="ADD1">
                                                                               <block type="variables_get" id="Vw!fc!xu*)g{aSWgh#@W">
                                                                                 <field name="VAR" id="4iEXXd([z~lkR3U/0,vs">ViertelStundenZähler</field>
                                                                               </block>
                                                                             </value>
                                                                             <value name="ADD2">
                                                                               <block type="text" id="S)#_1Yifb_^q[lQKjSJ8">
                                                                                 <field name="TEXT">].value</field>
                                                                               </block>
                                                                             </value>
                                                                           </block>
                                                                         </value>
                                                                         <value name="TARGET">
                                                                           <block type="convert_json2object" id="9C`Yk904{[%EBtfNJ@9)">
                                                                             <value name="VALUE">
                                                                               <block type="variables_get" id="im;0~B3Zyod5omvr{$h,">
                                                                                 <field name="VAR" id="}*+,Qt.$dflnL[W+E#Rl">EPEX-Preise</field>
                                                                               </block>
                                                                             </value>
                                                                           </block>
                                                                         </value>
                                                                       </block>
                                                                     </value>
                                                                   </block>
                                                                 </value>
                                                                 <value name="ADD1">
                                                                   <block type="convert_from_date" id="dm-JA6}F1W8Hl?X=(d{i">
                                                                     <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                                                     <field name="OPTION">DD.MM.YYYY</field>
                                                                     <value name="VALUE">
                                                                       <block type="convert_jsonata" id="?@TM3vSx1ujbQQIZd?)L">
                                                                         <value name="EXPRESSION">
                                                                           <shadow type="text" id="I3vtHrq/NASp|=M@^~@}">
                                                                             <field name="TEXT">data[0].value</field>
                                                                           </shadow>
                                                                           <block type="text_join" id="irTwSIS:s8#_2q~pT1g]">
                                                                             <mutation items="3"></mutation>
                                                                             <value name="ADD0">
                                                                               <block type="text" id="@VOnHw:w^Eg)oN%aT3[W">
                                                                                 <field name="TEXT">data[</field>
                                                                               </block>
                                                                             </value>
                                                                             <value name="ADD1">
                                                                               <block type="variables_get" id="N~K8/lKI~n+`bWki9Ylx">
                                                                                 <field name="VAR" id="4iEXXd([z~lkR3U/0,vs">ViertelStundenZähler</field>
                                                                               </block>
                                                                             </value>
                                                                             <value name="ADD2">
                                                                               <block type="text" id=")dk!F~Up-MwfU20FrR*8">
                                                                                 <field name="TEXT">].date</field>
                                                                               </block>
                                                                             </value>
                                                                           </block>
                                                                         </value>
                                                                         <value name="TARGET">
                                                                           <block type="convert_json2object" id="A98SQ!5v,d,;gNh$Fr$z">
                                                                             <value name="VALUE">
                                                                               <block type="variables_get" id="70U]Ma^Jwy^+Gi7G?]x8">
                                                                                 <field name="VAR" id="}*+,Qt.$dflnL[W+E#Rl">EPEX-Preise</field>
                                                                               </block>
                                                                             </value>
                                                                           </block>
                                                                         </value>
                                                                       </block>
                                                                     </value>
                                                                   </block>
                                                                 </value>
                                                                 <value name="ADD2">
                                                                   <block type="convert_from_date" id="${@j9WPe^D1yb`Kf?|Cn">
                                                                     <mutation xmlns="http://www.w3.org/1999/xhtml" format="false" language="false"></mutation>
                                                                     <field name="OPTION">h</field>
                                                                     <value name="VALUE">
                                                                       <block type="convert_jsonata" id="v{@WiTjCG-0[G*b^N*|o">
                                                                         <value name="EXPRESSION">
                                                                           <shadow type="text" id="I3vtHrq/NASp|=M@^~@}">
                                                                             <field name="TEXT">data[0].value</field>
                                                                           </shadow>
                                                                           <block type="text_join" id="~@c{Lk*sM$BH#X#QP{gZ">
                                                                             <mutation items="3"></mutation>
                                                                             <value name="ADD0">
                                                                               <block type="text" id="jE$4X~7ACZR|Z(3mD~u?">
                                                                                 <field name="TEXT">data[</field>
                                                                               </block>
                                                                             </value>
                                                                             <value name="ADD1">
                                                                               <block type="variables_get" id="fXK?;Q#5^,]?Kpwg~N-~">
                                                                                 <field name="VAR" id="4iEXXd([z~lkR3U/0,vs">ViertelStundenZähler</field>
                                                                               </block>
                                                                             </value>
                                                                             <value name="ADD2">
                                                                               <block type="text" id="?Te!I67aTRti3zMi?MFg">
                                                                                 <field name="TEXT">].date</field>
                                                                               </block>
                                                                             </value>
                                                                           </block>
                                                                         </value>
                                                                         <value name="TARGET">
                                                                           <block type="convert_json2object" id="n$KOCK|}y.%-(a[rP2B.">
                                                                             <value name="VALUE">
                                                                               <block type="variables_get" id="=sug=O{ii4@Cz,pHCl$s">
                                                                                 <field name="VAR" id="}*+,Qt.$dflnL[W+E#Rl">EPEX-Preise</field>
                                                                               </block>
                                                                             </value>
                                                                           </block>
                                                                         </value>
                                                                       </block>
                                                                     </value>
                                                                   </block>
                                                                 </value>
                                                                 <value name="ADD3">
                                                                   <block type="variables_get" id="VxY~)24/w6m(z{q;83}{">
                                                                     <field name="VAR" id="]SJwgq[O)2TfMC5NvFBv">Reihenfolge</field>
                                                                   </block>
                                                                 </value>
                                                               </block>
                                                             </value>
                                                           </block>
                                                         </value>
                                                         <next>
                                                           <block type="math_change" id="OF77I,p8fRbUJ[iC2[R}">
                                                             <field name="VAR" id="4iEXXd([z~lkR3U/0,vs">ViertelStundenZähler</field>
                                                             <value name="DELTA">
                                                               <shadow type="math_number" id="c5~/mh}gE?ezWs,u3C.2">
                                                                 <field name="NUM">4</field>
                                                               </shadow>
                                                             </value>
                                                           </block>
                                                         </next>
                                                       </block>
                                                     </next>
                                                   </block>
                                                 </next>
                                               </block>
                                             </statement>
                                             <next>
                                               <block type="debug" id="R(UC%ObGAl#7,Cy2bWZ+" disabled="true">
                                                 <field name="Severity">log</field>
                                                 <value name="TEXT">
                                                   <shadow type="text" id="//rg|KojdT7-$AM:)F5b">
                                                     <field name="TEXT">test</field>
                                                   </shadow>
                                                   <block type="text_join" id="mhcVuypNM;|2`{HfEa]G">
                                                     <mutation items="2"></mutation>
                                                     <value name="ADD0">
                                                       <block type="text" id="B[|Y@j^q-3@(+tjjR8)F">
                                                         <field name="TEXT">1. ARRAY gefüllt: </field>
                                                       </block>
                                                     </value>
                                                     <value name="ADD1">
                                                       <block type="variables_get" id="{l=KX?#Spiyrk6DP+5$/">
                                                         <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                       </block>
                                                     </value>
                                                   </block>
                                                 </value>
                                                 <next>
                                                   <block type="comment" id="oGfk6Y4UEH`?)QA(U@pz">
                                                     <field name="COMMENT">Array kürzen, für den Fall, dass nur Preise für</field>
                                                     <next>
                                                       <block type="comment" id="kyeS@_2_tq[Gc,l+a;X7">
                                                         <field name="COMMENT">   1nen Tag vorliegen</field>
                                                         <next>
                                                           <block type="variables_set" id="DS7MV9d(5mMR6Y/Y)?Ar" disabled="true">
                                                             <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                             <value name="VALUE">
                                                               <block type="lists_getSublist" id=",{]Y?,PdTllZbeTRqw$=">
                                                                 <mutation at1="true" at2="true"></mutation>
                                                                 <field name="WHERE1">FROM_START</field>
                                                                 <field name="WHERE2">FROM_START</field>
                                                                 <value name="LIST">
                                                                   <block type="variables_get" id="S_T7w;rQ]ft?(9o^KSf`">
                                                                     <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                                   </block>
                                                                 </value>
                                                                 <value name="AT1">
                                                                   <block type="math_arithmetic" id="y4Qt-BEt6E;Cp,!U%#C3">
                                                                     <field name="OP">ADD</field>
                                                                     <value name="A">
                                                                       <shadow type="math_number" id="qX.Od~9OUt{d{qA_IeIp">
                                                                         <field name="NUM">1</field>
                                                                       </shadow>
                                                                       <block type="math_arithmetic" id="04;FqN]VhUh4zvb69=Gj">
                                                                         <field name="OP">MINUS</field>
                                                                         <value name="A">
                                                                           <shadow type="math_number" id="F_=NlG;rHg_EbOLoxqv4">
                                                                             <field name="NUM">48</field>
                                                                           </shadow>
                                                                         </value>
                                                                         <value name="B">
                                                                           <shadow type="math_number" id="gkRl5S$]`:rXbNNSgj?i">
                                                                             <field name="NUM">1</field>
                                                                           </shadow>
                                                                           <block type="variables_get" id="B5zJJm~Fu#.~:P?.P0LQ">
                                                                             <field name="VAR" id="]SJwgq[O)2TfMC5NvFBv">Reihenfolge</field>
                                                                           </block>
                                                                         </value>
                                                                       </block>
                                                                     </value>
                                                                     <value name="B">
                                                                       <shadow type="math_number" id="$5cyWV/IMHlzEaak0mKf">
                                                                         <field name="NUM">1</field>
                                                                       </shadow>
                                                                     </value>
                                                                   </block>
                                                                 </value>
                                                                 <value name="AT2">
                                                                   <block type="math_number" id="0wbrb;CN|aBfo_2vR5FD">
                                                                     <field name="NUM">50</field>
                                                                   </block>
                                                                 </value>
                                                               </block>
                                                             </value>
                                                             <next>
                                                               <block type="comment" id="V(2simI4~CLY{78ABF2=">
                                                                 <field name="COMMENT">... gekürzt für besseren Überblick.</field>
                                                                 <next>
                                                                   <block type="comment" id="4N:KaHJB{3b,5AMZklKv">
                                                                     <field name="COMMENT">   Ist später zu entfernen</field>
                                                                     <next>
                                                                       <block type="variables_set" id="HImf0MENugj(Z}u?-Hnl">
                                                                         <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                                         <value name="VALUE">
                                                                           <block type="lists_getSublist" id="3$,d9-stvxk7wf[1FKQV">
                                                                             <mutation at1="true" at2="true"></mutation>
                                                                             <field name="WHERE1">FROM_START</field>
                                                                             <field name="WHERE2">FROM_START</field>
                                                                             <value name="LIST">
                                                                               <block type="variables_get" id="H)2M)b7Fb`@jKMiRG4d6">
                                                                                 <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                                               </block>
                                                                             </value>
                                                                             <value name="AT1">
                                                                               <block type="math_number" id=":aJh|Cc-7S6MJDEldQFu">
                                                                                 <field name="NUM">10</field>
                                                                               </block>
                                                                             </value>
                                                                             <value name="AT2">
                                                                               <block type="math_number" id="T`5GqtASeMEIOXi~Gy7]">
                                                                                 <field name="NUM">30</field>
                                                                               </block>
                                                                             </value>
                                                                           </block>
                                                                         </value>
                                                                         <next>
                                                                           <block type="debug" id="8/3p0YJ4.PE,V^o%0KLd">
                                                                             <field name="Severity">log</field>
                                                                             <value name="TEXT">
                                                                               <shadow type="text" id="//rg|KojdT7-$AM:)F5b">
                                                                                 <field name="TEXT">test</field>
                                                                               </shadow>
                                                                               <block type="text_join" id="K}4vNc%:U/T/cy_^)^*9">
                                                                                 <mutation items="2"></mutation>
                                                                                 <value name="ADD0">
                                                                                   <block type="text" id="F_a/$-I@o7HbL[oowCfR">
                                                                                     <field name="TEXT">2. ARRAY gekürzt: </field>
                                                                                   </block>
                                                                                 </value>
                                                                                 <value name="ADD1">
                                                                                   <block type="variables_get" id="/%K3|XUz4qNlDkCf(XGo">
                                                                                     <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                                                   </block>
                                                                                 </value>
                                                                               </block>
                                                                             </value>
                                                                             <next>
                                                                               <block type="comment" id="Kr;[bOju.DuA|]9Sr@JD">
                                                                                 <field name="COMMENT">Sortierung nach 1. Wert in der Klammer</field>
                                                                                 <next>
                                                                                   <block type="debug" id="~QPty-H@z`Nag0^1b1]D">
                                                                                     <field name="Severity">log</field>
                                                                                     <value name="TEXT">
                                                                                       <shadow type="text" id="//rg|KojdT7-$AM:)F5b">
                                                                                         <field name="TEXT">test</field>
                                                                                       </shadow>
                                                                                       <block type="text_join" id=":Ss@AcM%6030q[H`kOPR">
                                                                                         <mutation items="2"></mutation>
                                                                                         <value name="ADD0">
                                                                                           <block type="text" id="b;jRCJdBMdf!?vtzD9VE">
                                                                                             <field name="TEXT">3. ARRAY sortiert: </field>
                                                                                           </block>
                                                                                         </value>
                                                                                         <value name="ADD1">
                                                                                           <block type="procedures_callcustomreturn" id="sGry)L{1S[!?PCfv/Kkn">
                                                                                             <mutation name="ListeSortieren">
                                                                                               <arg name="Liste"></arg>
                                                                                               <arg name="Wert"></arg>
                                                                                             </mutation>
                                                                                             <value name="ARG0">
                                                                                               <block type="variables_get" id="E+;UV4v}/Z7p:?o%FOB;">
                                                                                                 <field name="VAR" id="?%P;uTe`,@oj4eel)V{|">Array</field>
                                                                                               </block>
                                                                                             </value>
                                                                                             <value name="ARG1">
                                                                                               <block type="math_number" id="Ia^~^m2lk79[=TFObhje">
                                                                                                 <field name="NUM">1</field>
                                                                                               </block>
                                                                                             </value>
                                                                                           </block>
                                                                                         </value>
                                                                                       </block>
                                                                                     </value>
                                                                                   </block>
                                                                                 </next>
                                                                               </block>
                                                                             </next>
                                                                           </block>
                                                                         </next>
                                                                       </block>
                                                                     </next>
                                                                   </block>
                                                                 </next>
                                                               </block>
                                                             </next>
                                                           </block>
                                                         </next>
                                                       </block>
                                                     </next>
                                                   </block>
                                                 </next>
                                               </block>
                                             </next>
                                           </block>
                                         </next>
                                       </block>
                                     </next>
                                   </block>
                                 </next>
                               </block>
                             </next>
                           </block>
                         </next>
                       </block>
                     </next>
                   </block>
                 </next>
               </block>
             </next>
           </block>
         </next>
       </block>
       <block type="procedures_defcustomreturn" id="-lWF^WGr+oXYx4B!Eem?" x="12" y="1363">
         <mutation statements="false">
           <arg name="Liste" varid="yL4@)A%FDg3ItY38[eAK"></arg>
           <arg name="Wert" varid="9ww3W7K/P1HOvHjW@RBt"></arg>
         </mutation>
         <field name="NAME">ListeSortieren</field>
         <field name="SCRIPT">dmFyIFdlcnQgPSBXZXJ0IC0gMTsNCkxpc3RlLnNvcnQoZnVuY3Rpb24oYSwgYil7DQogICAgcmV0dXJuIGFbV2VydF0gLSBiW1dlcnRdOw0KfSk7DQpyZXR1cm4gTGlzdGU7</field>
         <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
       </block>
       <block type="debug" id="3TU8jadis-4;?D~NX688" disabled="true" x="37" y="2662">
         <field name="Severity">log</field>
         <value name="TEXT">
           <shadow type="text" id="tv|m?#Ff*2yprNV1s{ZO">
             <field name="TEXT">test</field>
           </shadow>
         </value>
       </block>
      </xml>
      

      Würde mich riesig freuen, wenn Ihr mir helfen könntet. Gruß, Thomas

      posted in JavaScript
      T
      ThomKast
    • RE: Geräte zu Stundenpreisen (EPEX) oder PV-Überschuss betreiben

      @peter666666 ok und interessant. Meine WP könnte ich von extern dazu bringen, auf unterscheidliche Temperaturen zu erhitzen. Ist also ähnlich... Allerdings habe ich dazu noch keine Logik realisiert.

      Für mich bleibt die Frage unter welchen Bedingungen die WP bis zu welcher Temperatur aufheizen soll? Was wären denn Deiner Meinung nach die Möglichen Parameter oder eine Beschreibung für eine "planbare Aufheizung"... s.o.

      posted in Praktische Anwendungen (Showcase)
      T
      ThomKast
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo