tägliche Sonnenstunden als Bedingung

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

adri
Beiträge: 149
Registriert: 10.02.2014, 18:37
Danksagung erhalten: 1 Mal

Re: tägliche Sonnenstunden als Bedingung

Beitrag von adri » 16.10.2019, 11:31

Hallo Alchy,
Danke für deine ausführliche Erläuterung.
Ich denke dass jede verkaufte
kw/h Strom im Winter verschenktes Geld ist, da im umkehrschluss meistens nachts dann, die Wärmepumpe mit teurem Strom, Wärme produziert. Daher möchte ich die Wärmepumpe anschmeissen, wenn genügend Sonne am Himmel zu sehen ist. Das sollte auch über einen längeren Zeitraum bestehen, da die Wärmepumpe nicht sooft takten sollte.
Wenn ich jetzt mit sagen wir mal 4 sonnenstunden pro Tag rechnen kann, würde ich die Pumpe laufen lassen. Wenn zeitweise keine Sonne scheint übernimmt der stromspeicher die elektrische Versorgung und ich muss keinen Strom einkaufen.
also brauche ich eigentlich nur die Info einer Glaskugel über die zu erwartenden Sonnenstunden, welche ich dann als Bedingung zum anstoßen des Programms verwenden kann. Mein Problem dabei ist, dass ich diese Info nicht in die homematic integriert bekomme, da mir hierzu leider das nötige Wissen fehlt.
Als Fazit, die sonnenstunden welche Strom produzieren, sollten als Wärme im fussboden gespeichert werden.
Danke und Gruß Adrian

adri
Beiträge: 149
Registriert: 10.02.2014, 18:37
Danksagung erhalten: 1 Mal

Re: tägliche Sonnenstunden als Bedingung

Beitrag von adri » 16.10.2019, 11:45

Hallo Xel66,
Danke für deine Rückmeldung.
Die beiden Beiträge haben sich leider überschritten, wir haben zur gleichen Zeit geschrieben.
Du hast es völlig richtig erkannt.
Ich bin auch erst am austesten. Kann seit 4 Wochen auf die Heizung zugreifen und diese steuern.
Meine Überlegung läuft sicher etwas vom Konzept der "Komfortheizung" weg, dafür denke ich kann Energie eingespart werden.
sollte es mir zu warm werden, habe ich immer noch die Möglichkeit ein Fenster zu öffnen. Und wenn es zu kalt wird, kann die Pumpe nachts immer noch Wärme produzieren, aber sie wird sicher nicht mehr so kräftig heizen müssen, da der fussboden bereits gut vom abgelaufenen Tag, vorgewärmte ist.
mag sein, dass meine Vorstellung ein Griff ins klo ist, ich würde es aber gerne austesten. Allzuviel kann ich dabei nicht verlieren.
Danke und Gruß Adrian

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: tägliche Sonnenstunden als Bedingung

Beitrag von alchy » 16.10.2019, 12:15

Ich würde im Leben nicht auf die Idee kommen, z.B. tagsüber bei Sonneneinstrahlung meine Wärmepumpe den Fußboden unerwünscht erwärmen zu lassen, damit es abends nicht passieren muss.
Ich wollte nur fragen, ob onthefly nicht auch geht. Und ich sehe immer noch keinen Grund, warum du nicht selber die Messung der Sonnen durchführen solltest und entsprechend reagieren könntest. Aber das liegt bestimmt definitiv an mir.

Wie auch immer, darum soll es ja auch nicht gehen.

Natürlich kann ich nur für mich sprechen, aber da ist *IMHO* erst mal deine Mitarbeit gefragt.
Die große Tannte G angeworfen und selber eine Seite gesucht, die dir die Daten für deine Umgebung möglichst einfach zur Verfügung stellt. Vielleicht gibt es ja in deiner Umgebung eine Wetterstation? Das wäre zum Beispiel so ein Teil deiner Mitarbeit. Oder erwartest du das dir jemand alles abnimmt inklusive des Ratens, wo du wohnst?
Dann kannst du doch allemal noch mal nachfragen.

