Tibber Strompreise einlesen und Aktoren schalten

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

mic4rd
Beiträge: 11
Registriert: 04.02.2023, 20:59
System: CCU
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von mic4rd » 29.11.2023, 19:02

Samson71 hat geschrieben:
06.09.2023, 16:32
terny hat geschrieben:
06.09.2023, 15:08
für eine gefühlt "einfache" Integration.
Womit wir im Prinzip wieder hier wären. Daher auch die Frage warum man die CCU damit "quälen" will und das Ganze nicht auf eine (potentere) Middleware auslagert, zumal wenn es dafür sogar schon (kostenfreie) Lösungen gibt.
Kurze Frage hierzu: warum quälen? Einmal am Tag ein Skript ausführen, das ein Array mit Uhrzeiten und Preisen befüllt klingt jetzt nicht so schlimm, oder? Einmal pro Stunde läuft dann ein Skript, dass den aktuellen Preis aus dem Array ausliest und dann mit einigen Wenn-Dann irgendwelche Werte setzt, klingt auch nicht so schlimm.

ioBroker mit zusätzlicher Hardware aufsetzen nur für die obengenannten einfachen Skript-Operationen klingt da deutlich aufwändiger/komplizierter/ineffizienter.

mic4rd
Beiträge: 11
Registriert: 04.02.2023, 20:59
System: CCU
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von mic4rd » 05.12.2023, 15:27

Wollte mich nochmal zurückmelden, habe gestern den Tibber Pulse bekommen und ab 1.Januar gehts bei mir endlich los mit Tibber <3

