Seite 39 von 40

Re: Anzahl offene Fenster

Verfasst: 23.04.2021, 13:02
von Baxxy
Avatar2102 hat geschrieben:
21.04.2021, 15:49
Hallo zusammen,
Hallo zurück...

Vorab:
Deinen Scriptausschnitt zu sehen ist zwar hilfreich, aber trotzdem relativ nutzlos da nicht ersichtlich ist in welches "Gesamtscript" er gehört.
Muss man als "Hilfswilliger" erstmal den gesamten Thread durchstöbern um das (hoffentlich) richtige Originalscript zu finden ist das nicht gerade motivationsfördernd. Für die Zukunft also bitte wenigstens auf das "Originalscript" verlinken.

Zum Problem:
Ich gehe jetzt von folgendem Alchy - Script aus...

Code: Alles auswählen

! alle Fenstersensoren / HMW-Sen-SC-12-DR / Winmatic / Keymatic / Funk-Neigungssensor in einem bestimmten Gewerk/ Favoriten u.a. durchsuchen
! und Ausgabe in Variable oder per pushover, telegram oder per Mail oder Ansage Home24 Mediaplayer
! v1.42 (c) by Alchy
! https://homematic-forum.de/forum/viewtopic.php?f=26&t=25517&p=301186#p301186
Avatar2102 hat geschrieben:
21.04.2021, 15:49
Ich verstehe hier nicht, warum der Status vom DLD (1 = zu) korrekt erfasst wird,
Das hast du doch in deinem Scriptabschnitt so zugewiesen.
Avatar2102 hat geschrieben:
21.04.2021, 15:49
der DLD aber trotzdem mitgezählt und aufgelistet wird?
So wie ich das sehe zählt das Script alle abgefragten Geräte die ungleich "0" zurückliefern als "OFFEN".
Das ist bei deinem HmIP-DLD ein Problem denn der sendet ja (so deine Deklarationen stimmen) die "1" wenn der Status GESCHLOSSEN ist.
(1 ist ungleich 0 und somit wird der HmIP-DLD auch im GESCHLOSSENEN Zustand als OFFEN gezählt.)

Workaround:
Ich würde den zurückgegebenen Status des HmIP-DLD im Script manipulieren.
(ungetestet da kein HmIP-DLD verfügbar)

Code: Alles auswählen

if ( ( devType == "HmIP-DLD") && ( chType == "DOOR_LOCK_STATE_TRANSMITTER")  ) { choice = true; var status = ch.DPByHssDP("LOCK_STATE").Value() -1;
if (status == -1 ) { status_new = " unbekannt "; }
if (status == 0 ) { status_new = " zu "; }
if (status == 1 ) { status_new = " offen "; }
}
Hiermit wird aber der HmIP-DLD auch als OFFEN angezeigt wenn dessen Status UNBEKANNT ist.

Re: Anzahl offene Fenster

Verfasst: 24.04.2021, 07:48
von Avatar2102
Hallo Baxxy,

zuerst mal vielen lieben Dank an Dich, dass Du Dich meinem Problem angenommen hast.
Deinen Scriptausschnitt zu sehen ist zwar hilfreich, aber trotzdem relativ nutzlos da nicht ersichtlich ist in welches "Gesamtscript" er gehört.
Sorry, ich ging davon aus, dass es hier grundsätzlich um Alchy´s Script geht. In Zukunft werde Deinen Ratschlag jedoch beherzigen und immer aufs Script verweisen, welches meine Grundlage war.
So wie ich das sehe zählt das Script alle abgefragten Geräte die ungleich "0" zurückliefern als "OFFEN".
Offensichtlich reichten meine Skills nicht aus, um das zu erfassen. Daher hatte ich auch nicht verstanden, warum der DLD weiter gelistet wird, obwohl doch der Zustand korrekt als "ZU" erkannt wurde (ja ja, aber der Status war "1" und nicht "0"). Hätte ich den DLD nur mit der Hand bewegt (Status unbekannt = "0") und dann das Script getestet, hätte es mir auffallen können.
Workaround
Natürlich funktioniert nach dieser Erkenntnis Dein vorgeschlagener Workaround einwandfrei, der mir persönlich vollkommen reicht.
Daher an dieser Stelle vielen Dank für Deine Mühe, die Erläuterung und den Script-Vorschlag.
LG

Re: Anzahl offene Fenster

Verfasst: 24.04.2021, 09:41
von Baxxy
Schön das es funktioniert! :)
Durch Deine Vorlage war das Problemchen recht leicht zu finden.
Avatar2102 hat geschrieben:
24.04.2021, 07:48
Offensichtlich reichten meine Skills nicht aus, um das zu erfassen.
Mach Dir nichts draus, das ging mir Anfangs auch oft so.

Ich versuche es mal zu erklären:

Hier...

Code: Alles auswählen

if (ONLYOPEN == "yes")  {
    if (status) { ... }
    } else { ... } 
Das erste if sollte selbsterklärend sein.
Das zweite if prüft die Scriptvariable "status" auf Plausibilität. Alles was plausibel ist (ungleich "0") wird gelistet.
Zur leichteren Verständlichkeit könnte man das zweite if ind diesem Script auch wie folgt schreiben:

Code: Alles auswählen

if (status <> 0) { ... }
Hoffe das war einigermaßen korrekt beschrieben und verständlich. :wink:

Grüße
Baxxy

Re: Anzahl offene Fenster

Verfasst: 21.03.2023, 16:37
von 411er
Hallo Zusammen,

ich nutze das Alchy Script
! alle Fenstersensoren / HMW-Sen-SC-12-DR / Winmatic / Keymatic / Funk-Neigungssensor in einem bestimmten Gewerk/ Favoriten u.a. durchsuchen
! und Ausgabe in Variable oder per pushover, telegram oder per Mail oder Ansage Home24 Mediaplayer
! v1.42 (c) by Alchy
! viewtopic.php?f=26&t=25517&p=301186#p301186
und würde gerne einzelne Sensoren ausschließen. Ich habe scheinbar nicht richtig durchdrungen, wie hierbei durchsucht wird. Denn er wirft mir einen Türkontakt aus, zu den Fensterkontakten. Das stört dann doch in der Übersicht.

Ich habe die Reed Kontakte auf dem DRI32, also das Script um
if ( ( devType == "HmIPW-DRI32") ) { choice = true; var status = ch.DPByHssDP("STATE").Value();
if (status == 0 ) { status_new = " zu ";}
if (status == 1 ) { status_new = " offen "; }
erweitert.

Was kann ich nun tun, damit ich Türkontakte hierbei bei der Suche ausschließe?

Besten Dank!

Re: Anzahl offene Fenster

Verfasst: 22.03.2023, 17:44
von alchy
411er hat geschrieben:
21.03.2023, 16:37
und würde gerne einzelne Sensoren ausschließen. Ich habe scheinbar nicht richtig durchdrungen, wie hierbei durchsucht wird. Denn er wirft mir einen Türkontakt aus, zu den Fensterkontakten.
Das Script bearbeitet die Sensoren, welche du in eines dieser "Gruppen" , (Räumme, Favoriten, Gewerke) steckst.
Entfernst du also den Türkontakt aus der angegebenen "Gruppe" wird er auch nicht ausgegeben. :shock: :shock:

Alchy

Re: Anzahl offene Fenster

Verfasst: 23.03.2023, 11:32
von 411er
alchy hat geschrieben:
22.03.2023, 17:44
411er hat geschrieben:
21.03.2023, 16:37
und würde gerne einzelne Sensoren ausschließen. Ich habe scheinbar nicht richtig durchdrungen, wie hierbei durchsucht wird. Denn er wirft mir einen Türkontakt aus, zu den Fensterkontakten.
Das Script bearbeitet die Sensoren, welche du in eines dieser "Gruppen" , (Räumme, Favoriten, Gewerke) steckst.
Entfernst du also den Türkontakt aus der angegebenen "Gruppe" wird er auch nicht ausgegeben. :shock: :shock:

Alchy
Hallo Alchy,

danke!
Oh man :roll: direkt die gefühlt erste Zeile im Script überlesen (hatte das vor einiger Zeit angefangen und schon wieder alles vergessen).
Danke für die Antwort und entschuldige die "blöde" Frage :oops:

Re: Anzahl offene Fenster

Verfasst: 23.03.2023, 19:14
von alchy
Es gibt keine blöden Fragen :wink: kann ja mal passieren das man was überliest

Alchy

Re: Anzahl offene Fenster

Verfasst: 25.10.2023, 15:05
von ingranu
Hallo zusammen

Seit Jahren benutze Ich dieses wunderbare Script welches sehr gut funktioniert.
Nun habe ich einen neuen Fenster Sensor gekauft, Typ: HmIP-SWDM-2

Kann man diese in das Script aufnehmen, so dass diese auch erkannt werden?

Code: Alles auswählen

    ! alle Fenstersensoren und HMW-Sen-SC-12-DR in einem bestimmten Gewerk/ Favoriten u.a. durchsuchen
    ! und Ausgabe in Variable oder per pushover oder per Mail oder Ansage Home24 Mediaplayer
    ! v1.35 (c) by Alchy
    ! https://homematic-forum.de/forum/viewtopic.php?f=26&t=25517&start=60#p301186


Re: Anzahl offene Fenster

Verfasst: 30.10.2023, 15:49
von ingranu
Keine Unterstützung ?

Re: Anzahl offene Fenster

Verfasst: 01.11.2023, 21:25
von alchy
Das sind doch Fensterkontakte - da bin ich doch mal gespannt, was sich EQ-3 da wieder Lustiges ausgedacht hat.
Ich habe diese Geräte nicht und suche mir das auch nicht zusammen.

Script ausführen unter Script testen, im Script Executer oder sonst etwas was dafür möglich ist.

ABER

Statt GERÄTENAME in der ersten Zeile, trägst du den GERÄTENAMEN eines deiner HmIP-SWDM-2 ein.
StatusundBedienung_gerät4.jpg

Code: Alles auswählen

!Kanäle und Datenpunkte eines Gerätes ausgeben
object oDevice = dom.GetObject("GERÄTENAME");
string sDevId;string sChnId;string sDPId;
WriteLine("Gerät \t Kanal \t Datenpunkt\n");



          WriteLine(oDevice.Name()#"\t" #oDevice.Address() #"\t"#oDevice.HssType() );
          foreach(sChnId, oDevice.Channels())
          {
            object oChannel = dom.GetObject(sChnId);
            WriteLine("\t" # oChannel.Name() # "\t" # oChannel.HssType());
            foreach(sDPId, oChannel.DPs().EnumUsedIDs())
            {
               object oDP = dom.GetObject(sDPId);
               string sName = oDP.Name();
               WriteLine("\t\t"#sName# "\t" #" Wert: "#oDP.Value());
            }
            WriteLine("");
           }
Alchy