Seite 1 von 2

NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 12:18
von duffy6
Hallo zusammen,

ich möchte benachrichtigt werden, welcher meiner Wassermelder ausgelöst hat. Dafür habe ich folgenden Codeschnipsel gefunden, der sehr gut funktioniert:

https://www.christian-luetgens.de/homem ... melden.htm

Code: Alles auswählen

object o_dp = dom.GetObject ("$src$");
if (o_dp) {
  if (o_dp.Value()) {
    object o_channel = dom.GetObject (o_dp.Channel());
    dom.GetObject ("Telegram").State ("Bewegung: " # o_channel.Name());
  }
}


Ich bekomme nun den Namen des KANALs gemeldet.

Wie kann ich jedoch den Namen des GERÄTES und den zugeordneten RAUM herausfinden?
Unbenannt.PNG
Unbenannt.PNG (10.5 KiB) 959 mal betrachtet

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 13:08
von jp112sdl
duffy6 hat geschrieben:
13.03.2023, 12:18
Ich bekomme nun den Namen des KANALs gemeldet.
In der Skript Doku https://www.eq-3.de/downloads/download/ ... l_v1.2.pdf steht:
Bildschirm­foto 2023-03-13 um 13.05.35.png
o_channel.Device() liefert dir also die ID des Geräts, dessen Namen du dann ja wiederum mit dom.GetObject(ID).Name() abfragen kannst.

Bei den Räumen sagt die Script Doku:
Bildschirm­foto 2023-03-13 um 13.07.36.png
duffy6 hat geschrieben:
13.03.2023, 12:18
Wie kann ich jedoch den Namen des GERÄTES und den zugeordneten RAUM herausfinden?
Wichtig: Es sind immer nur Kanäle zugeordnet, nicht das Gerät.

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 14:16
von Baxxy
duffy6 hat geschrieben:
13.03.2023, 12:18
den Namen des GERÄTES und den zugeordneten RAUM
So ginge das auf RaspberryMatic.
Falls du inzwischen auf CCU gewechselt bist musst du gucken ob das so läuft.

Code: Alles auswählen

object o_dp = dom.GetObject ("$src$");
if (o_dp) {
  if (o_dp.Value()) {
    object o_channel  = dom.GetObject (o_dp.Channel());
    string dev_name   = (dom.GetObject(o_channel.Device())).Name();
    string room_name  = (dom.GetObject(o_channel.ChnRoom())).Name();
    string output_txt = "Bewegung: "# dev_name #" / im Raum: "# room_name;
    dom.GetObject ("Telegram").State (output_txt);
  }
}

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 20:08
von [sprotte80]
Hi,
Baxxy hat geschrieben:
13.03.2023, 14:16

Code: Alles auswählen

string room_name  = (dom.GetObject(o_channel.ChnRoom())).Name();
Das ist schlecht und funzt nur wenn nur ein Raum zugeordnet ist.
Liegt daran weil in dem Beispiel von Baxxy das ChnRoom() falsch verwendet wird.

Es gibt nicht die 'ID vom Raum' zurück sondern einem String mit ner Liste von IDs die mit Tabulator getrennt sind.

Thomas

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 20:28
von MichaelN
Baxxy verarbeitet da doch einen String. Wo soll da das Problem sein?

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 20:36
von [sprotte80]
Hi
MichaelN hat geschrieben:
13.03.2023, 20:28
Baxxy verarbeitet da doch einen String. Wo soll da das Problem sein?
Yo, er verarbeitet nen String und geht davon aus das nur eine ID drin steht.
Also '1234'
ChnRoom gibt aber ne mit Tabs getrennte Stringliste der IDs zurück.
Es könnte dort '1234t1235' drin stehen.
Und dann stimmts Ergebnis halt nicht.

Aber was solls wird schon nur ein Raum-ID drin stehen. Wer kommt schon auf die Idee zwei und mehr Räume zu hinterlegen!

Thomas

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 20:43
von MichaelN
OK, jetzt sehe ich es auch.

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 21:02
von Baxxy
[sprotte80] hat geschrieben:
13.03.2023, 20:36
Wer kommt schon auf die Idee zwei und mehr Räume zu hinterlegen!
Genau, und das vor allem bei einem Bewegungsmelder. :roll:

Aber anstatt hier rumzulamentieren wäre ein korrektes Beispiel viel wünschenswerter. :twisted:

Nächster Versuch.

Code: Alles auswählen

object o_dp = dom.GetObject ("$src$");
if (o_dp) {
  if (o_dp.Value()) {
    object o_channel  = dom.GetObject (o_dp.Channel());
    string dev_name   = (dom.GetObject(o_channel.Device())).Name();
    string roomlist   =  dom.GetObject(o_channel).ChnRoom();
    string rooms; string room_name;
     foreach(rooms, roomlist) { room_name  = dom.GetObject(rooms).Name() #" / "# room_name; }
      string output_txt = "Bewegung: "# dev_name #" / im Raum: "# room_name;
      dom.GetObject ("Telegram").State (output_txt);
  }
}

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 21:05
von MichaelN
oder so

Code: Alles auswählen

object o_dp = dom.GetObject ("$src$");
if (o_dp) {
  if (o_dp.Value()) {
    object o_channel  = dom.GetObject (o_dp.Channel());
    string dev_name   = (dom.GetObject(o_channel.Device())).Name();
    string output_txt = "Bewegung: "# dev_name #" / im Raum: ";
    string index;
	foreach(index,o_channel.ChnRoom() )
	{
     output_txt = output_txt # dom.GetObject(index).Name() # " ";
	}
    dom.GetObject ("Telegram").State (output_txt);
  }
}                 

Re: NAME und Raum des auslösenden Geräts herausfinden

Verfasst: 13.03.2023, 21:14
von [sprotte80]
Hi
Baxxy hat geschrieben:
13.03.2023, 21:02
Aber anstatt hier rumzulamentieren wäre ein korrektes Beispiel viel wünschenswerter. :twisted:
Du machst einen Fehler und pöpelst die an wo dir zeigen das da nen Fehler ist.
Das das so sitte in dem forum ist hab ich schon oft gelesen.
Du wirst ja schon zum Black oder jmaus.

Thomas