Zur Darstellung bei png's brauchst Du diese dann logischer weise in rot.
Die Auswahl der anzuzeigenden Icons selber machst Du dabei dann im Widegt-Code.
z.B. 'icons/Name.des.Ordner/status_away_1.png'
Bei svg's kannst Du das via "stroke" und bei Beadarf "fill" in der css festelegen.
Ich glaube in der Kurzanleitung wird es bald eine Anleitung zum Thema Einfärben der svg's geben. Icon-Pakete in erweiterter Form und in verschiedenen Farben (png) gibt es dort bereits.
Ansonsten kannst Du die png auch selber machen. z.B. mit Gimp
EDIT:
@Höhlenbär
Die Frage gehört aber eher in das sV-Forum.
Vieleicht solltest Du Dir angewöhnen nicht die Thrads zu "kapern".
Ankündigung
Einklappen
Keine Ankündigung bisher.
Fensterkontakte inkl. gekippt (Logik)
Einklappen
X
-
Hi,
kennt jemand eine solche Lösung für den Gira Homeserver. Die Besonderheit bei mir ist, das alle Fenster drei Kontake haben (gekippt, offen, Stulp offen).
Danke
Sylvio
Einen Kommentar schreiben:
-
Hallo,
ich hätte da ach mal eine Frage.
Wie bekomme ich denn die Symbole in Rot dargestellt (wie in Post #9)
wo wird denn die Farbeinstellung getroffen. Und geht das nur mit den SVG`s ?
Einen Kommentar schreiben:
-
Hallo,
Schau dir mal das Beispiel aus Post 11 an. So habe ich es auch gemacht.
Michael
Einen Kommentar schreiben:
-
Dynamische Statusanzeige
Hallo Hendrik,
vielen Dank für den Code der statischen Statusanzeige.
Da ich ca. 35 überwachte Fensterflügel habe, hatte ich wegen der Übersicht an die dynamische Statusanzeige der "offenen" Fenster gedacht (siehe auch Bild im Post #8 von Martin).
Kann mir jemand sagen, wie man dieses anstellt?
Gruß Sönke
Einen Kommentar schreiben:
-
Visu (Smartvisu, Quad-Design):Code:[Fenster] [[geschlossen]] type=bool [[[counter]]] type=num sqlite=true [eg] [[Fenster]] [[[geschlossen]]] type=bool [[[[counter]]]] type=num sqlite=true [[[geschlossen_invertiert]]] type=bool knx_send=10/3/0 knx_dpt=1 [[[[[counter]]]]] type=num sqlite=true [[Schuppen]] [[[Reed]]] [[[[Aussentuer]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/1 sqlite = true [[[[Innentuer]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/0 sqlite = true [[[[Fenster_links]]]] [[[[[gekippt]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/3 sqlite = true [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/2 sqlite = true [[[[Fenster_rechts]]]] [[[[[gekippt]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/5 sqlite = true [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/4 sqlite = true [[Flur]] [[[Reed]]] [[[[Hintertuer]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/6 sqlite = true [[[[Abstellkammer]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/7 sqlite = true [[Gaestebad]] [[[Reed]]] [[[[Fenster]]]] [[[[[gekippt]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/9 sqlite = true [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/8 sqlite = true [[Kueche]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/10 sqlite = true [[[[Mikrowellenschrank]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/11 sqlite = true [[Esszimmer]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/15 sqlite = true [[Wohnzimmer]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/20 sqlite = true [[Arbeitszimmer]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/25 sqlite = true [[Gaestezimmer]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/31 sqlite = true [[[[[gekippt]]]]] type = bool knx_dpt = 1 knx_cache = 8/1/30 sqlite = true [og] [[Fenster]] [[[geschlossen]]] type=bool [[[[counter]]]] type=num sqlite=true [[Lina]] [[[Reed]]] [[[[Fenster]]]] type=num eval=sh.og.Lina.Reed.Fenster_links.geschlossen()+2*sh.og.Lina.Reed.Fenster_rechts.geschlossen() eval_trigger=og.Lina.Reed.Fenster_links.geschlossen()|og.Lina.Reed.Fenster_rechts.geschlossen() [[[[Fenster_links]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/0 sqlite = true [[[[Fenster_rechts]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/1 sqlite = true [[Schlafzimmer]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/11 sqlite = true [[[[[gekippt]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/10 sqlite = true [[Till]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/15 sqlite = true [[[[[gekippt]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/16 sqlite = true [[Kinderbad]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/20 sqlite = true [[[[[gekippt]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/21 sqlite = true [[Dachterrasse]] [[[Reed]]] [[[[Fenster]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/25 sqlite = true [[[[[gekippt]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/26 sqlite = true [[Elternbad]] [[[Reed]]] [[[[Fenster]]]] type=num eval=sh.og.Elternbad.Reed.Fenster_links.geschlossen()+2*sh.og.Elternbad.Reed.Fenster_rechts.geschlossen() eval_trigger=og.Elternbad.Reed.Fenster_links.geschlossen()|og.Elternbad.Reed.Fenster_rechts.geschlossen() [[[[Fenster_links]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/5 sqlite = true [[[[Fenster_rechts]]]] [[[[[geschlossen]]]]] type = bool knx_dpt = 1 knx_cache = 8/2/6 sqlite = true
Screenshot im Anhang.Code:<li data-icon="false"> <div class="nw_table"> <div class="nw_table_cell nw_border">Schuppen</div> <div class="nw_table_cell"> <div class="nw_table"> <div class="nw_table_cell nw_border">{{ basic.symbol('eg.Schuppen.Aussentuerstatus1', 'eg.Schuppen.Reed.Aussentuer.geschlossen', '', icon0~'fts_door_locked.svg', 1) }} {{ basic.symbol('eg.Schuppen.Aussentuerstatus2', 'eg.Schuppen.Reed.Aussentuer.geschlossen', '', icon1~'fts_door_open.png', 0) }}</div> <div class="nw_table_cell nw_border">L{{ basic.symbol('eg.Schuppen.Fenster_linksstatus1', ['eg.Schuppen.Reed.Fenster_links.geschlossen','eg.Schuppen.Reed.Fenster_links.gekippt'], '', icon1~'fts_window_1w_open.png', 0, 'and') }} {{ basic.symbol('eg.Schuppen.Fenster_linksstatus2', 'eg.Schuppen.Reed.Fenster_links.geschlossen', '', icon0~'fts_window_1w.svg', 1) }} {{ basic.symbol('eg.Schuppen.Fenster_linksstatus3', 'eg.Schuppen.Reed.Fenster_links.gekippt', '', icon1~'fts_window_1w_tilt.png', 1) }} R{{ basic.symbol('eg.Schuppen.Fenster_rechtsstatus1', ['eg.Schuppen.Reed.Fenster_rechts.geschlossen','eg.Schuppen.Reed.Fenster_rechts.gekippt'], '', icon1~'fts_window_1w_open.png', 0, 'and') }} {{ basic.symbol('eg.Schuppen.Fenster_rechtsstatus2', 'eg.Schuppen.Reed.Fenster_rechts.geschlossen', '', icon0~'fts_window_1w.svg', 1) }} {{ basic.symbol('eg.Schuppen.Fenster_rechtsstatus3', 'eg.Schuppen.Reed.Fenster_rechts.gekippt', '', icon1~'fts_window_1w_tilt.png', 1) }}</div> <div class="nw_table_cell nw_border nw_min_landscape"> Flurtür {{ basic.symbol('eg.Schuppen.Innentuerstatus1', 'eg.Schuppen.Reed.Innentuer.geschlossen', '', icon0~'fts_door.png', 1) }} {{ basic.symbol('eg.Schuppen.Innentuerstatus2', 'eg.Schuppen.Reed.Innentuer.geschlossen', '', icon1~'fts_door_open.png', 0) }}</div> </div> </div> </div> </li> {{ listc.door_symbol('eg.Flur.Hintertuerstatus', 'Hintertür', 'eg.Flur.Reed.Hintertuer.geschlossen', icon0~'fts_door_locked.svg',icon1~'fts_door_open.png')}} {{ listc.window_symbol('eg.Gaestebad.Fensterstatus', 'Gästebad', 'eg.Gaestebad.Reed.Fenster.geschlossen','eg.Gaestebad.Reed.Fenster.gekippt' , icon1~'fts_window_1w_open.png',icon0~'fts_window_1w.svg', icon1~'fts_window_1w_tilt.png')}} {{ listc.door_symbol('eg.Kueche.Fensterstatus', 'Küche', 'eg.Kueche.Reed.Fenster.geschlossen', icon0~'fts_window_2w.svg',icon1~'fts_window_2w_open_l.png')}} {{ listc.door_symbol('eg.Esszimmer.Fensterstatus', 'Esszimmer', 'eg.Esszimmer.Reed.Fenster.geschlossen', icon0~'fts_window_2w.svg',icon1~'fts_window_2w_open_l.png')}} {{ listc.door_symbol('eg.Wohnzimmer.Fensterstatus', 'Wohnzimmer', 'eg.Wohnzimmer.Reed.Fenster.geschlossen', icon0~'fts_door.svg',icon1~'fts_door_open.png')}} {{ listc.door_symbol('eg.Arbeitszimmer.Fensterstatus', 'Arbeitszimmer', 'eg.Arbeitszimmer.Reed.Fenster.geschlossen', icon0~'fts_door.svg',icon1~'fts_door_open.svg')}} {{ listc.window_symbol('eg.Gaestezimmer.Fensterstatus', 'Gästezimmer', 'eg.Gaestezimmer.Reed.Fenster.geschlossen','eg.Gaestezimmer.Reed.Fenster.gekippt' , icon1~'fts_window_1w_open.png',icon0~'fts_window_1w.svg', icon1~'fts_window_1w_tilt.png')}} <li data-role="list-divider">Dachgeschoss</li> {{ listc.twin_window_symbol('og.Lina.Fensterstatus', 'Lina', 'og.Lina.Reed.Fenster' , icon0~'fts_window_2w.png',icon1~'fts_window_2w_open_lr.png', icon1~'fts_window_2w_open_l.png', icon1~'fts_window_2w_open_r.png')}} {{ listc.twin_window_symbol('og.Elternbad.Fensterstatus', 'Elternbad', 'og.Elternbad.Reed.Fenster' , icon0~'fts_window_2w.png',icon1~'fts_window_2w_open_lr.png', icon1~'fts_window_2w_open_l.png', icon1~'fts_window_2w_open_r.png')}} {{ listc.window_symbol('og.Schlafzimmer.Fensterstatus', 'Schlafzimmer', 'og.Schlafzimmer.Reed.Fenster.geschlossen','og.Schlafzimmer.Reed.Fenster.gekippt' , icon1~'fts_window_1w_open.png',icon0~'fts_window_1w.svg', icon1~'fts_window_1w_tilt.png')}} {{ listc.window_symbol('og.Till.Fensterstatus', 'Till', 'og.Till.Reed.Fenster.geschlossen','og.Till.Reed.Fenster.gekippt' , icon1~'fts_window_1w_open.png',icon0~'fts_window_1w.svg', icon1~'fts_window_1w_tilt.png')}} {{ listc.window_symbol('og.Kinderbad.Fensterstatus', 'Kinderbad', 'og.Kinderbad.Reed.Fenster.geschlossen','og.Kinderbad.Reed.Fenster.gekippt' , icon1~'fts_window_1w_open.png',icon0~'fts_window_1w.svg', icon1~'fts_window_1w_tilt.png')}} {{ listc.window_symbol('og.Dachterrasse.Fensterstatus', 'Dachterrasse', 'og.Dachterrasse.Reed.Fenster.geschlossen','og.Dachterrasse.Reed.Fenster.gekippt' , icon1~'fts_window_1w_open.png',icon0~'fts_window_1w.svg', icon1~'fts_window_1w_tilt.png')}} </ul>
Gruß,
HendrikAngehängte Dateien
Einen Kommentar schreiben:
-
Beispiel
Zitat von Sipple Beitrag anzeigenAlles was du da machst ist genau das was ich letzte Woche gemacht habe, inkl. der zweiflügligen Fenster, siehe Bild
Nur hab ich die Hoppe Griffe und ein Enocean Gatweay, da geht das insgesamt einfacher. Dafür hätte ich die komplette Lösung.
...
Gruß, Martin
Hallo Martin,
ich möchte auch meine Fensterkontakte (2 je Fenster) mit Smathome.py auswerten und wie Du visualisieren.
Welche Visu hast Du benutzt?
Würdest Du mir Deine Konfig von der Griffauswertung und der Visu als Beispielvorlage zukommen lassen.
Momentan komme ich einfach nicht weiter.
Ich wäre Dir endlos dankbar!
Gruß Sönke
Einen Kommentar schreiben:
-
Hallo Martin,
genau dies möchte ich auch umsetzen (Gira HS). Ich habe Fenster die nur offen oder gekippt sein können und Fenster mit zusätzlichen Stulp.
Kannst du bitte mal einen Lösungsansatz zeigen, wie deine Logik dazu aussieht und wie du die Liste der Fenster, die einen kritischen Status haben, erzeugst?
LG
Sylvio
Einen Kommentar schreiben:
-
Danke Chris. Funktioniert so jetzt hier.
Vorschlag (OpenSource heißt ja, dass man sich beteiligen darf):Zitat von mknx Beitrag anzeigenja, ich empfinde es als ziemlich kompliziert (da zu beschreiben und zu verwenden)
Ich schreib die Doku.
Gruß,
Hendrik
Einen Kommentar schreiben:
-
Hi Hendrik,
ja, ich empfinde es als ziemlich kompliziert (da zu beschreiben und zu verwenden).Zitat von henfri Beitrag anzeigen@Marcus: Spricht etwas dagegen, den einzubauen? Die Wildcards wären sehr praktisch.
Bis bald
Marcus
Einen Kommentar schreiben:
-
...
ich hab vor einiger Zeit genau das in der Smartvisu gemacht, anbei als Test, bei dem man die Kontakte simulieren kann.
die logik dazu sieht so aus:
lg, ChrisCode:[Test] [[window1]] name = Window 1 type = bool visu_acl = w knx_dpt = 1 knx_listen = 4/2/0 [[window2]] name = Window 2 type = bool visu_acl = w knx_dpt = 1 knx_listen = 4/2/1 [[window3]] name = Window 3 type = num visu_acl = rw eval = sh.Test.window3.side1_locked()*4+sh.Test.window3.side1_tilt()*2+sh.Test.window3.side2_closed() eval_trigger = Test.window3.side1_locked | Test.window3.side1_tilt | Test.window3.side2_closed [[[side1_locked]]] name = Window 3 Side1 locked type = bool visu_acl = rw [[[side1_unlocked]]] name = Window 3 Side1 unlocked type = bool visu_acl = rw [[[side1_tilt]]] name = Window 3 Side1 tilt type = bool visu_acl = rw [[[side2_closed]]] name = Window 3 Side2 closed type = bool visu_acl = rwAngehängte Dateien
Einen Kommentar schreiben:
-
:-)
Naja, für meinen Sonderwunsch brauche ich wohl eine Logik.. Nicht so schlimm.
Gruß,
Hendrik
Einen Kommentar schreiben:
-
Alles was du da machst ist genau das was ich letzte Woche gemacht habe, inkl. der zweiflügligen Fenster, siehe Bild
Nur hab ich die Hoppe Griffe und ein Enocean Gatweay, da geht das insgesamt einfacher. Dafür hätte ich die komplette Lösung.
In deinem Fall würde ich aber inzwischen umschwenken auf eine klassische Logik, da ist das imho übersichtlicher und schöner zu lösen. Ich habe auch erst auf Biegen und Brechen versucht alles über eval/eval_trigger zu machen und bin dann davon wieder weg gekommen. Mag sein, dass manches programmiertechnisch smarter zu lösen ist, aber ob es dann leichter zu verstehen und in 5 Jahren zu - sagen wir mal - "warten" ist, bleibt die Frage. Meine Logiken machen exakt was sie sollen und ich denke in ein paar Jahren versteh ich sie immer noch
Gruß, MartinAngehängte Dateien
Einen Kommentar schreiben:
-
Hallo,
danke für die Idee. Aber da ist noch ein Problem drin:
Die GA für Geschlossen ist bei Geschlossen 1 und sonst 0 -nicht umgekehrt, wie in deinem Beispiel angenommen.
Statt "and" bräuchte ich "nand". Dann würde es gehen.
So geht's aber:
Danke!Code:{{ basic.symbol('og.Schlafzimmer.Fensterstatus-Geschlossen', ['og.Schlafzimmer.Reed.Fenster.geschlossen', 'og.Schlafzimmer.Reed.Fenster.gekippt'] , 'Fenster', icon0~'fts_window_1w_open.svg', 0, 'and') }} {{ basic.symbol('og.Schlafzimmer.Fensterstatus-Offen', 'og.Schlafzimmer.Reed.Fenster.geschlossen', 'Fenster', icon1~'fts_window_1w.png', 1) }} {{ basic.symbol('og.Schlafzimmer.Fensterstatus-Gekippt', 'og.Schlafzimmer.Reed.Fenster.gekippt', 'Fenster', icon1~'fts_window_1w_tilt.png', 1) }}
Trotzdem würde ich mich freuen noch etwas über die eval_trigger Fragen zu hören (egal von wem; zum Patch natürlich am liebsten von Marcus :-).
Jetzt habe ich aber noch eine andere Funktion, für die ich keine Lösung sehe:
Zweiflügliges Fenster, wobei beide Elemente nur gedreht werden können (nicht gekippt).
Statii:
beide zu
beide auf
links auf
rechts auf
Zugegeben. Spielerei. (die letzten beiden), aber die Information ist da und will dargestellt werden.
Dafür bräuchte ich eine Verknüpfung bei der die Reihenfolge wichtig ist. Sprich "Fenster links ist auf, aber nicht Fenster rechts"
Ich wollte mir eigentlich ein XOR hineinpatchen, aber das kann ja nicht unterscheiden, welches Fenster offen ist.
Ideen?
Gruß,
Hendrik
Einen Kommentar schreiben:


Einen Kommentar schreiben: