Rechnen im Programm

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
ac1
Beiträge: 10
Registriert: 27.08.2021, 15:17
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 3 Mal

Rechnen im Programm

Beitrag von ac1 » 14.11.2021, 21:52

Hallo, ich habe das Problem, dass ich die 4 stellige Zahl in der Dateitemp1.txt durch 1000 teilen möchte.
Kann mir jemand einen Tip geben, wo mein Fehler ist.

Code: Alles auswählen

string x_cmd = ("cat /usr/local/addons/test/temp1.txt")/1000;
Wenn möglich, wäre eine Darstellung mit einer Kommastelle wünschenswert.
Zuletzt geändert von alchy am 15.11.2021, 21:07, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: Rechnen im Programm

Beitrag von jp112sdl » 14.11.2021, 22:04

ac1 hat geschrieben:
14.11.2021, 21:52
Kann mir jemand einen Tip geben, wo mein Fehler ist.
Ja, du solltest dich zunächst mit der HomeMatic Script Dokumentation beschäftigen.
Diese findest du im Downloadbereich bei eq-3.

Kleiner Hint für deinen Fall: Um Shell-Befehle auszuführen wäre system.exec() dein Freund.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

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

Re: Rechnen im Programm

Beitrag von Baxxy » 15.11.2021, 16:40

Na dann werden wir mal nicht so sein... :wink:
ac1 hat geschrieben:
14.11.2021, 21:52
dass ich die 4 stellige Zahl in der Dateitemp1.txt durch 1000 teilen möchte
Beispiel: "5432"

Code: Alles auswählen

string data;
system.Exec("cat /usr/local/tmp/Zahl.txt", &data);
WriteLine((data.ToFloat()/1000.0).Round(1).ToString(1));

Code: Alles auswählen

------------------------------- Scriptausgabe -------------------------------
5.4
ac1 hat geschrieben:
14.11.2021, 21:52
einer Kommastelle
Wird durch .Round(1) gerundet. .ToString(1) schneidet dann ab, macht aber nur Sinn wenn die Ausgabe nicht weiter verarbeitet werden soll und in eine SysVar Typ:Text gespeichert wird.

Grüße, Baxxy

ac1
Beiträge: 10
Registriert: 27.08.2021, 15:17
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 3 Mal

Re: Rechnen im Programm

Beitrag von ac1 » 26.11.2021, 22:00

HALLO, erst mal vielen Dank für die Tips. Ich habe auch gelesen und gelesen, einiges gelernt aber mein Problem nicht gelöst.

Die Frage oben ist nur ein kleiner Teil zur Berechnung. - das habe ich verstanden.

Das gesamte Skript holt eine Zahl über CuxD aus einer Datei und überträgt die Zahl in eine Variable. Das klappt auch prima. Mein Problem ist, das ich die Zahl noch durch 1000 teilen muß. In dem Skript, das ich im Internet gefunden habe, sehe ich keine Möglichkeit , die Zahl in dem Skript sichtbar zu machen und zu bearbeiten. Kann mir jemand einen Tip geben, wie ich die Zahl durch 1000 teilen kann.

Code: Alles auswählen

