NEWS
Javaskript: Auf Listeneintrag triggern
-
@paul53
Vielen Dank, habe ich gemacht.
Aber wie erhalte ich den index?
(Es gibt neben D_Raum[index] auch noch andere Arrays)// Wohnzimmer: alexa2.0.Smart-Home-Devices.82c5b2dd-e744-42b4-8cf4-e55721b1a51b.targetSetpoint const AlexaSHD_Root="alexa2.0.Smart-Home-Devices."; // Zimmer var S_Raum=[]; S_Raum[0]=AlexaSHD_Root+'b690f9b2-19a2-472e-9698-7bcf6c5ef1cf.targetSetpoint'; // Büro S_Raum[1]=AlexaSHD_Root+'b551ed22-499c-4215-bc08-22ebbca23c31.targetSetpoint'; // Küche S_Raum[2]=AlexaSHD_Root+'bf2c0ac3-ee45-47ab-9151-d003cb270374.targetSetpoint'; // Bad S_Raum[3]=AlexaSHD_Root+'82c5b2dd-e744-42b4-8cf4-e55721b1a51b.targetSetpoint'; // Wohnzimmer S_Raum[4]=AlexaSHD_Root+'569d705b-f04b-4302-9ecc-268dfda7a9ae.targetSetpoint'; // OG Zi Links S_Raum[5]=AlexaSHD_Root+'24e3ae80-80ac-4bb6-905e-c8bb989a7747.targetSetpoint'; // OG Wohnen S_Raum[6]=AlexaSHD_Root+'d8dfb5d7-0d33-4c46-9833-3c7a58c22058.targetSetpoint'; // OG Küche S_Raum[7]=AlexaSHD_Root+'270ad196-cb72-45da-ad55-c2edc33f65f2.targetSetpoint'; // OG Zi Rechts // Neue Alias Daten Objekte var D_Raum=[]; D_Raum[0]='Buero'; // Büro D_Raum[1]='Kueche'; D_Raum[2]='Bad'; D_Raum[3]='Wohnzimmer'; D_Raum[4]='OG_Zi_Links'; D_Raum[5]='OG_Wohnen'; D_Raum[6]='OG_Kueche'; D_Raum[7]='OG_Zi_Rechts'; on({id: S_Raum, change: "ne"}, function(obj,index) { let SollTemp_akt = obj.state.val log('Neue '+D_Raum[index]+' Temperatur: '+SollTemp_akt) });
-
@hanss said: wie erhalte ich den index?
on({id: S_Raum, change: "ne"}, function(obj) { let index = S_Raum.indexOf(obj.id); let SollTemp_akt = obj.state.val; log('Neue '+D_Raum[index] + ' Temperatur: ' + SollTemp_akt); });
-
@paul53
Super.
Jetzt nur noch ein kleines Problem:Wie kann ich der Funktion xlog die Variable obj mitgeben?
on({id: Target_Raum, change: "ne"}, xlog(obj)) funktioniert nichton({id: Target_Raum, change: "ne"}, xlog) function xlog(obj){ let index = S_Raum.indexOf(obj.id) let SollTemp_akt = obj.state.val log('Neue '+obj.channelName+' Temperatur: '+SollTemp_akt) // ID: "alexa2.0.Smart-Home-Devices.bf2c0ac3-ee45-47ab-9151-d003cb270374" log('Index: '+index+' Raum: '+D_Raum[index]) }
-
@hanss said: Wie kann ich der Funktion xlog die Variable obj mitgeben?
Genau so, wenn Target_Raum das Array of IDs ist. Der Index muss dann auch von Target_Raum ermittelt werden.
on({id: Target_Raum, change: "ne"}, xlog);
Wenn xlog() auf mehrere Arrays anwendbar sein soll:
on({id: Target_Raum, change: "ne"}, function(obj) { xlog(obj, Target_Raum); });
-
@paul53
Das wäre ja genauso wie in meinem Beispiel.
Wenn ich das so mache, dann wird index -1. -
@hanss said: Wenn ich das so mache, dann wird index -1.
Ja, wenn Trigger-Array und Index-Array nicht identisch sind. Versuche es mal so:
function xlog(obj, index, names){ let SollTemp_akt = obj.state.val log('Neue '+obj.channelName+' Temperatur: '+SollTemp_akt) // ID: "alexa2.0.Smart-Home-Devices.bf2c0ac3-ee45-47ab-9151-d003cb270374" log('Index: '+index+' Raum: '+names[index]) } on({id: Target_Raum, change: "ne"}, function(obj) { xlog(obj, Target_Raum.indexOf(obj.id), D_Raum); });
-
@paul53 said in Javaskript: Auf Listeneintrag triggern:
@hanss said: Wie kann ich der Funktion xlog die Variable obj mitgeben?
Genau so, wenn Target_Raum das Array of IDs ist. Der Index muss dann auch von Target_Raum ermittelt werden.
on({id: Target_Raum, change: "ne"}, xlog);
Wenn xlog() auf mehrere Arrays anwendbar sein soll:
on({id: Target_Raum, change: "ne"}, function(obj) { xlog(obj, Target_Raum); });
Nur aus Interesse, für mich ist das sehr verwirrend:
Gibt es dafür einen Grund, dass man bei on( callback zwar bei function(obj) einen Parameter angeben
kann, aber nicht, wenn eine andere Funktion aufgerufen wird xlog? -
@hanss said: nicht, wenn eine andere Funktion aufgerufen wird xlog?
Das musste ich zu Anfang auch lernen: Das ist kein Funktionsaufruf, sondern eine Funktions-Referenz. Was an die Callback-Funktion übergeben wird, bestimmt die aufrufende Funktion on(id, callback).
function(obj) {}
ist eine anonyme Callback-Funktion, bei der angegeben wird, mit welchem Bezeichner (obj) die Übergabe von Parametern an die Funktion erfolgt.
-
@paul53 sagte in Javaskript: Auf Listeneintrag triggern:
Hallo paul53,
on({id: Target_Raum, change: "ne"}Der Trigger wird offensichtlich ausgelöst, wenn nicht alle Target_Raum gleich sind.
Wie erhalte ich einen Trigger, der nur dann auslöst, wenn sich ein oder mehrere Target_Raum verändert haben?
Also:
kein Trigger bei- Target_Raum [1,2,3,4,5,6,7,8]
- Target_Raum [1,2,3,4,5,6,7,8]
1* Trigger bei
- Target_Raum [1,2,3,4,5,6,7,8]
- Target_Raum [5,2,3,4,5,6,7,8]
1* Trigger bei
- Target_Raum [1,2,3,4,5,6,7,8]
- Target_Raum [5,0,9,4,5,6,7,8]
-
@hanss sagte: wenn sich ein oder mehrere Target_Raum verändert haben?
Verstehe ich nicht. Getriggert wird, wenn sich in einem Target_Raum der Wert (targetSetpoint) ändert.
-
Das Beispiel ist so gemeint:
00:01 Uhr Target_Raum1 = 1; Target_Raum2 = 2; Target_Raum3 = 3 .....
00:02 Uhr Target_Raum1' Target_Raum2'Target_Raum3' ......KEIN Trigger, wenn Target_Raum1 == Target_Raum1' && Target_Raum2 == Target_Raum2' ....
Trigger, wenn Target_Raum1 != Target_Raum1' || Target_Raum2 != Target_Raum2' ....Es wird aber offensichtlich ein Trigger ausgelöst, wenn Target_Raum1 != Target_Raum2
d.h. change: "ne" soll nur jeweils den selben Raum betreffen.
kein Trigger bei
00:01 Uhr Target_Raum [1,2,3,4,5,6,7,8]
00:02 Uhr Target_Raum' [1,2,3,4,5,6,7,8]1* Trigger bei
00:01 Uhr Target_Raum [1,2,3,4,5,6,7,8]
00:02 Uhr Target_Raum' [5,2,3,4,5,6,7,8]1* Trigger bei
00:01 Uhr Target_Raum [1,2,3,4,5,6,7,8]
00:02 Uhr Target_Raum' [5,0,9,4,5,6,7,8]Bitte um Nachricht, wenn es immer noch nicht klar ist, dann muß ich ein Beispiel programmieren.
-
@paul53
Entschuldige bitte, ich bin da einem Irrtum aufgesessen.
der on({id: Target_Raum, change: "ne"} Trigger bezieht sich tatsächlich
nur auf einen Target_Raum, so wie er soll.