NEWS
[gelöst]was bedeutet (obj.oldState ? obj.oldState.val : "") | .state & .newState
-
Hi,
1.) Ich bitte mal um eine kurze Erklärung (gerne auch für Dummys ) für folgende Syntax:
if ((obj.oldState ? obj.oldState.val : "") == 0) {
Ich kenne einfache Entweder-Oder Ausdrücke wie
var Ergebnis = (document.Formular.Eingabe.value == '42') ? 'RICHTIG!' : 'FALSCH!';
Das von oben aber schafft mich. Das erzeugt übrigens Blockly, wenn man "falls vorheriger Wert = 0" abfragt.
Somit weiß ich nun, was diese Zeile macht => aber warum? Ich möchte also die Syntax an sich verstehen.
2.) Ähnlich geht es mir beim Skripten mit den .state und .newState Aufrufen.
Ich mache ja z. B. sowas:
on({id:"hm-rpc.0.ABC1234567.1.VALUE", change: 'any' }, function (obj) { if (obj.state.val === 0 ) { ...
Jetzt finde ich aber immer wieder auch````
if (obj.newState.val === 0 ) {.oldState ist klar. ****Aber was ist der Unterschied zwischen obj.state.val und obj.newState.val?**** Den der .newState muss doch eigentlich identisch zum .state sein, oder? Wäre schön, wenn sich jemand kurz die Zeit nehmen könnte, um mir das genauer zu erklären. Danke im Voraus. Fitti
-
Zu 1.) es bedeutet: wenn State.oldState gesetzt ist nimm den Wert (.val) den Status früher hatte ansonsten einen leeren String. Und das was da rauskommt wird mit 0 verglichen, wobei der leere String in denn auch 0 ist.
Man kann dieses if-then-Else Konstrukt in Klammern Diele benutzen weil der Wert direkt rauskommt.
2.) State und newState sind identisch. Steht so in der Doku zum JS Adapter.
-
Danke Dir!
@apollon77:Zu 1.) es bedeutet: wenn State.oldState gesetzt ist nimm den Wert (.val) den Status früher hatte ansonsten einen leeren String. Und das was da rauskommt wird mit 0 verglichen, wobei der leere String in denn auch 0 ist.
Man kann dieses if-then-Else Konstrukt in Klammern Diele benutzen weil der Wert direkt rauskommt. `
Jetzt ist es mir klar. Super!
@apollon77:2.) State und newState sind identisch. Steht so in der Doku zum JS Adapter. `
Okay, dann bin ich zufrieden.Hatte extra in der "Doku" hier https://github.com/iobroker/ioBroker.ja … /README.md geschaut - aber nichts gefunden.
Jetzt nochmal etwas weiter gesucht... In den Function steht es. Das ist natürlich auch logisch. Mein Fehler!
-
Juhu - ist zwar schon ein krachen alter Thread, aber da mein englisch bescheiden ist und ich mit googlen nicht weiter komme, versuche ich es hier einmal.
In einem Skript was ich benutzen möchte, wird der Zustand auf "true" abgefragt - if (obj.newState.val === true || obj.newState.val === "true")
ist meine Vermutung richtig?
Was muss man eingeben wenn man auf eine Änderung des Zeitstempel prüfen will? Ich kämpfe schon seit zwei Tagen damit dieses Skript zum laufen zu bringen - aber kenne / finde einfach nicht die passenden Befehle.
-
Ja, tue als boolscher wert oder String.
obj.oldState.ts, obj.newState.ts
Gesendet von meinem HTC U11 mit Tapatalk
-
Geht leider auch nicht
Ich möchte doch nur das bei Änderung des Zeitstempel das VIS Bild wechselt. Ich werde noch irre.
on("rflink.0.channels.Byron_1.SWITCH_05", function (obj){ if (obj.oldState.ts, obj.newState.ts) { setState("vis.0.control.command", '{"instance": "FFFFFFFF", "data": "200_Webcam", "command": "changeView"}'); setTimeout(function () { setState("vis.0.control.command", '{"instance": "FFFFFFFF", "data": "001_Main", "command": "changeView"}'); }, 120000); } });
-
Sorry dachte es wäre klar das in JS === der Vergleich ist und du nur nicht weißt wie du an den Zeitstempel von alt und neu kommst.
Also Ersatz mal das ',' durch '==='
Gesendet von meinem HTC U11 mit Tapatalk
-
Was muss man eingeben wenn man auf eine Änderung des Zeitstempel prüfen will? `
@JB_Sullivan:on("rflink.0.channels.Byron_1.SWITCH_05", function (obj){ ```` `
triggert nur bei Wertänderung. Dabei wird auch der Zeitstempel aktualisiert. Die if-Abfrage ist also unnötig !
Wenn bei jeder Aktualisierung des Zeitstempels auch ohne Wertänderung getriggert werden soll, dann so:
var timer = null; on({id: "rflink.0.channels.Byron_1.SWITCH_05"}, function(obj) { setState("vis.0.control.command", '{"instance": "FFFFFFFF", "data": "200_Webcam", "command": "changeView"}'); if(timer) clearTimeout(timer); timer = setTimeout(function () { setState("vis.0.control.command", '{"instance": "FFFFFFFF", "data": "001_Main", "command": "changeView"}'); }, 120000); });
-
DANKE, DANKE, DANKE !!!!! Es funktioniert und ich kämpfe seit 3 Tagen damit
Ich Danke Euch vielmals. Es tut mir sehr leid wenn ich hier wie der Depp vor dem Herrn rum komme, aber ich muss mir alles mühsam erarbeiten, weil ich bis vor ein paar Wochen überhaupt keine Ahnung von all dem Smart Home Zeugs hatte.
(Leider) macht es sehr viel Spaß wenn man sieht wie dann alles funktioniert und man will immer mehr und es soll immer noch perfekter werden.
Ich habe halt das Problem, das es so gut wie keine Vorbildung in dem Bereich gibt (bin Koch von Beruf) und ich mir alles mühsam ergoogeln und anlesen muss. Das alles in Englisch ist, ist für mich nicht gerade hilfreich. Somit verstehe ich oftmals die ganzen Zusammenhänge nicht.
Wie ihr an diesem kleinen Beispiel gesehen habt, breche ich mir echt einen daran ab, weil mir das Hintergrundwissen fehlt. Die Profis unter Euch schütteln das mal eben so aus dem Ärmel.
Ich glaube die Schere der unwissenden so wie ich es einer bin und den absoluten Cracks geht in diesem Forum wirklich Megamässig auseinander. Schön das die Profis den Dummis dann immer wieder unter Arme greifen.
VIELEN HERZLICHEN DANK NOCHMAL DAFÜR !!!!