Skript für Anzahl Tage seit letztem Regen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

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

Re: Skript für Anzahl Tage seit letztem Regen

Beitrag von Xel66 » 24.02.2023, 11:47

RolandT hat geschrieben:
24.02.2023, 09:25
Gibts nun ein Reloaded 2.0 ?
Schau doch einfach mal hier rein, dann weißt Du woher der Wind weht. Äsop lässt grüßen.

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

[sprotte80]
Beiträge: 335
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 25 Mal

Re: Skript für Anzahl Tage seit letztem Regen

Beitrag von [sprotte80] » 24.02.2023, 18:24

Hi
RolandT hat geschrieben:
24.02.2023, 09:25
Ich weiss nicht, ich kann mich vage daran erinnern, sowas in der Art wie: "ich weiß etwas, aber ich sage nicht was und wie es geht" hier schon mal früher öfters gelesen zu haben. Gibts nun ein Reloaded 2.0 ?
wie schräg bist du denn drauf?

ich glaube nicht das Tyfiys eine Anleitung brauchen tut wie man eine Sysvar mit datetime erstellt.
Schau einfach mal seine scripts an denn die sind nicht von schlechten Eltern.

Auserdem ist das Erstellen von Sysvars per Script ja kein Geheimnis. Gibt hier genügend Beispiele dafür.
Und die ivt's gibt hier
hier viewtopic.php?f=31&t=63093&p=622660#p622659
und hier viewtopic.php?f=31&t=63093&p=622660#p622660
in meiner Signatur
Sprich einfach Suche benutzen oder ist die wieder mal kaputt.
RolandT hat geschrieben:
24.02.2023, 09:25
Ist also eine akademische Spielerei für Leute, die wissen was sie tun und die die entsprechenden Programmierumgebungen haben
In nimm dafür den Administrator von den Hm-internals. Da kannst du das wie in der WebUI einfach mit dem gewollten Datentyp komplett anlegen wie die normalen in der WebUI. Also Name -> Datentyp -> Werte -> Kanalverküpfung -> Klick und fertig

Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

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

Re: Skript für Anzahl Tage seit letztem Regen

Beitrag von Tyfys » 18.03.2023, 12:02

Für alle, die hier auf eine Lösung gehofft haben,
und für diejenigen: „Wir“ freuen uns dann über Beispiele im Forum, um abschreiben zu können.

hier mal eine Möglichkeit von mehreren:

1.Skript zum Setzen der SV Letzter_Regentag

Code: Alles auswählen

!1.Skript
string SysVarName = "Letzter_Regentag";
var AktDatum;
object SVrObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName);
if (SVrObj) {
    if (SVrObj.Value().Type() == "string") {
        AktDatum = localtime;
    } else {
        AktDatum = localtime.ToInteger();
    }
} else {
    WriteLine("Variablenname ist falsch");
    quit;
}
!WriteLine(AktDatum);
SVrObj.State(AktDatum);
2.Skript Berechnung der Differenztage und Ausgabe in die SV Regen_vor_Tagen

Code: Alles auswählen

