NEWS
vis: Lampen mit Taster einschalten
-
Hallo,
ich mache meine ersten Gehversuche mit vis - daher mag es sein, dass ich eine läppische Frage stelle, ich komme aber mit Herumprobieren nicht weiter. Szenario: ioBroker, dahinter Homematic-wired.
Ich will in Gartenlampen ein- und ausschalten, aber nicht direkt mit dem Schaltaktor, sondern über den zugeordneten Taster. Der Grund ist, dass in HM programmiert ist, dass die Taster für Gartenbeleuchtung bei Tageslicht funktionslos sind.
Jetzt habe ich in vis mit hqwidgets Schalter herumprobiert. Wenn ich da statt dem Aktor den Taster.PRESS_SHORT unter "Object ID" eintrage, geht alles wie es soll. Ich habe aber keine Rückmeldung, ob die Lampe an oder aus ist. Wie kriege ich das hin?
(Eine erste Idee, aber auch noch nicht ausgereift: Wenn ich bei "In Arbeit Zusand ID" den Aktor.STATE hinzufüge, sehe ich sogar ein kleines Zahnrad für "working", wenn die Lampe an ist. Ich habe aber nicht gefunden, wo ich das Zahnrad gegen eine andere grafik.png austauschen könnte, das das "Lampensymbol aus" mit einem "Lampensymbol ein" übermalt. Vielleicht gibt es aber ohnehin eine einfachere Lösung)
(Eine zweite Idee, die tatsächlich geht, aber sehr umständlich ist:
Ich stelle den hqwidgets Schalter auf "ObjectID Aktor.STATE", aber nur lesend. Dann lege ich ihn nochmal in gleicher Größe genau drüber, aber mit ObjectID "Taster.PRESS_SHORT", und stelle da die opacity auf 0.0 und höherem z-index als bei der Unterlage. Das geht nun genau wie es soll. Der Taster wird bedient, nicht der Aktor direkt, der meldet aber seinen Zustand durch den durchsichtigen Taster.
Das wird nun nur ein furchtbares Gebastel für all die vielen Lichttaster. Gibt es denn eine Möglichkeit, das in einem Widget zu vereinen, oder ist das dann nichts mehr für vis-Anfänger?)Grüße, EckartS
-
Aufbau:
Lampe mit HM Schaltaktor (dieser schaltet die Lampe an/aus)
HM Taster per direktverknüpfung schaltet den HM Schaltaktor (was dann wiederum die Lampe an/aus schaltet)In vis widget:
hq widget on/off mit objekt HM Schaltaktor -
@bahnuhr
Das will er aber nicht.
Die Taster sind zu bestimmten Zeiten deaktiviert.
Das soll in dem View dann auch so sein.wenn er dann den Schaltaktor direkt steuert, kann man trotz geplanter Sperre schalten
-
ok, überlesen
dann per manueller variable und script schreiben.
-
Hallo,
mit meiner zweiten Lösung bin ich schon vorangekommen.
Das Prinzip ist: Ein Button (nur lesend) zeigt an, ob der Aktor an ist; er liest den Aktor.STATE
Drüber liegt ein zweiter, unsichtbarer Button gleicher Größe, der den Datenpunkt Taster.PRESS_SHORT bedient.
Das geht so.Meine Frage aber: Wie mache ich daraus ein Widget, dass ich einfach aufrufen und konfigurieren kann, damit ich so etwas nicht immer neu zusammenbasteln muss?
Grüße, EckartS
-
@EckartS
Mein Vorschlag wäre ähnlich gewesen.
Doch den Aktor schalten, und über Sichtbarkeit duesen nur aktivieren wenn er schaltbar sein soll.Deine Idee müsste doch mit der Gruppieren Funktion klappen
-
Hallo,
mein Problem: "Außenlampen per vis nur nachts schaltbar machen" habe ich jetzt gelöst, aber umständlichst: ein Button, nur lesend, zeigt den Zustand der Lampe, ein weiterer mit opacity=0.0 liegt genau darüber und ist mit einer Bedingung Sichtbarkeit == Nacht ausgestattet. Das ist aber ein ziemliches Gefrickel und muss doch wohl besser lösbar sein.
Leider bin ich ioBroker-Novize und will daher die Profis hier erneut fragen:
(Wie) kann ich ein hq widget on/off direkt mit einer Bedingung, z.B. in einem Mini-Skript verbinden, dass als Schaltbedingung einen Datenpunkt (in meinem Fall eine boolesche Homematic-Systemvariable Tag/Nacht) abfragt? Und dann nachts schaltet und tags nichts tut?
Viele Grüße, EckartS
-
Das ist schlussendlich ganz einfach:
Du benötigst einen Datenpunkt (manuell angelegt, ich mach das immer im JS adapter (Bsp. javascript.0.SwitchObject, typ bool)
Weitere Annahme: die Lampe die du steuern willst sei
deconz.0.Light_5_on
und die Tag Nacht variable ist
HMDay - hier müsstest du per getState den Status der Variablen von HM holen - ich hab kein HMDen verknüpfst du mit dem Punkt Object ID am on/off widget
dann nimmst du folgendes Script
var HMDay = true; on({id: "javascript.0.SwitchObject", change: "ne"}, function(obj) { if (HMDay === true) { // if it is daytime if (obj.newState.ack === false) { if (obj.oldState.val) setState(obj.id, true, true); else setState(obj.id, false, true); } return; } console.log('Object ' + JSON.stringify(obj) + ' was reset'); if (obj.newState.val) { setState("deconz.0.Light_5.on", true); } else { setState("deconz.0.Light_5.on", false); } }); on({id: "deconz.0.Light_5.on", change: "ne"}, function (obj) { if (obj.newState.val === getState("javascript.0.SwitchObject")) { return; } if (obj.newState.val) setState("javascript.0.SwitchObject", true, true); else setState("javascript.0.SwitchObject", false, true); });
Zur Funktionsweise:
Der Script Datenpunkt dient als Zwischenspeicher für den Schalter der im VIS dargestellt wird. Nur nachts wird der mit der eigentlichen Lampe synchronisiert.
Tagsüber wird an Hand des "acknowledge" geprüft ob die Änderung vom Script oder vom Vis kommt. Wenn eine Änderung mit "acknowledge" = true kommt, dann wird diese so akzeptiert und erhalten, wenn nicht wird sie sofort rückgängig gemacht (setstate, aber dann mit acknowledge).Damit zeigt der Button den Status der Lampe auch tagsüber an - man kann sie halt nur damit nicht schalten.
A.
-
Hallo Asgothian,
besten Dank, das habe ich so nachgebaut und es geht. Wird gemerkt für künftige Fälle mit einzelnen Aktoren.
Jetzt habe ich mein Problem doch auch unaufwendiger gelöst: Über die ganze Fläche mit Tastern für Außenlampen eine große grau monochrome Tastfläche im Vordergrund mit opacity==0.5 gelegt, die nur bei Tag sichtbar ist. Tagsüber ist also diese Fläche zu sehen und schattet die darunterliegenen Taster für die Außenlampen ab. Wird sie betätigt, gibt es einen Hinweis, dass die Außenlamen nur nachts einschaltbar sind. Nachts ist sie unsichtbar und die Taster für die Lampen sind zugänglich.
Viele Grüße, EckartS
-
@EckartS
Fein.A.