Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

HMIP Sender und Empfänger der Serie Homematic IP

Moderator: Co-Administratoren

engel0707
Beiträge: 8
Registriert: 19.12.2016, 13:24
System: CCU

Re: Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

Beitrag von engel0707 » 03.10.2018, 17:48

Hallo,
super Beitrag, Danke.
Ich habe aber noch eine Frage/Problem und brauche eure Hilfe. Ich möchte bei meinem Bewegungsmelder (HmIP-SMI) einen "Reset Status" per Skript ausführen. Manuell funktioniert dies wunderbar über die WebUI unter "Status und Bedingungen" -> "Geräte" mit dem Button unten rechts "Reset Status".
Allerdings per Skript bekomme ich dies leider nicht hin. Die Kanäle auslesen ist kein Problem, aber wie kann ich den Reset per Skript anstoßen?

Bitte um Hilfe.

Benutzeravatar
spooner.arthur
Beiträge: 93
Registriert: 08.07.2013, 15:42
Danksagung erhalten: 1 Mal

Re: Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

Beitrag von spooner.arthur » 16.10.2021, 10:28

Morgen Zusammen,
ich stehe im Moment leider auf dem Schlauch.
Ich hatte bisher nur alte Bewegungsmelder, also keine HmIP und da hatte ich ein Script, das mir per Mail mitgeteilt hat, welcher BWM ausgelöst hat.
Aber ich bin zu blöd meinen HmIP-SMO in das Srcipt zu integrieren:

Code: Alles auswählen

WriteLine("Start Script");

dom.GetObject("EmailEmpfaenger").State(Dest);
dom.GetObject("EmailBetreff").State(Betr);

var sec=dom.GetObject("Sicherheit");
! Bewegungsmelder Systemvariable leeren
dom.GetObject('Bewegungsmelder').Variable();
string i;
string list;
list="";

WriteLine("vor foreach");
foreach(i,sec.EnumUsedIDs())
{
WriteLine("in foreach");
  var item=dom.GetObject(i);
  if(item.IsTypeOf(OT_CHANNEL))
  {
    var dev=dom.GetObject(item.Device());
    if(dev.HssType()=="HM-Sen-MDIR-O-2")
    {
      var state=item.DPByHssDP("MOTION");
      if(state.Value())
      {
         list=list+dev.Name();
      }
     }
   }
}

