NEWS
Lovelace Taster erstellen
-
Hallo
Ich stehe etwas auf dem Schlauch, Ich dachte mir dass ich mal versuche meinen Roborock Saugroboter in der Visualisierung von Lovelace einzubinden. Schon bin ich an meine Grenzen gestoßen. Ich weiß nicht wie man einen Taster erstellt der nur kurz angeht und dann wieder zurück. Ich drücke z.B. den Taster der den Roboter frägt wo er ist. Das funktioniert aber der Schalter beibt auf ON .
Wie muss ich vorgehen dass der Schalter nach dem drücken wieder zurück springt.
Hab die Schalter automatisch erstellen lassen.
Danke Fränki -
@fraenki23
warum ist es wichtig, dass der schalter zurück springt? Theoretisch hat der Schalter keinen Zustand.Ich würde empfehlen das UI entsprechend zu bauen, also keinen switch zu nehmen, sondern einen button. Ich weiß nicht genau, welche Karte du nutzen willst. Aber in einer "Elemente"-Karte kann man dafür z.B. den type: Button nehmen. Wenn dann auch noch immer derselbe Wert geschickt werden soll (z.B. true), sähe das z.B. so aus:
type: entities entities: - type: button name: Position action_name: abfragen tap_action: action: call-service service: switch.turn_on service_data: entity_id: switch.Roboter_position_abfragen title: Roborock Saugroboter show_header_toggle: false
Es gibt auch extra Button Card usw...
-
@garfonso Hallo Vielen Dank für deine Hilfe. Ja es hat auch funktioniert wenn man 2 mal den Button gedrückt hat. So ist es aber durch Deine Hilfe viel schöner.
Gruß und Dank Frank -
Hallo, ich würde das gerne noch einmal aufgreifen hier.
Der Taster setzt bei mir den Wert auf TRUE, bleibt dann aber und wechselt nicht wieder zurück auf FALSE.
Gibt es hierfür auch eine Lösung? -
@fozzy
Taster haben per Definition keinen Wert und gehen auch nicht wieder zurück, sondern lösen halt was aus, wenn man sie drückt.Wenn du was hast, was zwischen true/false wechseln soll, dann brauchst du keinen Taster, sondern einen Schalter. Auf englisch switch. Entsprechend für das ioBroker Objekt einfach manuell ein switch-Entity anlegen. Dann gibt es im UI auch einen Schalter der zwischen true/false umschaltet.
Wenn das nicht passen sollte, musst du deinen Use-Case etwas weiter ausführen.
-
Hallo zusammen,
das Thema hatte ich auch. Zuerst mit Szenen und dann mit dem Saugroboter.
Ich löse das mit dem Skript unten. Reagiert manchmal aber leider etwas träge.
/************************************************************************************* * Wenn man in Lovelace in einem Glance Szenen aktivieren will gibt es kein optisches Feedback * * Hier wird ein Bool Objekt für Lovelace angelegt und indirekt die Szene geschaltet. * **************************************************************************************/ //Bool Objekte für Lovelace anlegen // diese müssen noch Manuel für Lovelace aktiviert werden createState('Szenenschalter.Scene0', 0, {type: 'boolean'}); createState('Szenenschalter.Scene1', 0, {type: 'boolean'}); createState('Szenenschalter.GuteNachtJoe', 0, {type: 'boolean'}); createState('Szenenschalter.GutenMorgenJoe', 0, {type: 'boolean'}); createState('Szenenschalter.MorgensAuf', 0, {type: 'boolean'}); createState('Szenenschalter.AbendsZu', 0, {type: 'boolean'}); createState('Szenenschalter.NachtsZu', 0, {type: 'boolean'}); createState('Szenenschalter.Beschattung', 0, {type: 'boolean'}); createState('Szenenschalter.Robi_Speisekammer', 0, {type: 'boolean'}); createState('Szenenschalter.Robi_Kueche', 0, {type: 'boolean'}); createState('Szenenschalter.Robi_EssZi', 0, {type: 'boolean'}); createState('Szenenschalter.Robi_WoZi', 0, {type: 'boolean'}); createState('Szenenschalter.Robi_Eingang', 0, {type: 'boolean'}); createState('Szenenschalter.Robi_FlurEG', 0, {type: 'boolean'}); createState('Szenenschalter.Robi_Buero', 0, {type: 'boolean'}); createState('Szenenschalter.Robi_WC', 0, {type: 'boolean'}); //Eine Liste dieser Objekte generieren //Muss zur Zuordnung in der selben Reihenfolge wie unten sein const Szenenschalter_ids = [ 'javascript.0.Szenenschalter.Scene0', 'javascript.0.Szenenschalter.Scene1', 'javascript.0.Szenenschalter.GuteNachtJoe', 'javascript.0.Szenenschalter.GutenMorgenJoe', 'javascript.0.Szenenschalter.MorgensAuf', 'javascript.0.Szenenschalter.AbendsZu', 'javascript.0.Szenenschalter.NachtsZu', 'javascript.0.Szenenschalter.Beschattung', 'javascript.0.Szenenschalter.Robi_Speisekammer', 'javascript.0.Szenenschalter.Robi_Kueche', 'javascript.0.Szenenschalter.Robi_EssZi', 'javascript.0.Szenenschalter.Robi_WoZi', 'javascript.0.Szenenschalter.Robi_Eingang', 'javascript.0.Szenenschalter.Robi_FlurEG', 'javascript.0.Szenenschalter.Robi_Buero', 'javascript.0.Szenenschalter.Robi_WC', ] //Liste der zugehörigen Szenen //Muss zur Zuordnung in der selben Reihenfolge wie oben sein const Szenen_ids = [ 'scene.0.scene0', 'scene.0.scene1', 'scene.0.GuteNachtJoe', 'scene.0.GutenMorgenJoe', 'scene.0.Rolladen.MorgensAuf', 'scene.0.Rolladen.AbendsZu', 'scene.0.Rolladen.NachtsZu', 'scene.0.Rolladen.Beschattung', 'mihome-vacuum.0.rooms.xxxxxxxxxx.roomClean',//Speisekammer 'mihome-vacuum.0.rooms.xxxxxxxxxx.roomClean', //Küche 'mihome-vacuum.0.rooms.xxxxxxxxxx.roomClean', //Esszimmer 'mihome-vacuum.0.rooms.xxxxxxxxxx.roomClean', //Wohnzimmer 'scene.0.RobiEingang2Mal', //Eingang 'mihome-vacuum.0.rooms.xxxxxxxxxx.roomClean', // Flur EG 'mihome-vacuum.0.rooms.xxxxxxxxxx.roomClean', //Büro 'mihome-vacuum.0.rooms.xxxxxxx.roomClean', //WC ] /******************************************************************* * Wird aufgerufen wenn einer der Schalter in Lovelace gedrückt wird * Aktiviert dann die Szene */ on(Szenenschalter_ids , async function (obj) { let Schalter = obj.id; //der Schalter hat sich geändert, also ist er in der ID let array_pos = Szenenschalter_ids.indexOf(Schalter); //Jetzt die Position im array oben bestimmen let Szene = Szenen_ids[array_pos]; //die zugehörige Szene muss die selbe Position haben //console.log(Szene); //console.log(Schalter) //SchalterChanged(Szene,Schalter); //Wert des Schalter lesen, wenn true Szene aktivieren let Schalterstate = getState(Schalter).val; if(Schalterstate==true) { setState(Szene,true); setStateDelayed(Schalter, false, 1000, false); //Schalter zurück setzen } //Wert der Szene in den Schalter schreiben, damit Status richtig angezeigt wird //let Szenenstate = getState(Szene).val; //setState(Schalter,Szenenstate); });
-
@garfonso sagte in Lovelace Taster erstellen:
@fozzy
Taster haben per Definition keinen Wert und gehen auch nicht wieder zurück, sondern lösen halt was aus, wenn man sie drückt.Wenn du was hast, was zwischen true/false wechseln soll, dann brauchst du keinen Taster, sondern einen Schalter. Auf englisch switch. Entsprechend für das ioBroker Objekt einfach manuell ein switch-Entity anlegen. Dann gibt es im UI auch einen Schalter der zwischen true/false umschaltet.
Wenn das nicht passen sollte, musst du deinen Use-Case etwas weiter ausführen.
Hallo. Ich finde das Verhalten ebenfalls nicht nachvollziehbar bzw. schaffe es nicht, das gewünschte Verhalten mit lovelace umzusetzen...
Wenn ich in Iobroker einen boolean Datenpunkt mit Role: Button erstelle, hat dieser den default state false und wenn ich den button betätige, wechselt er kurz auf true um dann wieder auf false zu springen. Er wechselt daher nur bei Betätigung auf true und kann ohne Betätigung nicht auf true bleiben. Das ist der Sinn eines Tasters/Buttons, so wie man ihn auch aus der Hauselektrik kennt.
Bei Lovelace scheitere ich daran ein solches Tasterverhalten umzusetzen. Mit der action "Toggle" kann man dieses Verhalten zumindest nicht erzeugen da hier bei jeder Betätigung der state nachhaltig geändert wird. D.h. z.B. bei einer Betätigung wird von true auf false und bei der Nächsten von false auf true geschaltet. Das entspricht dem Verhalten eines Switch/Schalters.
Wie kann ich nun mit Lovelace einen Button erzeugen? -
@passuff said in Lovelace Taster erstellen:
Wenn ich in Iobroker einen boolean Datenpunkt mit Role: Button erstelle, hat dieser den default state false und wenn ich den button betätige, wechselt er kurz auf true um dann wieder auf false zu springen
Nein, das stimmt nicht. Eigentlich hat in ioBroker ein State-Objekt mit role Button auch den Flag
"read": false
, d.h. der Zustand kann nicht gelesen werden. Und damit bist du dann auch deutlich näher an dem, was in der Hauselektrik passiert. Der Taster ist immer offen und löst nur beim schließen etwas aus. So ist es in ioBroker auch gedacht.@passuff said in Lovelace Taster erstellen:
Mit der action "Toggle" kann man dieses Verhalten zumindest nicht erzeugen
Korrekt, die action ist nicht, was du suchst.
@passuff said in Lovelace Taster erstellen:
Wie kann ich nun mit Lovelace einen Button erzeugen?
Dazu gibt es mehrere Möglichkeiten. Wenn du z.B. manuell einen switch anlegst, kannst du da angeben, dass der Zustand unsicher ist, dann bekommst du im UI normalerweise zwei Taster, einen für "aus" einen für "an". Das ist das einfachste und du wärst schon etwas näher.
Ganz korrekt (und mittlerweile anscheinend auch per UI konfigurierbar, yay), ist aber halt nicht die action "toggle" zu nehmen, sondern den service nehmen, den du haben willst. In deinem Fall vermutlich
switch.turn_on
.
Oder als Code:
type: button name: Alles aus entity: switch.Alles_Aus tap_action: action: call-service service: switch.turn_off service_data: entity_id: switch.Alles_Aus hold_action: action: more-info
(bei mir wird halt turn_off aufgerufen, also immer ausgeschaltet).