Script soll status abfragen und darstellen

Haussteuerung mittels mediola

Moderator: Co-Administratoren

schmello
Beiträge: 212
Registriert: 04.06.2015, 20:26
Hat sich bedankt: 7 Mal
Danksagung erhalten: 4 Mal

Script soll status abfragen und darstellen

Beitrag von schmello » 09.01.2016, 20:02

Ich habe in mediola ein Button erstellt das über ein Programm/script in der Homematic das Gewerk Licht komplett ausschaltet...

Ich möchte vor dem Button gerne ein Lampen Symbol haben das wenn im Gwerk Licht nur eine Lampe an ist dieses Symbol anzeigt das Lampen eingeschaltet sind...
Wenn ich nun das Programm vom Tablet aus starte und alle Lampen im Gewerk Licht aus sind... soll sich das Lampensymbol ändern und anzeigen keine Lampe eingeschaltet..

Ich bräuchte also ein Script das den status Gewerk Lampe überprüft und in eine Systemvariable schreibt... So kann ich vom Tablet aus sehen ob in dem Gewerk noch irgendwelche Lampen eingeschaltet sind..
Kann mir da einer helfen.. ich habe null Ahnung vom script schreiben :)

Janniman
Beiträge: 212
Registriert: 08.04.2015, 14:29
Wohnort: Seevetal
Hat sich bedankt: 2 Mal

Re: Script soll status abfragen und darstellen

Beitrag von Janniman » 10.01.2016, 00:35

Das ist eigentlich sehr einfach. Ein Script von Alchy (leicht abgeändert) läuft seit Zeiten sehr zuverlässig.
Ich habe zwei Systemvariablen angelegt...
2.jpg
Dann ein Programm, das ausgeführt wird, wenn ein Gerät seinen Status verändert. ACHTUNG, dieses Script reagiert auf alle Geräte des Gewerks 'Licht' ! Andere Schalter/Dimmer/etc., die nicht in 'Licht' sind werden nicht erfasst. Für mich schön, da ich so auch Bereiche trennen kann, denn Geräte können ja auch mehreren Gewerken angehöhren.
1.jpg

Code: Alles auswählen

 ! Abfrage mit HssType des Items = besser, da nur Dimmer oder Switch)
    object sec = dom.GetObject("Licht");
    string itemId;
    integer anzahl =0 ;
    foreach(itemId, sec.EnumUsedIDs()) {
    var item = dom.GetObject(itemId);
    if (item.IsTypeOf(OT_CHANNEL)) {
    var device = dom.GetObject(item.Device());
    var hssType = item.HssType();
    var value = false;
    var level = 0.0;
    if ( hssType == "SWITCH") { value = item.DPByHssDP("STATE").Value(); }
    if ( hssType == "DIMMER") { level = item.DPByHssDP("LEVEL").Value(); }
    if (value || (level != 0.0)) { anzahl = anzahl +1; }
    }
    }
    dom.GetObject("var_AnzahlLichter").State(anzahl);
    dom.GetObject("var_AnzahlLichter_String").State(anzahl).ToString(0);
Du siehst, ich schreibe das zwei mal in Variablen, da es sonst im NEO nur mit Punkt und Folgezahlen angezeigt wird auch als String. Bei mir ist auch der "Sonst"-Teil gleich dem "Wenn dann"-Teil (habe ich aus Versehen abgeschnitten).

im NEO sieht es z.B. so aus (links unten) als Status und Seitenwechselbutton. Die untere Zeile wird bei mir immer angezeigt, nur mit wechselnden Inhalten. Drücke ich auf ein Element, hier die Birne, geht es zur Seite Beleuchtung:
3.jpg
...oder so auf der Lichtseite. Die Grafiken sind von mir überholt und erstellt worden, also nicht wundern.
4.jpg
Im NEO die Geräte und Systemvariablen zu importieren sollte jeder können. Dann Status zuweisen etc... und schon läuft es fast.
Die Zahl neben dem eigentlichen Icon ist eine Textvariable aus dem String (s.o.), die liegt "auf" dem Button/Schalter/Statusanzeige ->eigentlich ein Doppelmoppel... Gleiches mache ich auch mit den Fenstern (gelb gekippt, rot offen, Flieder alles aus der Garage).

Jan

Janniman
Beiträge: 212
Registriert: 08.04.2015, 14:29
Wohnort: Seevetal
Hat sich bedankt: 2 Mal

Re: Script soll status abfragen und darstellen

Beitrag von Janniman » 10.01.2016, 00:40

auch so, hier das "AUS"-Script...

