Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

CCUCCU
Beiträge: 128
Registriert: 24.02.2014, 17:51
Danksagung erhalten: 1 Mal

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von CCUCCU » 10.11.2014, 22:06

Naja, was soll ich ein Screenshot Posten wenn es doch eine PDF gibt.
Wie gesagt, ich habe mich an die Anleitung gehalten, aber die LED-Anzeige macht keinen mucks...

Dachte eher das in der Anleitung etwas fehlt, diese also unvollständig ist...?

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von Homoran » 10.11.2014, 22:09

CCUCCU hat geschrieben:Naja, was soll ich ein Screenshot Posten wenn es doch eine PDF gibt.
...
Oh, es gibt viele pdf!!

und da kann man sich viel bei vertippen


Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

CCUCCU
Beiträge: 128
Registriert: 24.02.2014, 17:51
Danksagung erhalten: 1 Mal

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von CCUCCU » 10.11.2014, 22:13

Komm mir etwas veräppelt vor, ich rede natürlich von der PDF hier im Post auf der ersten Seite.

Daimler
Beiträge: 9115
Registriert: 17.11.2012, 10:47
System: Alternative CCU (auf Basis OCCU)
Wohnort: Köln
Hat sich bedankt: 37 Mal
Danksagung erhalten: 283 Mal

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von Daimler » 10.11.2014, 22:34

CCUCCU hat geschrieben:Komm mir etwas veräppelt vor,
buempi hat geschrieben:Aber ohne, dass du genauer dokumentierst (Screenshots)
Hi,
warum denkst Du, gibt es so wenige diesbez. Freds hier, die letztendlich fast alle auf dem gleichen (User-) Fehler beruhen :?:
Aber - wer nicht will.., der hat schon. :wink:
Gruß Günter

pivccx mit 3.xx in Produktiv und Testsystem mit HM-, HM-W, HMIP- und HMIP-W Geräten, HPCx Studio 4.1,
L-Gateways, RS-L-Gateways, HAP, Drap, FHZ200x, vereinzelt noch FS2x-Komponenten.
HM / HM-IP: Zur Zeit knapp 300 Komponenten mit ??? Kanälen .

Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

sissiwup
Beiträge: 325
Registriert: 10.03.2015, 10:54
Wohnort: Süd NDS
Hat sich bedankt: 3 Mal
Danksagung erhalten: 8 Mal

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von sissiwup » 20.03.2015, 21:08

Hallo,

schöne Anleitung,

zwei Fragen habe ich dazu:

Warum werden die Systemvariablen nicht den Kanälen zugeordnet? Dann würde sich doch das
ganze getue mit den den Ermitteln der zugehörigen Variablen zu den einzelnen Kanälen.

Warum wird hier eine Variable mit 1,2,3 verwendet und nicht eine Variable mit "rot,grün,aus"?
Bei mir funktioniert hierbei die Abfrage auf Variablenänderungen "auf Aktualisierung"
ohne Probleme.
MfG

Sissiwup

--------------------------------------------
CCu3,CCu2Gateway,RaspiGateway,LanGateway
--------------------------------------------

sissiwup
Beiträge: 325
Registriert: 10.03.2015, 10:54
Wohnort: Süd NDS
Hat sich bedankt: 3 Mal
Danksagung erhalten: 8 Mal

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von sissiwup » 20.03.2015, 21:57

Hallo,

ohne viel Programmieren habe ich folgende Lösung gebastelt:
(mal für einen Kanal realsiert)
Bildschirmfoto 2015-03-20 um 21.48.34.png
Die Systemvariable dazu:
Bildschirmfoto 2015-03-20 um 21.53.11.png
Um alle Werte bei Bedarf neu zu initalisieren würde ich dann ein Script nehmen, welches immer die einzelne Systemvariable abfragt und dann entsprechend die Anzeige setzt.
Vorteil, wenn man sich jetzt die Anzeige in de UI anzeigt:
Bildschirmfoto 2015-03-20 um 21.56.00.png
Dan sieht man auch gleich den Status.