Alchy
PS: Wetter.com ist für einen ersten Test zwar nur ein ~10 Zeiler Script, aber die Ausführungszeit wäre mir zu lange.

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

adri
Beiträge: 149
Registriert: 10.02.2014, 18:37
Danksagung erhalten: 1 Mal

Re: tägliche Sonnenstunden als Bedingung

Beitrag von adri » 16.10.2019, 13:05

Hallo alchy, danke für dein Bewertung.
Ich erkenne immer öfter in diesem forum, dass User die eine Frage stellen hinterher ein schlechtes Gewissen haben müssen, weil sie sich für Dinge rechtfertigen sollen, die sie gar nicht gefragt haben.
seit 3 Tagen mache ich nix anderes als mit der netten Tante zu versuchen, Dinge heraus zu finden um nicht im forum eine blöde Frage stellen zu müssen.
Das was für mich interessant sein könnte, liefert wohl seit 2018 keine sogenannten APIs mehr und alles andere verstehe ich leider nicht.
Ich habs oft genug geschrieben, ich bin leider nicht in der Lage, diese Daten in homematic zu übertragen, es heißt wohl parsen. ICH KANN ES NICHT, BIN ZU DUMM
Ich will auch garnicht dass mir jemand was sucht, wenn ich weiß wie es gemacht wird, kann ich selber suchen.
macht das so einen großen unterschied in meiner frage, wie bekomme ich die wetterdaten in die homematic wenn der Antwortgeber weiss wo ich wohne?
Ist die meine frage berechtigter, wenn der antwortgeber mit meinem Vorhaben konform läuft?
Icv werde nur mit links konfrontiert die ich meisten bereits gelesen habe und oftmals nicht verstanden habe. Mir wird mitgeteilt, dass ich zu doof bin die Signaturen zu sehen um dort die gesuchten Infos zu erhalten. Steht allerdings nix drin was ich wissen will.
Oftmals denke ich, wenn ich hier im forum lese, dass vielmehr Zeit zur diskreditierung des Fragestellers aufgewendet wird, als für den Inhalt selbst.
Danke trotzdem an alle Rückmeldungen
Gruß Adrian

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: tägliche Sonnenstunden als Bedingung

Beitrag von alchy » 16.10.2019, 16:40

adri hat geschrieben:
16.10.2019, 13:05
Ich erkenne immer öfter in diesem forum, dass User die eine Frage stellen hinterher ein schlechtes Gewissen haben müssen, weil sie sich für Dinge rechtfertigen sollen, die sie gar nicht gefragt habe.
...
Oftmals denke ich, wenn ich hier im forum lese, dass vielmehr Zeit zur diskreditierung des Fragestellers aufgewendet wird, als für den Inhalt selbst.
Ich glaub ich spinne. :twisted:

adri hat geschrieben:
16.10.2019, 13:05
Ich habs oft genug geschrieben, ich bin leider nicht in der Lage, diese Daten in homematic zu übertragen, es heißt wohl parsen. ICH KANN ES NICHT, BIN ZU DUMM
Erstens habe ich dich nicht als dumm bezeichnet und überhaupt habe ich das nicht von dir verlangt. :twisted:

Nenn mir eine / mehrere Webseite, welche die von dir gewünschte Sonnenscheindauer für deine Umgebung anzeigt.
DAS war die Aufgabe. Zuviel? Dann bin ich hier auch raus.
adri hat geschrieben:
16.10.2019, 13:05
macht das so einen großen unterschied in meiner frage, wie bekomme ich die wetterdaten in die homematic wenn der Antwortgeber weiss wo ich wohne?
Nun, mich persönlich interessiert es einen Dreck wo du wohnt. Aber auch hier gilt wie oben drüber.
Beantworte mir mal die Frage:
Wenn es z.B. keine Webseite gibt, die das von dir Gewünschte für deine Umgebung anzeigt, wIE zum Teufel soll dir jemand das programmieren, was du dir wünschst?
adri hat geschrieben:
16.10.2019, 13:05
Ist die meine frage berechtigter, wenn der antwortgeber mit meinem Vorhaben konform läuft?
Nein. Ich habe hier oft genug Sachen programmiert, welche ich nicht so machen würde. Und da nehm ich mir auch das Recht raus, das zu begründen oder zu erwähnen.
Hinterfragen & Abschweifen ist vielleicht für den Fragenden nicht immer schön, aber in der Regel wird es nicht aus Quatsch gemacht. Es zeigt auch meistens Diskussionsbedarf, weil der Fragende sich nicht so die Gedanken oder in seiner Frage vielleicht das ein oder andere nicht bedacht hat.

