Programmauslöser melden wenn Systemvariable oder Gerät

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
HMNutzer
Beiträge: 708
Registriert: 24.10.2016, 17:18
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 150 Mal
Danksagung erhalten: 22 Mal

Programmauslöser melden wenn Systemvariable oder Gerät

Beitrag von HMNutzer » 16.12.2023, 09:11

Servus,

ich habe ein Programm, das mir eine Meldung schickt, wenn entweder ein Bewegunsgmelder ausgelöst hat oder eine Kamera einen Alarm an die CCU meldet. Der Sonst Teil ist definitiv leer.
BewAlarm NMi.jpg
Hier das relevante Script; die anderen Teile sind der Versand über Pushover.

Code: Alles auswählen

!Script Erkennung welcher Melder
!aus Forum: https://homematic-forum.de/forum/viewtopic.php?f=43&t=78338 
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);
  }
}
Wenn ein Bewegunsgmelder auslöst kriege ich auch über $src$ den Melder in meiner Pushnachricht.
Wenn aber eine Kamera auslöst krieg ich den Namen der Kamera natürlich nicht.

Mag mir einer sagen, wie ich das in einem Programm darstellen kann?
Meine Kenntnisse reichen nur für einzelne Programme; die Scripts sind aus dem Forum abgekupfert.
Viele Grüße

Martin

RaspberryMatic auf ESXi 7 mit RPI-RF-MOD/HB-RF-ETH. Div. HM und HMIP Funkkomponenten im Holzständerhaus

Benutzeravatar
Black
Beiträge: 5485
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Programmauslöser melden wenn Systemvariable oder Gerät

Beitrag von Black » 16.12.2023, 09:22

Du musst bei o_dp unterscheiden zwischen

o_dp.Type()==OT_HSSDP das ist Ein Gerät

Und

o_dp.Type()==OT_VARDP ist eine systemvariable

Ein alarmvariable wäre dann noch OT_ALARMDP

Beide objekttypen haben unterschiedliche Methoden.

Dein Script müsste beim triggern durch eine sysvars einen scriptruntimeerror werden.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

HMNutzer
Beiträge: 708
Registriert: 24.10.2016, 17:18
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 150 Mal
Danksagung erhalten: 22 Mal

Re: Programmauslöser melden wenn Systemvariable oder Gerät

Beitrag von HMNutzer » 16.12.2023, 09:51

Danke für die Hilfe.
Dann muss ich das Script also 3 mal haben. Das sollte ich hinkriegen.
Oder verstehe ich das komplett falsch? Scripten ist mir einfach zu hoch....

Einen Runtimeerror kann ich nicht erkennen; ich habe halt die Pushnachricht "Bewegung: / im Raum" erhalten, was wenig hilfreich ist ;-)
Viele Grüße

Martin

RaspberryMatic auf ESXi 7 mit RPI-RF-MOD/HB-RF-ETH. Div. HM und HMIP Funkkomponenten im Holzständerhaus

Benutzeravatar
Baxxy
Beiträge: 10851
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 610 Mal
Danksagung erhalten: 2230 Mal

Re: Programmauslöser melden wenn Systemvariable oder Gerät

Beitrag von Baxxy » 16.12.2023, 09:55

Da mir der Code doch irgendwie bekannt vorkam... :wink:

Code: Alles auswählen

!Script Erkennung welcher Melder
!aus Forum: https://homematic-forum.de/forum/viewtopic.php?f=43&t=78338
object o_dp = dom.GetObject ("$src$");
object o_channel;
string dev_name;
string room_name;
string output_txt;

if (o_dp) {
 if (o_dp.Value()) {
  if (o_dp.Type()== OT_HSSDP) {
      o_channel  = dom.GetObject (o_dp.Channel());
      dev_name   = (dom.GetObject(o_channel.Device())).Name();
      room_name  = (dom.GetObject(o_channel.ChnRoom())).Name();
  }
  else {
        dev_name = o_dp.Name();
        room_name = o_dp.DPInfo();
  }
 output_txt = "Bewegung: "# dev_name #" / im Raum: "# room_name;
! WriteLine(output_txt);
! dom.GetObject ("Telegram").State (output_txt);
 }
}
Trage "den Raum" in die Beschreibung der SysVars ein.

Benutzeravatar
Black
Beiträge: 5485
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Programmauslöser melden wenn Systemvariable oder Gerät

Beitrag von Black » 16.12.2023, 10:02

ja, da verstehst es falsch... du must hier im Script unterscheiden:

Code: Alles auswählen

!Script Erkennung welcher Melder
!aus Forum: umgeschrieben auf die Schnelle von Black
object o_dp = dom.GetObject ("$src$");
string output_txt;
if (o_dp) {
  if (o_dp.Type()==OT_HSSDP) {
    object o_channel  = channels.Get (o_dp.Channel());
    string dev_name   = devices.Get (o_channel.Device()).Name();
    string room_name  = dom.GetObject (ID_ROOMS).Get (o_channel.ChnRoom()).Name();
    output_txt = "Bewegung: "# dev_name #" / im Raum: "# room_name;
!    dom.GetObject ("Telegram").State (output_txt);

  } elseif (o_dp.Type()==OT_VARDP) {
      output_txt = o_dp.DPInfo();
  }
  if (output_txt!="") {
    WriteLine ("Tue hier was Ausgeben");
  }
}   
Ich habs auf die Schnelle mal in die Richtung angepasst
Bei der Sysvar würde er nun den Infotext der Sysvar ausgeben
ALternativ könntest oc irgendwelche Infos in die Metadaten schreiben und die ausgeben lassen

@Baxxy: da waren wir beide auf dem gleichen Pfad

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

HMNutzer
Beiträge: 708
Registriert: 24.10.2016, 17:18
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 150 Mal
Danksagung erhalten: 22 Mal

Re: Programmauslöser melden wenn Systemvariable oder Gerät

Beitrag von HMNutzer » 16.12.2023, 10:24

Danke euch beiden und ein schönes Wochenende.

Dann versuche ich das Mal zu verstehen und melde mich wieder.
Viele Grüße

Martin

RaspberryMatic auf ESXi 7 mit RPI-RF-MOD/HB-RF-ETH. Div. HM und HMIP Funkkomponenten im Holzständerhaus

Antworten

Zurück zu „HomeMatic allgemein“