Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Moderator: Co-Administratoren
- Black
- Beiträge: 5548
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 434 Mal
- Danksagung erhalten: 1096 Mal
- Kontaktdaten:
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
korrekt.
wobei ich trotzdem zu korrekten Typisieren der Variablen rate, Editoren können am Scriptende einen Typwechsel erkennen und dies auch entsprechend am Scriptende ausgeben, so hat man Ansatz zu entscheiden, ja, der Typwechsel ist ok und gewollt, oder ähm, da stimmt was nicht
Black
wobei ich trotzdem zu korrekten Typisieren der Variablen rate, Editoren können am Scriptende einen Typwechsel erkennen und dies auch entsprechend am Scriptende ausgeben, so hat man Ansatz zu entscheiden, ja, der Typwechsel ist ok und gewollt, oder ähm, da stimmt was nicht
Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
- Baxxy
- Beiträge: 11029
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 631 Mal
- Danksagung erhalten: 2285 Mal
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Für mich gäbe es da im gezeigten Script nur einen "richtigen" Typ... object
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
-
- Beiträge: 14263
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 597 Mal
- Danksagung erhalten: 1525 Mal
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Ja, kenne ich. Aber ich sehe es pragmatisch. Wenn ich mit Werten rechnen will, deklariere ich sie im Vorfeld mit einem geeigneten Typ. Nenne mich altmodisch, aber ich erachte das als zielführend.
Ich halte es auch für wenig zielführend, solche Werte überhaupt als String (mit Einheit) in der CCU vorzuhalten. Damit schießt man sich schon für solche Tools wie Historian von vornherein ins Aus. Strings kann man nicht in Diagrammen anzeigen und auswerten. Die Werte kann man auch als Zahl definieren und in den Einstellungen eine Einheit zuweisen. Benötigt man unbedingt in einer Visu eine Maßeinheit, muss diese eben in der Bildschirmausgabe anhängen. Meiner unmaßgeblichen Meinung nach ergibt es nur so einen wirklich brauchbaren Sinn. Vor allem spart man sich irgendwelche nachträglichen Extraktionen von Werten für die Weiterverarbeitung. Das Problem beginnt also schon mit dem Auslesen der Werte und dem Schreiben in die CCU.
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
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
-
- Beiträge: 5557
- Registriert: 30.05.2019, 11:37
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Chemnitz
- Hat sich bedankt: 120 Mal
- Danksagung erhalten: 763 Mal
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Ich bin auch sehr dafür, die Objekttypen klar zu benennen statt var. Eine solche Deklaration macht es später viel einfacher, die ehemalige Absicht nachvollziehen zu können. Auch wenn die Typkonvertierung trotzdem macht, was sie will.
Im übrigen braucht man manchmal halt Variablenfelder, die es nicht gibt. Die bilde ich auch auf Strings ab.
Im übrigen braucht man manchmal halt Variablenfelder, die es nicht gibt. Die bilde ich auch auf Strings ab.
-
- Beiträge: 9807
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 711 Mal
- Danksagung erhalten: 1656 Mal
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Bester Tipp bisher.
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 +++
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 +++
- Roland M.
- Beiträge: 9895
- Registriert: 08.12.2012, 15:53
- System: CCU
- Wohnort: Graz, Österreich
- Hat sich bedankt: 256 Mal
- Danksagung erhalten: 1411 Mal
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Hallo!
Persönlich verwende ich meist das var, weil in Verbindung mit einer gleichzeitigen Zuweisung (var x = domGetObject(...)) der Typ ohnehin deutlich ersichtlich ist.
Auch ist mir die Typenkonvertierung noch von COBOL (mit dem ich mir meine ersten eigenen Brötchen verdiente ) in guter Erinnerung.
Mit einem VAR X PIC 999999 REDEFINE VAR Y PIC 'AAAAAA' (oder so ähnlich ) konnte man auch so manches Problem einfach und speichersparend lösen!
Roland
Ja, ich widerspreche dir gar nicht. Ich wollte nur hinweisen, dass eine Deklaration als var auch nicht falsch ist.
Persönlich verwende ich meist das var, weil in Verbindung mit einer gleichzeitigen Zuweisung (var x = domGetObject(...)) der Typ ohnehin deutlich ersichtlich ist.
Auch ist mir die Typenkonvertierung noch von COBOL (mit dem ich mir meine ersten eigenen Brötchen verdiente ) in guter Erinnerung.
Mit einem VAR X PIC 999999 REDEFINE VAR Y PIC 'AAAAAA' (oder so ähnlich ) konnte man auch so manches Problem einfach und speichersparend lösen!
Da kann ich dir auch nur voll und ganz zustimmen!Ich halte es auch für wenig zielführend, solche Werte überhaupt als String (mit Einheit) in der CCU vorzuhalten. Damit schießt man sich schon für solche Tools wie Historian von vornherein ins Aus.
Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
-----------------------------------------------------------------------
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,...
- 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,...
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Hey,
euch allen Danke.
Das mit Float funktioniert einbahnfrei.
euch allen Danke.
Das mit Float funktioniert einbahnfrei.
-
- Beiträge: 5557
- Registriert: 30.05.2019, 11:37
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Chemnitz
- Hat sich bedankt: 120 Mal
- Danksagung erhalten: 763 Mal
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Doch doch, das funktioniert damit nur in die eine Richtung.
- Henke
- Beiträge: 1538
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 313 Mal
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Inkrement bei einem CCU Script? Das ist mir neu und in der Doku finde ich nichts. Lerne gerne und bitte um genaueren Bezug.
Da hier viel über wie sollte ein CCU Script aussehen, auch mal meinen Senf dazu.
Gegeben, so schön klein aber doch der eine oder andere suboptimale Ansatz:
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));
"var solar1 = dom.GetObject("StromVorTageserzeugung PV");"
Nope.
1. Nicht als String. Zahl mit einer angegebenen Maßeinheit ist besser. Einfacher bei der Berechnung und durch die Maßeinheit der Systemvariable bleibt auch die Darstellung gleich.
2. Da es eine Systemvariable ist, sollte mit "dom.GetObject(ID_SYSTEM_VARIABLES);" darauf zugegriffen werden.
3. Typenbezeichnung ist nicht object. Das hat zwar nur Auswirkungen wenn etwas wie Blacks genialer Editor verwendet wird, aber schadet auch nicht. Es hat also nur Vorteile.
4. Name der Variable "solar1" enthält nicht den Typ. Das ist bei größeren Scripten durchaus nützlich. bSchlagMichTot z.B. ist bei mir boolean, iBitteNicht integer und ratet mal, rDochStirb ist...
5. Name der Systemvariablen "StromVorTageserzeugung PV". Nun ja, es gibt einen Unterschied zwischen Strom (A) und Arbeit (kWh), aber noch mehr würde ich auf Leerzeichen, die Dinger sind unsichtbar, verzichten und mehr Struktur da rein bringen. Angelegt an andere objektorientierte Sprachen/Datendefinitionen sieht das eher so aus: "PV.VorTageserzeugung". Damit sind selbst bei der WebUI die Einträge gruppiert und können später in anderen Sprachen schnell in eine Struktur umgewandelt werden.
"gsolar.State((solar1.State() + solar2.State()).Round(2));"
Würde jetzt mit der Umwandlung als Sysvariable Zahl laufen. Schreibt man Scripts, die die Systemvariablen nicht automatisch anlegen, würde ich es wie folgt erledigen:
"gsolar.State(( 0.0 + solar1.State() + solar2.State()).Round(2));"
Das läuft auf einer CCU2 wenn die Systemvariable Zahl ist (Zahl.ToFloat() knallt wohl auf der CCU2) und auch beim Systemvariablen Typ String.
Klammern reduzieren, um es leserlicher zu gestalten. Debugmöglichkeit einbauen und...
Ergebnis:
Code: Alles auswählen
!Skript zur Berechnung Gesamterzeugung Solar
object oSysVar = dom.GetObject(ID_SYSTEM_VARIABLES);
object oPvVorTag = oSysVar.Get("Pv.VorTageserzeugung");
object oPvGestern = oSysVar.Get("Pv.SoBaGestern");
real rGes = 0.0 + oPvVorTag.State() + oPvGestern.State();
! WriteLine ( rGes );
oSysVar.Get("Pv.Gesamt").State(rGes.Round(2));
Zuletzt geändert von Henke am 01.01.2024, 18:07, insgesamt 2-mal geändert.
-
- Beiträge: 9807
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 711 Mal
- Danksagung erhalten: 1656 Mal
Re: Wie kann ich zwei SV (Typ Zeichenkette) addieren und in neue SV (Typ Zeichenkette) schreiben.
Wegen dem b im Namen? SCNR
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 +++
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 +++