Kann man aber so machen.
Nur noch auf eindeutige Fragen antworten - alles andere ignorieren. Dann verabschiede ich mich schon mal aus dem Forum.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
robbi77
Beiträge: 13858
Registriert: 19.01.2011, 19:15
System: CCU
Wohnort: Landau
Hat sich bedankt: 182 Mal
Danksagung erhalten: 739 Mal

Re: tägliche Sonnenstunden als Bedingung

Beitrag von robbi77 » 16.10.2019, 18:52

Mir wird mitgeteilt, dass ich zu doof bin die Signaturen zu sehen um dort die gesuchten Infos zu erhalten.
Das ist deine Aussage ...

Viel Spaß noch ... 👍
Bei Risiken und Nebenwirkungen fragen Sie den Elektriker Ihres geringsten Mißtrauens!
http://www.eq-3.de/service/downloads.html
Tips und Tricks für Anfänger: viewtopic.php?t=22801
Programmlogik: viewtopic.php?f=31&t=4251
Webui-Handbuch: https://www.eq-3.de/downloads/download/ ... h_eQ-3.pdf
Script und Linksammlung: viewtopic.php?f=26&t=27907
Troll des Forums ...

Benutzeravatar
AudioSonic
Beiträge: 236
Registriert: 31.08.2014, 20:15

Re: tägliche Sonnenstunden als Bedingung

Beitrag von AudioSonic » 17.10.2019, 07:16

Ach du meine Fre.... Sind wir hier eigentlich im Kindergarten?

Ich kann mein Programm/Skript bzgl. vorhergesagter Sonnenscheindauer hier mal zur Verfügung stellen, wenn ich Luft hab.

Benutzeravatar
AudioSonic
Beiträge: 236
Registriert: 31.08.2014, 20:15

Re: tägliche Sonnenstunden als Bedingung

Beitrag von AudioSonic » 26.10.2019, 22:42

Wetterdaten (Wettervorhersage) von Wetter24.de in Systemvariablen ablegen:

0) funktionierendes CuxD wird benötigt, Gerät: CUX2801001

1) ein Programm erstellen, was auf irgendeine Bedingung im Dann-Zweig 3 Skripte (Skript 1, Skript 2 und Skript 3 s.u.) nacheinander (verzögert um) ausführt:

Programm_mit_3_Skripten.JPG

Skript 1
folgende Systemvariable wird benötigt:
Wetter24SV (Variablentyp: Zeichenkette)

Code: Alles auswählen

string url1 = "http://www.wetter24.de/vorhersage/24stunden/deutschland/berlin/18228265/";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url1#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string wetter24de = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
dom.GetObject("Wetter24SV").State(wetter24de); !speichern der Daten in SV "Wetter24SV"
den Link bei Url1 ersetzen durch den des gewünschten Orts, d.h. bei www.wetter24.de nach dem gewünschten Ort suchen, dann auf "24 Stunden"-Ansicht klicken und schon erhält man den Link in der Adress-Zeile des Browsers.

Skript2
folgende Systemvariable wird benötigt:
Wetter24SV2 (Variablentyp: Zeichenkette)

Code: Alles auswählen

string wetter24de = dom.GetObject("Wetter24SV").State(); !laden der Daten aus SV "Wetter24SV"

string word = "forecast_details_01";
integer word_position = wetter24de.Find(word); 

if(word_position >= 0)
{
string wetter24de2 = wetter24de.Substr(word_position, 15000);
}

