GELÖST: Neulingsfrage: Problem mit Script

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
Benutzeravatar
matthias.s
Beiträge: 69
Registriert: 10.10.2018, 10:40
System: CCU
Hat sich bedankt: 6 Mal
Danksagung erhalten: 2 Mal

GELÖST: Neulingsfrage: Problem mit Script

Beitrag von matthias.s » 11.10.2018, 11:51

Hallo zusammen.

Mein Script will nicht so, wie ich das gerne hätte. HM-Script-Handbuch habe ich heruntergeladen und sehe eigentlich keinen Fehler.
Ich wollte eigentlich die "Tageszeiten" anhand der aktuellen Stunde errechnen.

Es kommt aber immer nun eine Bedingung zur Geltung die eigentlich nicht mehr zutrifft.
Wie im Codebeispiel unten (Kann direkt über Script testen ausgeführt werden) kommt trotz Stunde = 8 der Wert = nacht raus! Also eigentlich das Zeitfenster zwischen 0 und 6 Uhr... :x Das verstehe ich nicht so ganz...

Hier mein Script:
(Hinweis: Ich habe bei 0 bis 6 absichtlich ein kleingeschriebenes "nacht" drin, damit ich es vom "else-Nacht" unterscheiden kann)

Code: Alles auswählen

! Tageszeit anhand der aktuellen Uhrzeit bestimmen

!integer Stunde = system.Date("%H").ToInteger();
integer Stunde = 8;

if ( Stunde >= 0 && Stunde < 6 )
	{
	string Wert = "nacht";
	}

elseif ( Stunde >= 6 && Stunde < 10 )
	{
	string Wert = "Morgen";
	}

elseif ( Stunde >= 10 && Stunde < 12 )
	{
	string Wert = "Vormittag";
	}

elseif ( Stunde > 12 && Stunde < 14 )
	{
	string Wert = "Mittag";
	}

elseif ( Stunde >= 14 && Stunde < 18 )
	{
	string Wert = "Nachmittag";
	}

elseif ( Stunde >= 18 && Stunde < 23 )
	{
	string Wert = "Abend";
	}

else 
	{
	string Wert = "Nacht";
	}

!dom.GetObject('Tageszeit').State(Wert);


WriteLine(Stunde);
WriteLine(Wert);
Wo ist denn hier mein Denkfehler bzw. was habe ich falsch gemacht?

Gruß, Matthias
Zuletzt geändert von matthias.s am 11.10.2018, 13:05, insgesamt 1-mal geändert.

Man sagte mir, dass meine Signatur zu groß sei.

Daher hier die Kurzform: CCU3, HmIP-Devices only :lol:

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: Neulingsfrage: Problem mit Script

Beitrag von manfredh » 11.10.2018, 12:01

Du brauchst das Rad nicht neu erfinden. Es gibt bereits ein vielfach verwendetes Tageszeitenscript. Suche einfach danach.

Wenn es dir darum geht, zu verstehen, was du falsch gemacht hast, hilft dir dieses funktionierende Script vielleicht auch.

Gruß
Manfred
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: Neulingsfrage: Problem mit Script

Beitrag von Bratmaxe » 11.10.2018, 12:15

viewtopic.php?t=11321


Reicht das? oder hast du irgendwas spezielles vor?
Gruß Carsten

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

Re: Neulingsfrage: Problem mit Script

Beitrag von Bratmaxe » 11.10.2018, 12:21

Um es aber mit deinem Skript zu machen...

Code: Alles auswählen

! Tageszeit anhand der aktuellen Uhrzeit bestimmen

!integer Stunde = system.Date("%H").ToInteger();
integer Stunde = 8;
string Wert = "";

if (( Stunde >= 0) && (Stunde < 6 )) { Wert = "Nacht"; }
elseif (( Stunde >= 6) && (Stunde < 10 )) { Wert = "Morgen"; }
elseif (( Stunde >= 10) && (Stunde < 12 )) { Wert = "Vormittag"; }
elseif (( Stunde >= 12) && (Stunde < 14 )) { Wert = "Mittag"; }
elseif (( Stunde >= 14) && (Stunde < 18 )) { Wert = "Nachmittag"; }
elseif (( Stunde >= 18) && (Stunde < 23 )) { Wert = "Abend"; }
else { Wert = "Nacht"; }

!dom.GetObject('Tageszeit').State(Wert);
WriteLine(Stunde);
WriteLine(Wert);
Gruß Carsten
Gruß Carsten

Benutzeravatar
matthias.s
Beiträge: 69
Registriert: 10.10.2018, 10:40
System: CCU
Hat sich bedankt: 6 Mal
Danksagung erhalten: 2 Mal

Re: Neulingsfrage: Problem mit Script

Beitrag von matthias.s » 11.10.2018, 12:51

manfredh hat geschrieben:
11.10.2018, 12:01
Du brauchst das Rad nicht neu erfinden. Es gibt bereits ein vielfach verwendetes Tageszeitenscript. Suche einfach danach.

Wenn es dir darum geht, zu verstehen, was du falsch gemacht hast, hilft dir dieses funktionierende Script vielleicht auch.

Gruß
Manfred
Danke für deine Antwort, Manfred.

Allerdings kurz noch einige Worte dazu. Ich bin ein absoluter Anfänger in Sachen Smart Home, Automatisierung und Haussteuerung.
Abgucken kann jeder :P. Vielleicht mag das hier im Forum bekannte Tageszeitenscript ja wirklich gut sein und das bezweifele ich auch nicht. Aber das nutzt mir nichts, wenn ich das nicht verstehe was da passiert.

