Willkommen auf unserer neuen Forenplattform für das Bus-Profi Forum

Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.

Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.

Statusüberwachung von Gruppen

OpenHAB

Themenersteller
harteknut
Fingerwundschreiber
Fingerwundschreiber
Beiträge: 131
Registriert: Mo 18. Apr 2011, 22:58

#1 Statusüberwachung von Gruppen

Beitragvon harteknut » Mo 8. Feb 2016, 11:13

Hallo zusammen,

ich habe bei mir an der Tür ein GT4D, welches verschiedene Status anzeigt, z.B. ob auch alle Lichter aus sind.
Da ich mehr als zwölf Lichter habe und die LEDs eines Moduls daher nicht reichen, löse ich das aktuell über so eine LED-Kaskade in mehreren Modulen. Funktioniert hervorragend, ist aber absolut das Gegenteil von wartungsfreundlich oder übersichtlich.

Ich sehe mit openHAB eine Lösungsmöglichkeit, die ich folgendermaßen umsetzen wollte:
Meine Lampen habe ich alle in der (aktiven) Gruppe gLicht zusammengefasst:
Items:

Code: Alles auswählen

//Lichtgruppe
Group:Switch:OR(ON, OFF)          gLicht          "Licht [%d]"                      (All)

//Licht
Switch EG_Arbeit_Licht    "EG Arbeitszimmer"   (gLicht, gEG_Arbeit)    {lcn="[lcndemo:OUTPUT_STATUS.0.M010.2], [ON:lcndemo:ON.0.M010.2.0s],     [OFF:lcndemo:OFF.0.M010.2.0s]"}
Switch EG_KiZi_Licht    "EG Kinderzimmer"   (gLicht, gEG_KiZi)   {lcn="[lcndemo:OUTPUT_STATUS.0.M010.1], [ON:lcndemo:ON.0.M010.1.0s],     [OFF:lcndemo:OFF.0.M010.1.0s]"}
[...]
 

Sitemap:

Code: Alles auswählen

   Frame label="Uebersicht" {
      Group item=gLicht
   }

Das klapt schonmal sehr gut, ich sehe im Browser / der App genau, wie viele Lampen noch an sind und das Symbol ändert sich, sobald nix mehr an ist. (zentral-aus setze ich in einer anderen Funktion um. Hier gehts erstmal nur ums anzeigen.)
Jetzt möchte ich eine LED im Modul setzen, damit auch das GT4D was von dem Status mitbekommt, z.B. "ALLE Lampen AUS -> LED 3 in Modul 19 AUS / NICHT ALLE Lampen AUS -> LED 3 in Modul 19 AUS.

Das habe ich in mehreren Versionen über eine Rule probiert, bislang ohne Erfolg:

Code: Alles auswählen

import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*

rule "Lichtstatus prüfen"
   when
      Item gLicht received update
   then
         if (gLicht.members.filter(s | s.state > 0).size > 0)  {
            sendCommand (IND_Lichtstatus, OFF)
            }
         else {
            sendCommand (IND_Lichtstatus, ON)
         }
   end


Könnt Ihr mir helfen? Was mach ich denn falsch?

Das Item IND_Lichtstatus hab ich natürlich vorher in den Items angelegt:

Code: Alles auswählen

Switch IND_Lichtstatus                "LED Lichtstatus [%d]"                      {lcn="[lcndemo:LED_STATE.0.M019.3], [ON:lcndemo:LED.0.M019.3.ON],    [OFF:lcndemo:LED.0.M019.3.OFF]"}


Würde mich freuen, wenn Ihr mir helfen könnt!

Schöne Grüße,
Simon


Penrose
Fingerwundschreiber
Fingerwundschreiber
Beiträge: 139
Registriert: So 11. Nov 2012, 14:34

#2 RE: Statusüberwachung von Gruppen

Beitragvon Penrose » Mo 8. Feb 2016, 18:46

Hi,

hast du mal geprüft. ob die Regel überhaupt "greift"? Am einfachsten kannst du das mit einem Log-Eintrag am Anfang der Regel machen, z.B. mit

Code: Alles auswählen

logDebug("Rules", "Lichtstatus")


Thomas


Themenersteller
harteknut
Fingerwundschreiber
Fingerwundschreiber
Beiträge: 131
Registriert: Mo 18. Apr 2011, 22:58

#3 RE: Statusüberwachung von Gruppen

Beitragvon harteknut » Mo 8. Feb 2016, 22:08

Hey Thomas,

danke für den Tip, das bau ich ein.
Die Regel greift aber, das hab ich geprüft, in dem ich in hinter dem WHEN erst mal eine Lampe togglen lasse (Natürlich nur in der "Debugging"-Phase. :-)
Die Rule läuft aber immer durch den ELSE-Teil, der Prüfausdruck ist nicht geeignet...
Ich habe auch schon

Code: Alles auswählen

if (gLicht.members.filter(s | s.state != OFF).size > 0) oder
if (gLicht.members.filter(s | s.state != "OFF").size > 0)

versucht, beides ohne Erfolg.
Am ehesten ist noch eine oder-Verküpfung in einer Variable geeignet:

Code: Alles auswählen

          then
      var lampeAn = EG_Arbeit_Licht.state == ON ||
                        EG_KiZi_Licht.state == ON
      if (lampeAn) {
         sendCommand (IND_Lichtstatus, ON)
         }
         else {
         sendCommand (IND_Lichtstatus, OFF)
         }
          end


... aber irgendwie müsste das auch mit der Auswertung der Gruppe gehen, oder nicht?
Gruß,
Simon


Zurück zu „OpenHAB“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste