Seite 1 von 2

HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 12.09.2019, 15:01
von gab
Hallo zusammen,

wie kann man beim Homematic IP Gerät SWDO den Sabotagekontakt auslesen?
Bei normalen Homematic Geräten war es ja über .DPByHssDP("ERROR") möglich.
Ich habe keine Dokumentation dazu gefunden.

Danke!

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 12.09.2019, 16:29
von Matsch
Dazu gibt es doch die "Homematic IP Devices Technical Documentation". Steht auf Seite 8526:

SABOTAGE

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 12.09.2019, 16:34
von dondaik
sauber, endlich mal einer der die doku gelesen hat !

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 12.09.2019, 16:44
von gab
Danke für die Antwort, ich hatte nur eine alte Doku gefunden, in der dieser Punkt noch nicht aufgenommen war.
Wie kann ich jetzt den Wert auslesen wenn ich durch eine Liste von Gewerken iteriere?
Mit .DPByHssDP("SABOTAGE") scheint es nicht zu funktionieren.

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 12.09.2019, 16:55
von Matsch
Ich weiß ja nicht was und wie du das machst, aber ich kann den Datenpunkt genau so abfragen.

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 12.09.2019, 17:26
von gab
So sieht mein Skript aus:

Code: Alles auswählen

var sec = (dom.GetObject(ID_FUNCTIONS)).Get("funcLock");
string i;
string list;
list="";
foreach(i,sec.EnumUsedIDs())
   {
   var item=dom.GetObject(i);
   if(item.IsTypeOf(OT_CHANNEL))
      {
         var dev=dom.GetObject(item.Device());
         if ((dev.HssType()=="HMIP-SWDO") || (dev.HssType()=="HmIP-SWDO-I")) 
            {
            var state=item.DPByHssDP("SABOTAGE"); 
            if(state.Value())
               {
               list=list+dev.Name() + "\n";
               }
            }
      }
   }
WriteLine(list);

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 12.09.2019, 17:37
von Matsch
Ist der Gerätetyp nicht "HmIP-SWDO"? (Groß/Kleinschreibung)

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 12.09.2019, 21:34
von gab
Nein, das passt:
Unbenannt.png
Unbenannt.png (6.35 KiB) 1571 mal betrachtet

Hat sonst noch jemand eine Idee?

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 13.09.2019, 14:34
von Matsch
Dein Script setzt ja voraus, dass auch alle Kanäle 0 der Sensoren dem Gewerke "funcLock" zugeordnet sind, sind sie das?
Wenn nicht, kann er den Datenpunkt "SABOTAGE" nicht finden.

Ich habe dein (angepasstes) Script mal bei mir ausprobiert und es tauchte von 4 Sensoren nur einer auf. Ursache war, dass die Kanäle 0 der drei fehlenden Sensoren keinem Gewerke zugeordnet waren.

Sehe ich in die Liste "Geräte", steht da sehr wohl das richtige Gewerke für die Geräte drin, schaue ich in die Liste "Gewerke", dann stehen die 3 Geräte Kanal 0 eben nicht unter diesem Gewerke, ich kann sie auch nicht hinzufügen, die Kanäle 0 werden mir gar nicht angeboten.

Jetzt bin ich etwas überfragt, die einzige Besonderheit der Geräte ist, dass sie alle eine Direktverknüpfung mit einer Heizungsgruppe haben, der eine richtig erkannte Sensor aber nicht!

Re: HMIP-SWDO Sabotagekontakt auslesen

Verfasst: 13.09.2019, 23:14
von Matsch
Kann es sein, dass es ein Problem mit der CCU-Firmware gibt und es nicht möglich ist, die Kanäle 0 einem Gewerke zuzuweisen?
Damit würde dein Vorhaben, so wie es jetzt ist, generell nicht funktionieren.

Ich bin zugegeben nicht gerade ein Script-Profi, aber ich habe es mal versucht, in deinem Programm zwangsweise immer auf Kanal 0 zuzugreifen, auch wenn dieser nicht gelistet wird. Ich vermute, es gibt elegantere Lösungen, aber zumindest scheint es erstmal zu funktionieren.

Code: Alles auswählen

var sec = (dom.GetObject(ID_FUNCTIONS)).Get("Verschluss");
string i;
string list;
list="";
integer Device=0;

foreach(i,sec.EnumUsedIDs())
   {
   var item=dom.GetObject(i);
   if(item.IsTypeOf(OT_CHANNEL) && (Device!=item.Device()))
        ! Ausschluss doppelter Auflistung von Geräten
      {
        var dev=dom.GetObject(item.Device());
        Device = item.Device();   ! Geräte-ID speichern
         if ((dev.HssType()=="HMIP-SWDO") || (dev.HssType()=="HmIP-SWDO-I")) 
            {
            var state;
            ! Vom vorgefundenen Gerät immer Kanal 0 DP SABOTAGE abfragen
            string Kanal = item.Address();
            Kanal = (dom.GetObject(item.Interface())).Name() +"." + Kanal.Substr(0,Kanal.Length()-1) + "0.SABOTAGE";
            state=dom.GetObject(Kanal);
            if(state.Value())
               {
               list=list+dev.Name() + "\n";
               }
            }
      }
   }
WriteLine(list);