Erweiterungsidee: Wenn eine Servicemeldung auftrifft, die das Gerät Anzeige betrifft, die Aktualiserung aller Kanäle an die Anzeige senden.
MfG

Sissiwup

--------------------------------------------
CCu3,CCu2Gateway,RaspiGateway,LanGateway
--------------------------------------------

Duseldim
Beiträge: 1
Registriert: 18.01.2016, 21:31

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von Duseldim » 19.01.2016, 15:43

Ich habe mich auch mal an einem Script für die LED16 Anzeige versucht.
Anforderungen:
- Es soll immer nur die LED geändert wird, deren zugeordnetes Objekt (Kanal, Systemvariable) geändert wurde
- möglichst wenig Funkverkehr
- schnell
- nach Reboot refresh
- Dynamische Anordnung der zugeordneten Objekte

Zuerst habe ich mir eine Systemvariable "REBOOT" angelegt (ehemals Anwesenheit), welche nach einem Neustart ihren Status wechsel, das ist in eigenen Beiträgen beschrieben.
Dann habe ich mir einen Favoriten angelegt und zu diesem die anzuzeigenden Objekte hinzugefügt, in der Reihenfolge, wie sie in der LED Anzeige angezeigt werden sollen.
Zusätzlich habe ich einen freien Taster definiert, welcher alle LEDs aktualisiert.
Notwendigerweise habe ich noch ein Programm angelegt, welches alle Objekte mit ODER verknüpft auf Änderung prüft und dann das Script unten aufruft.
Funktion des Scriptes: Das Script prüft, durch welchen Auslöser ($src$) es aufgerufen wurde und aktualisiert nur die zugeordnete LED. Wenn der Auslöser nicht im Favoriten definiert ist, passiert auch nichts. Ist der Auslöser der "Joker" oder "REBOOT", werden alle LEDs aktualisiert. Das Script muss sicher etwas auf Euer System angepasst werden, aber das Prinzip sollte als Anregung ausreichen :-)

Code: Alles auswählen

!Referenz auf Favoriten mit Statusobjekten
!Alle im Display anzuzeigenden Objekte in einen Favoriten
!aufnehmen, diese werden dann in der Reihenfolge angezeigt
var ref_Favorite = dom.GetObject("_name_des_Favoriten_"); 

!Referenz auf das 16-LED Display
var ref_d1 = dom.GetObject("_name_der_LED_Anzeige_");

!ID des Gerätes, welches immer alle LEDs alle aktualisieren soll
var joker_id = dom.GetObject("_name_des_joker_Tasters_").ID();
!ID der SysVar für den Reboot, damit nach Reboot alle LEDs aktualisiert werden
var reboot_id = dom.GetObject("_name_der_Systemvariable_für_REBOOT_").ID(); 

!ID des auslösenden Gerätes ermitteln
string src_id;
var ref_dp = dom.GetObject("$src$");
!Wenn $src$ gesetzt ist, Aufruf aus Programm, sonst ScriptTest
if (ref_dp)
{
  !Beim Typ 1089 steht die gesuchte ID in der ID, sonst im Channel, warum auch immer.
  if (ref_dp.Type()=="1089") {src_id = ref_dp.ID();} else {src_id = ref_dp.Channel();}
}
else {src_id = joker_id;}  

!Variablen
integer i = 0;
integer off = 0;
integer red = 1;
integer green = 2;
integer orange = 3;
integer led_farbe;