if(list!="")
{
Write("ausloesender Melder: " # list # " !");

	! Bewegungsmelder Systemvariable füllen
	dom.GetObject('Bewegungsmelder').State(list);

	! Mail-Text zusammensetzen
	string Nachricht;
	string sDate = system.Date("%d.%m.%Y-%H:%M");
	string ex;
		Nachricht = " \r\n Ein Bewegungsmelder meldet einen Alarm um " # sDate # "! \r\n";
		Nachricht = Nachricht # "\r\n Es ist der Melder: "# list # " \r\n";
		Nachricht = Nachricht # "\r\n Eventuelle Bewegung vorhanden! ";
	dom.GetObject("EmailText").State(Nachricht);
 
	ex = "/etc/config/addons/email/email " # Tmpl;
	system.Exec(ex, &stdout, &stderr);
}
WriteLine("Ende Script");
Oder besser eine eigenes Script dafür bauen?

Gruß spooner

Xel66
Beiträge: 14149
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

Beitrag von Xel66 » 16.10.2021, 10:32

Lieg wohl an den falschen Gerätetypen (device.HssType().Find("MDIR") >= 0) || (device.HssType().Find("SMI") >= 0) || (device.HssType().Find("SPI") >= 0) und dem falschen Datenpunkt item.DPByHssDP("PRESENCE_DETECTION_STATE").Value()

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
spooner.arthur
Beiträge: 93
Registriert: 08.07.2013, 15:42
Danksagung erhalten: 1 Mal

Re: Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

Beitrag von spooner.arthur » 16.10.2021, 10:50

hab das Script angepasst, aber leider immer einen Fehler:

Code: Alles auswählen

    var dev=dom.GetObject(item.Device());
    if(device.HssType().Find("MDIR") >= 0) || (device.HssType().Find("SMI") >= 0) || (device.HssType().Find("SPI") >= 0)
    {
      var state=item.DPByHssDP("MOTION") || item.DPByHssDP("PRESENCE_DETECTION_STATE").Value();
Fehlerprüfung:
Error 1 at row 40 col 52 near ^ (device.HssType().Find("SMI") >= 0) || (device.HssType().Find("SPI") >= 0)

Error 1 at row 40 col 52 near ^ (device.HssType().Find("SMI") >= 0) || (device.HssType().Find("SPI") >= 0)

Error 1 at row 40 col 52 near ^ (device.HssType().Find("SMI") >= 0) || (device.HssType().Find("SPI") >= 0)

Xel66
Beiträge: 14149
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

Beitrag von Xel66 » 16.10.2021, 10:54

Um die if-Abfrage fehlen die Klammern und die Unterscheidung auf MOTION und PRESENCE_DETECTION_STATE ist auch in eine if-clause umzuwandeln, sonst wirft es Dir den nächsten Scriptfehler.

Code: Alles auswählen

 if ((device.HssType().Find("MDIR") >= 0) || (device.HssType().Find("SMI") >= 0) || (device.HssType().Find("SPI") >= 0)){
                if ((item.DPByHssDP("MOTION").Value()) || (item.DPByHssDP("PRESENCE_DETECTION_STATE").Value())){
Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
spooner.arthur
Beiträge: 93
Registriert: 08.07.2013, 15:42
Danksagung erhalten: 1 Mal

Re: Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

Beitrag von spooner.arthur » 16.10.2021, 11:16

OK, danke, jetzt sind keine Fehler mehr vorhanden, aber ich denke ich hab noch einen Fehler.
Er wird mir jetzt in der Mail nicht den Bewegungsmelder ausspucken, weil ich die Variable state nicht mehr versenden:

Code: Alles auswählen

WriteLine("Start Script");

dom.GetObject("EmailEmpfaenger").State(Dest);
dom.GetObject("EmailBetreff").State(Betr);

var sec=dom.GetObject("Sicherheit");
! Bewegungsmelder Systemvariable leeren
dom.GetObject('Bewegungsmelder').Variable();
string i;
string list;
list="";

WriteLine("vor foreach");
foreach(i,sec.EnumUsedIDs())
{
WriteLine("in foreach");
  var item=dom.GetObject(i);
  if(item.IsTypeOf(OT_CHANNEL))
  {
    var dev=dom.GetObject(item.Device());
	if ((device.HssType().Find("MDIR") >= 0) || (device.HssType().Find("SMI") >= 0) || (device.HssType().Find("SPI") >= 0))
	{
	 if ((item.DPByHssDP("MOTION").Value()) || (item.DPByHssDP("PRESENCE_DETECTION_STATE").Value()))
	 {
		{
                list=list+dev.Name();
		}
	 }
	}
  }

if(list!="")
{
Write("ausloesender Melder: " # list # " !");

	! Bewegungsmelder Systemvariable füllen
	dom.GetObject('Bewegungsmelder').State(list);

	! Mail-Text zusammensetzen
	string Nachricht;
	string sDate = system.Date("%d.%m.%Y-%H:%M");
	string ex;
		Nachricht = " \r\n Ein Bewegungsmelder meldet einen Alarm um " # sDate # "! \r\n";
		Nachricht = Nachricht # "\r\n Es ist der Melder: "# list # " \r\n";
		Nachricht = Nachricht # "\r\n Eventuelle Bewegung vorhanden! ";
	dom.GetObject("EmailText").State(Nachricht);
 
	ex = "/etc/config/addons/email/email " # Tmpl;
	system.Exec(ex, &stdout, &stderr);
}
WriteLine("Ende Script");
Oder hab ich wieder einen Denkfehler?

Xel66
Beiträge: 14149
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

Beitrag von Xel66 » 16.10.2021, 11:29

Du weist mit "var dev=dom.GetObject(item.Device());" den Devicenamen der Variable "dev" zu. Meine Beispielabfragen enthalten aber die in meinem Script verwendete Bezeichnung "device".

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
spooner.arthur
Beiträge: 93
Registriert: 08.07.2013, 15:42
Danksagung erhalten: 1 Mal

Re: Datenpunkte des Bewegungsmelders HmIP-SMI ablesen

Beitrag von spooner.arthur » 16.10.2021, 13:31

Perfekt, jetzt funktioniert es :D

Danke dir

Antworten

Zurück zu „HomeMatic IP Aktoren und Sensoren“