Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

be.pe
Beiträge: 281
Registriert: 11.08.2019, 16:39

Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von be.pe » 31.12.2023, 18:27

Hey,
ich versuche folgendes.

Code: Alles auswählen

!Skript zur Berechnung Gesamterzeugung Solar

var solar1 = dom.GetObject("StromVorTageserzeugung PV");
var solar2 = dom.GetObject("Stromerzeugung SoBa gestern");
var gsolar = dom.GetObject("Gesamtsolarerzeugung");
gsolar.State((solar1.State() + solar2.State()).Round(2));
"solar1" (Wert 0,000 kwh) und "solar 2"(Wert: 0,34 kwh) sind Zeichenketten und auch "Gesamtsolarerzeugung" ist eine Zeichekette.
Leider kommt als Ergebnis dieses raus:
Unbenannt.JPG
Was ist am Skript falsch bzw. was kann ich ergänzen, so das als Ergebnis die Summe rauskommt und nicht 2 Werte? KWH kann gerne mit drin stehen oder eben nicht.
Die Systemvariablen sollen aber Typ: Zeichenketten bleiben und keine Zahl.
Danke.

Xel66
Beiträge: 14170
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 587 Mal
Danksagung erhalten: 1501 Mal

Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von Xel66 » 31.12.2023, 19:14

Wie wäre es mit ++? Zumindest würde die Scriptdoku das raten. Und warum deklariert Du als var und nicht als real?

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

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

Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von Tyfys » 31.12.2023, 19:38

Wenn ich es richtig verstehe, möchtest du die Werte aus den beiden String-Variablen addieren
und dann die Summe in eine andere Stringvariable ausgeben.

Dazu müsstest du die Zahlen jeweils aus der Stringvariablen extrahieren. Z.B. durch Ersetzen der
störenden Texte durch nichts. (Replace...).
Dann lassen sich die die übriggeblieben Ziffern nach ersetzen des Komma in einen Dezimalpunkt
durch ToFloat() in eine Zahl wandeln.
Beide addiert und durch ToString(2) wieder in eine Stringvariable wandeln.
Ggf, noch Text hinzufügen.

Zum rechnen wäre es besser sowas auch als Zahl zu definieren - wie schon geschrieben. Man kann ja da auch Einheit mit angeben.

sonst kann man es z.B. so machen:

Code: Alles auswählen

var solar1 = dom.GetObject("StromVorTageserzeugung PV");
var solar2 = dom.GetObject("Stromerzeugung SoBa gestern");
var gsolar = dom.GetObject("Gesamtsolarerzeugung");
gsolar.State((solar1.Value().Replace(",",".").Replace("Wert","").Replace("kwH","").ToFloat() + solar2.Value().Replace(",",".").Replace("Wert","").Replace("kwH","").ToFloat()).ToString(2));
Gruß
Harry


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

Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von Tyfys » 31.12.2023, 19:50

Baxxy hat geschrieben:
31.12.2023, 19:46
Harry war fixer
gaaaanz selten :D
Gruß
Harry

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von Henke » 31.12.2023, 20:36

Keep it simple:

Code: Alles auswählen

!Skript zur Berechnung Gesamterzeugung Solar

var solar1 = dom.GetObject("StromVorTageserzeugung PV");
var solar2 = dom.GetObject("Stromerzeugung SoBa gestern");
var gsolar = dom.GetObject("Gesamtsolarerzeugung");
gsolar.State((solar1.State().ToFloat() + solar2.State().ToFloat()).Round(2));

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

Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von Tyfys » 31.12.2023, 20:57

Henke hat geschrieben:
31.12.2023, 20:36
Keep it simple:
Also für (m)eine CCU2 wäre das zu simple.

Das Dezimalzeichen muss auf alle Fälle ein Punkt sein.
Und vor den Ziffern darf auch nichts stehen.

Das Entfernen der nachfolgenden Buchstaben könnte man sich aber sparen

Code: Alles auswählen

var a = "10,34";
var b = a.ToFloat();
WriteLine(b);

var a = "10,34 kwH";
var b = a.ToFloat();
WriteLine(b);

var a = "Wert 10,34 kwH";
var b = a.ToFloat();
WriteLine(b);

b = a.Replace(",",".").ToFloat();
WriteLine(b);

b = a.Replace(",",".").Replace("Wert","").ToFloat();
WriteLine(b);
ergibt bei mir:

Code: Alles auswählen

10.000000
10.000000
0.000000
0.000000
10.340000
Gruß
Harry

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von Henke » 31.12.2023, 21:13

Vor seiner Zahl mit Dezimalpunkt steht nichts. Siehe Screenshot. Den getippten Test mit Wert und Komma kannst du vergessen.
Die Frage ist also, läuft das auf einer CCU2:

Code: Alles auswählen

"0.35 kWh".ToFloat()
Ich denke, ja.

PS: Glaube nicht was der TO schreibt, sondern nimm eher die Screenshots. 8)

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

Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von Tyfys » 31.12.2023, 21:30

Henke hat geschrieben:
31.12.2023, 21:13
Die Frage ist also, läuft das auf einer CCU2:

Code: Alles auswählen

"0.35 kWh".ToFloat()
Ja - lüpt
Henke hat geschrieben:
31.12.2023, 21:13
Glaube nicht was der TO schreibt
Da war ich zu gutgläubig.

Henke hat geschrieben:
31.12.2023, 21:13
nimm eher die Screenshots
Mach ich sonst auch, war mir diesmal zu lütt.

Trotzdem kann mein Lösungsvorschlag ja evtl. noch jemand gebrauchen. :mrgreen:
Gruß
Harry

Benutzeravatar
Roland M.
Beiträge: 9807
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 252 Mal
Danksagung erhalten: 1381 Mal

Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.

Beitrag von Roland M. » 31.12.2023, 22:20

Hallo!
Xel66 hat geschrieben:
31.12.2023, 19:14
Und warum deklariert Du als var und nicht als real?
Weil es durch die dynamische Typendeklaration völlig egal ist, was du hinschreibst.
Versuch das einmal:

Code: Alles auswählen

boolean x = "Hello world!";
WriteLine(x.Type());
:mrgreen:


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

Antworten

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