Skript Hilfe

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Skript Hilfe

Beitrag von Manuel.P » 23.11.2022, 19:46

Hallo,

ich habe zwei Skripts versucht zuschreiben, leider wollen diese nicht so ganz. Eventuell kann mir ja jemand helfen.

Das Skript soll zwei Systemvariablen vom Typ Zahl vergleichen. Wenn der Ist wert Größer oder gleich des Sollwert variable ist, dann soll der Autor ausgeschaltet werden.

Beim Ausprobieren, war soll auf 56 und ist auf 55 und trotzdem wurde der Autor nach einer gewissen zeit ausgeschaltet. Das Skript wird ausgelöscht, wenn der Wert soll oder der Wert ist aktualisiert wird.

Code: Alles auswählen

var soll = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg Laden bis").Value();
var ist = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg_Batterie_Füllstand").Value();

if  (soll.Value() < ist.Value() )
{
dom.GetObject("HmIP-RF.00161BE98A5FED:26.STATE").State(false);
}
Das zweite Skript, dass in dem gleichen Programm läuft soll eine Systemvariable vom Typ Zahl umwandeln. Hier wird die Restlaufzeit in Minuten angegeben, diese soll in Stunden umgerechnet werden. also 90 Min in 1h30min, ich habe es bis jetzt nur hinbekommen, dass es in 1,5 h angezeigt wird, was mir aber noch nicht gefallen hat.

Code: Alles auswählen

!Touareg Restladezeit errechnen Minuten in Stunden 

var h = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg_Restladezeit").Value();


h = h.ToInteger();
WriteLine ((h / 60) # ":" # h % 60);

dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg_Restladezeit_h").State(h);

frd030
Beiträge: 3575
Registriert: 14.07.2019, 20:49
System: CCU
Hat sich bedankt: 831 Mal
Danksagung erhalten: 532 Mal

Re: Skript Hilfe

Beitrag von frd030 » 23.11.2022, 19:50

Manuel.P hat geschrieben:
23.11.2022, 19:46
...dann soll der Autor ausgeschaltet werden.
"Lass es wie einen Unfall aussehen, Luigi!" - SCNR :mrgreen:

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Skript Hilfe

Beitrag von MichaelN » 23.11.2022, 19:51

Value ist doppelt gemoppelt.
terie_Füllstand").Value();

if (soll.Value() < ist.Value() )
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 +++

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Skript Hilfe

Beitrag von Manuel.P » 23.11.2022, 20:26

es sollte natürlich Aktor heißen :D aber gut reagiert :D

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Skript Hilfe

Beitrag von Manuel.P » 23.11.2022, 20:27

also du meinst so

Code: Alles auswählen

var soll = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg Laden bis").Value();
var ist = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg_Batterie_Füllstand").Value();

if  (soll <= ist)
{
dom.GetObject("HmIP-RF.00161BE98A5FED:26.STATE").State(false);
}

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Skript Hilfe

Beitrag von Tyfys » 23.11.2022, 20:34

Solange die Restzeit unter einem Tag bleibt

könntest du z.B. 95 Minuten in eine Uhrzeit-mässige Anzeige so umwandeln:

Code: Alles auswählen

integer min = 95; ! Minuten 
string zeit = ((min*60)-3600).ToTime().Format("%H:%M h");
WriteLine(zeit);
deine Variante müsste etwas geändert werden:

Code: Alles auswählen

integer h=90;
h = h.ToInteger();
h=(h / 60) # ":" # h % 60;
WriteLine (h);

!siehe aber das Ergebnis  bei einstelligen Minuten:
integer h=65;
h = h.ToInteger();
h=(h / 60) # ":" # h % 60;
WriteLine (h);
gibt aber noch diverse Möglichkeiten......
Gruß
Harry

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Skript Hilfe

Beitrag von Manuel.P » 23.11.2022, 21:31

So=???

Code: Alles auswählen

!Touareg Restladezeit errechnen Minuten in Stunden 

var h = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg_Restladezeit").ToInteger();
string zeit = ((min*60)-3600).ToTime().Format("%H:%M h");
WriteLine(zeit);


dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg_Restladezeit_h").State(zeit);

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Skript Hilfe

Beitrag von Tyfys » 23.11.2022, 22:13

Manuel.P hat geschrieben:
23.11.2022, 21:31
So=???

nein

du hast min ja nicht definiert.

also entweder var h auf var min ändern

oder in der Formel min*60 durch h*60 ersetzen
Gruß
Harry

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Skript Hilfe

Beitrag von Manuel.P » 23.11.2022, 23:13

Ok, da hast du natürlich recht... aber er will Immer noch nicht... es kommt 0 dabei raus.. wo ist der Fehler?

Code: Alles auswählen

!Touareg Restladezeit errechnen Minuten in Stunden 

var min = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg_Restladezeit").ToInteger();
string zeit = ((min*60)-3600).ToTime().Format("%H:%M h");
WriteLine(zeit);


dom.GetObject(ID_SYSTEM_VARIABLES).Get("Touareg_Restladezeit_h").State(zeit);

Matsch
Beiträge: 5359
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: Skript Hilfe

Beitrag von Matsch » 23.11.2022, 23:32

Code: Alles auswählen

.Get("Touareg_Restladezeit").ToInteger();
Du kannst den Verweis auf ein Objekt nicht in integer verwandeln, nur den Wert aus dem Datenpunkt.
.Value() fehlt.

Antworten

Zurück zu „HomeMatic allgemein“