NEWS
Alle Shelly aus
-
Moin
ich versuche gerade ein Button zu machen der mir ein paar ganz bestimmte Shellys ausschaltet.
Quasi ein "Gute Nacht" Button.Jemand eine Idee ?
-
@dr-pie Wie sehen Deine Versuche denn bisher aus?
-
@guergen praktisch habe ich noch nichts gemacht ... theoretisch weiß ich das ich das haben möchte ...
Mehr ist noch nicht geschehen da ich gar keinen Plan habe wie ich das umsetzten kann/soll/muss. -
@dr-pie sagte: ein paar ganz bestimmte Shellys ausschaltet. Quasi ein "Gute Nacht" Button.
Da hilft ein einfaches Javascript.
const idButton = '...'; const idsShelly = [ 'shelly.0.abc', '...', 'shelly.0.xyz' ]; on({id: idButton, val: true}, function() { for(let i = 0; i < idsShelly.length; i++) { let id = idsShelly[i]; if(getState(id).val) setState(id, false); } });
Die Datenpunkt-IDs müssen natürlich noch eingetragen werden.
-
@paul53 Danke ... aber das scheint komplizierter zu sein ... zumindest für mich da ist komplett neu in der Materie bin.
Was habe ich bisher gemacht:
Im iobroker unter Scripte ein neues Script mit dem Namen "Gute Nacht" angelegt.
Darin dann die ID's der Shellys.
Das sieht dann so aus:const idButton = 'Gute Nacht'; const idsShelly = [ 'shelly.0.SHPLG-S#DD3F6B#1.id', 'shelly.0.SHPLG-S#DDF3DE#1.id', ]; on({id: idButton, val: true}, function() { for(let i = 0; i < idsShelly.length; i++) { let id = idsShelly[i]; if(getState(id).val) setState(id, false); } });
Öhm ... und nun ???
1000 Dank
-
@dr-pie Skript speichern, starten, button drücken und im log schauen, ob es eine Fehlermeldung gibt. Schauen, ob die Shelly abschalten. Die Shelly-Adresse muß natürlich die des power on/off Kanals sein
-
@klassisch hmmmm ....
ich hatte einen Button gemacht.
Aber klicke ich den an wird das Script angehalten und der Button ist weg -
@dr-pie sagte: Das sieht dann so aus:
idButton hat keine gültige ID. Die IDs der Shellys sind sicher nicht die Datenpunkte-IDs, über die man die Shellys schaltet.
Beispiel für eine gültige ID:const idButton = '0_userdata.0.shellys.Gute_Nacht'; // Datenpunkt vom Typ "boolean", Rolle: "button"
-
Vermutlich tust du dir leichter, wenn du über Blockly arbeitest. Das hat mir wesentlich geholfen. Ich hatte keine Kenntnisse über Java.
Reihenfolge:
Einen Datenpunkt anlegen mit bspw. Shelly aus. Hier ein Tipp: Vermutlich werden noch viele weiter Datenpunkte hinzu kommen. Da macht eine gewisse Struktur Sinn.Im nächsten Schritt erstellst du mit Blockly ein Skript. Nähere Infos wie das funktioniert entnimmst du am besten über Erklärvideos auf YouTube o.ä.
Und im letzten Schritt setzt du einen Butten in deiner VIS, mit der du dann entsprechend auf den Datenpunkt zurückgreifst, der dann wiederum das Skript auslöst.
Viel Erfolg.
Grüße
-
Moin
das mit dem Script von @paul53 hab ich so nicht hinbekommen.
Ich hatte mir dann überlegt, wie du ja schon empfohlen hast, es mit Blockly zu versuchen.
Bei YouTube kann man sich da ja unendlich viele Videos reinziehen.Aber es scheitert bei mir an 2 Dingen.
1: Alle Videos die ich mir angeschaut habe sind mit einer ioBroker Version gemacht worden die ich gar nicht kenne und somit die Schritte nicht nachvollziehen kann.
2: Es wird immer erzählt von "Datenpunkte erstellen" ... aber meine Shellys haben diese doch schon angelegt ... oder täusche ich mich da ?
Unter Objekte sind doch alle Punkte da, oder muss man diese noch extra erstellen ?
Danke
-
gelöscht
-
ich habe mit Blockly folgendes Script erstellt:
on({id: "shelly.0.SHCB-1#483FDA927EEC#1.id"/*id*/, val: true}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; }); getState("shelly.0.SHCB-1#483FDA927EEC#1.lights.Switch", function (err, state) { setState("shelly.0.SHCB-1#483FDA927EEC#1.lights.Switch"/*Switch*/, state ? !state.val : true); });
Wenn Shelly ID shelly.0.SHCB-1#483FDA927EEC#1.id true ist dann schalte shelly.0.SHCB-1#483FDA927EEC#1.lights.Switch
So soll das ?
-
@dr-pie du kannst natürlich die original Datenpunkte deiner shelly's verwenden, zukünftig angelegte Alias für deine originalen Geräte, erleichtern dir jedoch das Arbeiten, wenn z.b. ein Gerät getauschtwerden muss/kaputt geht.
Für deine virtuellen Schalter musst du natürlich Datenpunkte (userdata) anlegen
-
@dr-pie Ich verstehe Deinen Code irgend wie nicht.
Bei dem Trigger speicherst Du nur den aktuellen und den vorangeganenen Wert in einer Variablen und dann liest Du den Zustand des Shellies aus und schaltest dann???
Der Zustand interessiert Dich doch gar nicht, also stellst Du doch mmer auf false!Triggern darf nur Dein Gute Nacht Button - und dann schaltest Du doch immer aus. Sprich ist egal wie der jetzige Zustand ist.
Du musst es meines Erachtens wie in dem Skript vom Paul machen.
In dem Skript unten ist doch schon alles drin. Nur in Deinem
const idButton = 'Gute Nacht';
darf nicht Gute Nacht stehen, sondern natürlich der Datenpunkt mit dem Du dann im VIS oder wo auch immer den Gute Nacht Button steuern willst.
Also nehmen wir mal an Du hast einen GuteNacht Datenpunkt unter 0_userdata.0 erstellt, dann ist der Pfad zu diesem Datenpunkt 0_userdata.0.GuteNacht
Wenn Du mit shelly.0.SHCB-1#483FDA927EEC#1.lights.Switch = false das Licht/Shelly ausschaltest, dann brauchst das Skript von paul doch nur so anzupassen:
const idButton = '0_userdata.0.GuteNacht'; const idsShelly = [ 'shelly.0.SHCB-1#483FDA927EEC#1.lights.Switch' ]; on({id: idButton, val: true}, function() { for(let i = 0; i < idsShelly.length; i++) { let id = idsShelly[i]; if(getState(id).val) setState(id, false); } });
Für mehrere Shellies, musst Du nur noch die ganzen IDs für den Switch in das Array idsShelly anpassen.
Mit Blockly könnte das dann auch so aussehen:
und mit Objekt ID müsstest Du dann Deine Schalter angeben also: shelly.0.SHCB-1#483FDA927EEC#1.lights.Switch
-
So sieht es bei mir aus.
<block xmlns="https://developers.google.com/blockly/xml" type="on" id="MH2!xLg#VfJ!|X.)#i9W" x="37" y="-12"> <field name="OID">zigbee.0.b4e3f9fffe6811c2.on</field> <field name="CONDITION">true</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="control" id="aiwu?j=PTT1-aEg]g%XG"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-1#111A32#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="~d;NSOaBCzk|ty^X[83~"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="In?69YUu^,oL6uNbqV0b"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-1#117741#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="5]@QkDORSD?g0vZN(O7I"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="`fI@MCtQ#a#rNPTY}oFP"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-1#117414#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="l[SSXO[bV337,acgaV@L"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="O_5+A^lIa4G9M).9|2#U"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#10B819#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="x7pI{X-*}edB[F[6aJ/+"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="4ZQ[FoaK#k}jf$O$jxJc"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#10B819#1.Relay1.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="Nm2Q2])kgT#l[bnxq03g"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="RcuL%SyZ)@8}7hu(YQa-"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-1#117A0A#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id=":YXiTgtN[$CcZoRl+$TL"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="+9FCExW$Gy.EGLQn]HPX"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-1#115FC1#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="ga-xtVePiY;^Dj;EskzK"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="%DteQ]A_,|rQ{~)q!V6W"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#F408D5#1.Relay0.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="T`W9Lx0Fm@]-1dNTf,G2"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="control" id="l]0G85O|b:e$66I3K|y="> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">shelly.0.SHSW-25#F408D5#1.Relay1.Switch</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="`+Ty$CMm]@J$$iM$|]j/"> <field name="BOOL">FALSE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block>
-
Also muss ich erst mit den Datenpunkten beginnen ?
-
@dr-pie Du legst nur einen Datenpunkt an - GuteNacht - hab Dir unten das Blockly gepostet:
und schaltest mit diesem alle Deine Switch Datenpunkte - siehe Blockly unten - oder auch das JS Code
-
@mickym ok ...
Lege ich den an werde ich nach dem Zustandstyp gefragt.
Automatisch steht da string drin ... das scheint wohl falsch zu sein ... -
Du nimmst ein Boolean als Datentyp
-
@mickym Ihr seid hier echt der Hammer.
Es funktioniert so wie es soll
1000 Dank dafürNun muss ich nur noch den richtigen Button finden ... quasi einen Taster.
Grüße