undokumentierte Skript-Befehle

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

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

Re: undokumentierte Skript-Befehle

Beitrag von [sprotte80] » 25.03.2023, 21:06

Hi
Tyfys hat geschrieben:
25.03.2023, 10:17
zu foreach
ist da schon jemand drauf gestossen?
Oder steht das irgendwo ?
Ist bekannt und dokumentiert.
hatte hier
viewtopic.php?f=26&t=78169&p=759328#p759328
erst vor kurzem nen Beitrag geschrieben wo auch ein Hinweis drin war das es nicht nur die 'übliche' verwendung von foreach wo ein string als 1. Parameter gebraucht gibt.
...
Ist der 2. Parameter vom Typ integer, dann muss der 1. Parameter lEnum nicht zwingend vom Typ string sein.
Die Verwendung des 1. Parameter lEnum als integer ist dort sinnvoll, da der Typ durch die foreach-Anweisung auf integer gewandelt wird.
Ist die Zahl negativ oder 0, dann wird die Schleife nicht durchlaufen, jedoch lEnum auf 1 gesetzt.
Die Schleifendurchläufe entsprechen dem Wert der Zahl, jedoch wird der Wert von lEnum fälschlicherweise um 1 weitergezählt.
Auch ein eingebrachtes break verhindert die Hochzählung nicht.

Ausserdem kann es unter speziellen Umständen dazu kommen, daß die Schleife bis zum Abbruch (normal 500000 Durchläufe) ausgeführt wird.
Dieses Phänomen tritt bei der Verwendung eines Integer-Wertes als 2. Parameter verstärkt nach der "Reparatur" der foreach-Anweisung in der
ReGaHss-Version R1.00.0388.0227 (Oct 20 2021) auf. Es sind hierzu leider noch nicht alle Tests abgeschlossen.

Für weitere Hinweise hierzu siehe Kartenreiter "Bugs" unter "Anweisungen" -> "foreach".
...

Code: Alles auswählen

WriteLine("Start");
integer lEnum;
integer lParam2 = 10;
WriteLine('--------------');
foreach(lEnum,lParam2)
{
  WriteLine("> " # lEnum.Type() # " " # lEnum);
  if(lEnum == lParam2)
  {
	WriteLine("break");
	break;
  }
}
WriteLine('--------------');
WriteLine("lParam2: " # lParam2.Type() # " " # lParam2);
WriteLine("lEnum: " # lEnum.Type() # " " # lEnum);
WriteLine("Ende");
Auszug Docu und Codebespiel mit freundlicher Genehmigung durch badenpower

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.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“