Tibber Anbindung an Loxone (Strompreisbörse)

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • CyCl0ne
    Extension Master
    • 05.11.2020
    • 147

    Tibber Anbindung an Loxone (Strompreisbörse)

    Es geht um die dynamische Strompreisbörse bei dem Anbieter Tibber. Da es im anderen Thread zu unübersichtlich wurde, hier mal ein erster Text zu dem Thema.

    Benötigt:
    - Python Version 3.9
    - Nas/Raspberry PI/PC/Was auch immer

    Installation:
    * Python Code aus Github rausziehen
    * # KONFIG Felder im Code anpassen
    * in shell eingeben : pip3 install tibber.py​​
    * CRON Job erzeugen
    * Fertig!

    Hinweise für CRONTAB:

    In Shell eingeben:
    crontab -e

    Es kommt die Frage welcher Editor, da wählen wir NANO aus und es öffnet sich eine Datei, in der untersten Zeile tragen wir ein:

    */30 * * * * /home/pi/python/cron_job.sh

    Diese Zeile sagt: Alle 30Minuten führe das Skript aus.
    CTRL-X ->Speichern -> Ende
    Anleitung (Siehe auch Github):

    ## Deutsch
    Hierbei handelt es sich um ein kleines Hile-Skript um die Tibber Api auszulesen und per UDP weiter zu senden. Spziell hilfreich ist dies für Loxone, da das Auslesen der Tibber `graphql`-API nicht nativ in der Loxone unterstützt wird. Das Script wandelt die gelesenen Informationen in UDP-Befehle um, die der Beschreibung https://loxwiki.atlassian.net/wiki/s...Tar+hourly+API entsprechen.

    ### Installation
    Zunächst die python version testen. Das Script funktioniert nur mit `python3.9` oder höher. Diese Abhänigkeit kommt nicht aus der Programmierung des Scriptes, sondern von der Library https://github.com/BeatsuDev/tibber.py.

    ``` bash
    ❯ python3 --version
    Python 3.10.8 # Muss größer oder gleich 3.9 sein!
    ```

    Installation der Abhängigkeit https://pypi.org/project/tibber.py:
    ``` bash
    ❯ pip3 install tibber.py
    ```

    Python Pfad identifizieren:
    ``` bash
    ❯ which python3
    /usr/bin/python3
    ```

    Cronjob anlegen:
    ``` bash
    ❯ crontab -e
    ```

    und im Textfeld folgende Zeile einfügen. Der Python Pfad muss mit dem Output von `which python3` übereinstimmen, ebenso der Pfad zum heruntergeladenen Pythonfile `tibberlox.py`.
    ```
    */30 * * * * /usr/bin/python3 /home/jacknjo/TibberLox/tibberlox.py
    ```

    ### Konfiguration
    Das Script fragt beim ersten Start nach den Konfigurationsparametern, die für den Zugang zur Tibber-API notwendig sind. Ebenso müssen IP und Port der Zieladresse angegeben werden. Die Informationen werden unter Zugangscode `0400` schreibgeschützt und nur für den Nutzer lesbar auf dem Dateisystem parallel zum `tibberlox.py` Skript unter dem Namen `.tibber_credentials` abgelegt.

    Die Datei `.tibber_credentials` kann auch manuell von `demo_tibber_credentials` kopiert, modifiziert und unter dem Namen `.tibber_credentials` abgelegt werden. Damit kann der Konfigurationsschritt umgangen werden.

    ### Manuelle Benutzung

    ``` bash
    # Ausführbarmachen des scriptes.
    chmod +x tibberlox.py

    # Ausführung mit default-Parametern.
    ./tibberlox.py

    # Oder für mehr/weniger logging-Informationen.
    ./tibberlox.py -l DEBUG

    # Alternativ für die Hilfe.
    ./tibberlox.py -h
    ```

    ### Benutzung in Loxone
    Im Repository ist die `VUI_tibberlox.xml` hinterlegt. Diese beinhaltet alle Werte, die vom Skript gesendet werden. Der Großteil der Werte entspricht der API-Beschreibung von: https://loxwiki.atlassian.net/wiki/s...Tar+hourly+API

    Die folgenden Elemente wurden zusätzlich hinzugefügt:
    - `date_now_seconds_since_epoch` Kann als Trigger/Zeitstempel verwendet werden.
    - `price_stdev` Standardabweichung der Preise des aktuellen Tages
    - `data_price_hour_rel_num_negatives` Anzahl der validen negativen Relativwerte (invalide Werte tragen den Wert -1000).
    - `data_price_hour_rel_num_positives` Anzahl der validen positiven Relativwerte (invalide Werte tragen den Wert -1000).




    Python Code (gibts nun auf GitHub):
    Contribute to cycl0ne/TibberLox development by creating an account on GitHub.


    --
    Änderung V1.0 Initial Github Release:
    Code kann nun RELATIV (8h) Preise angeben, Achtung, im XML ist das noch nicht drinnen
    --
    ​Ich werde hier keine Änderung posten. Einfach ab und an im Github schauen.

    XML Datei für den Import in Loxone Config

    VIU_TibberApi.zip
    Angehängte Dateien
    Zuletzt geändert von CyCl0ne; 06.01.2023, 16:51. Grund: Github wurde schon das Skript verbessert + Anleitung Danke an JacknJo
  • IFLUR
    LoxBus Spammer
    • 07.01.2016
    • 392

    #2
    Habe das Skript (tibberlox.py) auf dem NAS installiert
    Ausgeführt wird es über den Task Manager des NAS

    python3 /volume1/web/Scripte/tibberlox.py

    Es kommt zu einem Fehler ?

    Traceback (most recent call last):
    File "/volume1/web/Scripte/tibberlox.py", line 100, in <module>
    account = tibber.Account(ACCESS_TOKEN)
    AttributeError: module 'tibber' has no attribute 'Account'​

    Kommentar


    • CyCl0ne
      CyCl0ne kommentierte
      Kommentar bearbeiten
      also auf dem Nas würde ich vorher noch in den ordner wechseln mit
      cd /volume1/web/Scripte/
      und dann:
      python3 tibberlox.py
      machen

      hast du auch "pip3 install tibber.py​​" gemacht?

      Und wichtig ist: mach mal ein python3 -v vorher

      es kann sein das deine nas keine 3.9 Python Version hat! Und wenn du das auf 3.9 hebst führe nochmal das PIP3 aus, damit du auch das 3.9 Skript bekommst.
  • IFLUR
    LoxBus Spammer
    • 07.01.2016
    • 392

    #3
    Hi ,
    Es liegt wohl am P 3.9. habe ich zwar über den Synology Paketmanager installiert aber er gibt mir nur 3.9 zurück. Muss es wohl über die Shell installieren

    Kommentar

    • IFLUR
      LoxBus Spammer
      • 07.01.2016
      • 392

      #4
      Läuft auch nicht unter 3.9

      python3.9 /volume1/web/Scripte/tibberlox.py

      Ausgabe:
      Traceback (most recent call last):
      File "/volume1/web/Scripte/tibberlox.py", line 100, in <module>
      account = tibber.Account(ACCESS_TOKEN)
      AttributeError: module 'tibber' has no attribute 'Account'

      Kommentar

      • IFLUR
        LoxBus Spammer
        • 07.01.2016
        • 392

        #5
        pip --version
        pip 21.1.1 from /volume1/web/Scripte/pythonenv/lib/python3.8/site-packages/pip (python 3.8)


        bekomme es nicht auf Version 3.9 gehoben...

        Kommentar


        • CyCl0ne
          CyCl0ne kommentierte
          Kommentar bearbeiten
          pip3 install tibber.py

          Versuch es mal mit PIP3. Ich hatte das Thema bei meiner Synology auch, ich muss in mich gehen und überlegen was ich gemacht habe. Das war vor 4 Monaten... *grübel*

        • CyCl0ne
          CyCl0ne kommentierte
          Kommentar bearbeiten
          Hah habs wieder. Das Problem ist das Synology doof ist ! Egal was du macht es wird immer das 3.8 ausgeführt, daher musste ich 2 Sachen machen:
          a) dieses ENV bauen, das such ich dir noch raus und dort mit PIP vom 3.9 das tibber.py geladen
          b) hab ich das Skript wie folgt damals aufgerufen dann:
          cd /volume1/Python/
          . python-env/bin/activate
          python3.9 TibberApiTest.py
      • CyCl0ne
        Extension Master
        • 05.11.2020
        • 147

        #6
        Also wie folgt,:
        In das Verzeichnis gehen wo das Skript liegt:
        cd /volume1/Python

        Dann aufrufen:
        python3.9 -m venv env

        Danach:
        . env/bin/activate
        ^---- Leerzeichen !

        eingeben. Dann check:
        which python
        pip3 install tibberl.py

        und dann klappt es auch!
        python tibberlox.py


        Hier von mir in der NAS ausgeführt:
        Code:
        cycl0ne@DiskStation2:/volume1/Python/test$ python3.9 -m venv env
        cycl0ne@DiskStation2:/volume1/Python/test$ ls
        env
        cycl0ne@DiskStation2:/volume1/Python/test$ . env/bin/activate
        (env) cycl0ne@DiskStation2:/volume1/Python/test$ which python
        /volume1/Python/test/env/bin/python
        (env) cycl0ne@DiskStation2:/volume1/Python/test$ python --version
        Python 3.9.14
        (env) cycl0ne@DiskStation2:/volume1/Python/test$ pip3 install tibber.py
        ..... Installation...
        
        (env) cycl0ne@DiskStation2:/volume1/Python/test$ python tibberlox.py
        2023-01-06T00:00:00.000+01:00: 0.2647 EUR
        .....
        Das waren Prints von meiner Version, bei dir sollte er nur zurückspringen und dann wieder im prompt sein und Loxone Daten haben.

        Ein Hinweis, das CRON Sollte dann in der GUI so aussehen:

        cd /volume1/Python/
        . env/bin/activate
        python TibberApiTest.py​

        Gruß
        C.

        Kommentar

        • IFLUR
          LoxBus Spammer
          • 07.01.2016
          • 392

          #7
          Hi Danke es geht jetzt schon einmal händisch vom Terminal aus und die Daten werden übertragen.

          Aber im Task Manger geht de Befehl nicht durch

          Vom Terminal OK

          /volume1/homes/admin/tibber
          python3 tibberlox.py

          Aus dem NAS Task Manger nix :-(

          Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image.png
Ansichten: 1139
Größe: 62,8 KB
ID: 374201


          Übrigens kleiner Tippfehler in deinem Post pip3 install tibberl.py müsste heißen --> pip3 install tibber.py

          Kommentar

          • IFLUR
            LoxBus Spammer
            • 07.01.2016
            • 392

            #8
            So hab es jetzt über ein Script gelöst . Keine Ahnung warum der Befehl nicht direkt ausgelöst wird .

            tibber.sh angelegt

            /volume1/homes/admin/tibber/env/bin/python3 tibberlox.py
            echo Tibber Update start

            Dann im Task Manager
            cd /volume1/homes/admin/tibber/env/bin/
            bash tibber.sh​

            Kommentar


            • CyCl0ne
              CyCl0ne kommentierte
              Kommentar bearbeiten
              du hast die zeile im task manager vergessen:
              . env/bin/activate

              ohne die greift er nicht auf das richitge python zu, so muss es dann bei dir aussehen:

              /volume1/homes/admin/tibber
              . env/bin/activate
              python3 tibberlox.py

            • IFLUR
              IFLUR kommentierte
              Kommentar bearbeiten
              So gehts es Danke
          • IFLUR
            LoxBus Spammer
            • 07.01.2016
            • 392

            #9
            So mal Schritt für Schritt für weitere "Dummys" wie mich zusammengefasst :-)

            Synology NAS
            1. Update auf Python 3.9
            2. Anlegen eines Verzeichnis für Tibber
            3. In das Verzeichnis gehen die tibberlox.py ablegen und Token anpassen
            4. Verbindung mit putty auf Console
              1. In das Verzeichnis gehen wo das Skript liegt:
                z.B. /volume1/homes/admin/tibber/
              2. ​python3.9 -m venv env
              3. Code:
                . env/bin/activate
                ^---- Leerzeichen !
              4. Code:
                pip3 install tibber.py
            5. DSM Synollogy Task Managet
              1. Task Anlegen Tibber
              2. Aufgabeneisntellung Script
            Code:
            cd /volume1/homes/admin/tibber
            . env/bin/activate
            python3 tibberlox.py
            echo Start Tibber Update to Loxone
            ​​
            1. Zeitplan anpassen
            2. Test Loxone
              1. Virtuelle UDP Eingänge Tibber anlegen oder über XML importieren
              2. Zuweisen der 24 Eingänge auf das "Spot Price Beta Geraffel"
              3. Speichern
              4. UDP monitor öffnen
              5. Synology Task manuell ausführen
            So in etwa :-) Evtl. kann man das auch noch besser machen aber so funktioniert es bei mir
            Zuletzt geändert von IFLUR; 06.01.2023, 19:53.

            Kommentar


            • IFLUR
              IFLUR kommentierte
              Kommentar bearbeiten
              Oder wie in Visitor Messages habe ich gerade erst gelesen /

              cd /volume1/homes/admin/tibber
              . env/bin/activate
              python3 tibberlox.py
              echo Start Tibber Update to Loxone

            • CyCl0ne
              CyCl0ne kommentierte
              Kommentar bearbeiten
              wie gesagt du musst das env noch aktivieren. sowohl vor schritt 4.4 als auch später im 5.2.1

              Und es gibt ein komplett neues tibberlox.py ;-) Das hat nun config files etc.... siehe github.

            • IFLUR
              IFLUR kommentierte
              Kommentar bearbeiten
              So angepasst . Müsste mit der "env Aktivierung" so eigentlich für die Anleitung stimmen
          • IFLUR
            LoxBus Spammer
            • 07.01.2016
            • 392

            #10
            Info die neue tibberlox.py benötigt "sudo" Berechtigung... Bin mir nicht sicher ob es dann im Task Manager durchläuft..

            Kommentar


            • CyCl0ne
              CyCl0ne kommentierte
              Kommentar bearbeiten
              Synology mal wieder, man darf als normalo user kein ping machen :-) Ändere ich. Tritt nur bei der Erstkonfiguration auf.

            • CyCl0ne
              CyCl0ne kommentierte
              Kommentar bearbeiten
              Ok habs zurückgedreht. Manchmal ist "Keep It Simple" besser als "Schön" :-D Werde mal langsam eins nach dem anderen ändern.
          • IFLUR
            LoxBus Spammer
            • 07.01.2016
            • 392

            #11
            Ist doch so wie es ist absolut ok. 👌😀

            Kommentar

            • patriwag
              LoxBus Spammer
              • 28.08.2015
              • 436

              #12
              Ich versuche das Skript auf meinem Loxberry 3.0.0 Pre-Release zum laufen zu bekommen. Dort ist Python 3.9.2 installiert - soweit also okay.

              Sobald ich pip3 install tibber.py ausführe, erhalte ich jedoch eine WARNING:

              Code:
              WARNING: Missing build requirements in pyproject.toml for multidict<7.0,>=4.5 from https://files.pythonhosted.org/packages/4a/15/bd620f7a6eb9aa5112c4ef93e7031bcd071e0611763d8e17706ef8ba65e0/multidict-6.0.4.tar.gz#sha256=3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49 (from aiohttp<3.9.0,>=3.7.1->gql[websockets]>=3.4.0->tibber.py).
                WARNING: The project does not specify a build backend, and pip cannot fall back to setuptools without 'wheel'.​
              Danach wird der Vorgang mit einem ERROR beendet.
              Zuletzt geändert von patriwag; 09.01.2023, 10:48.
              seit 2016 im eigenen LoxHome

              Kommentar


              • CyCl0ne
                CyCl0ne kommentierte
                Kommentar bearbeiten
                Wenn ich das ausführe:
                :~/python $ pip install multidict
                Requirement already satisfied: multidict in /home/poweros/.local/lib/python3.9/site-packages (6.0.4)

                sagt er mir das es schon im python package inkludiert ist.

              • patriwag
                patriwag kommentierte
                Kommentar bearbeiten
                root@loxberry:/opt/loxberry# pip3 install multidict
                Collecting multidict
                Using cached multidict-6.0.4.tar.gz (51 kB)
                Installing build dependencies ... done
                WARNING: Missing build requirements in pyproject.toml for multidict from https://files.pythonhosted.org/packa...484965dbc1da49.
                WARNING: The project does not specify a build backend, and pip cannot fall back to setuptools without 'wheel'.
                Getting requirements to build wheel ... done
                Installing backend dependencies ... done
                Preparing wheel metadata ... done
                Building wheels for collected packages: multidict
                Building wheel for multidict (PEP 517) ... error
                ERROR: Command errored out with exit status 1:
                command: /usr/bin/python3 /tmp/tmpg5ml3i4o_in_process.py build_wheel /tmp/tmpedus_52b
                cwd: /tmp/pip-install-u7v7c7bb/multidict_dbd3786de54c41e1a296996bcd11aae6
                Complete output (66 lines):


                Danke CyCl0ne .Remotezugang habe ich derzeit nicht eingerichtet.

              • patriwag
                patriwag kommentierte
                Kommentar bearbeiten
                ok, also ich bin nun einen Schritt weiter. Ich habe python-dev installiert. Damit konnten dann auch alle anderen Abhängigkeiten aufgelöst und installiert werden:

                sudo apt-get install python3-dev
            • zulasch
              Dumb Home'r
              • 22.09.2015
              • 14

              #13
              Sau geil dein Skript! Was genau macht der Ausgang BatteryMinSOC? Ich bin gerade an der Planung für ein DYI Speicher, da sammel ich gerade noch Infos...

              Kommentar

            • patriwag
              LoxBus Spammer
              • 28.08.2015
              • 436

              #14
              Wenn ich das Skript ausführe erhalte ich folgende Meldungen:

              Code:
              loxberry@loxberry:~ $ ./tibberlox.py
              Traceback (most recent call last):
                File "/opt/loxberry/./tibberlox.py", line 93, in <module>
                  sendudp2ms()
                File "/opt/loxberry/./tibberlox.py", line 58, in sendudp2ms
                  sendudp("price_low: {}".format(min(list1)) )
              ValueError: min() arg is an empty sequence​
              Was hat das zu bedeuten?
              seit 2016 im eigenen LoxHome

              Kommentar


              • patriwag
                patriwag kommentierte
                Kommentar bearbeiten
                OK, dann muss ich wohl auf meinen Vertrag warten. Ich hatte gedacht, dass ich mit einem Tibber-Account und meinem API-Token von developer.tibber.com bereits Daten abrufen kann. Aber stimmt: Wenn ich den Tibber-API-Explorer hernehme um die Preise abzufragen erhalte ich NULL.

              • CyCl0ne
                CyCl0ne kommentierte
                Kommentar bearbeiten
                Richitg :-) Daher hab ich meinen Nachbarn gefragt nach seinem Token :-) Meiner ist auch noch leer und mein Vertrag hängt noch irgendwo.

                Wenn du Daten brauchst, logge seit 8 Wochen mit ca.

              • patriwag
                patriwag kommentierte
                Kommentar bearbeiten
                Danke, dann warte ich einfach auf meinen Vertrag. Die Daten aus der Historie benötige ich vermutlich nicht.
            • OldschoolOne
              Dumb Home'r
              • 11.01.2023
              • 15

              #15
              Hi,

              erstmal vielen Dank für dein Script! Ich ziehe die Tibber-Preis bis jetzt imm über den ioBroker, hier gibt es Preis für heute und für morgen. Du hast ja schon relative Preis implementiert, aber nur bis +8h.
              Wäre es möglich die relativen Preis bis +23h zu setzen, damit ich die an den SpotpreisOptimiert anbinden kann. Wenn ich den dann um 14h triggere, sucht er sich die günstigste Zeit innerhalb der nächsten 24h aus. das geht mit absoluten Preisen so nicht wenn ich das verstanden habe weil sie ja immer nur für diesen Tag gelten und nicht den Sprung über Mitternacht schaffen.

              VG
              Max

              Kommentar


              • OldschoolOne
                OldschoolOne kommentierte
                Kommentar bearbeiten
                Was ja auch gehen würde wären die absoluten Werte von heute und morgen. Darauf kann man dann ja bei einem bestimmten Trigger die relativen Werte rauslesen. So macht es der Adapter vom ioBroker auch.

              • CyCl0ne
                CyCl0ne kommentierte
                Kommentar bearbeiten
                Gleiches Thema wie Relativ. Von 0:00 - 13:00Uhr hast du nur 24h Preise. Also so sieht es aktuell mit der einen Zeile Code geändert aus:

                data_price_hour_rel_04_amount: 1.1986
                data_price_hour_rel_05_amount: 1.2116
                data_price_hour_rel_06_amount: 1.173
                data_price_hour_rel_07_amount: 1.187
                data_price_hour_rel_08_amount: 1.0879
                data_price_hour_rel_09_amount: 1.0483
                data_price_hour_rel_10_amount: 0.9763
                data_price_hour_rel_11_amount: 0.835
                data_price_hour_rel_12_amount: 0.7428
                data_price_hour_rel_13_amount: 100
                data_price_hour_rel_14_amount: 100
                data_price_hour_rel_15_amount: 100
                data_price_hour_rel_16_amount: 100
                data_price_hour_rel_17_amount: 100
                data_price_hour_rel_18_amount: 100
                data_price_hour_rel_19_amount: 100
                data_price_hour_rel_20_amount: 100
                data_price_hour_rel_21_amount: 100
                data_price_hour_rel_22_amount: 100
                data_price_hour_rel_23_amount: 100

                Hab halt 100€ genommen, da ich nicht weiss was der Price Optimizer nimmt. -100 wäre ja das du Geld bekommst und er würde dein Auto dauerladen ;-)

              • CyCl0ne
                CyCl0ne kommentierte
                Kommentar bearbeiten
                Hab das Skript aktualisiert und oben im Config Teil hast du die Möglichkeit die 100€ zu ändern als PRICEEMPTY
            Lädt...