SV Zeichenkette und Skript Hilfe

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Visu
Beiträge: 507
Registriert: 04.12.2016, 23:30
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Visu » 24.11.2017, 18:24

Visu hat geschrieben: Ich suche jetzt einen Weg, der mir aus den SVs-Zeichenkette, 1x eine SV-Logikwert befüllt (für die Zeichenkette EIN/AUS) und 1x eine SV-Zahl befüllt (für Zeichenkette xx,x°C) In der SV-Zeichenkette xx,x°C steht auch xx,x°C, also dieser SV wird keine Maßeinheit °C angehängt, der Wert wird kommplet als xx,x°C ausgelesen und auch so in die SV geschrieben. (siehe auch Link im 1. Post)
Hier der Link, dort gibt's auch Bilder...viewtopic.php?f=26&t=40423

Visu
Beiträge: 507
Registriert: 04.12.2016, 23:30
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Visu » 24.11.2017, 18:42

Cash hat geschrieben:Ich weiß nicht ob ich es richtig verstanden habe und ob das Script funktioniert :mrgreen:

Code: Alles auswählen

string tmpA = "Käsekuchen";
if(tmpA == dom.GetObject("Name der Systemvariablen").Value()){dom.GetObject("Systemvariable").State(true);}
Mit diesen Script vergleicht man den Wert aus tmpA (=Käsekuchen) mit dem Wert aus der Systemvariablen "Name der Systemvariablen".
Sofern identisch wird die Systemvariable "Systemvariable" auf true gesetzt.
Sauber, damit kann ich jetzt meine SV-Zeichenkette EIN/AUS für den Ofen schonmal verarbeiten. Danke !!

Mit der anderen SV-Zeichenkette xx,x°C geht das glaube ich nicht so einfach, da sich dieser Wert ja ständig ändert und ich bräuchte daraus eine SV Zahl ohne °C und von mir aus auch ohne ,x

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Cash » 24.11.2017, 19:03

Wodurch wird denn die Zeichenkette getriggert? Evtl. im gleichen Programm das Script einfach darunter packen?

Das andere geht auch. Je nach Firmwareversi0n evtl sogar recht einfach. Bin leider kein Scriptprofi.
Deslhalb müsste ich da nochmal die Scriptdoku konsultieren aber es gibt hier ja genug die das andere locker aus der Hand schreiben :mrgreen:

Visu
Beiträge: 507
Registriert: 04.12.2016, 23:30
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Visu » 24.11.2017, 21:39

Ich habe zur Abfrage ein Programm mit Zeitsteuerung programmiert (alle 5 min), es gibt leider keine Möglichkeit auf irgendwas auszulösen :|

Dann wird das Skript zur Abfrage der externen Werte für die SVs-Zeichenkette ausgeführt. (Nicht verwirren lassen, das Skript ist von Alchy auch wenn er darin schreibt "Sysvar Typ Zahl" werden meine SVs als Zeichenkette gefüllt, als "Zahl" funktioniert es nicht.

(für die SV-Zeichenkette-Pelletofen)
Sofort:

Code: Alles auswählen

! UVR 1611 - Temperaturdaten aus Bl-Net auslesen und in Sysvar Typ Zahl speichern by Alchy
string IP ="192.168.2.51:51";
string KNOTEN = "AA200501"; 
!++++++++++++ BITTE AB HIER NICHTS MEHR AENDERN ++++++++++
string index;
string name;
foreach (index, KNOTEN) {
var url = "http://"#IP#"/c_index.htm?C="#index#"";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);

string srueck = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

dom.GetObject("Pelletofen").State(srueck);

}
(für die SV-Zeichenkette-Temp.VL Ofen)
1 Sek später:

Code: Alles auswählen

! UVR 1611 - Temperaturdaten aus Bl-Net auslesen und in Sysvar Typ Zahl speichern by Alchy
string IP ="192.168.2.51:51";
string KNOTEN = "8D200E01"; 
!++++++++++++ BITTE AB HIER NICHTS MEHR AENDERN ++++++++++
string index;
string name;
foreach (index, KNOTEN) {
var url = "http://"#IP#"/c_index.htm?C="#index#"";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);

string srueck = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

dom.GetObject("Temp.VL Ofen").State(srueck);

}
(aus SV-Zeichenkette-Pelletofen >> SV-Logikwert-PO setzen)
5 Sek. später:

Code: Alles auswählen

string tmpA = "EIN";
if(tmpA == dom.GetObject("Pelletofen").Value()){dom.GetObject("PO").State(true);}
10 Sek. später:

Code: Alles auswählen

string tmpA = "AUS";
if(tmpA == dom.GetObject("Pelletofen").Value()){dom.GetObject("PO").State(false);}
Die SV "Pelletofen" auslesen und SV "PO" setzen klappt ja schon mal.

FW ist die aktuelle: 2.29.23

Visu
Beiträge: 507
Registriert: 04.12.2016, 23:30
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Visu » 24.11.2017, 21:53

also ich bräuchte nichtmal die genauen Temperaturen...

mit irgendeinem Befehl abfragen ob die SV-Zeichenkette-Temp.VL Ofen größer als 50°C ist, dann
....dom.GetObject("Temp.VL Ofen").Value()){dom.GetObject("TEMP").State(true) setzen

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Cash » 24.11.2017, 22:07

Probier mal unter Script testen ob dort nur die Zahl ruaskommt bzw ob es überhaupt läuft:

Code: Alles auswählen

string tmpB = „,“;
string tmpC = dom.GetObject(„Systemvariable“).Value().StrValueByIndex(tmpB, 0);
WriteLine(tmpC);
Gibt aber bestimmt bessere Wege. ]

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Cash » 24.11.2017, 22:12