dom.GetObject("Wetter24SV2").State(wetter24de2);
Skript3
je nachdem welche Wetterdaten gewünscht sind, müssen die entsprechenden Systemvariablen vom Typ Zeichenkette oder Zahl angelegt werden. Die Systemvariablen sind in Anführungszeichen (" ") in der Zeile die mit dom.GetObject beginnt aufgeführt, z.B. Wetter01_04h

Code: Alles auswählen

string wetter24de2 = dom.GetObject("Wetter24SV2").State();

!----Wetterbedingungen parsen
!Bereich von "Tag" bis "icon weather temperature" aus Skript-Variable "wetter24de2" extrahieren
string word = "Tag";
string word2 = "icon weather temperature";

integer word_position = wetter24de2.Find(word); !wetter24de2 wird von vorherigem Skript übernommen
integer word_laenge = word.Length();
string wetter24de3 = wetter24de2.Substr((word_position+word_laenge+1), 3000);
string wetter24de4 = wetter24de3.StrValueByIndex(word2, 0); 

string tmpB = "class"; !rechte Begrenzung
string tmpD = "title="; !linke Begrenzung

string tmpC = wetter24de4.StrValueByIndex(tmpB, 0); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+2; !+2 wegen den beiden "-Zeichen
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Wetter01_04h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 2); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+2; !+2 wegen den beiden "-Zeichen
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Wetter04_07h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 4); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+2; !+2 wegen den beiden "-Zeichen
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Wetter07_10h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 6); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+2; !+2 wegen den beiden "-Zeichen
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Wetter10_13h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 8); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+2; !+2 wegen den beiden "-Zeichen
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Wetter13_16h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 10); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+2; !+2 wegen den beiden "-Zeichen
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Wetter16_19h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 12); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+2; !+2 wegen den beiden "-Zeichen
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Wetter19_22h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 14); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+2; !+2 wegen den beiden "-Zeichen
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Wetter22_01h").State(tmpG);

