{"id":1120,"date":"2026-01-01T10:00:04","date_gmt":"2026-01-01T09:00:04","guid":{"rendered":"https:\/\/www.factorysensesoftware.at\/?p=1120"},"modified":"2026-02-08T15:50:21","modified_gmt":"2026-02-08T14:50:21","slug":"optimization-web-api","status":"publish","type":"post","link":"https:\/\/www.factorysensesoftware.at\/index.php\/2026\/01\/01\/optimization-web-api\/","title":{"rendered":"Energy Optimization Web API"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Implementierung<\/h2>\n\n\n\n<p>Nach einigen Wochen der Modellierung erfolgte nun die Implementierung des Modells und der notwendigen Solvermechanik in .NET\/C#. Als Entwicklungsframework aus meiner Sicht aufgrund der zwischenzeitlichen Plattformunabh\u00e4ngigkeit von .NET Core, mehr denn je, die unbestrittene #1 unter den Programmiersprachen, vor allem im Enterprise Bereich, wenn auch nicht geeignet um die Bed\u00fcrfnisse heutiger Python Script Kiddies zu befriedigen. Man m\u00f6ge mir den Seitenhieb verzeihen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"514\" height=\"463\" src=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-21.png\" alt=\"\" class=\"wp-image-1308\" srcset=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-21.png 514w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-21-300x270.png 300w\" sizes=\"auto, (max-width: 514px) 100vw, 514px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Der Solver und das zugeh\u00f6rige mathematische Modell wurden in eine net8.0 Web API gepackt und in einem Windows Service gehostet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wetter API<\/h2>\n\n\n\n<p>Um das Optimierungsmodell mit Wetterdaten zu versorgen, k\u00f6nnen dem Service die prognostizierten Au\u00dfentemperaturen \u00fcber den Request als Input \u00fcbergeben werden. Diese Daten k\u00f6nnen beispielsweise aus dem angebotenen Wetterservice von Loxone herangezogen werden.<\/p>\n\n\n\n<p>Werden die Wetterdaten nicht \u00fcber den Request \u00fcbergeben, so bezieht der Optimierungsservice diese \u00fcber<\/p>\n\n\n\n<p><a href=\"https:\/\/open-meteo.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/open-meteo.com\/<\/a><\/p>\n\n\n\n<p>welche die prognostizierte Au\u00dfentemperaturen unter Angabe von L\u00e4ngen- und Breitengrad und einiger Steuerungsparameter auf stundenbasis f\u00fcr die kommenden 24 Stunden bereitstellt und eine hervorragende Alternative f\u00fcr Nicht-Kommerzielle Anwendungen darstellt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Awattar API<\/h2>\n\n\n\n<p>Das Energieoptimierungssystem lebt vor allem von der Ausnutzung von Stunden mit reduzierten Stromkosten. Entsprechende Stromtarife erfreuen sich immer gr\u00f6\u00dferer Beliebtheit. In meinem Fall fiel die Wahl schon vor l\u00e4ngerer Zeit auf Awattar Hourly. Einerseits ist eine entsprechende REST Web API verf\u00fcgbar, andererseits bietet Awattar auch zus\u00e4tzliche Goodies, wie zum Beispiel Charts mit Strompreis-Prognosedaten f\u00fcr den kommenden Tag. F\u00fcr eine fundierte Entscheidung \u00fcber die Verschiebung der W\u00e4rmeerzeugung sind diese variablen Stromkosten von entscheidender Bedeutung.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"434\" src=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-22.png\" alt=\"\" class=\"wp-image-1310\" srcset=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-22.png 940w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-22-300x139.png 300w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-22-768x355.png 768w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-22-830x383.png 830w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Details zur Awattar API f\u00fcr Loxone sind unter folgendem Link verf\u00fcgbar.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.awattar.at\/services\/loxone\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.awattar.at\/services\/loxone<\/a><\/p>\n\n\n\n<p>Nachstehende Endpoints der Awattar API werden durch Awattar bereitgestellt:<\/p>\n\n\n\n<p><a href=\"http:\/\/api.awattar.at\/v1\/marketdata\/current.yaml\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/api.awattar.at\/v1\/marketdata\/current.yaml<\/a><\/p>\n\n\n\n<p><a href=\"http:\/\/api.awattar.at\/v1\/marketdata\/current.yaml?tomorrow=include\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/api.awattar.at\/v1\/marketdata\/current.yaml?tomorrow=include<\/a><\/p>\n\n\n\n<p>Aus Gr\u00fcnden der Flexibilit\u00e4t des Services werden die Stromkosten ausschlie\u00dflich \u00fcber Input-Parameter im Optimierungs-Request bereitgestellt. Die Awattar API wird daher \u00fcber Loxone integtiert, wo die Awattar Anbindung ohnehin aufgrund der erforderlichen Statistikaufzeichnung gemacht werden muss. Die Einbindung der Awattar API wird folglich im Kapitel Loxone Integration behandelt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Swagger\/Open API Dokumentation<\/h2>\n\n\n\n<p>Die angewendeten Request und Response Objekte des Optimierungsservices sind unter nachstehendem Link dokumentiert.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.factorysensesoftware.at\/energyoptimization\/redoc-static.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.factorysensesoftware.at\/energyoptimization\/redoc-static.html<\/a><\/p>\n\n\n\n<p>Diese gilt es an sp\u00e4terer Stelle \u00fcber unsere Loxone Automatisierung zu f\u00fcttern und das Ergebnis f\u00fcr die W\u00e4rmepumpe aufzubereiten.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"491\" src=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-49-1024x491.png\" alt=\"\" class=\"wp-image-1370\" srcset=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-49-1024x491.png 1024w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-49-300x144.png 300w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-49-768x368.png 768w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-49-1140x547.png 1140w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-49-830x398.png 830w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-49.png 1441w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deployment<\/h2>\n\n\n\n<p>Das Deployment erfolgte auf einem angemieteten V-Server mit 8 Kernen und 18 GB RAM auf Microsoft Windows Server 2025 Datacenter. Eine Maschine, durchaus geeignet um vom Multi-Threading des Solvers zu profitieren.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"521\" src=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-50.png\" alt=\"\" class=\"wp-image-1372\" srcset=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-50.png 788w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-50-300x198.png 300w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-50-768x508.png 768w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Der Service l\u00e4uft auf dem virtuellen Server als Self-Hosted Windows Service, meine bevorzugte Hosting Methode. Die HTTP Requests werden vom integrierten Web-Server f\u00fcr ASP.NET Core Anwendungen, Kestrel, verarbeitet. Das garantiert eine leichtf\u00fcssige und performante L\u00f6sung. Und nebenbei erspart man sich die Installation und den Betrieb eines dedizierten Webservers, wie zum Beispiel Microsoft IIS oder \u00e4hnlichem.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"376\" src=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-51-1024x376.png\" alt=\"\" class=\"wp-image-1374\" srcset=\"https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-51-1024x376.png 1024w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-51-300x110.png 300w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-51-768x282.png 768w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-51-1140x418.png 1140w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-51-830x305.png 830w, https:\/\/www.factorysensesoftware.at\/wp-content\/uploads\/2026\/01\/image-51.png 1439w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Au\u00dferdem werden dadurch Service Restarts bei etwaigem Programmabbruch vom Windows Service gehandelt. Logging wird \u00fcber Windows Applikationslogs bewerkstelligt.<\/p>\n\n\n\n<p>Es wurden bereits so einige Hindernisse \u00fcberwunden, die a priori nicht am Radar waren. Trotzdem sind wir schon weit gekommen und das System funktioniert bis hierhin tadellos. F\u00fcr all jene, die geistig noch nicht ausgestiegen sind, warten allerdings noch einige weitere \u00dcberraschungen wenn es um die Integration der Intelligenz mit Loxone und der Vaillant W\u00e4rmepumpe geht.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Implementierung Nach einigen Wochen der Modellierung erfolgte nun die Implementierung des Modells und der notwendigen Solvermechanik in .NET\/C#. Als Entwicklungsframework aus meiner Sicht aufgrund der zwischenzeitlichen Plattformunabh\u00e4ngigkeit von .NET Core, mehr denn je, die unbestrittene #1 unter den Programmiersprachen, vor allem im Enterprise Bereich, wenn auch nicht geeignet um die Bed\u00fcrfnisse heutiger Python Script Kiddies [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":971,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-1120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-energieoptimierung"],"_links":{"self":[{"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/posts\/1120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/comments?post=1120"}],"version-history":[{"count":15,"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/posts\/1120\/revisions"}],"predecessor-version":[{"id":1375,"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/posts\/1120\/revisions\/1375"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/media\/971"}],"wp:attachment":[{"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/media?parent=1120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/categories?post=1120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.factorysensesoftware.at\/index.php\/wp-json\/wp\/v2\/tags?post=1120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}