Tageszeiten-Script "verfeinern"
Moderator: Co-Administratoren
-
- Beiträge: 320
- Registriert: 23.06.2013, 11:08
- Wohnort: bei Karlsruhe
- Hat sich bedankt: 8 Mal
- Danksagung erhalten: 3 Mal
Tageszeiten-Script "verfeinern"
Guten Abend,
ich versuche gerade das TageszeitenScript
https://www.homematic-inside.de/tecbase ... nterteilen
zu verfeinern denn (wie aus seinem Beispiel)
Vormittag 07:00 - 12:00
Nachmittag 14:00 - 21:00
ist mir einfach zu lange.
Hat das jemand schon gemacht?
Besten Dank Euch
N
ich versuche gerade das TageszeitenScript
https://www.homematic-inside.de/tecbase ... nterteilen
zu verfeinern denn (wie aus seinem Beispiel)
Vormittag 07:00 - 12:00
Nachmittag 14:00 - 21:00
ist mir einfach zu lange.
Hat das jemand schon gemacht?
Besten Dank Euch
N
-
- Beiträge: 174
- Registriert: 22.10.2015, 19:45
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 7 Mal
Re: Tageszeiten-Script "verfeinern"
Du müsstest nur Werte verändern. Ich finde das Beispiel eigentlich gut lesbar.
Nur würde ich einiges umbenennen oder ganz abändern. Zum Beispiel halte ich es nicht sehr wartbar, oben eine Mittagszeit (13 Uhr) festzulegen und unten dann den Bereich von +/- 1 h um diese Zeit herum festzulegen. Dann doch lieber alle Zeitbereiche oben festlegen und unten nur noch prüfen. Bei Änderungen gibts dann nur eine Stelle die man ändert.
Nur würde ich einiges umbenennen oder ganz abändern. Zum Beispiel halte ich es nicht sehr wartbar, oben eine Mittagszeit (13 Uhr) festzulegen und unten dann den Bereich von +/- 1 h um diese Zeit herum festzulegen. Dann doch lieber alle Zeitbereiche oben festlegen und unten nur noch prüfen. Bei Änderungen gibts dann nur eine Stelle die man ändert.
-
- Beiträge: 10754
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 673 Mal
Re: Tageszeiten-Script "verfeinern"
Es ist doch nur Mathematik.
Alchy
Code: Alles auswählen
string ausgabe = "nachts";
var wert = (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
if (wert >= 6.23) { ausgabe ="morgens"; }
if (wert >= 10.12) { ausgabe ="vormittags"; }
if (wert >= 11.14) { ausgabe ="mittags"; }
if (wert >= 14.02) { ausgabe ="nachmittags"; }
if (wert >= 14.38) { ausgabe ="nachmittags Kaffeezeit"; }
if (wert >= 15.05) { ausgabe ="nachmittags Kaffeezeit beendet"; }
if (wert >= 15.15) { ausgabe ="nachmittags Kaffeezeit beendet aber noch nicht aufgestanden"; }
if (wert >= 18.18) { ausgabe ="abends"; }
if (wert >= 22.08) { ausgabe ="nachts"; }
WriteLine(ausgabe);
Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.
© Sandra Pulsfort (*1974)
Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.
Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.
Re: Tageszeiten-Script "verfeinern"
alchy hat geschrieben:if (wert >= 14.38) { ausgabe ="nachmittags Kaffeezeit"; }
if (wert >= 15.05) { ausgabe ="nachmittags Kaffeezeit beendet"; }
if (wert >= 15.15) { ausgabe ="nachmittags Kaffeezeit beendet aber noch nicht aufgestanden"; }
ich glaube jetzt ist die Auflösung hoch genug.
Aber ernsthaft, was ist zwischen 0:00 und 6:23?
Zumindest, wenn da ein reboot war?
Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!
Re: Tageszeiten-Script "verfeinern"
Wenn das Skript gestartet wurde, dann ist es "nachts",siehe Zeile 1.Homoran hat geschrieben: Aber ernsthaft, was ist zwischen 0:00 und 6:23?
Zumindest, wenn da ein reboot war?
.
Re: Tageszeiten-Script "verfeinern"
so weit hoch guck ich doch nicht
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!
- joni-blue
- Beiträge: 1171
- Registriert: 04.01.2012, 12:20
- System: CCU
- Wohnort: Hannover
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 1 Mal
Re: Tageszeiten-Script
Hier meine meine Version verkürzt und erstellt und auch gleichzeitig die Tage als variable
jeweils die Variable als Zeichenkette erstellen
Wochentag
Tagesabschnitt
Gesendet von iPhone mit Tapatalk
jeweils die Variable als Zeichenkette erstellen
Wochentag
Tagesabschnitt
Code: Alles auswählen
! Version 2.1.1
real tmpA = (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
if ((tmpA >= 05) && (tmpA < 10)) {
dom.GetObject("Tagesabschnitt").State("Morgen");
}
if ((tmpA >= 10) && (tmpA < 12)) {
dom.GetObject("Tagesabschnitt").State("Vormittag");
}
if ((tmpA >= 12) && (tmpA < 14)) {
dom.GetObject("Tagesabschnitt").State("Mittag");
}
if ((tmpA >= 14) && (tmpA < 16)) {
dom.GetObject("Tagesabschnitt").State("Nachmittag");
}
if ((tmpA >= 16) && (tmpA < 22)) {
dom.GetObject("Tagesabschnitt").State("Abend");
}
if ((tmpA >= 22) && (tmpA < 05)) {
dom.GetObject("Tagesabschnitt").State("Nacht");
}
integer tmpB = system.Date("%w").ToInteger();
string tmpC = "";
if (tmpB == 1) {tmpC = "Montag";}
if (tmpB == 2) {tmpC = "Dienstag";}
if (tmpB == 3) {tmpC = "Mittwoch";}
if (tmpB == 4) {tmpC = "Donnerstag";}
if (tmpB == 5) {tmpC = "Freitag";}
if (tmpB == 6) {tmpC = "Samstag";}
if (tmpB == 7) {tmpC = "Sonntag";}
dom.GetObject("Wochentag").State(tmpC);
Reboot tut gut ! ! !
Re: Tageszeiten-Script "verfeinern"
Code: Alles auswählen
integer tmpB = system.Date("%w").ToInteger();
string tmpC = "";
if (tmpB == 1) {tmpC = "Montag";}
if (tmpB == 2) {tmpC = "Dienstag";}
if (tmpB == 3) {tmpC = "Mittwoch";}
if (tmpB == 4) {tmpC = "Donnerstag";}
if (tmpB == 5) {tmpC = "Freitag";}
if (tmpB == 6) {tmpC = "Samstag";}
if (tmpB == 7) {tmpC = "Sonntag";}
dom.GetObject("Wochentag").State(tmpC);
Persönlich würde ich es aber so machen:
Code: Alles auswählen
string tmpC = "Sonntag;Montag;Dienstag;Mittwoch;Donnerstag;Freitag;Samstag";
(dom.GetObject("Wochentag")).State(tmpC.StrValueByIndex(";",(system.Date("%w")).ToInteger()));
.
-
- Beiträge: 14171
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 587 Mal
- Danksagung erhalten: 1501 Mal
Re: Tageszeiten-Script
Wozu braucht man so was? Der Charme der Originalversion bestand ja gerade darin, dass dort in Abhängigkeit vom aktuellen Sonnenauf- bzw. -untergang die Dämmerungszeiten festgestellt werden konnten und Aktionen daraus abgeleitet werden. Die zusätzlichen Tageszeiten ware eher ein Abfallprodukt des Scripts. Eine reine Zuweisung zu den Variablen an Hand von festen Tagen und Uhrzeiten kann man auch mit einem zusammengeklickten Programm und dem Zeitmodul realisieren. Da muss kein Script alle paar Minuten rennen um eine Systemvariable sechs mal am Tag umzuschalten.joni-blue hat geschrieben:Hier meine meine Version verkürzt und erstellt und auch gleichzeitig die Tage als variable
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