HmIPW-DRS8 / DRD3 / DRI32 - EIN/AUSgeschaltete Kanäle per Script auslesen und steuern (alle Lichter etc.)

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

nic_hmuser
Beiträge: 5
Registriert: 06.10.2020, 19:08
System: CCU

HmIPW-DRS8 / DRD3 / DRI32 - EIN/AUSgeschaltete Kanäle per Script auslesen und steuern (alle Lichter etc.)

Beitrag von nic_hmuser » 06.10.2020, 19:18

Hallo zusammen,

ich melde mich hier als Neuling im Forum, da ich an einer scheinbar einfachen Programmierung scheitere und bisher den Fehler leider nicht finde.
Mein Ziel ist, mit einem Tastendruck alle Lichter (Gewerk Licht) auszuschalten.

Ich habe dazu folgendes Skript im Einsatz und den Device-Typ angepasst:

Code: Alles auswählen

var i = dom.GetObject("Licht");

string itemID;

foreach(itemID, i.EnumUsedIDs()) 
{
    var item = dom.GetObject(itemID);
    WriteLine(item.Name()); 
    WriteLine(item.State());
    if (item.IsTypeOf(OT_CHANNEL)) 
    {
        var device = dom.GetObject(item.Device());
        if ((device.HssType().Find("HmIP-RF") >= 0) && (item.State())) { item.State(0); }
    }
}
WriteLine("Ende");
Beim Tastendruck und beim Ausführen des Skriptes passiert jedoch gar nichts.
Das "Skript testen" funktioniert m.E. nach und folgendes wird ausgegeben (gekürzt):

Code: Alles auswählen

HmIPW-DRD3 00169A498F60A5:10
0
HmIPW-DRD3 00169A498F60A5:2
0
HmIPW-DRD3 00169A498F60A5:6
0
HmIPW-DRS8 001618A99C5FC5:6
0
HmIPW-DRS8 001618A99C5FCA:10
0

Ende
Auf der CCU sieht es folgendermaßen aus:
Bildschirmfoto 2020-10-06 um 19.16.17.png
Habt ihr noch eine Idee an was es liegen könnte? Zum Test habe ich auch bereits ein neues Gewerk angelegt, hier hat es sich jedoch gleich verhalten.

Vielen Dank vorab und beste Grüße
Nic
Zuletzt geändert von nic_hmuser am 09.04.2021, 11:10, insgesamt 2-mal geändert.

chka
Beiträge: 2482
Registriert: 13.02.2012, 20:23
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 300 Mal
Danksagung erhalten: 116 Mal

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von chka » 06.10.2020, 19:43

habe mal ein wenig mit deinem script rumgespielt sauber laufen tut es nicht.

1. find müsste HMIP heißen so ist es zu mindestens bei mir
2. lasse ich folgendes script durchlaufen findet er nur die ausgeschalteten nicht aber die aktiven

Code: Alles auswählen

var i = dom.GetObject("Licht");

string itemID;

foreach(itemID, i.EnumUsedIDs()) 
{
var item = dom.GetObject(itemID);
   if (item.IsTypeOf(OT_CHANNEL)) 
    {
        var device = dom.GetObject(item.Device());
        if (device.HssType().Find("HMIP") >= 0) { 
        WriteLine(item.Name()); 
        WriteLine(item.State());
        WriteLine(device.HssType());

        !item.State(0); 
        }
    }  
}

}
WriteLine("Ende");
RaspberryMatic - CuL 868mHz- CuxDemon - PioTek Tracker - Velux mit KLF200 und Somfy Anbindung- io.Broker auf Proxmox NUC6I3SYH i3-6100U RAM: 40Gig Crucial 8GB DDR4 CT2K8G4SFS824A + 32GB DDR4CT32G4SFD8266

nic_hmuser
Beiträge: 5
Registriert: 06.10.2020, 19:08
System: CCU

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von nic_hmuser » 11.10.2020, 13:11

Danke für deine Antwort.
Ich gebe dir Recht, es werden die ausgeschalteten angezeigt und das bringt leider recht wenig :roll:

Im Netz finde ich etliche Skripte für "alle Lichter aus" und keins funktioniert bei mir aktuell - auch nach Anpassung des Devicetyps.
Kannst du denn bitte dein Skript hier reinposten wenn es bei dir funktioniert? Wäre wirklich super :)

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

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von Baxxy » 11.10.2020, 14:26

