Ankündigung

Einklappen
Keine Ankündigung bisher.

Logic mit Async

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Logic mit Async

    Hallo,

    ich versuche gerade eine Vorhersage des Solar-Ertrag zu implementieren:
    Code:
    import asyncio
    import dataclasses
    from datetime import datetime, timezone, timedelta
    from pprint import pprint
    
    from forecast_solar import ForecastSolar, ForecastSolarRatelimit
    
    
    async def main():
        """Simple function to test the output."""
        async with ForecastSolar(
            latitude=52.16,
            longitude=4.47,
            declination=20,
            azimuth=10,
            kwp=2.160,
            damping=0,
            horizon="0,0,0,10,10,20,20,30,30",
        ) as forecast:
            try:
                estimate = await forecast.estimate()
            except ForecastSolarRatelimit as err:
                print("Ratelimit reached")
                print(f"Rate limit resets at {err.reset_at}")
                reset_period = err.reset_at - datetime.now(timezone.utc)
                # Strip microseconds as they are not informative
                reset_period -= timedelta(microseconds=reset_period.microseconds)
                print(f"That's in {reset_period}")
                return
    
            pprint(dataclasses.asdict(estimate))
            print()
            logger.error(f"energy_production_today: {estimate.energy_production_today}")
    
    asyncio.run(main())
    logger.error("forecastsolar")​
    Ich bekomme in der Zeile
    Code:
    async with ForecastSolar
    den Fehler
    2022-09-30 13:09:57 ERROR logics.forecastsolar In der Logik ist ein Fehler aufgetreten:
    Logik 'forecastsolar', Datei '/usr/local/smarthome/logics/forecastsolar.py', Zeile 11
    function main(), Exception: name 'ForecastSolar' is not defined
    Was mache ich falsch?

    Gruß,
    Hendrik

    #2
    Eine Logik verhält sich nicht wie ein Python Modul. Siehe Doku.

    Ich würde es tatsächlich mal mit Userfunctions probieren

    Kommentar


      #3
      Logiken verhalten sich nicht wie ein Python Modul.
      Du könntest versuchen das import Statement in die Funktion zu verschieben.
      Viele Grüße
      Martin

      There is no cloud. It's only someone else's computer.

      Kommentar


        #4
        Hallo,

        tatsächlich funktioniert es so:
        Code:
        async def main():
            import asyncio
            import dataclasses
            from datetime import datetime, timezone, timedelta
            from pprint import pprint
        
            from forecast_solar import ForecastSolar, ForecastSolarRatelimit
        
            """Simple function to test the output."""
            async with ForecastSolar(
                latitude=52.16,
                longitude=4.47,
                declination=20,
                azimuth=10,
                kwp=2.160,
                damping=0,
                horizon="0,0,0,10,10,20,20,30,30",
            ) as forecast:
                try:
                    estimate = await forecast.estimate()
                except ForecastSolarRatelimit as err:
                    print("Ratelimit reached")
                    print(f"Rate limit resets at {err.reset_at}")
                    reset_period = err.reset_at - datetime.now(timezone.utc)
                    # Strip microseconds as they are not informative
                    reset_period -= timedelta(microseconds=reset_period.microseconds)
                    print(f"That's in {reset_period}")
                    return
        
                pprint(dataclasses.asdict(estimate))
                print()
                logger.error(f"energy_production_today: {estimate.energy_production_today}")
        
        import asyncio
        asyncio.run(main())
        logger.error("forecastsolar")​
        Danke!

        Gruß,
        Hendrik

        Kommentar


          #5
          Als Alternative: Für Forecast Solar gibt es seit kurzem ein neues Plugin im Develop branch.

          Kommentar


            #6
            Ach nee... Mist. Nicht gefunden, da nicht in Develop geguckt.

            Kommentar


              #7
              Hallo,

              den in der plugin.yaml genannten Thread https://knx-user-forum.de/forum/supp...-solarforecast gibt es nicht.
              Vielleicht eröffnest du einen, dann können wir uns dort zum Plugin austauschen?

              Gruß,
              Hendrik

              Kommentar


                #8
                Hallo Hendrik,

                Lege gerne eine Supportseite an und hinterlege sie in der plugin.Yaml. Du kannst Dich gerne auch als Tester eintragen.

                Viele Grüße
                Alex

                Kommentar


                  #9
                  Ja, ich teste das gerne.

                  Was mir aktuell noch nicht klar ist:
                  Wie erzeuge ich die Items und gibt es nur die Items power_today und power_tomorrow?
                  Schon ein Vorschlag: bei smarthome-ng muss man ohnehin lat und lon (in etc/smarthome.yaml) konfigurieren. Ich schlage vor, die Werte zu übernehmen.

                  In den requirements fehlt solarforecast.

                  Gruß,
                  Hendrik
                  Zuletzt geändert von henfri; 30.09.2022, 20:37.

                  Kommentar


                    #10
                    Gerne testen. Ein Beispiel ist in der Docu dabei.
                    Lat, Lon ist bewusst so gewählt, dass diese bei externen Anlagen nicht mit dem Ort von Smarthomeng übereinstimmen muss.
                    Das plugin verwendete kein python package solarforecast, daher fehlt auch nichts in der requirements.txt.

                    Kommentar


                      #11
                      Ah, verstehe.
                      Lat/Lon:
                      Da fände ich schöner, wenn per default (keine Angabe in der plugin.yaml) die Smarthome-NG werte verwendet würden. Eine woanders stehende Anlage wird ja eher die Ausnahme sein.
                      Wo finde ich denn in der Docu ein Beispiel? Hier finde ich nix.

                      Das Plugin läuft seit gestern hier. Aber es macht halt noch nix :-)

                      Gruß,
                      Hendrik

                      Kommentar


                        #12
                        Schau erstmal, ob du das Plugin nutzen kannst. Zu schöner Wohnen Themen kommen wir später.

                        Das Beispiel für 4 Items findest du unter dem von Dir oben angegebenen Link unter Beispiele. Du verbrauchst gerade Deine Anzahl an Support- und Diskussionsanfragen bei mir...

                        Kommentar


                          #13
                          Hallo,

                          sorry, das Beispiel habe ich aufgrund der Formatierung wie sie in github angezeigt wird nicht erkannt.
                          Das Plugin funktioniert jetzt aber. Danke!

                          Gruß,
                          Hendrik
                          Zuletzt geändert von henfri; 01.10.2022, 20:28.

                          Kommentar


                            #14
                            Zitat von aschwith Beitrag anzeigen
                            Lat, Lon ist bewusst so gewählt, dass diese bei externen Anlagen nicht mit dem Ort von Smarthomeng übereinstimmen muss.
                            im openweathermap hatte ich das gleiche Problem, dort ist die config optional, und das Plugin aus dem Grund auch Multi-Instanz-fähig. Viel Spaß bei copy with pride :-) Im Web Interface übrigens auch mit Anzeige der Position auf der Karte usw…

                            Klasse Sache mit Solar Forecast, jetzt noch die Energievorhersage vom SMARD dazu und fertig ist die Optimierung der CO2-Belastung!

                            Kommentar

                            Lädt...
                            X