NEWS
[Gelöst] - Kann man eine On-Abfrage in einer Schleife generieren?
-
Hi Leute,
ich bastel mir gerade einen Wecker dessen Weckzeiten in Datenpunkten hinterlegt sind, was auch eigentlich alles klappt nur muss ich ja meinen Schedule Befehl jedesmal neu "einlesen" wenn sich die Weckzeit oder eben der Wecktag ändert. Nun meine Frage, ist es möglich die "on"Abfrage auch in einer Schleife zu generieren, dass praktisch alle generierten Datenpunkte "beobachtet" werden? Oder muss ich wirklich jeden einzelnen auflisten?
! Hier das Script:````
// *****************************************************************************
//
// Wecker
//
//
// V 1.0 -
// *****************************************************************************
! // -----------------------------------------------------------------------------
// allgemeine Variablen
// -----------------------------------------------------------------------------
var logging = true; // Logging on/off
var instanz = 'javascript.0.'; // Javascript Instanzvar pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
//var datum_morgen = formatDate(new Date().setDate(new Date().getDate()+1), 'DD.MM.YYYY');!
var RaumListe = []; // Zimmmer für die ein Wecker vorhanden ist
RaumListe[0] = 'Kinderzimmer1';
RaumListe[1] = 'Kinderzimmer2';
! var Wochentage = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']; //Wochentage für die Weckeistellungen angelegt werden (Mit Sonntag beginnen wegen Schedule)
var WKZeit_Schedule = [];
! function WeckerStellen() {
RaumListe.forEach(function(Raum) {Wochentage.forEach(function(Wochentag){ // ----------------------------------------------------------------------------- // Objekte // ----------------------------------------------------------------------------- // Objekte für Wecker Ein/Aus createState(instanz + pfad0 + Raum +'.WeckerAktiv_'+Wochentag, {def: 'false',type: 'boolean',name: 'Wecker Aktiv '+Wochentag}); // Objekte für WeckZeiten createState(instanz + pfad0 + Raum +'.WeckZeit_'+Wochentag, {def: '07:00',type: 'string',name: 'Weckzeit am '+Wochentag}); if(getState(instanz + pfad0 + Raum + '.WeckZeit_'+Wochentag).val){ var WKZeit = getState(instanz + pfad0 + Raum + '.WeckZeit_'+Wochentag).val.split(':'); //log(WKZeit[1] + ' ' + WKZeit[0] + ' * * 1'); log(getState(instanz + pfad0 + Raum+ '.WeckerAktiv_'+Wochentag).val); if(getState(instanz + pfad0 + Raum+ '.WeckerAktiv_'+Wochentag).val === true){ clearSchedule(WKZeit_Schedule[Raum+'.'+Wochentag]); WKZeit_Schedule[Raum+'.'+Wochentag] = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * '+ Wochentage.indexOf(Wochentag), function (){WeckerEin(Raum);}); if(logging) log('Wecker für '+Raum+' am '+Wochentag+' wurde auf '+WKZeit[0]+': '+WKZeit[1]+' Uhr gestellt'); } else{ clearSchedule(WKZeit_Schedule[Raum+'.'+Wochentag]); if(logging) log('Wecker für'+Raum+' am '+Wochentag+' wurde gelöscht'); } //log(Raum+':'+WKZeit[1] + ' ' + WKZeit[0] + ' * * '+Wochentage.indexOf(Wochentag)); } }); });
}//Wecker stellen Ende
! function WeckerEin(Raum) {
log('Wecker im Zimmer:'+Raum+' hat ausgelößt');
}
! ````
und hier mal zwei Beispieldatenpunkte:on({id: instanz + pfad0 + "Kinderzimmer1.WeckerAktiv_Montag", change: 'any'}, function (dp) { WeckerStellen(); }); on({id: instanz + pfad0 + "Kinderzimmer2.WeckerAktiv_Dienstag", change: 'any'}, function (dp) { WeckerStellen(); }); ````Welche ich eben gerne nicht jedesmal einzeln auflisten würde. Vielleicht hat ja jemand eine Idee wie ich "Gruppen" beobachten kann oder so. Gruß Steffen
-
Vielleicht hat ja jemand eine Idee wie ich "Gruppen" beobachten kann oder so. `
das geht sogar sehr einfach indem man trigger auf "enum" macht, hier mal ein beispiel was ich fuer die enum "rolladen" gemacht hatte.
Aendert sich ein wert in dieser gruppe wird das script aufgerufen:
on({enumName: 'rolladen', change: "ne"}, function (obj) { });
due musst rolladen halt nur ergaenzen mit deiner eigenen gruppe
-
Hi,
die Gruppen definiere ich dann in Homematic oder in Iobroker?
Gruß
Steffen
-
Hi,
die Gruppen definiere ich dann in Homematic oder in Iobroker?
Gruß
Steffen `
Egal, du kannst sie in homematic erstellen und dann mit ioBroker mittels des hm-rega synchronisieren oder Manuel in ioBroker erstellen
–-----------------------
Send from mobile device
-
… oder Manuel in ioBroker erstellen `
Also entweder ich bin zu doof oder ich verstehe da was falsch. Ich bin in die Aufzählungen und dort kann ich auch eine neue erstellen. Aber wie weise ich dann einen Javascript Datenpunkt dieser Aufzählung zu?
-
Aber wie weise ich dann einen Javascript Datenpunkt dieser Aufzählung zu? `
Diese Datenpunkte sind doch einfach als objecte im JavaScript Baum hinterlegt?
Mach Mal bitte eine Screenshot wo du genau bist und was du versucht das macht es leichter [emoji6]
Hier Mal einen Post von mir in den knx thread : http://forum.iobroker.net/viewtopic.php … =20#p94365
Send from mobile device
-
Ok dann bin ich definiv falsch.
Hier der Screenshot des Javascript Datenpunktes:
-
Ok dann bin ich definiv falsch.
Hier der Screenshot des Javascript Datenpunktes:
filename="wecker.JPG" index="0">~~ `
Und diese Datenpunkte möchtest du gruppieren?
Das geht doch wie hier beschrieben ?
http://forum.iobroker.net/viewtopic.php … =20#p94365
Send from mobile device
-
Hatte den Link nicht gesehen nur dass ich einen Screenshot machen soll :oops:
Hat geklappt! Was mich gleich zur nächsten Frage bringt, kann ich die via Script erstellten Datenpunkte auch via script der Gruppe zuweisen? Oder noch schöner eine Gruppe via script erstellen.
So könnte man einfach im Script einen neuen "Raum" anlegen und der Rest ginge automatisch.
Tausend Dank schonmal
-
Hatte den Link nicht gesehen nur dass ich einen Screenshot machen soll [emoji15] `
Das ist meine schuld ich hatte meinen älteren Post erst später gefunden und nachträglich rein editiert [emoji6]
Hat geklappt! Was mich gleich zur nächsten Frage bringt, kann ich die via Script erstellten Datenpunkte auch via script der Gruppe zuweisen? Oder noch schöner eine Gruppe via script erstellen.
So könnte man einfach im Script einen neuen "Raum" anlegen und der Rest ginge automatisch. `
Super freut mich!
Enum zuweisen ja, dazu könnte man den Wert "enumNames" beim erstellen mitgeben z.b. mit setObject (siehe JavaScript docu)
Ob das erstellen einer enum auch geht bin ich über fragt.
Finde dazu nichts in der docu
–-----------------------
Send from mobile device
-
So,
nun habe ich alles so angelegt und auch zugewiesen. Den JavascriptAdapter neu gestartet wie beschrieben, wenn ich jedoch jetzt:
on({enumName:'weckerdatenpunkte', change: "ne"}, function (obj) { log('Änderung festgestellt'); });
mache und dann einen Datenpunkt ändere kommt im log folgendes:````
javascript.0 2017-12-09 22:53:48.911 warn unsubscribe: empty nameder Name stimmt aber
-
Mach Mal bitte eine Screenshot deiner enum mit den Datenpunkten drinne.
Nur zur Sicherheit, Adapter hast du neu gestartet nachdem du die enum erstellt und gefüllt hast?
–-----------------------
Send from mobile device
-
Hab den Fehler gefunden!
Rechts unter den functions stehen die "Namen" in "kleinschrift" wenn man jedoch richtig schaut, sieht man dass unter "NAME" der Anfangsbuchstabe groß geschrieben war und schon gehts.
Tausend Dank!
Gruß
Steffen
-
Super! Have Fun damit
–-----------------------
Send from mobile device