nic_hmuser hat geschrieben:
11.10.2020, 13:11
Kannst du denn bitte dein Skript hier reinposten
Ich bin zwar nicht chka aber ich hatte hier mal ein Script von Alchy für meine HmIP-Schaltaktoren angepasst. :wink:
Da ich kein IP-wired habe müsstest du mal schauen ob das Script grundsätzlich korrekt die EIN-geschalteten Aktorkanäle ausgibt. Einfach im "Script testen" auführen und schauen ob die Ausgabe passt. Geschalten wird erstmal nix. Es sind auch nur normale Schaltaktoren inkludiert. Bei IP-Dimmern müsste man nochmal anpassen.

Code: Alles auswählen

! https://homematic-forum.de/forum/viewtopic.php?f=19&t=26800&hilit=hsstype&start=40#p586432
! Alle Aktoren in wählbaren verschiedenen Räumen/Gewerken/Favoriten (trennen mit \t )
! Ausgabe der eingeschalteten Lichter
! (c)by Alchy; edited by Baxxy

string liste = "Schaltdosen";
! Dont touch behind this Line
string index;
string slist ="";
string list = "";
integer counter = 0;
foreach (index, liste) {
object sec = dom.GetObject(""#index#"");
string itemId;
foreach(itemId, sec.EnumUsedIDs()) {
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());
var hssType = item.HssType();
if ( ((hssType == "SWITCH") || (hssType == "SWITCH_VIRTUAL_RECEIVER")) && (item.DPByHssDP("STATE").Value())) {
counter = counter +1;
list = list #item.Name() #" | ";
!item.DPByHssDP("STATE").State(false);
}
if ( (hssType == "DIMMER") && (item.State()) ) {
counter = counter +1;
list = list #item.Name() #" | ";
}}}}
    if (counter > 0) {
    if (counter == 1) { slist = counter#" Aktorkanal ist an, der Kanal heißt: " #list ; }
    if (counter > 1) { slist = counter#" Aktorkanäle sind an, die Kanäle heißen: " #list; }
    } else{
    slist = "Kein Aktorkanal ist an";
}
!dom.GetObject("_Test").State(slist);
WriteLine(slist);

nic_hmuser
Beiträge: 5
Registriert: 06.10.2020, 19:08
System: CCU

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von nic_hmuser » 18.10.2020, 14:51

Hi Baxxy,

danke dir erstmal für dein Skript und die Mithilfe.
Leider funktioniert dein Skript (noch) nicht. Es wird bei "Skript testen" leider nichts ausgegeben.

Es läuft wie ich getestet habe bis zum Beginn der zweiten foreach-Schleife (getestet mit "WriteLine("Hallo Welt!");" zwischen den Zeilen).

Es muss doch schon mal jemand mit IP wired diese Funktion umgesetzt haben :roll: :lol:
Ich bin für weitere Hilfe sehr dankbar.

Grüße

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

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von Baxxy » 18.10.2020, 17:40

nic_hmuser hat geschrieben:
18.10.2020, 14:51
Ich bin für weitere Hilfe sehr dankbar.
Hmm... ohne eigene IP-Wired Geräte ist das nicht so einfach. Aber gut. Lassen wir doch mal eins von Alchys guten alten Scripten auf dein HmIPW-DRI32 los. Relevant sind dann nur die Kanäle mit denen das Licht geschalten wird.

Code: Alles auswählen

string auswahl = "KEQ0968370";
! +++++++++++++++++++
string index;
string liste = dom.GetObject(ID_DATAPOINTS).EnumUsedNames();
foreach (index, liste) {
var sserial = (index.StrValueByIndex(":",0).StrValueByIndex(".",1));
if (sserial == auswahl) {
Write(index #"\n");
}
}
Seriennummer anpassen und im "Script testen" ausführen.
Bin gespannt. :)

nic_hmuser
Beiträge: 5
Registriert: 06.10.2020, 19:08
System: CCU

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von nic_hmuser » 23.10.2020, 17:09

Danke Baxxy - wenn ich dieses Skript mit angepasster SN laufen lassen kommt bei mir folgendes in der Ausgabe:

Code: Alles auswählen

HmIP-RF.001718A9A7808D:0.ACTUAL_TEMPERATURE
HmIP-RF.001718A9A7808D:0.CONFIG_PENDING
HmIP-RF.001718A9A7808D:0.ERROR_CODE
HmIP-RF.001718A9A7808D:0.ERROR_OVERHEAT
HmIP-RF.001718A9A7808D:0.ERROR_UNDERVOLTAGE
HmIP-RF.001718A9A7808D:0.IDENTIFICATION_MODE_KEY_VISUAL
HmIP-RF.001718A9A7808D:0.IDENTIFICATION_MODE_LCD_BACKLIGHT
HmIP-RF.001718A9A7808D:0.IDENTIFY_DURATION
HmIP-RF.001718A9A7808D:0.IDENTIFY_TARGET_LEVEL
HmIP-RF.001718A9A7808D:0.OPERATING_VOLTAGE
HmIP-RF.001718A9A7808D:0.OPERATING_VOLTAGE_STATUS
HmIP-RF.001718A9A7808D:0.UNREACH
HmIP-RF.001718A9A7808D:0.UPDATE_PENDING
HmIP-RF.001718A9A7808D:1.PRESS_LONG
HmIP-RF.001718A9A7808D:1.PRESS_SHORT
HmIP-RF.001718A9A7808D:1.STATE
HmIP-RF.001718A9A7808D:2.PRESS_LONG
HmIP-RF.001718A9A7808D:2.PRESS_SHORT
HmIP-RF.001718A9A7808D:2.STATE
HmIP-RF.001718A9A7808D:3.PRESS_LONG
HmIP-RF.001718A9A7808D:3.PRESS_SHORT
HmIP-RF.001718A9A7808D:3.STATE
HmIP-RF.001718A9A7808D:4.PRESS_LONG
HmIP-RF.001718A9A7808D:4.PRESS_SHORT
HmIP-RF.001718A9A7808D:4.STATE
HmIP-RF.001718A9A7808D:5.PRESS_LONG
HmIP-RF.001718A9A7808D:5.PRESS_SHORT
HmIP-RF.001718A9A7808D:5.STATE
HmIP-RF.001718A9A7808D:6.PRESS_LONG
HmIP-RF.001718A9A7808D:6.PRESS_SHORT
HmIP-RF.001718A9A7808D:6.STATE
HmIP-RF.001718A9A7808D:7.PRESS_LONG
HmIP-RF.001718A9A7808D:7.PRESS_SHORT
HmIP-RF.001718A9A7808D:7.STATE
HmIP-RF.001718A9A7808D:8.PRESS_LONG
HmIP-RF.001718A9A7808D:8.PRESS_SHORT
HmIP-RF.001718A9A7808D:8.STATE
HmIP-RF.001718A9A7808D:9.PRESS_LONG
HmIP-RF.001718A9A7808D:9.PRESS_SHORT
HmIP-RF.001718A9A7808D:9.STATE
HmIP-RF.001718A9A7808D:10.PRESS_LONG
HmIP-RF.001718A9A7808D:10.PRESS_SHORT
HmIP-RF.001718A9A7808D:10.STATE
HmIP-RF.001718A9A7808D:11.PRESS_LONG
HmIP-RF.001718A9A7808D:11.PRESS_SHORT
HmIP-RF.001718A9A7808D:11.STATE
HmIP-RF.001718A9A7808D:12.PRESS_LONG
HmIP-RF.001718A9A7808D:12.PRESS_SHORT
HmIP-RF.001718A9A7808D:12.STATE
HmIP-RF.001718A9A7808D:13.PRESS_LONG
HmIP-RF.001718A9A7808D:13.PRESS_SHORT
HmIP-RF.001718A9A7808D:13.STATE
HmIP-RF.001718A9A7808D:14.PRESS_LONG
HmIP-RF.001718A9A7808D:14.PRESS_SHORT
HmIP-RF.001718A9A7808D:14.STATE
HmIP-RF.001718A9A7808D:15.PRESS_LONG
HmIP-RF.001718A9A7808D:15.PRESS_SHORT
HmIP-RF.001718A9A7808D:15.STATE
HmIP-RF.001718A9A7808D:16.PRESS_LONG
HmIP-RF.001718A9A7808D:16.PRESS_SHORT
HmIP-RF.001718A9A7808D:16.STATE
HmIP-RF.001718A9A7808D:17.PRESS_LONG
HmIP-RF.001718A9A7808D:17.PRESS_SHORT
HmIP-RF.001718A9A7808D:17.STATE
HmIP-RF.001718A9A7808D:18.PRESS_LONG
HmIP-RF.001718A9A7808D:18.PRESS_SHORT
HmIP-RF.001718A9A7808D:18.STATE
HmIP-RF.001718A9A7808D:19.PRESS_LONG
HmIP-RF.001718A9A7808D:19.PRESS_SHORT
HmIP-RF.001718A9A7808D:19.STATE
HmIP-RF.001718A9A7808D:20.PRESS_LONG
HmIP-RF.001718A9A7808D:20.PRESS_SHORT
HmIP-RF.001718A9A7808D:20.STATE
HmIP-RF.001718A9A7808D:21.PRESS_LONG
HmIP-RF.001718A9A7808D:21.PRESS_SHORT
HmIP-RF.001718A9A7808D:21.STATE
HmIP-RF.001718A9A7808D:22.PRESS_LONG
HmIP-RF.001718A9A7808D:22.PRESS_SHORT
HmIP-RF.001718A9A7808D:22.STATE
HmIP-RF.001718A9A7808D:23.PRESS_LONG
HmIP-RF.001718A9A7808D:23.PRESS_SHORT
HmIP-RF.001718A9A7808D:23.STATE
HmIP-RF.001718A9A7808D:24.PRESS_LONG
HmIP-RF.001718A9A7808D:24.PRESS_SHORT
HmIP-RF.001718A9A7808D:24.STATE
HmIP-RF.001718A9A7808D:25.PRESS_LONG
HmIP-RF.001718A9A7808D:25.PRESS_SHORT
HmIP-RF.001718A9A7808D:25.STATE
HmIP-RF.001718A9A7808D:26.PRESS_LONG
HmIP-RF.001718A9A7808D:26.PRESS_SHORT
HmIP-RF.001718A9A7808D:26.STATE
HmIP-RF.001718A9A7808D:27.PRESS_LONG
HmIP-RF.001718A9A7808D:27.PRESS_SHORT
HmIP-RF.001718A9A7808D:27.STATE
HmIP-RF.001718A9A7808D:28.PRESS_LONG
HmIP-RF.001718A9A7808D:28.PRESS_SHORT
HmIP-RF.001718A9A7808D:28.STATE
HmIP-RF.001718A9A7808D:29.PRESS_LONG
HmIP-RF.001718A9A7808D:29.PRESS_SHORT
HmIP-RF.001718A9A7808D:29.STATE
HmIP-RF.001718A9A7808D:30.PRESS_LONG
HmIP-RF.001718A9A7808D:30.PRESS_SHORT
HmIP-RF.001718A9A7808D:30.STATE
HmIP-RF.001718A9A7808D:31.PRESS_LONG
HmIP-RF.001718A9A7808D:31.PRESS_SHORT
HmIP-RF.001718A9A7808D:31.STATE
HmIP-RF.001718A9A7808D:32.PRESS_LONG
HmIP-RF.001718A9A7808D:32.PRESS_SHORT
HmIP-RF.001718A9A7808D:32.STATE
Ich denke damit können wir auch nicht weiterarbeiten oder? :|

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

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von Baxxy » 30.10.2020, 18:28

nic_hmuser hat geschrieben:
23.10.2020, 17:09
Ich denke damit können wir auch nicht weiterarbeiten oder?
Uups, das hier hatte ich ganz vergessen... und insgeheim gehofft das jemand mit Kenntnis des HmIP-Wired Systems das (ein) Script zurechtbiegt. :oops:
Wie auch immer... hier nochmal was zum testen.
Ersetze (aus meinem Script) diese Zeile...

Code: Alles auswählen

if ( ((hssType == "SWITCH") || (hssType == "SWITCH_VIRTUAL_RECEIVER")) && (item.DPByHssDP("STATE").Value())) {
mit dieser...

Code: Alles auswählen

if ( ((hssType == "SWITCH") || (hssType == "SWITCH_VIRTUAL_RECEIVER") || (hssType == "MULTI_MODE_INPUT_TRANSMITTER")) && (item.DPByHssDP("STATE").Value())) {
... und schaue ob was sinnvolles ausgegeben wird.

Irgendwie muss das doch gehen... :roll:

nic_hmuser
Beiträge: 5
Registriert: 06.10.2020, 19:08
System: CCU

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von nic_hmuser » 09.04.2021, 11:10

Ich muss dich leider wieder enttäuschen. Ich habe das Skript wie folgt angepasst, jedoch erhalte ich wieder keine Ausgabe bei Skript testen.

Code: Alles auswählen

! https://homematic-forum.de/forum/viewtopic.php?f=19&t=26800&hilit=hsstype&start=40#p586432
! Alle Aktoren in wählbaren verschiedenen Räumen/Gewerken/Favoriten (trennen mit \t )
! Ausgabe der eingeschalteten Lichter
! (c)by Alchy; edited by Baxxy

string liste = "Schaltdosen";
! Dont touch behind this Line
string index;
string slist ="";
string list = "";
integer counter = 0;
foreach (index, liste) {
object sec = dom.GetObject(""#index#"");
string itemId;
foreach(itemId, sec.EnumUsedIDs()) {
var item = dom.GetObject(itemId);
if (item.IsTypeOf(OT_CHANNEL)) {
var device = dom.GetObject(item.Device());
var hssType = item.HssType();
if ( ((hssType == "SWITCH") || (hssType == "SWITCH_VIRTUAL_RECEIVER") || (hssType == "MULTI_MODE_INPUT_TRANSMITTER")) && (item.DPByHssDP("STATE").Value())) {
counter = counter +1;
list = list #item.Name() #" | ";
!item.DPByHssDP("STATE").State(false);
}
if ( (hssType == "DIMMER") && (item.State()) ) {
counter = counter +1;
list = list #item.Name() #" | ";
}}}}
    if (counter > 0) {
    if (counter == 1) { slist = counter#" Aktorkanal ist an, der Kanal heißt: " #list ; }
    if (counter > 1) { slist = counter#" Aktorkanäle sind an, die Kanäle heißen: " #list; }
    } else{
    slist = "Kein Aktorkanal ist an";
}
!dom.GetObject("_Test").State(slist);
WriteLine(slist);
Ich dachte über das Gewerk "Licht" alle auszuschalten wäre eine der schnellsten Optionen, aber dem ist wohl nicht so.
Sorry für die Aufwände. Noch eine Idee? Natürlich auch andere Mitglieder :)

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

Re: CCU3 RaspberryMatic: Programm funktioniert nicht - IP wired

Beitrag von Xel66 » 09.04.2021, 18:24

nic_hmuser hat geschrieben:
09.04.2021, 11:10
...über das Gewerk "Licht" alle auszuschalten wäre eine der schnellsten Optionen, ...
Wie "schnellste Option"? Ohne selbst sich Mühe zu machen, schnell mal ein Script auf die CCU geschoben und alles ist in Butter? Kann funktionieren, muss aber nicht. Nachteil solchen Vorgehens: der Anwender hat nicht verstanden, wie das funktioniert und wird daher beim ersten auftretenden Problem vor schier unüberwindbare Hindernisse gestellt.

Ich mache übrigens ähnliches mit einem ganz normalen Programm und einer virtuellen Taste. Das Programm startet sich immer wieder selbst, bis alle enthaltenen Leuchtmittel ausgeschaltet sind. Ist zwar eine einmalige Klickorgie, allerdings funktioniert das auch geräte- und protokollübergreifend. Alles was per WebUI/Programm abgefragt und gesteuert werden kann, kann auch ausgeschaltet werden. Man vergibt einfach einer der virtuellen Tasten einen aussagekräftigen Namen (z.B. "alle Lichter aus") und dann erstellt man ein Progamm nach dem Format...

Code: Alles auswählen

Bedingung: Wenn...
     Geräteauswahl alle Lichter aus bei Tastendruck kurz
UND
     Geräteauswahl Schrankwandbeleuchtung bei Schaltzustand: ein nur prüfen
Aktivität: Dann...Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
     Geräteauswahl Schrankwandbeleuchtung sofort Schaltzustand: aus
     Geräteauswahl alle Lichter aus verzögert um 2 Sekunden Tastendruck kurz

Bedingung: Sonst, wenn...
     Geräteauswahl alle Lichter aus bei Tastendruck kurz
UND
     Geräteauswahl Regalbeleuchtung bei Schaltzustand: ein nur prüfen
Aktivität: Dann...Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
     Geräteauswahl Regalbeleuchtung sofort Schaltzustand: aus
     Geräteauswahl alle Lichter aus verzögert um 2 Sekunden Tastendruck kurz

Bedingung: Sonst, wenn...
     Geräteauswahl alle Lichter aus bei Tastendruck kurz
UND
     Geräteauswahl Dimmer Deckenfluter bei Dimmwert im Wertebereich / mit Wert größer als 1.00 % nur prüfen
Aktivität: Dann...Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
     Geräteauswahl Dimmer Deckenfluter sofort Dimmwert auf 0.00%
Die zwei Sekunden Verzögerung des Tastendrucks sind nicht wichtig. Wichtig ist allerdings, dass das letzte SONST WENN im DANN nicht mehr den Tastendruck enthalten darf, denn sonst baut man sich eine Schleife, aus der man nicht mehr rauskommt, selbst wenn alle Lichter aus sind. Dieses Programm ist funktionell an Einfachheit kaum zu übertreffen und solle eigentlich kein Problem darstellen.

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

Antworten

Zurück zu „RaspberryMatic“