Ein > als auf eine Zeichenkette macht keinen Sinn. Vorher eine Zahl raus machen macht schon Sinn nur evtl sollte man das bereits beim ersten Script machen und die Systemvariable dann wirklich als Zahl anlegen

NickHM
Beiträge: 3734
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 121 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von NickHM » 24.11.2017, 22:20

Guten Abend

Ich möchte als Hilfe noch mal versuchen die Aufgabenstellung Script kompatibel zu formulieren. Vielleicht wird dann die rel. einfache Aufgabe etwas schneller gelöst

Fall 1
Es existier eine Sysyvar vom Typ Zeichenkette var1
Es existiert eine Sysvar vom Typ Bool var2

Wenn der Inhalt von var1 == „EIN“
dann setze var2=true
Sonst setze var2=false

Fall 2

Es existiert eine SysVar vom Typ Zeichenkette mit dem Inhalt 21,4°C (könnte auch ein Punkt als Trennzeichen sein, s.o.) var3
Es existiert eine SysVar vom Typ Zahl var4

Nimm die linken 4 Zeichen aus var3 und schreibe diese in var4, wobei gleichzeitig eine Wandlung des Strings in eine Zahl erfolgt.

Vermutlich wäre es wegen einstelligen Temperaturen wie 5,6°C besser, die beiden rechten Zeichen abzuschneiden, statt von links zu zählen.

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Cash » 24.11.2017, 22:34

Fall 1 ist doch erledigt?

Fall 2 würde ich direkt das ursprüngliche Script so schreiben das eine Zahl geschrieben wird und keine Zeichenkette. Wie genau sieht die Ausgabe aus? 21,6 °C oder 21,6°C.
Im ersten Fall könnte man anstelle vom Komma auch nach dem Leerzeichen suchen oder im zweiten Fall nach °.

Visu
Beiträge: 507
Registriert: 04.12.2016, 23:30
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: SV Zeichenkette und Skript Hilfe

Beitrag von Visu » 25.11.2017, 06:29

Fall 1 setzte ich mal auf erl. ... Haken hinter.

Fall 2 kann man meiner Meinung nach nicht gleich als Zahl schreiben, weil es wird nicht nur der Temp.Wert gelesen sondern auch das °C aus diesem externen Wert. Also wenn kein Wert abgefragt werden würde, würde da nicht stehen °C sonder nix, leere SV-Zeichenkette, bei Abfrage wird in die SV-Zeichenkette kommplet xx,x °C geschrieben.
Man könnte ruhig von vorne zählen, weil der Wert immer zweistellig ist. Der Wert wird so dargestellt, bzw genau so ausgelesen, mit Komma und Leerzeichen vor °C, Temp.VL Ofen: 39,5 °C Ich habe natürlich auch schon versucht gleich eine SV-Zahl zu befüllen, da kommt aber leider als Ergebniss: ??? raus.

Antworten

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