!------------Umlaute von UTF8 in Latin ändern mit foreach-Schleife
string x="01_04h,04_07h,07_10h,10_13h,13_16h,16_19h,19_22h,22_01h";
string bx;
!Nun über alle SV "WetterXX_XXh" iterieren
foreach(bx, x.Split(","))
  {
  string aUTF8 = dom.GetObject("Wetter"#bx).Value(); !UTF8-codiert
  string alatin = aUTF8.ToLatin(); !Latin-codiert
  dom.GetObject("Wetter"#bx#"_HH").State(alatin); !in die SVs "WetterXX_XXh_HH" schreiben
  }
!---------------Umlaute anpassen Ende

!----Temperaturen parsen
!Bereich von "icon weather temperature" bis "forecast_details_01"aus Skript-Variable "wetter24de2" extrahieren
string word = "icon weather temperature";
string word2 = "forecast_details_01";

integer word_position = wetter24de2.Find(word); !wetter24de2 wird von vorherigem Skript übernommen
integer word_laenge = word.Length();
string wetter24de3 = wetter24de2.Substr((word_position+word_laenge+1), 800);
string wetter24de4 = wetter24de3.StrValueByIndex(word2, 0); 

string tmpB = "C "; !rechte Begrenzung
string tmpD = "notred"; !linke Begrenzung

string tmpC = wetter24de4.StrValueByIndex(tmpB, 0); !linker Teil von "C " nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "notred" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+3;
string tmpG = tmpE.Substr(tmpD.Length()+1,tmpF);
dom.GetObject("Temp01_04h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 1); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+3;
string tmpG = tmpE.Substr(tmpD.Length()+1,tmpF);
dom.GetObject("Temp04_07h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 2); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+3;
string tmpG = tmpE.Substr(tmpD.Length()+1,tmpF);
dom.GetObject("Temp07_10h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 3); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+3;
string tmpG = tmpE.Substr(tmpD.Length()+1,tmpF);
dom.GetObject("Temp10_13h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 4); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+3;
string tmpG = tmpE.Substr(tmpD.Length()+1,tmpF);
dom.GetObject("Temp13_16h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 5); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+3;
string tmpG = tmpE.Substr(tmpD.Length()+1,tmpF);
dom.GetObject("Temp16_19h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 6); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+3;
string tmpG = tmpE.Substr(tmpD.Length()+1,tmpF);
dom.GetObject("Temp19_22h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 7); !linker Teil von "class" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 1); !rechter Teil von "title=" nehmen
integer tmpF = tmpE.Length()-tmpD.Length()+3;
string tmpG = tmpE.Substr(tmpD.Length()+1,tmpF);
dom.GetObject("Temp22_01h").State(tmpG);


!----Sonnenscheindauer parsen
!Bereich von "Sonne & Niederschlag" bzw. "icon weather sun" bis "icon weather rain"aus Skript-Variable "wetter24de2" extrahieren
string word = "Sonne & Niederschlag";
string word1 = "icon weather sun";
string word2 = "icon weather rain";

integer word_position = wetter24de2.Find(word); !wetter24de2 wird von vorherigem Skript übernommen
integer word_laenge = word.Length();
string wetter24de3 = wetter24de2.Substr((word_position+word_laenge+1), 2000);
string wetter24de31 = wetter24de3.StrValueByIndex(word2, 0); 
string wetter24de4 = wetter24de31.StrValueByIndex(word1, 1);

string tmpB = "min"; !rechte Begrenzung
string tmpD = "td"; !linke Begrenzung

string tmpC = wetter24de4.StrValueByIndex(tmpB, 0); !linker Teil von "min" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Sonne01_04h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 1); !linker Teil von "min" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Sonne04_07h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 2); !linker Teil von "min" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Sonne07_10h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 3); !linker Teil von "min" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Sonne10_13h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 4); !linker Teil von "min" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Sonne13_16h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 5); !linker Teil von "min" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Sonne16_19h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 6); !linker Teil von "min" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Sonne19_22h").State(tmpG);

string tmpC = wetter24de4.StrValueByIndex(tmpB, 7); !linker Teil von "min" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Sonne22_01h").State(tmpG);

!----Regenmenge parsen
!Bereich ab "icon weather rain"aus Skript-Variable "wetter24de2" extrahieren
string word = "icon weather rain";

integer word_position = wetter24de2.Find(word); !wetter24de2 wird von vorherigem Skript übernommen
integer word_laenge = word.Length();
string wetter24de3 = wetter24de2.Substr((word_position+word_laenge+1), 350);

string tmpB = "mm"; !rechte Begrenzung
string tmpD = "td"; !linke Begrenzung

string tmpC = wetter24de3.StrValueByIndex(tmpB, 0); !linker Teil von "mm" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Regen01_04h").State(tmpG);

string tmpC = wetter24de3.StrValueByIndex(tmpB, 1); !linker Teil von "mm" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Regen04_07h").State(tmpG);

string tmpC = wetter24de3.StrValueByIndex(tmpB, 2); !linker Teil von "mm" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Regen07_10h").State(tmpG);

string tmpC = wetter24de3.StrValueByIndex(tmpB, 3); !linker Teil von "mm" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Regen10_13h").State(tmpG);

string tmpC = wetter24de3.StrValueByIndex(tmpB, 4); !linker Teil von "mm" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Regen13_16h").State(tmpG);

string tmpC = wetter24de3.StrValueByIndex(tmpB, 5); !linker Teil von "mm" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Regen16_19h").State(tmpG);

string tmpC = wetter24de3.StrValueByIndex(tmpB, 6); !linker Teil von "mm" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Regen19_22h").State(tmpG);

string tmpC = wetter24de3.StrValueByIndex(tmpB, 7); !linker Teil von "mm" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("Regen22_01h").State(tmpG);

!----Regenwahrscheinlichkeit parsen
!Bereich ab "Niederschlagswahrscheinlichkeit"aus Skript-Variable "wetter24de2" extrahieren
string word = "Niederschlagswahrscheinlichkeit";
string word2 = "icon weather rain";

integer word_position = wetter24de2.Find(word); !wetter24de2 wird von vorherigem Skript übernommen
integer word_laenge = word.Length();
string wetter24de3 = wetter24de2.Substr((word_position+word_laenge+1), 420);
integer word2_position = wetter24de3.Find(word2);
integer word2_laenge = word2.Length();
string wetter24de31 = wetter24de3.Substr((word2_position+word2_laenge+1), 350);
WriteLine(wetter24de31);

string tmpB = "%"; !rechte Begrenzung
string tmpD = "td"; !linke Begrenzung

string tmpC = wetter24de31.StrValueByIndex(tmpB, 0); !linker Teil von "%" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("RegenWsk01_04h").State(tmpG);

string tmpC = wetter24de31.StrValueByIndex(tmpB, 1); !linker Teil von "%" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("RegenWsk04_07h").State(tmpG);

string tmpC = wetter24de31.StrValueByIndex(tmpB, 2); !linker Teil von "%" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("RegenWsk07_10h").State(tmpG);

string tmpC = wetter24de31.StrValueByIndex(tmpB, 3); !linker Teil von "%" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("RegenWsk10_13h").State(tmpG);

string tmpC = wetter24de31.StrValueByIndex(tmpB, 4); !linker Teil von "%" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("RegenWsk13_16h").State(tmpG);

string tmpC = wetter24de31.StrValueByIndex(tmpB, 5); !linker Teil von "%" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("RegenWsk16_19h").State(tmpG);

string tmpC = wetter24de31.StrValueByIndex(tmpB, 6); !linker Teil von "%" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("RegenWsk19_22h").State(tmpG);

string tmpC = wetter24de31.StrValueByIndex(tmpB, 7); !linker Teil von "%" nehmen
string tmpE = tmpC.StrValueByIndex(tmpD, 2); !rechter Teil von "td" nehmen
integer tmpF = tmpE.Length()-tmpD.Length();
string tmpG = tmpE.Substr(tmpD.Length(),tmpF);
dom.GetObject("RegenWsk22_01h").State(tmpG);

!dom.GetObject("Wetter24SV2").State(wetter24de4);

2) Das Programm von 1) ausführen lassen und die angelegten Systemvariablen sollten mit den Wetterdaten befüllt werden.

Wünsche viel Erfolg!

adri
Beiträge: 149
Registriert: 10.02.2014, 18:37
Danksagung erhalten: 1 Mal

Re: tägliche Sonnenstunden als Bedingung

Beitrag von adri » 27.10.2019, 07:27

Hey cool,

vielen Dank. :D Werde mich dran setzen und ausprobieren.
toll erklärt, ich hoffe ich werde es zum laufen bringen.
Danke und Gruß Adrian

adri
Beiträge: 149
Registriert: 10.02.2014, 18:37
Danksagung erhalten: 1 Mal

Re: tägliche Sonnenstunden als Bedingung

Beitrag von adri » 27.10.2019, 16:48

AudioSonic hat geschrieben:
17.10.2019, 07:16
2) Das Programm von 1) ausführen lassen und die angelegten Systemvariablen sollten mit den Wetterdaten befüllt werden.

Wünsche viel Erfolg!
ich glaube ich stehe kurz vor dem Erfolg.
Merkwürdigerweise, werden die Variablen der Wetterbedingungen beim Programmstart aktualisiert und korrekt angezeigt, alle anderen Variablen werden nicht aktualisiert und dementsprechend auch nicht beschrieben.
Kannst du die das erklären?
Die Skripte scheinen doch korrekt zu laufen, sonst würden die Wetterbedingungen auch nicht erkannt werden.
In der Variablen Wetter24SV2, kann ich die richtigen Infos über z.B. Sonnenstunden von 7-10 Uhr sehen, diese werden aber nicht in die Variable Sonne07_10h geschrieben.
Hast du eine Idee?

Sollte es dann funktionieren, hab ich eine letzte Hürde. Wie kann ich die Variablen addieren damit ich die kompletten täglichen Sonnenstunden erhalte?

Danke und Gruss adrian

Antworten

Zurück zu „HomeMatic allgemein“