!2.Skript
!vorheriges Datum wieder auslesen
!und Differenztage berechnen.
integer TagesSek=86400 ;
string SysVarName = "Letzter_Regentag";
time heute= ((localtime.ToString()).Substr(0,10) # " 12:00:00").ToTime();
var letzter;
object SVrObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName);
if (SVrObj) {
    if (SVrObj.Value().Type() == "string") {
        letzter = ((SVrObj.Value()).Substr(0,10) # " 12:00:00").ToTime();
    } else {
        letzter = (((SVrObj.Value().ToTime()).ToString()).Substr(0,10) # " 12:00:00").ToTime();
    }
} else {
    WriteLine("Variablenname ist falsch");
    quit;
}
integer tage = (heute-letzter).ToInteger()/TagesSek;
string tag_arr = "ist heute;war gestern;war vorgestern;war vor $$ Tagen";
string msg = "letzter Regentag ";
if (tage < 3) {
    msg = msg # tag_arr.StrValueByIndex(";", tage);
} else {
    msg = msg # (tag_arr.StrValueByIndex(";", 3)).Replace("$$", tage);
}
!WriteLine(msg)

 string SysVarName = "Regen_vor_Tagen";
 object SVrObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName);
 if (SVrObj) {
     if (SVrObj.Value().Type() == "string") {
         SVrObj.State(msg);
     } else {
         SVrObj.State(tage);
     }
 } else {
     WriteLine("Variablenname für "#SysVarName#" ist falsch");
 }
Die beiden Systemvariablen können jeweils vom Type Zahl ODER Zeichenkette sein.

just for fun...
Gruß
Harry

[sprotte80]
Beiträge: 335
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 25 Mal

Re: Skript für Anzahl Tage seit letztem Regen

Beitrag von [sprotte80] » 18.03.2023, 19:21

Hi
Tyfys hat geschrieben:
18.03.2023, 12:02

Code: Alles auswählen

    if (SVrObj.Value().Type() == "string") {
 
Gibs nen Grund für das umständlich so zu tun

Code: Alles auswählen

    if (SVrObj.Value().Type() == "string") {
 
und nich einfach so

Code: Alles auswählen

if (SVrObj.ValueType() == ivtString) {
 
?

Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

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

Re: Skript für Anzahl Tage seit letztem Regen

Beitrag von Tyfys » 18.03.2023, 20:32

[sprotte80] hat geschrieben:
18.03.2023, 19:21
Gibs nen Grund für das umständlich so zu tun
Nicht direkt.
Aber diese Abfragemöglichkeit wird so in der Script-Dokumentation aufgeführt.
Und nicht jeder kennt die internen Konstanten,
Gruß
Harry

[sprotte80]
Beiträge: 335
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 25 Mal

Re: Skript für Anzahl Tage seit letztem Regen

Beitrag von [sprotte80] » 18.03.2023, 21:05

Hi
Tyfys hat geschrieben:
18.03.2023, 20:32
[sprotte80] hat geschrieben:
18.03.2023, 19:21
Gibs nen Grund für das umständlich so zu tun
Nicht direkt.
Aber diese Abfragemöglichkeit wird so in der Script-Dokumentation aufgeführt.
Ah, ok
Tyfys hat geschrieben:
18.03.2023, 20:32
Und nicht jeder kennt die internen Konstanten,
das hab ich vor ner Zeit angfangen zu dokumentieren
viewtopic.php?f=31&t=63093
viewtopic.php?f=31&t=63093&p=622660#p622659

Hab dafür nur Spott und Hohn geerntet und nen Rauswurf bei Blacks SDV!
Will von den Scriptprofs keiner hier haben das das jeder lesen kann.

Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

mnanzer
Beiträge: 5
Registriert: 18.12.2021, 13:50
System: CCU

Re: Skript für Anzahl Tage seit letztem Regen

Beitrag von mnanzer » 16.08.2023, 19:34

Meine Lösung sieht nun so aus (funktioniert wahrscheinlich nicht übers Jahresende, muss es aber auch nicht):

1) Eine Variable (Zahl) für letzter Regentag und eine Variable für Letzter Regentag seit (Zahl - Anzahl Tage)
2) Wenn es regnet wird folgendes Skript ausgeführt:
var LetzterRegentag = currenttime.Yearday();
dom.GetObject("Letzter_Regentag").State(LetzterRegentag);

3) Täglich in der Nacht wird dieses Skript ausgeführt:
var Lregentag = dom.GetObject("Letzter_Regentag").Value().ToInteger();
var nrdays = (currenttime.Yearday() - Lregentag);
dom.GetObject("Letzter_Regentag_seit").State(nrdays);


Dadurch habe ich in der Systemvariable "Letzter Regentag seit" die Anzahl Tage seit dem letzten Regen.
(Danke an Alle für's mitdenken und wer noch einen Verbesserungsvorschlag hat - immer gerne.)

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

Re: Skript für Anzahl Tage seit letztem Regen

Beitrag von Xel66 » 16.08.2023, 23:08

Da intern die Uhrzeiten doch als Linux-Zeiten geführt werden, braucht man doch nur die letzte Änderung von der aktuellen Uhrzeit (Anzahl Sekunden seit 1.1.1970) abziehen und durch 86400 teilen und noch einen Integer draus machen. Dann deckt das auch einen Jahreswechsel ab.

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

Antworten

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