Ich möchte lernen, mit dem System umzugehen, Scripte zu verstehen und selber zu schreiben. Das funktioniert aber nicht, wenn ich einfach ein bestehendes Script mit Copy/Paste in meine Anlage baller... :D

Gruß, Matthias

Man sagte mir, dass meine Signatur zu groß sei.

Daher hier die Kurzform: CCU3, HmIP-Devices only :lol:

Benutzeravatar
matthias.s
Beiträge: 69
Registriert: 10.10.2018, 10:40
System: CCU
Hat sich bedankt: 6 Mal
Danksagung erhalten: 2 Mal

Re: Neulingsfrage: Problem mit Script

Beitrag von matthias.s » 11.10.2018, 13:03

Bratmaxe hat geschrieben:
11.10.2018, 12:21
Um es aber mit deinem Skript zu machen...

Code: Alles auswählen

! Tageszeit anhand der aktuellen Uhrzeit bestimmen

!integer Stunde = system.Date("%H").ToInteger();
integer Stunde = 8;
string Wert = "";

if (( Stunde >= 0) && (Stunde < 6 )) { Wert = "Nacht"; }
elseif (( Stunde >= 6) && (Stunde < 10 )) { Wert = "Morgen"; }
elseif (( Stunde >= 10) && (Stunde < 12 )) { Wert = "Vormittag"; }
elseif (( Stunde >= 12) && (Stunde < 14 )) { Wert = "Mittag"; }
elseif (( Stunde >= 14) && (Stunde < 18 )) { Wert = "Nachmittag"; }
elseif (( Stunde >= 18) && (Stunde < 23 )) { Wert = "Abend"; }
else { Wert = "Nacht"; }

!dom.GetObject('Tageszeit').State(Wert);
WriteLine(Stunde);
WriteLine(Wert);
Gruß Carsten
Danke Carsten.

Die Variable "Wert" hast du jetzt vordefiniert. <- Ist aber nur, weil's ja so eigentlich "richtiger" ist, oder? Hat ja auch in meiner Version einen Wert angenommen (nur nicht den richtigen :lol: ) oder hat das noch einen anderen Grund?

Die Klammerung der booleschen Ausdrücke war hier glaube ich mehr das Thema. Das war mir nicht bewusst. Da steht auch in der HM-Script-Doku nicht soo viel zu drin...

Vielen Dank!

Gruß, Matthias

Man sagte mir, dass meine Signatur zu groß sei.

Daher hier die Kurzform: CCU3, HmIP-Devices only :lol:

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

Re: GELÖST: Neulingsfrage: Problem mit Script

Beitrag von Bratmaxe » 11.10.2018, 13:19

ja richtig, Variablen in der Homematic werden immer "Global" angelegt, von daher klappt das auch in der Schleife.
Ich programmiere aber sonst in C# und da muss man die Variable vor einer Schleife deklarieren, wenn man diese danach noch verwenden möchte, von daher halte ich das bei Homematic Skripten genauso..


Edit:
Hier noch ein Beispiel aus der HomeMatic Sprachbeschreibung:
4.1 Rangfolge
In Homematic Script existiert keine natürliche Rangfolge von Operatoren. Aus der Mathematik
bekannte Regeln wie z.B. „Punktrechnung geht vor Strichrechnung“ finden keine Anwendung.
Vielmehr werden Ausdrücke einfach von rechts nach links berechnet. Um die Reihenfolge der
Abarbeitung zu beeinflussen, können Klammern verwendet werden.

Beispiel:
integer i = 1 + 2 * 3; ! i = (3 * 2) + 1 = 7
integer j = 3 * 2 + 1; ! j = (1 + 2) * 3 = 9
integer k = (3 * 2) + 1; ! k = 1 + (3 * 2) = 7
Gruß Carsten

Benutzeravatar
matthias.s
Beiträge: 69
Registriert: 10.10.2018, 10:40
System: CCU
Hat sich bedankt: 6 Mal
Danksagung erhalten: 2 Mal

Re: GELÖST: Neulingsfrage: Problem mit Script

Beitrag von matthias.s » 11.10.2018, 13:43

Super...

Vielen Dank, Carsten. :wink:

Man sagte mir, dass meine Signatur zu groß sei.

Daher hier die Kurzform: CCU3, HmIP-Devices only :lol:

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: Neulingsfrage: Problem mit Script

Beitrag von manfredh » 11.10.2018, 13:50

matthias.s hat geschrieben:
11.10.2018, 12:51
manfredh hat geschrieben:
11.10.2018, 12:01
Du brauchst das Rad nicht neu erfinden. Es gibt bereits ein vielfach verwendetes Tageszeitenscript...
Abgucken kann jeder :P...
...Ich möchte lernen, mit dem System umzugehen, Scripte zu verstehen und selber zu schreiben.
Das ehrt dich und so hatte ich es auch vermutet. :D

Was mich betrifft, komme ich - obwohl ich mich als sehr fortgeschrittenen Homematic-User bezeichnen kann - damit klar, auch komplexe Dinge mit Mitteln des WebUi zu lösen.

Einzig das erwähnte Tageszeitenscript und das Servicemeldungen-AllInclusive-Script von Alchy ist bei mir im Einsatz.

Mir reicht es, die Logik der WebUi-Programme kapiert zu haben, komplexere Dinge mit Blockly im ioBroker zusammenzuklicken und mit Linux-Basiskenntnissen meine Raspis zu administrieren.

Aber jedem das Seine und dir viel Spass und Erfolg bei deiner Hausautomation.

Gruß
Manfred
Es gibt 10 Arten von Menschen: solche die Binärcode verstehen und solche, die ihn nicht verstehen.

Antworten

Zurück zu „HomeMatic allgemein“