!Loop über Objekte im Favoriten
while (i<16)
{
  i = i + 1;
   
  !Objekt aus Favoriten ermitteln (Favoriten beginnen mit 0 zu zählen)
  var item = dom.GetObject(ref_Favorite.GetAt(i-1));
  if ((item.ID()==src_id) | (src_id==joker_id) | (src_id==reboot_id))
  {
    !Type des Eintrags im Favoriten ermitteln für Unterscheidung
    var itemTyp = item.TypeName();
      
    !Initial aus
    led_farbe = off;

    !Eintrag im Favorit ist ein Kanal
    if (itemTyp=="CHANNEL") 
    {
      var itemState = item.DPs().GetAt(0).State();
      var itemHssType = item.HssType();
      !HM-LC-Sw1PBU-FM
      if (itemHssType=="SWITCH")
      {
        if ((itemState==true)||(itemState==1)) {led_farbe=green;} else {led_farbe=off;}
      }
      !HM-Sec-WDS-2
      if (itemHssType=="WATERDETECTIONSENSOR")
      {
        if (itemState==0) {led_farbe=green;}
        if (itemState==1) {led_farbe=orange;}
        if (itemState==2) {led_farbe=red;}
      }
      !HM-Sec-SCo und HM-Sec-SC über CUx (Max Fensterkontakte)
      if (itemHssType=="SHUTTER_CONTACT")
      {
        if ((itemState==true)||(itemState==1)) {led_farbe=red;} else {led_farbe=green;}
      }
    }
    !Eintrag im Favorit ist eine Systemvariable
    if (itemTyp=="VARDP")
    {
      var itemValue =  item.Value();
      !Wie soll die Variable angezeigt werden? 
      !true als rot oder false als rot
      !In diesem Beispiel soll die Systemvariable "ANWESENHEIT" true=grün false=rot angezeigt werden
      !Alle anderen umgekehrt
      if (item.Name()=="ANWESENHEIT")
      {if (itemValue==true) {led_farbe=green;} else {led_farbe=red;}}
      else
      {if (itemValue==true) {led_farbe=red;} else {led_farbe=green;}}
    }
    !Eintrag im Favorit ist eine Systemvariable vom Typ Alarm
    if (itemTyp=="ALARMDP")
    {
      var itemValue =  item.Value();
      if (itemValue==true) {led_farbe=red;} else {led_farbe=off;}
    }
    
    !Farbe der LED setzen, die zum Aufrufer gehört
    ref_d1.Channels().GetAt(i).DPs().GetAt(1).State(led_farbe);
  }
} 
Viel Erfolgt, Duseldim.

Benutzeravatar
lemonbiter
Beiträge: 169
Registriert: 16.10.2016, 23:14
Hat sich bedankt: 9 Mal
Danksagung erhalten: 1 Mal

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von lemonbiter » 05.11.2016, 00:51

Ihr lieben,
ich bin halt ein DAU... anbei Screenshot, von dem was ich verstanden habe.... Es klappt nämlich leider nicht... Nimmt mich wer bitte an die Hand?

Und na klar, mit einem einfachen Programm je Statusleuchte komme ich klar... wenn Fenster a) offen dann zeig auf LED 15 rot, wenn Fenster a) geschlossen zeig grün etc...


Ich habe insgesamt 15 Fenster Drehkontakte HM-Sec-RHS
Das Display hängt am Eingang und soll für alle jeweils rot grün orange anzeigen und wenn mal der Strom weg war, dann will ich auf den Aktor klicken und die im System hinterlegten Zustände sollen abgerufen werden...
Ziel ist es mit möglichst wenigen Programmen alles darzustellen.... Und wo wir schon mal dabei sind, wie schaffe ich das mit möglichst wenigen Programmen überhaupt?
Das Einzige was scheinbar richtig läuft ist Erfassung Anzeige des Systemvariablen in der CCU ... siehe roter Kringel im ersten Screenshot

Hier die Codes zu den einzelnen Scripten:

Code: Alles auswählen

Script bei SetLedAnzeige Auto:
fyi: Ich habe bei [b]beiden [/b]Scripten die Ser.Nr. meiner Anzeige eingesetzt, zum Test mit und ohne Anführungszeichen.

