Autor Thema: Fenstersymbol mit Anzahl offener Fenster als Kreis  (Gelesen 8303 mal)

Offline zap

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3313
    • HMCCU
Fenstersymbol mit Anzahl offener Fenster als Kreis
« am: 31 Januar 2016, 15:10:17 »
Ich würde gerne ein Fenstersymbol darstellen, das die Anzahl der offenen Fenster als Kreis in der rechten oberen Ecke darstellt. Wie lässt sich das in FTUI umsetzen? Ich habe schon in einigen Screenshots gesehen, dass das möglich ist.

Die Anzahl der offenen Fenster sowie den Gesamtstatus habe ich in einem Dummy Device in 2 Readings stehen:

STATE = "open" oder "closed", je nachdem, ob mindestens 1 Fenster offen ist
COUNT_OPEN = Anzahl der offenen Fenster

2xCCU3, diverse Komponenten (Fenster, Rolladen, Themostate, Stromzähler, Steckdosen ...)
FHEM mit Raspi für CCU Integration.
IOBroker für UI (VIS), Hue, Sonos usw.
Maintainer der Module FULLY, Meteohub und HMCCU (Schnittstelle CCU-FHEM = best of both worlds approach

Offline roman1528

  • Sr. Member
  • ****
  • Beiträge: 702
    • ueberueck.com
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #1 am: 31 Januar 2016, 17:19:29 »
Ich würde gerne ein Fenstersymbol darstellen, das die Anzahl der offenen Fenster als Kreis in der rechten oberen Ecke darstellt. Wie lässt sich das in FTUI umsetzen? Ich habe schon in einigen Screenshots gesehen, dass das möglich ist.

Die Anzahl der offenen Fenster sowie den Gesamtstatus habe ich in einem Dummy Device in 2 Readings stehen:

STATE = "open" oder "closed", je nachdem, ob mindestens 1 Fenster offen ist
COUNT_OPEN = Anzahl der offenen Fenster

Moin.

Es würde reichen wenn dein Dummy die Anzahl der offenen Fenster erfasst. Weil bei "0" keine Fenster offen sind.
Also: STATE 5
oder: STATE 0

<div data-type="symbol"
        data-device="DUMMY"
        data-states='["0","^[01]$","^[1-9][0-9]|[2-9]$"]'
        data-icons='["ftui-window","ftui-window warn","ftui-window warn"]'
        data-colors='["#505050","#aa6900","#aa6900"]'
        data-icon="ftui-window" <!-- Das füge ich immer mit ein falls es zu Problemen kommt.-->
</div>

Viel Spaß beim testen :)

Grüße^^

EDIT

Oder du lässt dein Dummy so und liest nur "COUNT_OPEN" aus:

<div data-type="symbol"
        data-device="DUMMY"
        data-get="COUNT_OPEN"
        data-states='["0","^[01]$","^[1-9][0-9]|[2-9]$"]'
        data-icons='["ftui-window","ftui-window warn","ftui-window warn"]'
        data-colors='["#505050","#aa6900","#aa6900"]'
        data-icon="ftui-window" <!-- Das füge ich immer mit ein falls es zu Problemen kommt.-->
</div>
« Letzte Änderung: 31 Januar 2016, 17:21:52 von roman1528 »
Intel D2700 Atom 2x2,13GHz;4GB RAM;60GB SSD;8TB eSATA als NAS: FHEM 6.0,FTUI,AMAD,8" Tablet's+Fully;HUE;Trådfri;ESPRGBWW;HM;ESP8266;I²C;CUL433;CUL868;Duofern;ASC;MQTT
RPi3+: FHEM 6.0;I²C;GPIO;Wigand-RFID;G-Tag;XiaomiBTLESens
RPi3: FHEM 6.0;DIY Relais-I/O-Board;I²C;GPIO
FHEM & FTUI: www.ueberueck.com

