NEWS
String nach Boolean
-
Hallo alle
Ich habe ein Script gebaut, das wie folgt funktioniert: Es reagiert auf eine Systemvariable die Boolean ist:
on(id_boolscheSysvar, function (obj) { if (obj.newState.val=="ist wahr") { ... Code ... } } );
Scheinbar kommt also aus obj.newState.val ein String zurück.
Wie kann man denn dafür sorgen, dass entweder der richtige Datentyp zurückkommt, oder man wenigstens diesen String in eine Boolsche Variable wandeln kann, damit die If-Abfrage kein Stringvergleich mehr ist?
Und: Wie kann man Methoden die man in einem Script definiert hat in einem anderen Script aufrufen? Kennen die Scripe sich gegenseitig oder muss man die irgendwie referenzieren?
Gruss Ralf
-
Wenn der Vergleich
if (obj.newState.val=="ist wahr")
funktioniert, kann Datenpunktwert nicht vom Typ Boolean sein.
@derrapf:Wie kann man denn dafür sorgen, dass entweder der richtige Datentyp zurückkommt `
Indem der richtige Typ geschrieben wird (z.B. mit setState(id, val)).
@derrapf:Und: Wie kann man Methoden die man in einem Script definiert hat in einem anderen Script aufrufen? Kennen die Scripe sich gegenseitig oder muss man die irgendwie referenzieren? `
Skripte kennen sich untereinander nicht. Man kann nur Funktionen von Skripten, die als global deklariert wurden (Gruppe "global") aus anderen Skripten aufrufen. -
Hallo Paul
@paul53:Wenn der Vergleich
if (obj.newState.val=="ist wahr")
funktioniert, kann Datenpunktwert nicht vom Typ Boolean sein. `
Die Variable ist bei mir in der CCU als "Logikwert" definiert mit den Werten wahr = "ist wahr", falsch = "ist falsch"Das habe ich bisher als einen internen Boolean verstanden der bei false "ist falsch" und bei true "ist wahr" an's Webinterfce bzw. die Programmierschnittstelle liefert, damit man einfacher damit umgehen kann.
In IoBroker unter Zustände wird diese Systemvariable auch mit der Werteliste true, false angezeigt. Für mich war das immer ziemlich boolean.
Oder ist die Variable jetzt tatsächlich ein String?????
Kennt die CCU gar keine echten Booleans?
Indem der richtige Typ geschrieben wird (z.B. mit setState(id, val)). `
Verstehe ich nicht. Die Variable ist ja durch die CCU definiert und wird durch obj.newState.val nur referenziert.Oder hab ich jetzt was falsch verstaden?
Man kann nur Funktionen von Skripten, die als global deklariert wurden (Gruppe "global") aus anderen Skripten aufrufen. `
Ah. Das heisst wenn ich Methoden habe die ich in vielen Scripten verwenden möchte, dann sammle ich diese in einem Script und hake dort "global" an. Dann kann ich sie von überall her aufrufen. Hab ich das richtig verstanden?Gruss Ralf
-
Ah. Das heisst wenn ich Methoden habe die ich in vielen Scripten verwenden möchte, dann sammle ich diese in einem Script und hake dort "global" an. Dann kann ich sie von überall her aufrufen. Hab ich das richtig verstanden?
Gruss Ralf `
Hi,
ja. Wenn du global z.B. eine function deklarierst
function global(){ log('hallo Welt')}
Kannst du diese von überall aufrufen.
Zum Thema boolsche Werte, probier doch mal
on(id_boolscheSysvar, function (obj) { log(obj.newState.val); }
-
Die Variable ist bei mir in der CCU als "Logikwert" definiert mit den Werten wahr = "ist wahr", falsch = "ist falsch"
Das habe ich bisher als einen internen Boolean verstanden der bei false "ist falsch" und bei true "ist wahr" an's Webinterfce bzw. die Programmierschnittstelle liefert, damit man einfacher damit umgehen kann. `
Ja an das Webinterface und an die WebUI Porogrammierschnittstelle wird der Zustandstext geliefert, nicht jedoch an HM Script.Ich vermute allerdings, dass Du den Wert der Variablen im Reiter "Zustände" manuell geändert hast. Das funktioniert leider (noch) nicht. Bei manueller Änderung wird der Wert zum String, indem "ist wahr" bzw. "ist falsch" in den Wert eingetragen wird.
Also Logikwerte aus der CCU vorläufig nicht in ioBroker manuell ändern ! Bei allen anderen Datenpunkttypen funktioniert die manuelle Änderung im Reiter "Zustände" korrekt (auch bei "Werteliste").
-
Wenn du global z.B. eine function deklarierst
function global(){ log('hallo Welt')}
Kannst du diese von überall aufrufen. `
Wenn Du eine Funktion innerhalb eines globalen Skriptes (Skript in Gruppe "global") deklarierst,function meine_globale_Funktion(x, y) { mache was mit x und y }
kannst Du diese Funktion von überall aufrufen.