var objSA; !auslösende Systemvariable
string vSaName; !Name der auslösenden Systemvariable
integer vSaStatus; !SystemVariablenstatus
string vKanal; !Kanal des zu setzenden Aktors
string SNAnz = abcmeineseriennummer; !Hier kommt die Seriennummer eurer
 !Statusanzeige rein
!welche Variable hat das Script ausgelöst?
objSA = dom.GetObject("$src$");
vSaName = objSA.Name().ToString(); !Name
vSaStatus = objSA.State().ToString(0.00); !Inhalt als String ohne
 !Nachkommastellen
!letzen beiden Stellen sind die Kanalnummer
vKanal = vSaName.Substr(vSaName.Length()-2,2 );
!Ziel Aktor:Kanal Status setzen
!ToInteger().ToString() eliminiert nur die evtl. führende 0
dom.GetObject("BidCos-RF."+ SNAnz +":"+ vKanal.ToInteger().ToString()
+".LED_STATUS").State(vSaStatus);

=====================

Script welches der Aktor auslöst, der die Anzeige re-triggert

Code: Alles auswählen

!LED16 Variablen SA01...SA16 auslesen und Anzeige(n) setzen
integer i = 0; !Schleifenzähler
string vSA; !Systemvariablenname
var objSA; !aktuelle Systemvariable
integer vSaStatus; !SystemVariablenstatus
string SNAnz = abcmeineseriennummer; !Die SN der Anzeige
while (i<16)
 {
 i = i + 1;
 !Formatierung aus 1..16 wird 01..016
 vSA = "0"+i.ToString();

 !Name der Systemvariable SA01...SA16
 vSA = "SA"+vSA.Substr(vSA.Length()-2,2 );

 objSA = dom.GetObject(vSA); !object der Systemvariable
 vSaStatus = objSA.State(); !aktueller Status

 !Anzeige-Kanal setzen
 dom.GetObject("BidCos-RF."+SNAnz +":"+i.ToString() +
".LED_STATUS").State(vSaStatus);
 }
Dateianhänge
systemvariable.png
Script für Re-trigger der Anzeige.png
Programm2.png
Angelegte Systemvariablen.png
Zuletzt geändert von Herbert_Testmann am 05.11.2016, 11:11, insgesamt 1-mal geändert.
Grund: Scripte in CODE verpackt
okay... ich arbeite dran

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von DrTob » 05.11.2016, 03:10

Du brauchst ein Programm pro Fenster. (+ die Programme zum aktualisieren der Anzeige)

Was funktioniert denn. Nicht?

Liefert die Fehlerprüfung des Scriptes irgendetwas? Ich vermute du gibst die Seriennummer falsch an.

Benutzeravatar
lemonbiter
Beiträge: 169
Registriert: 16.10.2016, 23:14
Hat sich bedankt: 9 Mal
Danksagung erhalten: 1 Mal

Re: Ansteuerung der Homematic Statusanzeige HM-OU-LED16

Beitrag von lemonbiter » 05.11.2016, 11:45

Lieber Dr. Tob,
also hier im Anhang ein Programm.
Es soll, wenn der Fensterkontakt auf verschlossen steht an der LED 16 grün anzeigen. Geht wunderbar.

1. Frage: Wenn ich nun das Display stromlos mache und wieder mit Strom versorge, dann soll der Druck auf den Taster den Systemzustand auslesen. (siehe Screenshot: "Script für Re-trigger der Anzeige.png" aus dem Post zuvor) Geht nicht.
2. Frage: Muss ich für jede LED des Displays 3 Programme schreiben = 16x3 Programme? (eins für jeweils verschlossen = grün, eins für gekippt = orange, eins für offen = rot)? Wenn nein, wie geht es mit weniger?
3. Frage: Behält die CCU2 die Werte der Systemvariablen auch nach einem Reboot?

Uff...
Danke

p.s.: Vielleicht hat wer Screenshots, die es mir verständlich machen... habe hier, wie an so manchen Stellen einen dicken Pfeil im kopf (mea culpa)
okay... ich arbeite dran

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“