Offline chris1284

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3821
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #2 am: 09 Dezember 2016, 08:24:04 »
wie errechnet ihr für den dummy die anzahl offener fenster?
#HP Proliant MicroServer Gen8: FHEM, SAMBA, Docker:PLEX, HABridge,Homebridge
#CCU2 (bald 3): Heizung, Schalter, Sensoren, Remotes
#nanoCUL868: lacrossmode für Außensensor
#3 2Bay Nas im 2 täglichen Wechsel fürs Backup, überwacht in FHEM

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 25248
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #3 am: 09 Dezember 2016, 08:26:10 »
Mit einer myUtils Funktion.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline choenig

  • Developer
  • Full Member
  • ****
  • Beiträge: 250
  • Module: WS980, [ALP600], [MieleAtHome]
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #4 am: 09 Dezember 2016, 22:57:40 »
Hi zap,

ich mach das wie folgt:

Einen Dummy zum nachhalten des Status:
defmod dummy_OffeneFenster dummy
attr dummy_OffeneFenster stateFormat openWindowsCount

Ein DOIF zum Ausführen der der Funktion aus 99_MyUtils.pm:
defmod doif__winOpen.StartStop DOIF ([".*:(open|tilted|closed)$"]) ({winOpenStartStop("$DEVICE", "$EVENT")})
attr doif__winOpen.StartStop do always

Eine Function in 99_MyUtils.pm:
sub winOpenStartStop($$) {
    #Als Parameter muss der device-Name übergeben werden
    my ($dev,$event)=@_;
   
    #Der dummy der verwendet wird, um die offenen Fenster/Tueren nachzuhalten
    my $dummy = 'dummy_OffeneFenster';
   
    #Erst mal prüfen, ob das übergebene device überhaupt existiert
    if ($dev =~ /[Ff]enster|Tuer/ && $defs{$dev})
    {
        my $model=AttrVal($dev,'model','');
        if ($model eq 'HM-SEC-SCo' || $model eq 'HM-SEC-RHS')
        {
            #hole die liste der Fenster, die gerade offen sind
            my $openWindows = ReadingsVal($dummy, 'openWindows', '');
            my @parts;
            @parts = split(/,/, $openWindows) if ($openWindows ne '-');

            # wenn das aktuelle Fenster noch nicht in der liste ist -> hinzufuegen
            if ($event eq 'open' || $event eq 'tilted') {
                # add element to array if not already there
                push(@parts, $dev) unless grep{$_ eq $dev} @parts;
            }
            elsif ($event eq 'closed') {
                # remove element from array
                @parts = grep {$_ ne $dev} @parts;
            }
           
            # aktualisiere die Readings des dummies
            my $openWindowsCount = scalar(@parts);
            if ($openWindowsCount > 0) { $openWindows = join(',', @parts); }
            else                       { $openWindows = '-';               }
            fhem("setreading $dummy openWindows $openWindows");
            fhem("setreading $dummy openWindowsCount $openWindowsCount");
        }
    }
}

Und mein FTUI sieht wie folgt aus:
   <div data-type="label" class="cell" >Fenster/Türen geöffnet<>
   <div data-type="symbol" data-device="dummy_OffeneFenster" data-get="openWindowsCount"
       data-get-on='["0", "^[1-9].*"]'
       data-icons='["fa-exclamation-triangle", "fa-exclamation-triangle"]'
       data-colors='["#444444","#ff0000"]'
       class="cell grande top-narrow-2x" ><>
   <div data-type="symbol" data-device="dummy_OffeneFenster" data-get="openWindowsCount"
       data-get-on='["0", "^[1-9].*"]'
       data-icons='["fa-exclamation-triangle", "fa-exclamation-triangle warn"]'
       data-colors='["transparent","transparent"]'
       class="cell bigger top-narrow-2x" style="margin-top:-188px !important;margin-left:33px !important;"><>
(Achtung: Die closing tags werden durch das Board »zerstört«)

Der FTUI Code besteht aus zwei Teilen, da ich ein möglichst großes Ausrufezeichen haben wollte, aber der warn-Indikator sollte nicht so groß sein. Das geht bestimmt auch einfacher :-).

Ich bestehe nicht darauf, dass der Code optimal ist, aber er funktioniert gut :-)

LG
Christian

Offline Thyraz

  • Hero Member
  • *****
  • Beiträge: 1077
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #5 am: 10 Dezember 2016, 08:52:51 »
Noch eine alternative Lösung:

Bei mir haben alle Fenster ein UserReading "windowState" welches open, closed, tilted sein kann.
Zusätzlich sind alle Fenster in der Gruppe "Fenster".

Die Anzahl der offenen Fenster bekomme ich dadurch ohne weitere Fallunterscheidungen für Sensormodelle etc. über diese 99_myUtils Funktion:

sub numberOfOpenWindows() {
my $openWindows = 0;

foreach my $windowName (devspec2array("group=Fenster")) {
if (ReadingsVal($windowName, "windowState", "closed") ne "closed") {
$openWindows++;
}
}
return $openWindows;
}

Für die FTUI Anzeige würde dann ein allgemeines Notify auf open|tilted|closed reichen, welches das DummyReading mit dem Rückgabewert der Funktion belegt.
« Letzte Änderung: 10 Dezember 2016, 08:55:13 von Thyraz »
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Lacrosse, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, ...

Offline chris1284

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3821
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #6 am: 10 Dezember 2016, 08:58:05 »
Mit einer myUtils Funktion.

hatte ich mir gedacht und die 2 zeilen code in ein notfy gepackt
#HP Proliant MicroServer Gen8: FHEM, SAMBA, Docker:PLEX, HABridge,Homebridge
#CCU2 (bald 3): Heizung, Schalter, Sensoren, Remotes
#nanoCUL868: lacrossmode für Außensensor
#3 2Bay Nas im 2 täglichen Wechsel fürs Backup, überwacht in FHEM

Offline jnewton957

  • Full Member
  • ***
  • Beiträge: 384
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #7 am: 18 Dezember 2016, 10:30:13 »
Noch eine alternative Lösung:

Bei mir haben alle Fenster ein UserReading "windowState" welches open, closed, tilted sein kann.
Zusätzlich sind alle Fenster in der Gruppe "Fenster".

Die Anzahl der offenen Fenster bekomme ich dadurch ohne weitere Fallunterscheidungen für Sensormodelle etc. über diese 99_myUtils Funktion:

sub numberOfOpenWindows() {
my $openWindows = 0;

foreach my $windowName (devspec2array("group=Fenster")) {
if (ReadingsVal($windowName, "windowState", "closed") ne "closed") {
$openWindows++;
}
}
return $openWindows;
}

Für die FTUI Anzeige würde dann ein allgemeines Notify auf open|tilted|closed reichen, welches das DummyReading mit dem Rückgabewert der Funktion belegt.

hallo,

kannst du das bitte mal komplett mit Anteil in der fhem.cfg , myUtils und dann ftui beschreiben.

Danke Danke

Jörg
FHEM5.8 auf Pi3
V 1.65 nanoCUL433 (IT)
nanoCUL JeeLink
V 1.66 nanoCUL868 (HM) (ESA2000WZ)
xELRO AB440, xDECT200, PCA301, xTFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo)

Offline macfly

  • Jr. Member
  • **
  • Beiträge: 79
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #8 am: 03 Februar 2018, 21:58:24 »
Hi zap,

ich mach das wie folgt:

Einen Dummy zum nachhalten des Status:
defmod dummy_OffeneFenster dummy
attr dummy_OffeneFenster stateFormat openWindowsCount

Ein DOIF zum Ausführen der der Funktion aus 99_MyUtils.pm:
defmod doif__winOpen.StartStop DOIF ([".*:(open|tilted|closed)$"]) ({winOpenStartStop("$DEVICE", "$EVENT")})
attr doif__winOpen.StartStop do always

Eine Function in 99_MyUtils.pm:
sub winOpenStartStop($$) {
    #Als Parameter muss der device-Name übergeben werden
    my ($dev,$event)=@_;
   
    #Der dummy der verwendet wird, um die offenen Fenster/Tueren nachzuhalten
    my $dummy = 'dummy_OffeneFenster';
   
    #Erst mal prüfen, ob das übergebene device überhaupt existiert
    if ($dev =~ /[Ff]enster|Tuer/ && $defs{$dev})
    {
        my $model=AttrVal($dev,'model','');
        if ($model eq 'HM-SEC-SCo' || $model eq 'HM-SEC-RHS')
        {
            #hole die liste der Fenster, die gerade offen sind
            my $openWindows = ReadingsVal($dummy, 'openWindows', '');
            my @parts;
            @parts = split(/,/, $openWindows) if ($openWindows ne '-');

            # wenn das aktuelle Fenster noch nicht in der liste ist -> hinzufuegen
            if ($event eq 'open' || $event eq 'tilted') {
                # add element to array if not already there
                push(@parts, $dev) unless grep{$_ eq $dev} @parts;
            }
            elsif ($event eq 'closed') {
                # remove element from array
                @parts = grep {$_ ne $dev} @parts;
            }
           
            # aktualisiere die Readings des dummies
            my $openWindowsCount = scalar(@parts);
            if ($openWindowsCount > 0) { $openWindows = join(',', @parts); }
            else                       { $openWindows = '-';               }
            fhem("setreading $dummy openWindows $openWindows");
            fhem("setreading $dummy openWindowsCount $openWindowsCount");
        }
    }
}

Und mein FTUI sieht wie folgt aus:
   <div data-type="label" class="cell" >Fenster/Türen geöffnet<>
   <div data-type="symbol" data-device="dummy_OffeneFenster" data-get="openWindowsCount"
       data-get-on='["0", "^[1-9].*"]'
       data-icons='["fa-exclamation-triangle", "fa-exclamation-triangle"]'
       data-colors='["#444444","#ff0000"]'
       class="cell grande top-narrow-2x" ><>
   <div data-type="symbol" data-device="dummy_OffeneFenster" data-get="openWindowsCount"
       data-get-on='["0", "^[1-9].*"]'
       data-icons='["fa-exclamation-triangle", "fa-exclamation-triangle warn"]'
       data-colors='["transparent","transparent"]'
       class="cell bigger top-narrow-2x" style="margin-top:-188px !important;margin-left:33px !important;"><>
(Achtung: Die closing tags werden durch das Board »zerstört«)

Der FTUI Code besteht aus zwei Teilen, da ich ein möglichst großes Ausrufezeichen haben wollte, aber der warn-Indikator sollte nicht so groß sein. Das geht bestimmt auch einfacher :-).

Ich bestehe nicht darauf, dass der Code optimal ist, aber er funktioniert gut :-)

LG
Christian

Hi,

auf die Gefahr hin, wie ein völliger Noob zu wirken:

woher kommt die Zahl aus deinem Icon bei offenem Fenster? Ich habe das mal nachgespielt und kann die icon-farbänderung nachvollziehen aus data-type="symbol"  und data-get-on. Ich sehe auch die Platzierung der runden roten zahl mit margin-top und margin-left. Aber woher genau bekommt ftui den Wert  aus dem dummy_OffeneFenster?  Kannst du mir mal nachhilfe in html und div-platzierung geben?

danke,
Friedhelm

Offline choenig

  • Developer
  • Full Member
  • ****
  • Beiträge: 250
  • Module: WS980, [ALP600], [MieleAtHome]
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #9 am: 04 Februar 2018, 09:03:19 »
Hi Friedhelm,

woher kommt die Zahl aus deinem Icon bei offenem Fenster?
[...]
Aber woher genau bekommt ftui den Wert  aus dem dummy_OffeneFenster?

ich versteh' die Frage(n) nicht ganz. Durch das »warn« im data-icons verwendet er den Wert des dummys als anzuzeigende Zahl.

Kannst du mir mal nachhilfe in html und div-platzierung geben?

Was hast Du denn für ein Problem in »html und div-platzierung«?

LG
Christian

Offline macfly

  • Jr. Member
  • **
  • Beiträge: 79
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #10 am: 05 Februar 2018, 10:55:56 »
alles klar, dein Hinweis hat mich zu https://wiki.fhem.de/wiki/FTUI_Widget_Symbol geschickt. Hatte ich garnicht so auf den Schirm, dass das "warn" solche Auswirkungen hat. Ein Beispiel auf der wiki-seite wäre cool gewesen.

Vielen Dank für deine Antwort!

schöne Grüße,
Friedhelm

Offline PingPong

  • Full Member
  • ***
  • Beiträge: 206
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #11 am: 26 März 2018, 17:15:03 »
Noch eine alternative Lösung:

Bei mir haben alle Fenster ein UserReading "windowState" welches open, closed, tilted sein kann.
Zusätzlich sind alle Fenster in der Gruppe "Fenster".

Die Anzahl der offenen Fenster bekomme ich dadurch ohne weitere Fallunterscheidungen für Sensormodelle etc. über diese 99_myUtils Funktion:

sub numberOfOpenWindows() {
my $openWindows = 0;

foreach my $windowName (devspec2array("group=Fenster")) {
if (ReadingsVal($windowName, "windowState", "closed") ne "closed") {
$openWindows++;
}
}
return $openWindows;
}

Für die FTUI Anzeige würde dann ein allgemeines Notify auf open|tilted|closed reichen, welches das DummyReading mit dem Rückgabewert der Funktion belegt.

Hallo zusammen, habe das Userreading "windowState" gesetzt und auch die Funktion in die 99_MyUtils.pm aufgenommen.
Leider stehe ich nun aber bei der Einrichtung des Dummy bzw. Notify völlig auf dem Schlauch.
Kann mir da bitte mal jemand unter die Arme greifen? :-(

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 25248
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #12 am: 27 März 2018, 10:03:46 »
sub numberOfOpenWindows() {

      return devspec2array("group=Fenster:FILTER=STATE!=closed")
}
Sollte Dir die Anzahl der nicht geschlossenen Fenster zurück geben.
« Letzte Änderung: 27 März 2018, 12:02:58 von CoolTux »
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline PingPong

  • Full Member
  • ***
  • Beiträge: 206
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #13 am: 27 März 2018, 11:48:01 »
Hallo CoolTux,

vielen Dank erstmal für Dein Feedback.
Wenn ich Dich richtig verstehe, liefert die Funktion nun also die Anzahl der offenen Fenster zurück.
Jetzt würde ich das Ergebnis aber gerne noch in ein Dummy Device schreiben, um dieses anschließend in TabletUI anzuzeigen.

Hast Du noch nen Tipp für mich, wie ich das mache?

Vielen Dank im Voraus.
Marc

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 25248
Antw:Fenstersymbol mit Anzahl offener Fenster als Kreis
« Antwort #14 am: 27 März 2018, 12:09:03 »
Du machst ein Notify welches auf alle Fenster triggert und startest das im Notify die Funktion. Am besten gleich mit dem set Befehl für den Dummy
Von Vorteil ist wenn man eine vernünftige Namensgebung gewählt hat.
define notifyAnzahlFenster notify FensterKontact.*:(open|tilted|closed) { CommandSet(undef,'dummyname ' . numberOfOpenWindows()) }

Notify triggert auf alle Devices die vom Namen her anfangen mit FensterKontakt und den Event open,tilted oder closed haben und führt einen set dummyname Anzahl_der_offenen_Fenster aus
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

 

decade-submarginal