NEWS
[gelöst] .on / .each warum unterschiedliches obj als Antwort
-
Bitte um Hilfe:
Wieso erhalte ich mit .each und let obj = getObject (id) ein anderes Objekt(obj)
als mit .on??
Vielen Dankconst idsWerDA = $('state(functions=werdaog)'); // tr-064.0.devices.Galaxy-J5.active idsWerDA.each(function(id, i) { // Programm Start: alle Anwesenden im OG ermitteln log("Programm Start: "+id) let obj = getObject (id) log ("Objekt: "+JSON.stringify(obj) ) Ergebnis: Objekt: {"type":"state","common":{"name":"active","type":"boolean","role":"state"},"native":{},"_id":"tr-064.0.devices.Galaxy-S7-edge.active","from":"system.adapter.tr-064.0","user":"system.user.admin","ts":1603115401274,"acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} idsWerDA.on(function(obj) { // alle Objekte mit Änderung werdaog log ("Objekt .on: "+JSON.stringify(obj) ) Ergebnis: Objekt .on: {"id":"tr-064.0.devices.Galaxy-S7-edge.active","newState":{"val":true,"ts":1603961239462,"ack":false,"lc":1603961239462,"from":"system.adapter.admin.0","q":0},"oldState":{"val":false,"ts":1603961228233,"ack":false,"lc":1603955047061,"from":"system.adapter.javascript.0","q":0},"state":{"val":true,"ts":1603961239462,"ack":false,"lc":1603961239462,"from":"system.adapter.admin.0","q":0}} -
Bitte um Hilfe:
Wieso erhalte ich mit .each und let obj = getObject (id) ein anderes Objekt(obj)
als mit .on??
Vielen Dankconst idsWerDA = $('state(functions=werdaog)'); // tr-064.0.devices.Galaxy-J5.active idsWerDA.each(function(id, i) { // Programm Start: alle Anwesenden im OG ermitteln log("Programm Start: "+id) let obj = getObject (id) log ("Objekt: "+JSON.stringify(obj) ) Ergebnis: Objekt: {"type":"state","common":{"name":"active","type":"boolean","role":"state"},"native":{},"_id":"tr-064.0.devices.Galaxy-S7-edge.active","from":"system.adapter.tr-064.0","user":"system.user.admin","ts":1603115401274,"acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} idsWerDA.on(function(obj) { // alle Objekte mit Änderung werdaog log ("Objekt .on: "+JSON.stringify(obj) ) Ergebnis: Objekt .on: {"id":"tr-064.0.devices.Galaxy-S7-edge.active","newState":{"val":true,"ts":1603961239462,"ack":false,"lc":1603961239462,"from":"system.adapter.admin.0","q":0},"oldState":{"val":false,"ts":1603961228233,"ack":false,"lc":1603955047061,"from":"system.adapter.javascript.0","q":0},"state":{"val":true,"ts":1603961239462,"ack":false,"lc":1603961239462,"from":"system.adapter.admin.0","q":0}}@hanss
Wenn ich das richtig sehe bekommst du bei .on das "state" Objekt, sprich das Ergebnis von getState(id), nicht von getObject(id)OK.. jetzt hab ich es wieder.. dumm die falsche Erinnerung.
getObject(id) gibt Dir die Objektbeschreibung.
getState(id) gibt Dir den aktuellen Status des Objektesbei .on bekommst du ein eigenes Objekt, welches
- den letzten State beinhaltet
- den neuen State beinhaltet
- den state beinhaltet.
Das gleiche Objekt bekommst du immer wenn Du einen Trigger nutzt (on (id, function (obj) {})
Zum Warum: Im Fall einer
Ä
nderung (was bei .on ja die Funktion ausl
ö
st) ben
ö
tigst Du mehr / andere Daten als wenn du nur die aktuelle Objektbeschreibung oder den aktuellen Objektstatus abfragen willst.Den Unterschied kann man auch so beschreiben:
Ü
ber das .each bekommst definierst du eine Funktion die direkt f
ü
r jedes Objekt aufgerufen wird.
Ü
ber das .on definierst du f
ü
r jedes Objekt einen Trigger, sprich das .on entspricht :idsWerDa.on(function(obj) { do something } )idsWerDa.each(funktion(id, i) { on(id, function(obj) { do something }) })A.
-
@hanss
Wenn ich das richtig sehe bekommst du bei .on das "state" Objekt, sprich das Ergebnis von getState(id), nicht von getObject(id)OK.. jetzt hab ich es wieder.. dumm die falsche Erinnerung.
getObject(id) gibt Dir die Objektbeschreibung.
getState(id) gibt Dir den aktuellen Status des Objektesbei .on bekommst du ein eigenes Objekt, welches
- den letzten State beinhaltet
- den neuen State beinhaltet
- den state beinhaltet.
Das gleiche Objekt bekommst du immer wenn Du einen Trigger nutzt (on (id, function (obj) {})
Zum Warum: Im Fall einer
Ä
nderung (was bei .on ja die Funktion ausl
ö
st) ben
ö
tigst Du mehr / andere Daten als wenn du nur die aktuelle Objektbeschreibung oder den aktuellen Objektstatus abfragen willst.Den Unterschied kann man auch so beschreiben:
Ü
ber das .each bekommst definierst du eine Funktion die direkt f
ü
r jedes Objekt aufgerufen wird.
Ü
ber das .on definierst du f
ü
r jedes Objekt einen Trigger, sprich das .on entspricht :idsWerDa.on(function(obj) { do something } )idsWerDa.each(funktion(id, i) { on(id, function(obj) { do something }) })A.
@Asgothian
Vielen Dank.
...bei .on bekommst du ein eigenes Objekt - Das ist die Erkl
ä
rung aber auch sehr verwirrend.
Wie kann ich dieses Objekt abfragen, wenn ich die ID habe?
getEigenesObject(id) -
@Asgothian
Vielen Dank.
...bei .on bekommst du ein eigenes Objekt - Das ist die Erkl
ä
rung aber auch sehr verwirrend.
Wie kann ich dieses Objekt abfragen, wenn ich die ID habe?
getEigenesObject(id)@hanss Ich hab da an der Erkl
ä
rung nochmal was angepasst. Das Objekt ist nur ein kleiner Teil des Unterschiedes.@hanss sagte in .on / .each warum unterschiedliches obj als Antwort:
Wie kann ich dieses Objekt abfragen, wenn ich die ID habe?
getEigenesObject(id)Die frage verstehe ich nicht. Vielleicht beschreibst du das gesamte Problem mal

-
@Asgothian
Vielen Dank.
...bei .on bekommst du ein eigenes Objekt - Das ist die Erkl
ä
rung aber auch sehr verwirrend.
Wie kann ich dieses Objekt abfragen, wenn ich die ID habe?
getEigenesObject(id)@hanss sagte:
Wie kann ich dieses Objekt abfragen, wenn ich die ID habe?
Die Eigenschaften des Datenpunkt-Objektes werden im Funktionsparameter
ü
bergeben. Da es es sich sowohl um das statische Objekt handelt als auch um den Zustand, bezeichne ich die Variable mit dp.Selector.on(function(dp) { log(dp.state.val); // Wert aus Zustand log(dp.common.name); // Name aus statischem Objekt log(dp.id); // ID des Triggers });.each liefert lediglich die ID der Datenpunkte. Auf das statische Objekt muss man mit getObject(id) zugreifen, auf den Zustand mit getState(id).
-
@hanss sagte:
Wie kann ich dieses Objekt abfragen, wenn ich die ID habe?
Die Eigenschaften des Datenpunkt-Objektes werden im Funktionsparameter
ü
bergeben. Da es es sich sowohl um das statische Objekt handelt als auch um den Zustand, bezeichne ich die Variable mit dp.Selector.on(function(dp) { log(dp.state.val); // Wert aus Zustand log(dp.common.name); // Name aus statischem Objekt log(dp.id); // ID des Triggers });.each liefert lediglich die ID der Datenpunkte. Auf das statische Objekt muss man mit getObject(id) zugreifen, auf den Zustand mit getState(id).
@paul53
Vielen Dank.
Wie geht es dann, wenn ich auch noch Aufz
ä
hlungen ben
ö
tige?
Welches Objekt ist dann das Richtige?
F
ü
r mich ist das alles sehr verwirrend, weil nicht Objekt gleich Objekt ist.let raum = getObject(obj.id, "rooms"); let raumname = String(raum.enumNames); -
@hanss Ich hab da an der Erkl
ä
rung nochmal was angepasst. Das Objekt ist nur ein kleiner Teil des Unterschiedes.@hanss sagte in .on / .each warum unterschiedliches obj als Antwort:
Wie kann ich dieses Objekt abfragen, wenn ich die ID habe?
getEigenesObject(id)Die frage verstehe ich nicht. Vielleicht beschreibst du das gesamte Problem mal

@Asgothian
Es gibt eine Funktion, der das Objekt
ü
bergeben wird.
Diese wird einmal
ü
ber eine .each Schleife und einmal mit .on aufgerufen.
Ich glaube ich stelle die Funktion um und
ü
bergebe die ID.function OGset(obj){ Anwesend = obj.state.val; // true = da; false = abwesend let raum = getObject(obj.id, "rooms"); let raumname = String(raum.enumNames); -
@paul53
Vielen Dank.
Wie geht es dann, wenn ich auch noch Aufz
ä
hlungen ben
ö
tige?
Welches Objekt ist dann das Richtige?
F
ü
r mich ist das alles sehr verwirrend, weil nicht Objekt gleich Objekt ist.let raum = getObject(obj.id, "rooms"); let raumname = String(raum.enumNames);@hanss sagte:
Welches Objekt ist dann das Richtige?
Das Array mit Raumnamen wird zus
ä
tzlich im Objekt in der Eigenschaft enumNames
ü
bergeben.let obj = getObject(dp.id, "rooms"); let raumname = obj.enumNames[0];Bei on() werden auch enumNames als Array
ü
bergeben:let enums = dp.enumNames; // Array mit Aufzählungen -
@Asgothian
Es gibt eine Funktion, der das Objekt
ü
bergeben wird.
Diese wird einmal
ü
ber eine .each Schleife und einmal mit .on aufgerufen.
Ich glaube ich stelle die Funktion um und
ü
bergebe die ID.function OGset(obj){ Anwesend = obj.state.val; // true = da; false = abwesend let raum = getObject(obj.id, "rooms"); let raumname = String(raum.enumNames);Das ist doch einfach:
idsWerDa.on(OGset) idsWerDa.each(function(id, i) { let tempobj = {} tempobj.state = getState(id) OGset(tempobj) }Die L
ö
sung nur die ID zu
ü
bergeben und immer mit getState zu arbeiten ist beim .on unpraktisch. -
Das ist doch einfach:
idsWerDa.on(OGset) idsWerDa.each(function(id, i) { let tempobj = {} tempobj.state = getState(id) OGset(tempobj) }Die L
ö
sung nur die ID zu
ü
bergeben und immer mit getState zu arbeiten ist beim .on unpraktisch.@Asgothian @paul53
ich bekomme es einfach nicht hin.
Bitte hier einmal die erforderlichen
Ä
nderungen vornehmen.
Vielen Dank schon mal.const idsWerDA = $('state(functions=werdaog)'); // tr-064.0.devices.Galaxy-J5.active idsWerDA.each(function(id, i) { // Programm Start: alle Anwesenden im OG ermitteln // hier id in obj umwandeln OGset(obj) idsWerDA.on(function(obj) { // alle Objekte mit Änderung werdaog OGset(obj) //----------------------------------------------------- function OGset(obj){ Anwesend = obj.state.val; // true = da; false = abwesend let raum = getObject(obj.id, "rooms"); let raumname = String(raum.enumNames); // Raumname der Änderung -
@Asgothian @paul53
ich bekomme es einfach nicht hin.
Bitte hier einmal die erforderlichen
Ä
nderungen vornehmen.
Vielen Dank schon mal.const idsWerDA = $('state(functions=werdaog)'); // tr-064.0.devices.Galaxy-J5.active idsWerDA.each(function(id, i) { // Programm Start: alle Anwesenden im OG ermitteln // hier id in obj umwandeln OGset(obj) idsWerDA.on(function(obj) { // alle Objekte mit Änderung werdaog OGset(obj) //----------------------------------------------------- function OGset(obj){ Anwesend = obj.state.val; // true = da; false = abwesend let raum = getObject(obj.id, "rooms"); let raumname = String(raum.enumNames); // Raumname der Änderung@hanss sagte:
Bitte hier einmal die erforderlichen
Ä
nderungen vornehmen.Du m
ö
chtest das (ann
ä
hernd) gleiche Objekt an eine Funktion sowohl aus .on() und auch aus .each()
ü
bergeben ?idsWerDA.each(function(id, i) { // Programm Start: alle Anwesenden im OG ermitteln let obj = getObject(id); obj.id = id; obj.state = getState(id); OGset(obj) }); -
@hanss sagte:
Bitte hier einmal die erforderlichen
Ä
nderungen vornehmen.Du m
ö
chtest das (ann
ä
hernd) gleiche Objekt an eine Funktion sowohl aus .on() und auch aus .each()
ü
bergeben ?idsWerDA.each(function(id, i) { // Programm Start: alle Anwesenden im OG ermitteln let obj = getObject(id); obj.id = id; obj.state = getState(id); OGset(obj) });@paul53
Das habe ich schon versucht, funktioniert nicht.
Lt. @Asgothian im 2.Beitrag :
"bei .on bekommst du ein eigenes Objekt, welches
den letzten State beinhaltet
den neuen State beinhaltet
den state beinhaltet."Ich habe jetzt die Funktion OGset(id) so abge
ä
ndert, dass ich die ID
ü
bergeben kann.idsWerDA.on(function(obj) { OGset(obj.id) idsWerDA.each(function(id, i) { OGset(id) function OGset(id){ let raum = getObject(id, "rooms");Das funktioniert und sieht
ü
bersichtlich aus.
Mein Fazit:
Niemals ein Objekt an eine Funktion
ü
bergeben.
Vielen Dank. -
@paul53
Das habe ich schon versucht, funktioniert nicht.
Lt. @Asgothian im 2.Beitrag :
"bei .on bekommst du ein eigenes Objekt, welches
den letzten State beinhaltet
den neuen State beinhaltet
den state beinhaltet."Ich habe jetzt die Funktion OGset(id) so abge
ä
ndert, dass ich die ID
ü
bergeben kann.idsWerDA.on(function(obj) { OGset(obj.id) idsWerDA.each(function(id, i) { OGset(id) function OGset(id){ let raum = getObject(id, "rooms");Das funktioniert und sieht
ü
bersichtlich aus.
Mein Fazit:
Niemals ein Objekt an eine Funktion
ü
bergeben.
Vielen Dank.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden