Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Raumname ermitteln

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

Raumname ermitteln

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
8 Beiträge 4 Kommentatoren 2.8k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    mamoel
    schrieb am zuletzt editiert von
    #1

    Ich versuche mich gerade am Javascript Adapter und habe gerade folgendes Problem:

    Über````
    var selectorActTemp = $('channel[state.id=*.ACTUAL_TEMPERATURE]');

    
    Name und Wert des Kanals hole ich über````
    selectorActTemp.each(function (id, i) {
        var status = getState(id).val;
        var obj    = getObject(id);                 
        log("Kanalname: " + obj.common.name + ": " + status);
    }); 
    ````Aber wie kann ich den Raumnamen ermitteln, der zu diesem Kanal gehört?

    <size size="85">ioBroker (docker) auf Synology DS418play

    Alexa2, cloud, fritzdect, g-homa, harmony, hm-rega, hm-rpc, hs100, hue, javascript, nuki, ring, sayit, sonos, sql, viessmannapi</size>

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Hast Du es mal so versucht ?

          var obj   = getObject(id, 'rooms');
          var rooms = obj.enumNames;
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        mamoel
        schrieb am zuletzt editiert von
        #3

        Hat leider nicht funktioniert. Ich behelfe mir jetzt mit dieser (leider nicht sonderlich eleganten) Lösung:```
        `function getRoomByChannelId(chId) {
        var rooms = getEnums('rooms');
        var chName = chId.replace(".ACTUAL_TEMPERATURE", "");

        for (var i = 0; i < rooms.length; i++) {
            for (var j = 0; j < rooms[i].members.length; j++) {
                if (rooms[i].members[j] == chName) {
                    return rooms[i].name;
                }
            }
        }
        return "unknown";
        

        }`[/i][/i][/i]

        <size size="85">ioBroker (docker) auf Synology DS418play

        Alexa2, cloud, fritzdect, g-homa, harmony, hm-rega, hm-rpc, hs100, hue, javascript, nuki, ring, sayit, sonos, sql, viessmannapi</size>

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          Habe es gerade getestet und bei mir funktioniert es:

          var dp = getObject("javascript.1.Sonne.Höhe","rooms");
          log("Raum: " + dp.enumNames);
          

          ` > 10:09:58.792 [info] javascript.1 Start javascript script.js.common.Tests

          10:09:58.792 [info] javascript.1 script.js.common.Tests: Raum: Aussen

          10:09:58.793 [info] javascript.1 script.js.common.Tests: registered 0 subscriptions and 0 schedules `

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            mamoel
            schrieb am zuletzt editiert von
            #5

            Vielen Dank! Keine Ahnung, was ich vorhin falsch gemacht habe, aber egal - jetzt funktioniert es.

            <size size="85">ioBroker (docker) auf Synology DS418play

            Alexa2, cloud, fritzdect, g-homa, harmony, hm-rega, hm-rpc, hs100, hue, javascript, nuki, ring, sayit, sonos, sql, viessmannapi</size>

            1 Antwort Letzte Antwort
            0
            • R Offline
              R Offline
              robsdobs
              schrieb am zuletzt editiert von
              #6

              Ich habe auch Probleme bei der Ermittlung der Räume zu einem Kanal oder Datenpunkt.

              Dem Objekt sind mehrere Räume zugeordnet:
              1367_2017-12-03_22h51_31.png

              Ich bekomme leider nicht die Räume ermittelt:

              //id: hm-rpc.0.NEQ0184905.1.LEVEL
              var raumname = getObject(id, "rooms");
              
              //Ergebnis raumname :
              //{"def":0,"type":"number","read":true,"write":true,"min":0,"max":100,"unit":"%","role":"level.dimmer","workingID":"WORKING","name":"K14_110_WZ_Licht_LED_Dimmer.LEVEL"},"native":{"CONTROL":"DIMMER.LEVEL","DEFAULT":0,"FLAGS":1,"ID":"LEVEL","MAX":1,"MIN":0,"OPERATIONS":7,"TAB_ORDER":0,"TYPE":"FLOAT","UNIT":"100%"},"_id":"hm-rpc.0.NEQ0184905.1.LEVEL","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enumIds":[],"enumNames":[]}
              
              

              Ist vielleicht noch verständlich, da die Räume auf dem übergerodeten Objekt definiert sind. Aber hier gibt es auch keinen Raum:

              //channelname= hm-rpc.0.NEQ0184905.1
              var raumname = getObject(channelname, true);
              
              //Ergebnis raumname:
              //{"ADDRESS":"NEQ0184905:1","AES_ACTIVE":0,"DIRECTION":2,"FLAGS":1,"INDEX":1,"LINK_SOURCE_ROLES":"","LINK_TARGET_ROLES":"SWITCH WCS_TIPTRONIC_SENSOR WEATHER_CS","PARAMSETS":["LINK","MASTER","VALUES"],"PARENT":"NEQ0184905","PARENT_TYPE":"HM-LC-RGBW-WM","TYPE":"DIMMER","VERSION":41},"acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enumIds":["enum.functions.Licht"],"enumNames":["Licht"]}
              
              

              Wie kann ich die Räume (sind 2) zum Kanal oder Datenpunkt ermitteln?

              Hier das gesamte Script:

              /* Status Zahl Lichter
              
              zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich
              Daten kommen vom Gewerk "Licht"
              
              erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
              23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt
              Log Ausgabe auskommentiert
              05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267
              24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens)
              06.05.2016 Datenpunkt für Ansagen zugefügt
              02.07.2016 abgeschaltet, da Fehler
              03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer
              search statt indexOf und RegEx für Suche nach Virtuellen Kanälen
              27.11.2016 Verschoben in Status
              Code optimiert
              23.12.2016 Räume eingebaut
              */
              var logging = true;
              
              var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein',
              	idAnzahl = 'javascript.0.Status.Lichter.Anzahl',
              	idText = 'javascript.0.Status.Lichter.Text',
              	idRaum = 'javascript.0.Status.Lichter.Raum',
              	idAnsage = 'javascript.0.Status.Lichter.Ansage',
              	idUG = 'javascript.0.Status.Lichter.Untergeschoss',
              	idEG = 'javascript.0.Status.Lichter.Erdgeschoss',
              	idOG = 'javascript.0.Status.Lichter.Obergeschoss',
              	idDG = 'javascript.0.Status.Lichter.Dachgeschoss';
              
              // Ab hier nix mehr ändern
              createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
              	type: 'number',
              	name: 'Anzahl aller Lichter',
              	min: 0,
              	def: 0,
              	role: 'value'
              });
              createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
              	type: 'number',
              	name: 'Anzahl der eingeschalteten Lichter',
              	min: 0,
              	def: 0,
              	role: 'value'
              });
              createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
              	type: 'string',
              	name: 'Eingeschaltete Lichter',
              	desc: 'Namen der eingeschalteten Lichter',
              	def: ' ',
              	role: 'value'
              });
              createState(idAnsage, {
              	type: 'string',
              	name: 'Eingeschaltete Lichter (Ansage)',
              	desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
              	def: ' ',
              	role: 'value'
              });
              createState(idRaum, { // Räume, in denen Lichter brennen
              	type: 'string',
              	name: 'Räume mit eingeschalteten Lichter',
              	desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
              	def: ' ',
              	role: 'value'
              });
              
              var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); // Gewerk Licht
              var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Licht")');
              
              function checkDevices(obj) {
              	// Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
              	var anzahlLichterAn = 0;
              	var anzahlLichter = 0;
              	var textLichterAn = [];
              	var textRaum = [];
              	if (logging) {
              		log('++++++ Lichter Anzahl ++++ ');
              		log('#### SCHALTER ##### ');
              	}
              	cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
              		var obj = getObject(id);
              		var name = getObject(id).common.name;
              		var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
              		var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
              		var channelid = id.substring(0, id.indexOf(".STATE")); //.state aus Text entfernen
              		//var raumname = getObject(id, "rooms");
              		var raumname = getObject(channelid, "rooms");
              
              		// ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
              		// if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { 
              		if (logging) {
              			log('Kanal: ' + name + ' - Status: ' + status);
              		}
              		if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
              			if (logging) {
              				log('id: ' + id);
              				log('devicename: ' + devicename);
              				log('channelid: ' + channelid);
              				log('Object: ' + JSON.stringify(obj));
              				log('Räume: ' + JSON.stringify(raumname));
              			}
              			++anzahlLichterAn;
              			textLichterAn.push(devicename); // Zu Array hinzufügen
              			textRaum.push(raumname.enumNames);
              		}
              		++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
              		// } // ENDE VK-Abfrage
              	});
              
              	if (logging) log('#### DIMMER ##### ');
              	cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht
              		var obj = getObject(id);
              		var name = obj.common.name;
              		var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element)
              		var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen
              		var channelid = id.substring(0, id.indexOf(".LEVEL")); //.state aus Text entfernen
              		var raumname = getObject(channelid, "rooms");
              		//var raumname = getObject(channelid, true);
              		//var raumname = getObject(id, "rooms");
              
              		// ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
              		// if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten
              
              		if (logging) {
              			log('Kanal: ' + name + ' - Status: ' + status + '%');
              		}
              		if (parseFloat(status) > 0) { // Wenn Dimmwert über 0
              			if (logging) {
              				log('id: ' + id);
              				log('devicename: ' + devicename);
              				log('channelid: ' + channelid);
              				log('Object: ' + JSON.stringify(obj));
              				log('Räume: ' + JSON.stringify(raumname));
              				log('-------');
              			}		
              			++anzahlLichterAn;
              			textLichterAn.push(devicename); // Zu Array hinzufügen
              			textRaum.push(raumname.enumNames);
              		}
              		++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
              		// } // Ende Abfrage VK 
              	});
              
              	// Array mit Lichternamen sortieren
              	textLichterAn.sort();
              	textRaum.sort();
              	// Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
              	if (logging) log("Text: " + textLichterAn);
              	if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
              	// die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
              	setState(idText, textLichterAn.join(',
              ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
              	setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
              	setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
              	// setState(idRaum, textRaum.join(',
              ')); // Räume, in denen Licht brennt
              	setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt
              }
              
              // Trigger
              cacheSelectorState.on(function (obj) { // bei Zustandänderung *.STATE im Gewerk Licht
              	if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              	checkDevices();
              });
              cacheSelectorLevel.on(function (obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht
              	if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
              	checkDevices();
              });
              
              function main() {
              	setTimeout(function () {
              		if (logging) log('Auslöser Skriptstart');
              		checkDevices();
              	}, 2000);
              }
              
              main(); // Skriptstart-Auslöser
              
              // Aufbereitung für Ansage
              function strip_tags(data) {
              	var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
              	return (rueckgabe);
              }
              
              on(idText, function (obj) {
              	var text = obj.state.val;
              	text = (getState(idAnzahl).val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
              	setState(idAnsage, text);
              });
              

              etwas einfacher:

              var dp = getObject("hm-rpc.0.NEQ0184905.1.LEVEL","rooms");
              log ("Raum: " + dp.enumNames);
              log ("RaumID: " + dp.enumIds);
              
              var dp = getObject("hm-rpc.0.NEQ0184905.1","rooms");
              log ("Raum: " + dp.enumNames);
              log ("RaumID: " + dp.enumIds);
              
              var dp = getObject("hm-rpc.0.NEQ0184905","rooms");
              log ("Raum: " + dp.enumNames);
              log ("RaumID: " + dp.enumIds);
              

              Ergebnis:

              23:14:07.292	[info]	javascript.0 script.js.common.Test: Raum:
              23:14:07.292	[info]	javascript.0 script.js.common.Test: RaumID:
              23:14:07.292	[info]	javascript.0 script.js.common.Test: Raum:
              23:14:07.292	[info]	javascript.0 script.js.common.Test: RaumID:
              23:14:07.292	[info]	javascript.0 script.js.common.Test: Raum:
              23:14:07.292	[info]	javascript.0 script.js.common.Test: RaumID:
              

              Scripte: http://forum.iobroker.net/viewtopic.php?f=23&amp;t=2799&amp;p=119565#p119565,

              1 Antwort Letzte Antwort
              0
              • PeoplesP Offline
                PeoplesP Offline
                Peoples
                schrieb am zuletzt editiert von
                #7

                Hi Robsdobs,

                sollte wie in dem Beispiel funktionieren.

                Wenn ich bei mir den Beispielcode in folgendes ändere:

                var dp = getObject("hm-rpc.0.LEQXXXXXXX.1.LEVEL","rooms");
                log("Raum: " + dp.enumNames);
                

                Bekomme ich folgende Ausgabe:

                20:41:49.768	[info]	javascript.0 Stop script script.js.test
                20:41:51.693	[info]	javascript.0 Start javascript script.js.test
                20:41:51.693	[info]	javascript.0 script.js.test: Raum: Wohnzimmer
                

                sofern in Homematic definiert. Geht das bei dir nicht?

                Gruß

                Steffen

                Ich beantworte keine Fragen zu Themen via PN

                1 Antwort Letzte Antwort
                0
                • R Offline
                  R Offline
                  robsdobs
                  schrieb am zuletzt editiert von
                  #8

                  Nein, geht leider nicht.

                  Ich habe meine Kanäle auch mehr als einem Raum zugewiesen. Eigentlich sollte dann ein Array mit allen Räumen zurückgeliefert werden.

                  Gesendet von meinem A0001 mit Tapatalk

                  Scripte: http://forum.iobroker.net/viewtopic.php?f=23&amp;t=2799&amp;p=119565#p119565,

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  809

                  Online

                  32.5k

                  Benutzer

                  81.6k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe