Von PV Anlage Werte auslesen und in Variable schreiben

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von Tyfys » 10.01.2023, 14:16

änder mal Lenght
in Length
Gruß
Harry

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

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von MichaelN » 10.01.2023, 14:31

Und das Leerzeichen davor weg. Ich habs oben korrigiert.
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 +++

Selekta
Beiträge: 20
Registriert: 23.08.2017, 12:34
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von Selekta » 10.01.2023, 14:47

Erstmal vielen Dank für deine Mühe.
Ich habe das ganze jetzt so Umgebaut zum testen:

string return;
string abfrage_url = "http://username:password@xxxxx/status.html";

system.Exec("wget --timeout=10 -q -O - '" # abfrage_url # "'", &return);
string Suchbegriff1 = "webdata_now_p";
integer anfang = return.Find(Suchbegriff1)+Suchbegriff1. Length() + 4;
var Wert = return.Substr(anfang,3).ToInteger();
WriteLine(return.Substr(anfang,3)) ;

system.Exec("wget --timeout=10 -q -O - '" # abfrage_url # "'", &return);
string Suchbegriff2 = "webdata_today_e";
integer anfang = return.Find(Suchbegriff2)+Suchbegriff2. Length() + 4;
var Wert = return.Substr(anfang,3).ToInteger();
WriteLine(return.Substr(anfang,3)) ;

system.Exec("wget --timeout=10 -q -O - '" # abfrage_url # "'", &return);
string Suchbegriff3 = "webdata_total_e";
integer anfang = return.Find(Suchbegriff3)+Suchbegriff3. Length() + 4;
var Wert = return.Substr(anfang,3).ToInteger();
WriteLine(return.Substr(anfang,3)) ;

Als Ausgabe erhalte ich jetzt:

37"
0.3
0.4

Mein Problem was ich jetzt noch habe ist, dass die Zahlen ja variieren und mal einstellig (z.B 1 Watt) oder auch 3 stellig (z.B. 100 Watt) sein können.
Wie du aber in der Ausgabe siehst, habe ich dann bei der 37 die Anführungszeichen mit dabei.
Hast du zufällig einen Tipp wie ich das umgehen kann?

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

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von MichaelN » 10.01.2023, 15:05

Selekta hat geschrieben:
10.01.2023, 14:47
Mein Problem was ich jetzt noch habe ist, dass die Zahlen ja variieren und mal einstellig (z.B 1 Watt) oder auch 3 stellig (z.B. 100 Watt) sein können.
Wie du aber in der Ausgabe siehst, habe ich dann bei der 37 die Anführungszeichen mit dabei.
Hast du zufällig einen Tipp wie ich das umgehen kann?
Deswegen musst Du sicherstellen, daß die längste Zahl auf jeden Fall komplett ausgeschnitten wird
Dafür ist die "3" in dem Code zuständig.

Code: Alles auswählen

var Wert = return.Substr(anfang,3).ToInteger();
Das ToInteger sorgt dafür, daß der String dann in eine Zahl umgewandelt wird. Dann verschwindet das " am Ende
Das merkst Du, wenn Du die Werte in eine Systemvariable schrieben lässt.
Ach ja, wenn nicht nur ganzzahlige Wert vorkommen, dann nimmt ToFloat() statt ToInteger()

Und btw: Code immer in Code Tags </> einfügen
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 +++

Selekta
Beiträge: 20
Registriert: 23.08.2017, 12:34
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von Selekta » 10.01.2023, 15:40

Hi Michael,
danke für die Erklärung!
Habe es nochmals angepasst und versucht in eine Variable zu schreiben vom Typ Zeichenkette. (Auch Zahl habe ich probiert)
Die Variablen habe ich so genannt wie die werte die ausgelesen werden. Z.B. webdata_now_p
Jedoch steht dort dann immer 0 drin.
Was mache ich falsch?

Code: Alles auswählen

string return;
string abfrage_url = "http://xxx:xxx@xxx/status.html";
  
system.Exec("wget --timeout=10 -q -O - '" # abfrage_url # "'", &return);
  string Suchbegriff1 = "webdata_now_p";
  integer anfang = return.Find(Suchbegriff1)+Suchbegriff1. Length() + 3;
var Wert = return.Substr(anfang,5).ToFloat();
WriteLine(return.Substr(anfang,5)) ;
dom.GetObject(ID_SYSTEM_VARIABLES). Get(Suchbegriff1).State(Wert);

system.Exec("wget --timeout=10 -q -O - '" # abfrage_url # "'", &return);
  string Suchbegriff2 = "webdata_today_e";
  integer anfang = return.Find(Suchbegriff2)+Suchbegriff2. Length() + 3;
var Wert = return.Substr(anfang,9).ToFloat();
WriteLine(return.Substr(anfang,9)) ;
dom.GetObject(ID_SYSTEM_VARIABLES). Get(Suchbegriff2).State(Wert);

system.Exec("wget --timeout=10 -q -O - '" # abfrage_url # "'", &return);
  string Suchbegriff3 = "webdata_total_e";
  integer anfang = return.Find(Suchbegriff3)+Suchbegriff3. Length() + 3;
var Wert = return.Substr(anfang,8).ToFloat();
WriteLine(return.Substr(anfang,8)) ;
dom.GetObject(ID_SYSTEM_VARIABLES). Get(Suchbegriff3).State(Wert);

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

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von MichaelN » 10.01.2023, 18:43

Ich habe da mal aufgeräumt. Du musst die Daten ja nur einmal abholen...
Prinzipiell hätte es aber gehen müssen. (EDIT: jetzt geht es auch) Teste es nochmal und schau was das Skript ausgibt. Da müsste dann der Name der Systemvariable und der darin zu speichernde Wert stehen. Wenn nicht, ins Fehlerprotokoll schauen.

Code: Alles auswählen

string rueck; var Wert; integer anfang;
string abfrage_url = "http://xxx:xxx@xxx/status.html";

system.Exec("wget --timeout=10 -q -O - '" # abfrage_url # "'", &rueck);

  string Suchbegriff1 = "webdata_now_p";
  anfang = rueck.Find(Suchbegriff1) + Suchbegriff1.Length() + 4;
Wert = rueck.Substr(anfang,5).ToFloat();
WriteLine(Suchbegriff1 # ":" # Wert) ;
dom.GetObject(ID_SYSTEM_VARIABLES).Get(Suchbegriff1).State(Wert);


  string Suchbegriff2 = "webdata_today_e";
  anfang = rueck.Find(Suchbegriff2) + Suchbegriff2.Length() + 4;
Wert = rueck.Substr(anfang,9).ToFloat();
WriteLine(Suchbegriff2 # ":" # Wert) ;
dom.GetObject(ID_SYSTEM_VARIABLES).Get(Suchbegriff2).State(Wert);


  string Suchbegriff3 = "webdata_total_e";
  anfang = rueck.Find(Suchbegriff3) + Suchbegriff3.Length() + 4;
Wert = rueck.Substr(anfang,8).ToFloat();
WriteLine(Suchbegriff3 # ":" # Wert) ;
dom.GetObject(ID_SYSTEM_VARIABLES).Get(Suchbegriff3).State(Wert);

Zuletzt geändert von MichaelN am 10.01.2023, 19:55, insgesamt 2-mal geändert.
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 +++

Benutzeravatar
Baxxy
Beiträge: 10832
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 608 Mal
Danksagung erhalten: 2227 Mal

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von Baxxy » 10.01.2023, 18:48

MichaelN hat geschrieben:
10.01.2023, 18:43
Prinzipiell hätte es aber gehen müssen.
:wink:

Code: Alles auswählen

string a = '"11.5"';
WriteLine("a zu float: "#a.ToFloat());

Code: Alles auswählen

------------------------------- Scriptausgabe -------------------------------
a zu float: 0.000000
Alles was nicht Zahl ist müsste idealerweise weggetrimmt werden.

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

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von MichaelN » 10.01.2023, 18:52

Ja, er hat da nnicht sauber gearbeitet.

Ich schrub ja:
MichaelN hat geschrieben:
10.01.2023, 13:40
Ggf musst Du Mit den Zahlen 4 und 5 etwas rumspielen
Gepsiehcert wird in einer Systemvariable, die genauso heißt wie der Suchbegriff, die musst Du vorher anlegen
Unter "Skript testen" ausgeführt sollte eine Ausgabe erscheinen, die beim anpassen der Korretkurwerte hilft
Ok, er hat vielleicht nicht realisiert, das "11" nicht das gewünschte Ergebnis ist.

mit "+4" statt "+3" geht es.
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 +++

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von Tyfys » 10.01.2023, 19:13

man könnte auch gleich nach system.Exec
einmalig alle Hochkommata entfernen:

Code: Alles auswählen

rueck = rueck.Replace('"',"");
Zuletzt geändert von Tyfys am 10.01.2023, 19:32, insgesamt 1-mal geändert.
Gruß
Harry

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

Re: Von PV Anlage Werte auslesen und in Variable schreiben

Beitrag von MichaelN » 10.01.2023, 19:20

Ich schrieb ja auch
Quick&Dirty
Ist auch ohne jegliche Fehlerbehandlung, etc.
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 +++

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“