string x_cuxd = "CUxD.CUX2801001:5.";
string x_cmd = ("cat /usr/local/addons/test/temp1.txt");
dom.GetObject (x_cuxd # "CMD_SETS").State (x_cmd);
dom.GetObject (x_cuxd # "CMD_QUERY_RET").State (1);
dom.GetObject ("_Test1").State (dom.GetObject (x_cuxd # "CMD_RETS").State());


MichaelN
Beiträge: 9650
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Rechnen im Programm

Beitrag von MichaelN » 26.11.2021, 22:15

Wieso so eine Salami Taktik?
Die Lösung wäre schon fertig, wenn du von Anfang an alle Karten auf den Tisch gelegt hättest.

Du musst nur dein Skript und das von Baxxy kombinieren.

Die Zahl wird durch diesen Ausdruck repräsentiert

Code: Alles auswählen

dom.GetObject (x_cuxd # "CMD_RETS").State()
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 +++

ac1
Beiträge: 10
Registriert: 27.08.2021, 15:17
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 3 Mal

Re: Rechnen im Programm

Beitrag von ac1 » 28.11.2021, 21:03

Hallo MichaelN,

danke, leider reicht mein Wissen noch nicht aus, das Skript von Baxxy in meins einzubauen.
Das Skript von Baxxy ist kein Problem.
MichaelN hat geschrieben:
26.11.2021, 22:15
Wieso so eine Salami Taktik?
Die Lösung wäre schon fertig, wenn du von Anfang an alle Karten auf den Tisch gelegt hättest.

Du musst nur dein Skript und das von Baxxy kombinieren.

Die Zahl wird durch diesen Ausdruck repräsentiert

Code: Alles auswählen

dom.GetObject (x_cuxd # "CMD_RETS").State()
Mein Versuch hat leider nicht geklappt! Ich habe versucht, x_cuxd durch x_cuxd / 1000 zu ersetzen.
string x_cuxd = "CUxD.CUX2801001:5.";
string x_cmd = ("cat /usr/local/addons/test/temp1.txt");
dom.GetObject (x_cuxd # "CMD_SETS").State (x_cmd);
dom.GetObject (x_cuxd # "CMD_QUERY_RET").State (1);
string x_cuxd = ((x_cuxd.ToFloat()/1000.0).Round(1).ToString(1));
dom.GetObject ("_Test1").State (dom.GetObject (x_cuxd # "CMD_RETS").State());
Wenn meine Zahl durch den Ausdruck repräsentiert wird, kann ich mir den Inhalt mit WriteLine anzeigen lassen?
dom.GetObject (x_cuxd # "CMD_RETS").State()

MichaelN
Beiträge: 9650
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Rechnen im Programm

Beitrag von MichaelN » 28.11.2021, 21:49

Wenn ich mal wieder am PC bin und an diesen Thread denke, kann ich nochmal drüber schauen
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: 10779
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2205 Mal

Re: Rechnen im Programm

Beitrag von Baxxy » 28.11.2021, 22:54

ac1 hat geschrieben:
28.11.2021, 21:03
das Skript von Baxxy in meins einzubauen
Warum nimmst du nicht einfach meine Version und schreibst das Ergebnis in deine gewünschte SysVar?

Code: Alles auswählen

dom.GetObject (ID_SYSTEM_VARIABLES).Get ("_Test1").State((data.ToFloat()/1000.0).Round(1).ToString(1));
Für deine CUxD-Variante dann eben...

Code: Alles auswählen

dom.GetObject (ID_SYSTEM_VARIABLES).Get ("_Test1").State((dom.GetObject (x_cuxd # "CMD_RETS").State().ToFloat() / 1000.0).Round(1).ToString(1));
Grüße, Baxxy

ac1
Beiträge: 10
Registriert: 27.08.2021, 15:17
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 3 Mal

Re: Rechnen im Programm

Beitrag von ac1 » 30.11.2021, 17:42

Hallo MichaelN und Baxxy,

ich möchte nur nochmal danke sagen, es hat geklappt, ich kann jetzt kommagerecht die Temperaturen von meinem Raspi zur Sprenkleranlagensteuerung auslesen und anzeigen - ich muss feststellen, das mir noch ein "wenig" Wissen fehlt (die letzte Falle war, woher bekomme ich den Wert der "ID_SYSTEM_VARIABLES" meines Systems)

MichaelN
Beiträge: 9650
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Rechnen im Programm

Beitrag von MichaelN » 30.11.2021, 18:17

ac1 hat geschrieben:
30.11.2021, 17:42
woher bekomme ich den Wert der "ID_SYSTEM_VARIABLES" meines Systems)
:?: :?: :?: und wie war die Lösung?
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 allgemein“