Da ich außer der Raspberrymatic keine weitere Hardware im Einsatz habe (ioBroker, etc.) habe ich mithilfe des Forums eine einfache, reine Skriptlösung erarbeitet, um die Tibber Strompreise aus der API per curl auszulesen und auszuwerten. In meinem Fall werden die teuren Stunden herausgesucht und während dieser die Heizung gesperrt (basierend auf dem von der API bereitgestellten Preisniveau https://developer.tibber.com/docs/reference#pricelevel).

Es wird CUxD und dein persönlicher Tibber-API-Key https://developer.tibber.com/docs/overview benötigt, sonst nichts weiter.

Es besteht aus zwei Skripten:
Das erste Skript läuft einmal täglich um die Strompreise für den Tag zu holen und in einer Systemvariable zu speichern. Sie werden ausgewertet und die Sperrzeiten für den Tag werden festgelegt und ebenfalls in Systemvariablen gespeichert.
Das zweite Skript läuft stündlich und schaut nur, ob die aktuelle Stunde gesperrt werden soll oder nicht.

Code: Alles auswählen

! == Tibber-Strompreise Skript v1.2 Mic4rd ((Tägliche Ausführung))==!
! Dank an MichaelN und Tyfys
! Quelle und Hinweise: https://homematic-forum.de/forum/viewtopic.php?f=19&t=79588&start=20#p787998

! Eingabe:
string apikey = "xxx"; ! Hier deinen persönlichen Tibber-API-Key eintragen
string cuxd = "CUxD.CUX2801001:1"; ! Hier dein CUXD-Device eintragen
string sysvar = "TIBBER_Strompreise"; ! Hier Namen der Systemvariablen (String) eintragen, in welche die Preise geschrieben werden sollen
string errorvar = "TIBBER_API-Fehler"; ! Hier Namen der Systemvariablen (Bool) eintragen, welchen einen API-Fehler anzeigt
string inhibitvar = "TIBBER_Sperrzeiten"; ! Hier Namen der Systemvariablen (String) eintragen, in den die Sperrzeiten eingetragen werden
string inhibithrs = "TIBBER_Sperrstundenanzahl"; ! Hier Namen der Systemvariablen (Integer) eintragen, in die die Anzahl der Sperrzeiten eingetragen wird
string inhibitprices = "TIBBER_Sperrzeitpreise"; ! Hier Namer der Systemvariablen (String) eintragen, in die die Preise der Sperrzeiten eingetragen wird
integer maxinhibit = 5; ! Hier die maximale Anzahl der Sperrstunden eintragen (=24, falls beliebig)
string inhibitstring1 = "EXPENSIVE"; ! Preisniveau, bei dem gesperrt werden soll (z.B. "VERY_EXPENSIVE" oder "EXPENSIVE" (es wird auch VERY_EXPENSIVE gesperrt)) 
string inhibitstring2 = "none"; ! Weiteres Preisniveau, bei dem gesperrt werden soll (z.B. "NORMAL" oder "none" falls nicht benötigt)

! Ausführung, ab hier nichts ändern
string period = "today";
object arr=""; ! Variable für das Sortierskript
dom.GetObject(sysvar).State("error"); ! Wert auf error setzen, falls mit dem Abrufen etwas schiefgehen sollte
dom.GetObject(errorvar).State(1); ! Fehlervariable auf true setzen, falls mit dem Abrufen etwas schiefgehen sollte
var tibberpriceurl="curl -H \"Authorization: Bearer "+apikey+"\" -H \"Content-Type: application/json\" -X POST -d  '{ \"query\": \"{viewer {homes {currentSubscription {priceInfo {"+period+" {startsAt total level}}}}}}\" }' https://api.tibber.com/v1-beta/gql";
dom.GetObject(cuxd+".CMD_SETS").State(tibberpriceurl); ! Query-Ziel setzen
dom.GetObject(cuxd+".CMD_QUERY_RET").State(1);
string tibber_prices = dom.GetObject(""+cuxd+".CMD_RETS").State(); ! Tibber-API Query ausführen und in Variable speichern
!WriteLine("API-Antwort: "+tibber_prices);

! Falls keine Strompreise verfügbar sind
if (tibber_prices.Contains("error") || tibber_prices.Length()==0){
  WriteLine("FEHLER: Kein Strompreis verfügbar!");}
else {
  dom.GetObject(sysvar).State(tibber_prices);
  dom.GetObject(errorvar).State(0); ! Fehler-Variable auf false setzen
  WriteLine("Preise erfolgreich empfangen!");
  string stdout; string stderr;
  integer i = 0; integer exp_hrs = 0; string inh_hrs; string inh_prices;
  while (i<24) { ! Jede Stunde des Tages auswerten
    system.Exec( "node -e 'console.log( " # tibber_prices # ".data.viewer.homes[0].currentSubscription.priceInfo."+period+"["+i.ToString()+"].level );'",&stdout,&stderr); if (stderr) { Write(stderr); quit; } ! Preisniveau auslesen
    ! WriteLine(i.ToString()+" Uhr: "+stdout);
    if (stdout.Contains(inhibitstring1) || stdout.Contains(inhibitstring2)) { ! Teure und ggf. normale Stromstunden zählen
      exp_hrs=exp_hrs+1;
      system.Exec( "node -e 'console.log( " # tibber_prices # ".data.viewer.homes[0].currentSubscription.priceInfo."+period+"["+i.ToString()+"].total );'",&stdout,&stderr); if (stderr) { Write(stderr); quit; } ! Preis auslesen
      inh_prices=inh_prices+stdout+";"; ! Kosten der Sperrstunde eintragen
      arr=arr + stdout + "/"; ! Kosten der Sperrstunde eintragen
      system.Exec( "node -e 'console.log( " # tibber_prices # ".data.viewer.homes[0].currentSubscription.priceInfo."+period+"["+i.ToString()+"].startsAt );'",&stdout,&stderr);         if (stderr) { Write(stderr); quit; } ! Zeitpunkte auslesen
      inh_hrs=inh_hrs+stdout.Substr(11,2)+";"; ! Sperrzeiten eintragen
      arr=arr + stdout.Substr(11,2) + ";"; ! Sperrzeiten eintragen
      };
    i=i+1;
  }
  inh_hrs=inh_hrs.Substr(0,inh_hrs.Length()-1); ! Letztes ; entfernen
  inh_prices=inh_prices.Substr(0,inh_prices.Length()-1); ! Letztes ; entfernen
  inh_prices=inh_prices.Replace("\n",""); ! Umbrüche entfernen
  arr=arr.Replace("\n",""); ! Umbrüche entfernen
  
  ! Sortierskript von Tyfys zum Begrenzen der maximalen Sperrzeit
  ! ---------------------------------------------------------------------------  
  if (exp_hrs > maxinhibit) { ! Sperrstunden begrenzen falls nötig
    WriteLine("Heizung würde heute für "+exp_hrs.ToString()+" Stunden gesperrt. Es wird auf die " # maxinhibit # " teuersten Stunden begrenzt.");
    object arrtyp  ="n;n"; ! Element Art  n=numerisch / a=alphanumerisch

    var sep1=";"; ! Trennzeichen für Stunden
    var sep2="/"; ! Trennzeichen für Preis und Stunde

    !Tauschstrings von > nach
    string av;
    string an;
    integer len = web.webGetValueListCount(arr).ToInteger() - 1;
    boolean swapped = true;
    var elemart = "a";
    string index;
    integer von = 0;
    integer bis = 1;

    foreach(index, system.GenerateEnum(von, bis)) {
      integer x = (von + bis) - index.ToInteger();
      elemart = arrtyp.StrValueByIndex(sep1, x);
      swapped = true;
      while (swapped) {
        i = 1;
        swapped = false;
          while (i <= len) {
            if (((elemart <> "n") && ((arr.StrValueByIndex(sep1, i).StrValueByIndex(sep2, x).ToUpper()) < (arr.StrValueByIndex(sep1, i - 1).StrValueByIndex(sep2, x).ToUpper())))
                 || ((elemart == "n") && ((arr.StrValueByIndex(sep1, i).StrValueByIndex(sep2, x).ToFloat()) < (arr.StrValueByIndex(sep1, i - 1).StrValueByIndex(sep2, x).ToFloat())))) {
                av = arr.StrValueByIndex(sep1, i - 1) # sep1 # arr.StrValueByIndex(sep1, i);
                an = arr.StrValueByIndex(sep1, i) # sep1 # arr.StrValueByIndex(sep1, i - 1);
                arr = arr.Replace(av, an);
                swapped = true;
              }
              i = i + 1;
          }
      }
    }
  
    string ix;
  
    object arr2 = "";
    string elem;
    foreach(elem, arr.Split(";")) {
      arr2 = elem # sep1 # arr2;
    }
    arr = arr2;
    arr2="";
    inh_hrs="";
    inh_prices="";
    WriteLine("Die teuersten " # maxinhibit # " Preise heute:");
    foreach(ix, system.GenerateEnum(0, maxinhibit-1)) {
      WriteLine((ix.ToInteger() + 1) # ".  " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 0)) # " EUR ab " # (arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 1)) # " Uhr" );
      inh_hrs = inh_hrs + arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 1) + ";";
      inh_prices = inh_prices + arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 0) + ";";
      ! arr2=arr2 # arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 0) # sep2 # arr.StrValueByIndex(sep1, ix).StrValueByIndex(sep2, 1) # sep1;
    }
  exp_hrs=maxinhibit;
  inh_hrs=inh_hrs.Substr(0,inh_hrs.Length()-1); ! Letztes ; entfernen
  inh_prices=inh_prices.Substr(0,inh_prices.Length()-1); ! Letztes ; entfernen
  };
  ! ---------------------------------------------------------------------------
  WriteLine("Heizung wird heute für "+exp_hrs.ToString()+" Stunden gesperrt.");
  
  dom.GetObject(inhibitvar).State(inh_hrs); ! SV schreiben
  dom.GetObject(inhibithrs).State(exp_hrs); ! SV schreiben
  dom.GetObject(inhibitprices).State(inh_prices); ! SV schreiben
    
  dom.GetObject(ID_PROGRAMS).Get("TIBBER-Strompreis stündlich auswerten").ProgramExecute(); ! Auswertung direkt starten
  }
Dieses Skript wird einmal täglich um 00:01 ausgeführt, um die Strompreise für den aktuellen Tag zu holen und in einer Systemvariable zu speichern. Zusätzlich wird das Skript jede halbe Stunde ausgeführt, WENN eine Bool-Systemvariable TIBBER_API-Fehler auf true steht, also z.B. wenn die Internetverbindung unterbrochen oder die Tibber-API nicht erreichtbar ist. Es kann dann weitergehend z.B. ein Alarm oder eine Pushnachricht eingerichtet werden.

Zu Beginn jeder Stunde führt man dann dieses Skript aus:

Code: Alles auswählen

! == Tibber-Strompreise Skript v1.2 Mic4rd ((Stündliche Ausführung))==!

! Quelle und Hinweise: https://homematic-forum.de/forum/viewtopic.php?f=19&t=79588&start=20#p787998

! Eingabe:
string channel_inhibit = "Heizungssperre-Tibber"; ! Hier den Namen der Systemvariable oder des Kanals eintragen, der eine Sperre der Heizung bewirkt
string SV_pricing_today = "TIBBER_Strompreise"; ! Hier die Systemvariable eintragen, in welcher die Preise von heute sind
string SV_current_price = "TIBBER_Strompreis_aktuell"; ! Hier die Systemvariable eintragen, in welche der aktuelle Preis geschrieben werden soll
string SV_current_level = "TIBBER_Preisniveau_aktuell"; ! Hier die Systemvariable eintragen, in welche das aktuelle Preisniveau geschrieben werden soll
string inhibitvar = "TIBBER_Sperrzeiten"; ! Hier Namen der Systemvariablen eintragen, in den die Sperrzeiten eingetragen sind
string SV_errorvar = "TIBBER_API-Fehler"; ! Hier Namen der Systemvariablen eintragen, welchen einen API-Fehler anzeigt

! =================================
! Ausführung, ab hier nichts ändern
string period = "today"; 
string hour2check =  system.Date("%H"); ! Aktuelle Stunde auslesen
string tibber_prices = dom.GetObject(SV_pricing_today).Value(); ! Strompreise auslesen

string stdout; string stderr; ! API Auslesevariablen

! Falls keine Strompreise verfügbar sind
if (tibber_prices.Contains("error") || tibber_prices.Length()==0){
  WriteLine("FEHLER: Kein Strompreis verfügbar.");
  dom.GetObject(SV_current_price).State("error");
  dom.GetObject(SV_current_level).State("error");
  dom.GetObject(SV_errorvar).State(1); ! API-Fehler setzen
  quit;}

system.Exec( "node -e 'console.log( " # tibber_prices # ".data.viewer.homes[0].currentSubscription.priceInfo."+period+"["+hour2check+"].total );'",&stdout,&stderr); if (stderr) { Write(stderr); quit; } ! Aktuellen Strompreis auslesen
WriteLine("Strompreis ab "+hour2check+" Uhr: "+stdout.Replace("\n","")+" EUR/kWh");
dom.GetObject(SV_current_price).State(stdout.ToFloat()); ! Aktuellen Strompreis in die Systemvariable schreiben

system.Exec( "node -e 'console.log( " # tibber_prices # ".data.viewer.homes[0].currentSubscription.priceInfo."+period+"["+hour2check+"].level );'",&stdout,&stderr); if (stderr) { Write(stderr); quit; } ! Aktuelles Preisniveau auslesen
WriteLine("Preisniveau ab "+hour2check+" Uhr: "+stdout);
dom.GetObject(SV_current_level).State(stdout); ! Aktuelles Preisniveau in die Systemvariable schreiben

WriteLine("Sperrzeiten: "+dom.GetObject(inhibitvar).Value());

if (dom.GetObject(inhibitvar).Value().Contains(hour2check)) { ! Wenn aktuelle Stunde eine Sperrzeit ist
  WriteLine("Teurer Strom erkannt, Heizung wird gesperrt!");
  dom.GetObject(channel_inhibit).State(1); ! Heizung sperren
  WriteLine("Sperrstatus: "#dom.GetObject(channel_inhibit).State());}
else { ! Aktuelle Stunde ist keine Sperrstunde
  WriteLine("Strompreis normal oder günstig, Heizung wird freigegeben!");
  dom.GetObject(channel_inhibit).State(0); ! Heizung freigeben
  WriteLine("Sperrstatus: "#dom.GetObject(channel_inhibit).State());}
Im Falle der obigen Skripte müssen folgende Systemvariablen angelegt werden:
  • TIBBER_API-Fehler (Logikwert) - Wird auf wahr gesetzt, falls die Strompreise nicht von der Tibber-API abgerufen werden können. Man kann es dann z.B. halbstündlich weiter probieren
  • TIBBER_Preisniveau_aktuell (Zeichenkette) - Zeigt stündlich das aktuelle Preisniveau an
  • TIBBER_Sperrstundenanzahl (Zahl) - Zeigt täglich die Anzahl der gesperrten Stunden an
  • TIBBER_Sperrzeiten (Zeichenkette) - Zeigt täglich die Stunden der Sperrung als Liste an
  • TIBBER_Strompreis_aktuell (Zahl) - Zeigt stündlich den aktuellen Strompreis in €/kWh an
  • TIBBER_Strompreise (Zeichenkette) - Hier wird die JSON-Antwort der Tibber-API für den kompletten Tag abgelegt
Bei mir funktioniert das soweit sehr gut.

EDIT: V1.0: Um hier keinen falschen/verwirrenden Zwischenstand stehen zu lassen, habe ich die alten Zwischenstände entfernt und nur die aktuellste Version hier eingefügt

EDIT2: V1.1: API-Fehlererkennung mit Hilfe von MichaelN eingebaut, danke!

EDIT3: V1.2: Funktion zum Sperren der x teuersten Stunden hinzugefügt mit dem Sortierskript von Tyfys, vielen Dank!
Zuletzt geändert von mic4rd am 04.01.2024, 20:45, insgesamt 23-mal geändert.

MichaelN
Beiträge: 9686
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1627 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von MichaelN » 05.12.2023, 16:14

mic4rd hat geschrieben:
05.12.2023, 15:27
wofür ich noch keine Lösung habe, ist zu erkennen, ob man die Strompreise auch *erfolgreich* von der Tibber-API bekommen hat bzw. dass man einen Timer startet und es z.B. stündlich wiederholt, bis man die Preise hat.
Ist das Problem zu erkennen ob es einen erfolgreichen Abruf gibt? Das sollte ja daruch machbar sein, das der Antwortstring eben leer ist, wenn es nicht erfolgreich war?!

Dann kannst Du eine Systemvariable auf "nicht erfolgreich" setzen und ein Programm mit Zeitmodul stündlich staretn das diese SV prüft und dann ggf das Skript ausführt.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

mic4rd
Beiträge: 11
Registriert: 04.02.2023, 20:59
System: CCU
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von mic4rd » 05.12.2023, 17:21

MichaelN hat geschrieben:
05.12.2023, 16:14
mic4rd hat geschrieben:
05.12.2023, 15:27
wofür ich noch keine Lösung habe, ist zu erkennen, ob man die Strompreise auch *erfolgreich* von der Tibber-API bekommen hat bzw. dass man einen Timer startet und es z.B. stündlich wiederholt, bis man die Preise hat.
Ist das Problem zu erkennen ob es einen erfolgreichen Abruf gibt? Das sollte ja daruch machbar sein, das der Antwortstring eben leer ist, wenn es nicht erfolgreich war?!

Dann kannst Du eine Systemvariable auf "nicht erfolgreich" setzen und ein Programm mit Zeitmodul stündlich staretn das diese SV prüft und dann ggf das Skript ausführt.
EDIT: Meine vorige Antwort war quatsch

Habe deinen Beitrag eben erst richtig verstanden und nun richtig umgesetzt, funktioniert einwandfrei! Danke für die tolle Anregung!

Das tägliche Skript sollte dann so ausgeführt werden und alle 30 min wiederholt werden, falls TIBBER_API-FEHLER true ist:
Bild

TomTB
Beiträge: 73
Registriert: 18.11.2018, 15:30
Danksagung erhalten: 4 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von TomTB » 06.12.2023, 09:55

Hat es schon jemand geschafft, die Echtzeitdaten (aktueller Verbrauch, Zählerstand) über die Tibber-API abzurufen? Ich bin da bisher grandios gescheitert. Muss kein HM-Script sein. Shell oder Javascript geht auch.
Tom

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von Fonzo » 06.12.2023, 10:53

TomTB hat geschrieben:
06.12.2023, 09:55
Hat es schon jemand geschafft, die Echtzeitdaten (aktueller Verbrauch, Zählerstand) über die Tibber-API abzurufen?
Dazu nutzt man einfach ein System, das die Daten per Websocket abruft, eine HmIP-CCU3 selber ist da von sich aus alleine eher ungeeignet, da sind Systeme besser, die von sich aus einfach ein Websocket benutzen lassen und dann eben bei Bedarf etwas über die HmIP-CCU3 schalten, wenn das denn gewünscht ist.

TomTB hat geschrieben:
06.12.2023, 09:55
Muss kein HM-Script sein.
Wenn es kein HM Script sein muss, bietet es sich an gleich ein System zu benutzen, das die Daten einfach per Websocket ausliest und dann bei Bedarf von dem System Homematic IP Geräte über eine HmIP-CCU3 zu schalten.

Beschrieben ist das Vorgehen ausführlich in der Tibber Dokumentation.


TomTB
Beiträge: 73
Registriert: 18.11.2018, 15:30
Danksagung erhalten: 4 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von TomTB » 07.12.2023, 07:47

Danke. Die API-Dokumentation auf https://developer.tibber.com/docs/guides/calling-api ist mir bekannt. Ich habe es mit einem Javascript-Serverscript versucht, aber die Authentisierung scheitert mit "WebSocket connection to 'wss://websocket-api.tibber.com/v1-beta/gql/subscriptions' failed:" ohne Hinweis auf den Fehlergrund. Anscheinend wird das Bearer-Token nicht richtig übermittelt. Nodered werde ich nicht installieren aber ich kann ja mal schauen, was die Kollegen da im Code zu stehen haben, wenn ich die richtige Stelle finde.
Tom

mic4rd
Beiträge: 11
Registriert: 04.02.2023, 20:59
System: CCU
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von mic4rd » 12.12.2023, 18:25

Hallo nochmal, heute gab es 12 "EXPENSIVE" Stunden bei Tibber und ich habe gemerkt, dass das zuviel Sperre für die Heizung ist. Gleichzeit gab es keine einzige "VERY EXPENSIVE" Stunde. Nun möchte ich mein Skript etwas anpassen, um eine maximale Anzahl der Sperrstunden definieren zu können.

Beispiel: maximale Sperrstunden = 5. Mit foreach und dem Split-Command kann ich die EXPENSIVE Stunden durchgehen und auch den Preis dazu aufrufen.

Nur wie kann ich nun die 5 teuersten Werte effizient raussuchen? Eine Sortierfunktion habe ich in der Skript-Doku leider nicht gefunden, die Min oder Max Funktion kann nur zwei Werte miteinander vergleichen.

TomTB
Beiträge: 73
Registriert: 18.11.2018, 15:30
Danksagung erhalten: 4 Mal

Re: Tibber Strompreise einlesen und Aktoren schalten

Beitrag von TomTB » 13.12.2023, 08:08

Mein Ansatz (ohne es ausprobiert zu haben) wäre, das außerhalb von HM zu machen. Z.B. mit einem Javascript, das in einem NPM-Server läuft (auf einem Raspi npm start script.js). Da kann man beliebige Operationen programmieren, sortieren, etc. Das Ergebnis wäre dann heizen oder nicht heizen, was man per XML-RPC in eine Systemvariable von HM übernimmt. Das triggert dann die Heizung.
Wie gesagt nur Theorie. Ausprobiert habe ich es nicht.
Tom

Antworten

Zurück zu „HomeMatic allgemein“