Hi,
ich möchte mich bei euren Stichelein nicht einmischen - halte sie bei Foren aber generell für unangebracht.
Die Frage ist ziemlich konkret: Gibt es etwas gleichwertiges wie den Datenpunkt SUBMIT bei HomemMatic für den neuen Homematic IP Kombisignalgeber HMIP-MP3P.
Ich weiß nicht ob das 2019 bereits der Fall war, aber mittlerweile gibt es das - ich habe es im Einsatz und es funktioniert. Und nebenbei hatte ich genau dieselbe Frage und bin deshalb auf diesen und einige (wenige) andere Threads gestoßen.
Kurze Erklärung zunächst: bei HMIP ist es in der Regel so, dass es nach meinem Amateur-Verständnis für jeden "Kanal" eigentlich 4 Kanäle gibt:
1. Status-Kanal (HmIP-RF.00151DXXXXXXXX:1.***)
2. Virtueller Kanal 1 (HmIP-RF.00151DXXXXXXXX:2.***)
3. Virtueller Kanal 2 (HmIP-RF.00151DXXXXXXXX:3.***)
4. Virtueller Kanal 3 (HmIP-RF.00151DXXXXXXXX:4.***)
Dieselben 4 Kanäle gibt es dann noch für die eingebauten LEDs (Kanäle XXX:5, ..., XXX:8). Kanal 9 ist das Wochenprogramm und Kanal 0 für die Konfiguration.
Virtueller Kanal hat hier nichts mit den virtuellen Kanälen der CCU zu tun. Man könnte sie auch als logische Kanäle bezeichnen - den genauen Begriff kenne ich leider nicht. Mit ihnen ist es möglich auch nur über Direktverbindungen eine Art Programmlogik zu realisieren. Bei manchen Produkten (wie Dimmer oder RGB-Module) ist das sinnvoller als bei anderen (wie z.B. hier dem MP3 Modul). Genauer will ich hier nicht darauf eingehen.
Erste Versuche von mir gingen auf Kanal XXX:1 also den (ich nenne ihn) "Status" Kanal. Das ist naheliegend, denn wenn man sich die Datenpunkte anschaut, sehen diese vielversprechend aus. Vermutlich geht das aber garnicht, da Status eher lesend ist - habe nicht weiter probiert.
Statt also den Status-Kanal zu nehmen nehme ich einen der drei logischen Kanäle - der einfachheithalber hier (und meistens) den ersten.
Erstellt man zum Beispiel in der CCU ein einfaches Programm (ohne Skript) und wählt als Gerät das HMIP-MP3P aus, so kann man einen dieser 3 log. Kanäle auswählen - bei MP3-Modul macht wie gesagt nur einer - also der erste - wirklich Sinn. Achtung: nicht mit den Kanälen für die LED verwechseln. Aber wer das mit dem MP3-Kanälen verstanden hat, kann analog auch die LED im Script ansprechen.
Im Programm bekommt man für den ausgewählten Kanal dann mehrere Parameter zum Einstellen (ich nenne das mal hier nicht Datenpunkte): z.B. EINHEIT***, LAUTSTÄRKE, ... . Und eben auch den Parameter WIEDERGABELISTE oder KANALAKTIVITÄT.
Hmm, fast geschaft. Wählt man den Parameter WIEDERGABELISTE aus, stehen da komische Kürzel wie L=100,DU=2,... - alles Banane. Man kann draufklicken und die Parameter ändern. Dann bekommt man ein Gefühl wie sich der entsprechende String ändert. Die Bedeutung des Strings wird im Forum an anderen Stellen auch erklärt. Nur kurz
L = Level (Lautstärke = wichtig, 100 = 100%), DU = Duration Unit (egal), DV = Duration Value (egal), RTU = Ramp Time Unit (egal), RTV = Ramp Time Value (egal), R = REPETITIONS (interessant) UUNNDD Tada SL = Soundfile List. Woher ich das weiß? Schaut euch mal die Datenpunkte von Kanal 2 (MP3 log. Kanal 1) an - bzw. der Fragende hat sie auch schon gelistet!
var lo = dom.GetObject("MEIN_KOMBISIGNALGEBER:PLAYER-CHANNEL_1");
string lv_dp;
foreach (lv_dp, lo.DPs()) {
WriteLine(dom.GetObject(lv_dp).Name());
}
WriteLine("Hallo Welt!");
MEIN_KOMBISIGNALGEBER:PLAYER-CHANNEL_1 = HmIP-RF.00151DXXXXXXXX:2
Ein Datenpunkt sticht hervor: COMBINED_PARAMETER
Dort kann man die oben (auswendig) gelernten Parameter als Zeichenkette übergeben:
var lr_channel = dom.GetObject("MEIN_KOMBISIGNALGEBER:PLAYER-CHANNEL_1");
lr_channel.DPByHssDP("COMBINED_PARAMETER").State( "L=60,DU=2,DV=31,RTV=0,R=0,SL=001;002;003" );
WriteLine("Hallo Welt!");
Achtung: mehrere Soundfiles müssen durch Semikolon getrennt sein.
/* Update:
Folgendes Problem wurde mit CCU FW Version 3.61.6 behoben:
ACHTUNG: CCU FW Version 3.61.5 hat ein Problem mit dem Semikolon. Einen Ersatz (= alternatives Trennzeichen) gibt es nicht. Mehrere MP3-Files am Stück abzuspielen geht überhaupt nicht. eQ-3 konnte das Problem nachstellen und verspricht Abhilfe. Wem das wichtig ist (wie mir
) der sollte mit dem Update warten, bis eine gefixte Firmware verfügbar ist (für mich leider zu spät - Downgrade mach ich nicht). Ich versuche dran zu denken diesen Beitrag upzudaten, wenn eine gefixte Version verfügbar ist.
*/
Wer das alles Verstanden hat, kann sich an die LED ranmachen.
Herrausforderung: auch die anderen beiden logischen Kanäle (von den 4 LED-Kanälen) benutzen und setzen.
Das ist z.B. sinnvoll, wenn man den Alarmzustand immer rot markieren will (z.B. Nachts wenn der Alarm aktiv ist) und unabhängig (von dem Wissen über den Alarm) den Zustand der Fenster signalisieren will, z.B. in Blau.
Ist z.B. tagsüber ein Fenster offen, leuchtet es blau. Sind nachts alle Fenster zu, leuchtet es rot. Ist nachts ein Fenster offen (und eben der Alarm an) leuchtet es rot und blau also Violett.
Für die Farbe des Alarms verwendet man also den log. Kanal 1 und setzt ihn rot oder aus - abhängig vom Arm-State.
Für die Farbe der Fenster verwendet man den log. Kanal 2 und setzt ihn blau oder aus - abhängig davon ob ein Fenster geöffnet ist.
Trifft beides zu gilt als Gesamtstatus der LED des Kombisignalgebers log. Kanal 1 + log. Kanal 2 (+ log. Kanal 3) = Violett.
Die Ingenieure haben einem aber (positiv formuliert) noch mehr Freiheitsgrade gelassen: man kann eine Farbe setzen das DIM-Level angeben und die LED ein oder ausschalten (WTF?).
So kann es also passieren, dass log. Kanal 1 aus ist, aber die Farbe noch auf rot gesetzt ist und wenn dann ein Fenster aufgeht und log. Kanal 2 auf blau schaltet, leuchtet als resultierende trotzdem Violett.
Ganz geblickt habe ich das auch noch nicht - aber das ist eine ganz andere Geschichte ...
Viel Spaß
Update: mitlerweile habe ich das mit den Farben auch "verstanden" (will sagen: ich kann damit umgehen)
Um die LED auszuschalten muss man für den verwendeten log. Kanal bei COMBINED_PARAMETER folgenden String setzen:
var lr_channel = dom.GetObject("MEIN_KOMBISIGNALGEBER:LED-CHANNEL_1");
lr_channel.DPByHssDP("COMBINED_PARAMETER").State( "L=0,DV=31,DU=2,RTV=0,RTU=1,C=0" );
Hat man bei mehreren log. Kanälen eine Farbe gesetzt, muss man natürlich für alle gesetzten Kanäle die Farbe auf "Aus" stellen, wenn man möchte, dass die LED komplett aus ist:
var lr_channel = dom.GetObject("MEIN_KOMBISIGNALGEBER:LED-CHANNEL_2");
lr_channel.DPByHssDP("COMBINED_PARAMETER").State( "L=0,DV=31,DU=2,RTV=0,RTU=1,C=0" );
var lr_channel = dom.GetObject("MEIN_KOMBISIGNALGEBER:LED-CHANNEL_3");
lr_channel.DPByHssDP("COMBINED_PARAMETER").State( "L=0,DV=31,DU=2,RTV=0,RTU=1,C=0" );
Zum Setzen der Farbe eines log. Kanals kann man zum Beispiel folgenden String setzen:
var lr_channel = dom.GetObject("MEIN_KOMBISIGNALGEBER:LED-CHANNEL_1");
lr_channel.DPByHssDP("COMBINED_PARAMETER").State( "L=10,DV=31,DU=2,RTV=0,RTU=1,C=4" ); ! rot (10%) = Alarm Aktiv
bzw.
var lr_channel = dom.GetObject("MEIN_KOMBISIGNALGEBER:LED-CHANNEL_2");
lr_channel.DPByHssDP("COMBINED_PARAMETER").State( "L=10,DV=31,DU=2,RTV=0,RTU=1,C=1" ); ! blau ( 10%) = Fenster offen
Setzt man beide Kanäle => ist die Resultierende violett
Der Vorteil ist hier, dass man für "Fenster offen" und "Alarm aktiv" zwei völlig unabhängige Skripte benutzen kann. Da nachts oder wenn man weg ist meist zwar der Alarm an, aber die Fenster zu* sind => Kanal 1 = Gesamt = rot. Tagsüber dagegen ist der Alarm aus und aber die Fenster könnten geöffnet sein => Kanal 2 = Gesamt = blau.
* .. gekippte Fenster werden bei der wetterabgewandten Seite im Sommer nicht als offen dargestellt (also blaue LED bleibt aus).
Der Zustand Fenster offen + Alarm aktiv = Violett ist deshalb eher selten - man darf sich dann aber nicht wundern.
Den dritten Kanal benutze ich noch für die Klingel. Hat einer geklingelt, leuchtet die LED noch 5 Minuten lang gelb. Durch Überlagerung mit Kanal 1 und Kanal 2 kommen dann ggf. natürlich noch weitere Mischfarben dazu, die man wissen muss.
Natürlich könnte man auch alles in ein großes Skript packen und nur den Kanal 1 verwenden und für jeden Sachverhalt eine dedizierte Farbe verwenden. Das ist Geschmackssache!
Abschließend noch ein Tipp zum (Aus-)schalten der LED in der CCU ohne Skript. Da muss man bei der Auswahl des Parameters "Kanalaktion" im Wizzard sowohl die Helligkeit auf 0 als auch die Farbe auf "Aus" stellen und in der Regel die Einschaltdauer nicht begrenzen. Übrigends kommt man dann auf genau den String von oben:
"L=0,DV=31,DU=2,RTV=0,RTU=1,C=0"
Will man auf die kryptischen Zeichen ganz verzichten, kann man auch mehrere Aktivitäten in Reihe setzen:
Beispiel:
--> MEIN_KOMBISIGNALGEBER:LED-CHANNEL_1 - Sofort - Blau
--> MEIN_KOMBISIGNALGEBER:LED-CHANNEL_1 - Sofort - Einheit Zeitdauer: Stunden
--> MEIN_KOMBISIGNALGEBER:LED-CHANNEL_1 - Sofort - Wert Zeitdauer: 1
--> MEIN_KOMBISIGNALGEBER:LED-CHANNEL_1 - Sofort - Wert: 50 (= Level: 50%)
=> das Ergebnis ist, dass die LED (genaugenommen der 1. log. Kanal) für eine Stunde lang blau leuchtet.
Zum Ausschalten:
--> MEIN_KOMBISIGNALGEBER:LED-CHANNEL_1 - Sofort - Farbe Aus
--> MEIN_KOMBISIGNALGEBER:LED-CHANNEL_1 - Sofort - Wert: 0 (= Level: 0%)
(eventuell noch die Einschaltzeit? - habe ich nicht getestet)
Aber wer den Beitrag tatsächlich bis hier unten gelesen hat, hätte das vermutlich bereits gewusst
Ist ja bei vielen anderen Geräten genauso - insbesondere, wenn man die Einschaltzeit verwendet.