Tageszeit Script - Sysvar zeigt immer "Nacht"

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

abc150781
Beiträge: 176
Registriert: 20.12.2017, 18:10
Hat sich bedankt: 11 Mal
Danksagung erhalten: 1 Mal

Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von abc150781 » 05.12.2018, 10:08

Hallo zusammen,

ich bin gestern auf Script https://www.christian-luetgens.de/homem ... eszeit.htm gestoßen und fand die Idee gut unabhänigt von der Astrofunktion Licht im Haus zu steueren.

Meine Voraussetzungen
====================
RaspberryMatic Version 3.41.11.20181126 (auf Pi 3)

Mein Problem
============
Es wir immer die System Variabel "Nacht" angezeigt

Uhrzeit des Screenshot 10:07 Uhr
Status_SysVar.png
Status_SysVar.png (2.48 KiB) 2250 mal betrachtet

Screenshots
===========
SysVar.png
SysVar.png (13.43 KiB) 2250 mal betrachtet
Program.png

Das Script
==========
! HomeMatic-Script
! TAGESZEIT SETZEN
! http://www.christian-luetgens.de/homema ... eszeit.htm

! Tageszeiten
! Tagesbeginn - 2 <04.00 Nacht
! Tagesbeginn - 2 <04.00 Tagesbeginn - 1 frühmorgens
! Tagesbeginn - 1 Tagesbeginn Morgengrauen
! Tagesbeginn Mittag - 1 Vormittag
! Mittag - 1 Mittag + 1 Mittag
! Mittag + 1 Tagesende Nachmittag
! Tagesende Tagesende + 1 Dämmerung
! Tagesende + 1 Tagesende + 2 >2200 Abend
! Tagesende + 2 >2200 Nacht

real c_zeit =
(0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
real c_tagesbeginn =
(0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger();
real c_tagesende =
(0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger();
real c_mittag = 0.5 * (c_tagesbeginn + c_tagesende);

integer v_tageszeit = 0; ! Nacht

if ((c_zeit < c_tagesende + 2) || (c_zeit < 22.00)) {
v_tageszeit = 7; ! Abend
}

if (c_zeit < c_tagesende + 1) {
v_tageszeit = 6; ! Abenddaemmerung
}

if (c_zeit < c_tagesende) {
v_tageszeit = 5; ! Nachmittag
}

if (c_zeit < c_mittag + 1) {
v_tageszeit = 4; ! Mittag
}

if (c_zeit < c_mittag - 1) {
v_tageszeit = 3; ! Vormittag
}

if (c_zeit < c_tagesbeginn) {
v_tageszeit = 2; ! Morgengrauen
}

if (c_zeit < c_tagesbeginn - 1) {
v_tageszeit = 1; ! fruemorgens;
}

if ((c_zeit < c_tagesbeginn - 2) && (c_zeit < 04.00)) {
v_tageszeit = 0; ! Nacht
}

object s_tageszeit = dom.GetObject("Tageszeit");
if (s_tageszeit.Value() != v_tageszeit) {
s_tageszeit.State(v_tageszeit);
}

! Ende des Scripts
Danke im Voraus für Eure Hilfe.

Gruß
Patrick

manfredh
Beiträge: 4155
Registriert: 09.09.2012, 10:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 78 Mal
Danksagung erhalten: 301 Mal

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von manfredh » 05.12.2018, 10:54

Was passiert, wenn du das Programm manuell startest? Da wird ja immer das DANN ausgeführt.
Es gibt 10 Arten von Menschen: solche die Binärcode verstehen und solche, die ihn nicht verstehen.

manfredh
Beiträge: 4155
Registriert: 09.09.2012, 10:41
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 78 Mal
Danksagung erhalten: 301 Mal

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von manfredh » 05.12.2018, 11:00

Mein Script sieht marginal anders aus - und funktioniert...:

Code: Alles auswählen

! Tageszeiten
! Tagesbeginn - 2 Nacht
! Tagesbeginn - 2 Tagesbeginn - 1 frühmorgens
! Tagesbeginn - 1 Tagesbeginn Morgengrauen
! Tagesbeginn Mittag - 1 Vormittag
! Mittag - 1 Mittag + 1 Mittag
! Mittag + 1 Tagesende Nachmittag
! Tagesende Tagesende + 1 Dämmerung
! Tagesende + 1 Tagesende + 2 Abend
! Tagesende + 2 Nacht

real c_zeit = (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();
real c_tagesbeginn = (0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger();
real c_tagesende = (0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger();
real c_mittag = 13.00; ! Mittagszeit

integer v_tageszeit = 0; ! Nacht

if (c_zeit < c_tagesende + 2) {
    v_tageszeit = 7; ! Abend
}

if (c_zeit < c_tagesende + 1) {
    v_tageszeit = 6; ! Abenddaemmerung
}

if (c_zeit < c_tagesende) {
    v_tageszeit = 5; ! Nachmittag
}

if (c_zeit < c_mittag + 1) {
    v_tageszeit = 4; ! Mittag
}

if (c_zeit < c_mittag - 1) {
    v_tageszeit = 3; ! Vormittag
}

if (c_zeit < c_tagesbeginn) {
    v_tageszeit = 2; ! Morgengrauen
}

if (c_zeit < c_tagesbeginn - 1) {
    v_tageszeit = 1; ! fruemorgens;
}

if (c_zeit < c_tagesbeginn - 2) {
    v_tageszeit = 0; ! Nacht
}

dom.GetObject("Tageszeit").State(v_tageszeit);
Übrigens: mein Zeitmodul läuft nur von 4 bis 23 Uhr. In unseren Breitengraden ist von 23 bis 4 Uhr sicher Nacht, da gönne ich der CCU ein wenig Ruhe. :mrgreen:
Es gibt 10 Arten von Menschen: solche die Binärcode verstehen und solche, die ihn nicht verstehen.

Bratmaxe
Beiträge: 1573
Registriert: 28.05.2015, 12:48
Wohnort: Willich
Hat sich bedankt: 4 Mal
Danksagung erhalten: 10 Mal

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von Bratmaxe » 05.12.2018, 11:32

Das Problem ist, das dein Programm und deine Variable beide "Tageszeit" heissen, und das Programm wird halt zufällig zuerst gefunden und nicht die Variable.

Ändere mal folgende Zeile:

Code: Alles auswählen

object s_tageszeit = dom.GetObject("Tageszeit");
in diese Zeile um:

Code: Alles auswählen

object s_tageszeit = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Tageszeit");
dann sucht das Skript explizit nach einer Variable und nimmt nicht das erste Objekt das so heißt, dann sollte es laufen!

Alternativ kannst du dein Programm umbenennen und es läuft auch! Sauberer ist aber die Änderung oben im Skript!
Gruß Carsten

abc150781
Beiträge: 176
Registriert: 20.12.2017, 18:10
Hat sich bedankt: 11 Mal
Danksagung erhalten: 1 Mal

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von abc150781 » 05.12.2018, 12:59

Bratmaxe hat geschrieben:
05.12.2018, 11:32
Das Problem ist, das dein Programm und deine Variable beide "Tageszeit" heissen, und das Programm wird halt zufällig zuerst gefunden und nicht die Variable.

Ändere mal folgende Zeile:

Code: Alles auswählen

object s_tageszeit = dom.GetObject("Tageszeit");
in diese Zeile um:

Code: Alles auswählen

object s_tageszeit = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Tageszeit");
dann sucht das Skript explizit nach einer Variable und nimmt nicht das erste Objekt das so heißt, dann sollte es laufen!

Alternativ kannst du dein Programm umbenennen und es läuft auch! Sauberer ist aber die Änderung oben im Skript!
Das war's! Danke, da wäre ich im Leben nicht darauf gekommen!!!! Vielen Dank!

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von alchy » 06.12.2018, 04:40

Kein Object darf heißen wie ein anderes. Das sollte auch in den Tipps für Anfänger stehen und kann nicht oft genug hier stehen wie man sieht.

Alchy
25 Grad, die Sonne lacht

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.

Benutzeravatar
NilsG
Beiträge: 1685
Registriert: 09.08.2013, 23:44
System: CCU
Hat sich bedankt: 381 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von NilsG » 02.04.2020, 20:44

Moin ... ich klinke mich hier mal ein.

Finde die Idee mit den Tageszeiten "ganz nett" und hab sowas ab und an schonmal vermisst.

Allerdings find eich die Definition für "Dämmerung" und "Abend" aktuell unpassend.

Es ist 20:43, stockdunkel und die SysVar zeigt noch immer "Dämmerung" an :roll:

Wo genau lasse ich das an?!
Bzw. wie könnte man da noch Sommer und Wintermonate einbauen?!

DANKE!

Nils
Grüße und DANKE! 🍻

Nils

-----------------------------------------
CCU3 + 2x LAN-Gateway

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von alchy » 02.04.2020, 21:36

ich hoffe du meinst:

viewtopic.php?f=26&t=47307#p473287

am einfachsten in der Addition

Code: Alles auswählen

if (c_zeit < c_tagesende + 2) {
    v_tageszeit = 7; ! Abend
Tagesende also Sonnenuntergang sollte in Mitteldeutschland ~ 19:45 sein
+2 aus dem Code, also 21:45

also ab 21:45 wird auf Nacht umgeschalten davor ist es Abend

änderst du den Code zu

Code: Alles auswählen

if (c_zeit < c_tagesende + 1) {
    v_tageszeit = 7; ! Abend
wird es 20:45 nacht aber nie mehr Abenddaemmerung. da müsstes du dann also weiter anpassen.

Dazu ist mir gleich mal das Script
viewtopic.php?f=19&t=30926&p=283355&hil ... it#p283355
eingefallen. Da ist das Umschalten leichter zu durchschauen. :mrgreen:

Alchy

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.

Benutzeravatar
NilsG
Beiträge: 1685
Registriert: 09.08.2013, 23:44
System: CCU
Hat sich bedankt: 381 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von NilsG » 02.04.2020, 21:42

Ach Alchy ...

Auf Dich Script-Profi ist doch immer Verlaß!

DANKE!

Gucke ich mir mal genauer an; kann ich da auch mit Komma-Zahlen arbeiten?

Code: Alles auswählen

if (c_zeit < c_tagesende + 2) {
    v_tageszeit = 7; ! Abend
Also "+0,73" etc. :mrgreen:

Ansonsten gefällt mir Deine Ausführung in dem anderen thread sehr gut; muss mich nur mal einwuchsen, wie ich die in das o.g. Script übertragen bekomme 8)

Nils
Grüße und DANKE! 🍻

Nils

-----------------------------------------
CCU3 + 2x LAN-Gateway

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Tageszeit Script - Sysvar zeigt immer "Nacht"

Beitrag von alchy » 02.04.2020, 21:55

NilsG hat geschrieben:
02.04.2020, 21:42
Auf Dich Script-Profi ist doch immer Verlaß!
Ein Thread in dem ich aktiv war, ergo unter Beobachtung.
NilsG hat geschrieben:
02.04.2020, 21:42
kann ich da auch mit Komma-Zahlen arbeiten?
Wenn du Komma nicht wörtlich nimmst sondern Punkt meinst.

Hau die Zeile unter das Script

Code: Alles auswählen

WriteLine("UHRZEIT: "#c_zeit #"\rSONNENUG: "#c_tagesende #"\rADDITION   "#c_tagesende + 0.75); 
Du darfst die Zahlen dann nur nicht strikt als Zeit sehen denn wenn du 0.50 zu 19:45Uhr addierst kommt nicht 20:15Uhr raus :mrgreen:

Alchy

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.

Antworten

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