Code: Alles auswählen

    ! Alle Lichter aus mit Abfrage mit HssType des Items = besser, da nur Dimmer oder Switch by Alchy
        object sec = dom.GetObject("Licht");
        string itemId;
        integer anzahl =0 ;
        foreach(itemId, sec.EnumUsedIDs()) {
        var item = dom.GetObject(itemId);
        if (item.IsTypeOf(OT_CHANNEL)) {
        var device = dom.GetObject(item.Device());
        var hssType = item.HssType();
        if ( hssType == "SWITCH") { item.DPByHssDP("STATE").State(0); }
        if ( hssType == "DIMMER") { item.DPByHssDP("LEVEL").State(0.0); }
        }
        }
Das wird nur manuell durch den Button "Licht aus" vom NEO in der CCU aufgerufen, getriggert wird da nichts.

Jan

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script soll status abfragen und darstellen

Beitrag von Bernd80 » 15.01.2016, 13:17

Hallo zusammen,
leider funktioniert das Script bei mir irgendwie nicht. Ich habe all meine Licht Aktoren im Gewerk "Licht" ausserdem habe ich auch die 2 Systemvariablen erstellt aber sobald ich das Script manuell durchlaufen lasse zeigen die Variablen immer den Wert 0 an obwohl Lichter brennen. Was kann ich falsch gemacht haben??

Janniman
Beiträge: 212
Registriert: 08.04.2015, 14:29
Wohnort: Seevetal
Hat sich bedankt: 2 Mal

Re: Script soll status abfragen und darstellen

Beitrag von Janniman » 15.01.2016, 20:34

Bernd80 hat geschrieben:sobald ich das Script manuell durchlaufen lasse zeigen die Variablen immer den Wert 0 an obwohl Lichter brennen. Was kann ich falsch gemacht haben??
Poste doch einfach mal dein Script...
Die Variablen haben die gleichen Namen, so wie bei mir?
Eine ist ein String, die andere eine Zahl. Das hast du auch beachtet?

Ich denke aber an folgendes: Bei manueller Auslösung wird immer der Dann-Zweig ausgeführt!
Hast du, wie ich es bei mir gemacht habe (eben um auch manuell zu aktualisieren), für eine klare Anzeige, sowohl beim Wenn- als auch beim Dann-Zweig das gleiche eingetragen?

Wie lässt du dir das Ergebnis anzeigen?

Jan

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script soll status abfragen und darstellen

Beitrag von Bernd80 » 16.01.2016, 13:19

Hallo und erstmal herzlichen Dank für deine Hilfe.....
Ich sage direkt dabei das ich blutiger Anfänger bin was Homematic angeht.
Das Script habe ich eins zu eins von dir kopiert und eingesetzt. Die Variablen habe ich auch genau so benannt wie bei dir. Die eine ist eine Zahl die andere eine Zeichenkette (ich hoffe das meinst du mit string) :?
Bildschirmfoto 2016-01-16 um 13.15.48.png
Ach ja... auch wenn ich das Aus Script manuell durchlaufen lasse geht bei mir auch keine Lampe aus :roll:

Janniman
Beiträge: 212
Registriert: 08.04.2015, 14:29
Wohnort: Seevetal
Hat sich bedankt: 2 Mal

Re: Script soll status abfragen und darstellen

Beitrag von Janniman » 17.01.2016, 11:04

Ich gehe davon aus du hast "CuxD" installiert? Ist IMHO Pflicht, auch für die Stabilität der CCU.
Ohne den CuxD geht das nicht...
http://homematic-forum.de/forum/viewtopic.php?t=15298
Sorry, ich war davon ausgegangen das dies schon passiert wäre.

Jan

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script soll status abfragen und darstellen

Beitrag von Bernd80 » 17.01.2016, 11:34

Ok das erklärt natürlich das Problem :roll:
Ich habe mich mit dem Cuxd noch nicht groß befasst aber ich gehe davon aus das es nicht alleine mit dem installieren getan ist oder?

Janniman
Beiträge: 212
Registriert: 08.04.2015, 14:29
Wohnort: Seevetal
Hat sich bedankt: 2 Mal

Re: Script soll status abfragen und darstellen

Beitrag von Janniman » 17.01.2016, 12:01

CuxD ist für wahnsinnig viel gut! Installiere es und halte dich an die Anleitung (!), denn ohne ein sauber installiertes CuxD-Gerät geht nichts.
Ich denke, da ich mich auch nicht mehr so gut daran erinnere was ich für Probleme hatte, kurzes Einlesen VOR der Installation ist gut und sinnvoll. Also bitte mal danach suchen...

Jan

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script soll status abfragen und darstellen

Beitrag von Bernd80 » 17.01.2016, 19:46

Und ohne cuxd ist es nicht möglich das hinzubekommen ? wenn ich das richtig gelesen habe muss ich ja auch noch Hardware besorgen? Fange grade an mich mit homematic zu beschäftigen und das mit mit cuxd scheint mir auf den ersten Blick auch nicht ohne :?

Antworten

Zurück zu „mediola“