Warum ist es logisch, dass für 0 der Wert false, für alle andere Werte ungleich 0 aber true gesetzt wird und damit die 0 exakt so, wie ein leerer String behandelt wird?
Ich sitze gerade an einem Skript, mit dem ich meine Rollladen zentral steuern kann. Mittels zweier Systemvariablen können verschiedene Parameter in entsprechenden WebUI-Programmen gesetzt werden. Das Setzen der beiden Systemvariablen sieht beispielsweise folgendermaßen aus:
Code: Alles auswählen
! +++++ Liste der Beschattungsgeräte, Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Stets nach dem Muster "Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung\t
! Beschattungsgerät|Behanghöhe|Offset(t_o_)|Auslösebedingung"
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Ist <> Soll | gt: Ist > Soll | ge: Ist >= Soll | lt: Ist < Soll | le: Ist <= Soll
string blindsList = "DG Schlafzimmer Rollladen Terrassentür|0|t10o90|ne\t
OG Gästezimmer Rollladen Fenster|30|t0o50|ne\t
OG Zimmer Lina Rollladen Fenster groß|30|t0o50|lt\t
OG Zimmer Jona Rollladen Fenster|40|t0o50|lt\t
EG Wohnzimmer Rollladen Fenster|20|t10o50|lt\t
EG Wohnzimmer Rollladen Terrassentür|20|t10o100|ne\t
UG Büro Rollladen Fenster|0|t10o90";
! +++++ Globale Werte für Behanghöhen bzw. Ausfahrwerte und Offset-Werte für geöffnete bzw. gekippte Fenster und Türen +++++
! Wenn gesetzt, sind keine lokalen Werte in "blindsList" notwendig bzw. werden ignoriert
! Stets nach dem Muster "Behanghöhe|Offset(t_o_)|Auslösebedingung\t
! Behanghöhe|Offset(t_o_)|Auslösebedingung"
! ausfüllen (trennen mit "\t")
! Auslösebedingung für den Vergleich von Ist- und Soll-Wert +++++
! ne: Ist <> Soll | gt: Ist > Soll | ge: Ist >= Soll | lt: Ist < Soll | le: Ist <= Soll
string blindsGlobalValues = ""; !"" zur Berücksichtigung der lokalen Werte in "blindsList"
Es wird nun in dem zentralen Skript abgefragt, ob z.B. die Systemvariable mit den Werten von "blindGlobalValues" leer ist oder ob sie Werte enthält. Ist sie leer, werden die einzelnen Werte gemäß der Systemvariablen mit den Werten von "blindsList" verwendet. Ist sie nicht leer, werden die Einzelwerte von "blindList" ignoriert und stattdessen die globalen Werte von "blindGlobalValues" für alle Rollläden gleichermaßen verwendet. Das funktioniert soweit auch problemlos. Wenn aber nun "blindsGlobalValues" den Wert 0 enthält, was ja einem globalen Schließen der Rollläden entspricht, dann denkt das Skript, die Variable ist leer und führt das Skript mit den Einzelwerten aus. Und genaus das will ich vermeiden. Wegen des obigen Problems geht das aber nicht so einfach, wie erhofft.