NEWS
Jalousien/Astro Script/Blockly
-
Hallo zusammen, erstmal möchte ich mich bedanken, an allen die so eine tolle Software entwickelt haben!!!
Ich habe hier in 2-3 Tagen mit ioBroker hinbekommen, dass ich in OpenHAB niemals geschafft hätte.Wollte folgendes Umsetzen:
Elektrische Jalousie auf/zu und hoch/runter fahren, und das mit Alexa. Dabei sollte auf/zu jeweils 5% hoch oder runter fahren.
Hab das jetzt so umgesetzt:Shelly 2.5 in der Jalousie.
Folgende Adapter installiert:- Alexa2
- Shelly
- IoT Assistants
- Script Engine
Habe nun folgende Objekte hinzugefügt:
Und folgende Objekte durch den Shelly Adapter gefunden:
Habe nun im IoT Adapter folgende Geräte erstellt:
Der erste ist direkt die Position des Shelly Objekts, der zweite der Benutzerdefinierte.Dann habe ich bei Alexa eine Routine erstellt die bei dem Kommando "Alexa, Jalousie Couch auf" das Gerät "Jalousie Couch steuern" einschaltet und noch eine Routine umgekehrt für "Alexa, Jalousie Couch zu".
Als nächstes folgendes Script geschrieben (Ich programmiere Beruflich ABB Roboter und privat Arduinos/ESP2866, aber Java war absolutes neuland für mich.):on({id:"0_userdata.0.Alexa_Geräte.Jalousie_Couch.steuern"},function(obj){ var wert; if (getState("0_userdata.0.Alexa_Geräte.Jalousie_Couch.steuern").val == true) wert = getState("shelly.0.SHSW-25#10FB0A#1.Shutter.Position").val + 5; else if (getState("0_userdata.0.Alexa_Geräte.Jalousie_Couch.steuern").val == false) { wert = getState("shelly.0.SHSW-25#10FB0A#1.Shutter.Position").val -5; } setState("shelly.0.SHSW-25#10FB0A#1.Shutter.Position",wert); });
So funktioniert alles genau so, wie ich es will. Ich werde noch "stop" hinzufügen, ich würde nur gern von euch wissen, ob es da noch elegantere Lösungen für so etwas gibt und vorallem ob der Java Code so gut ist, oder ob da noch Verbesserungspotenzial steckt.
Die Funktion on() kann doch bestimmt direkt auf "true" und "false" prüfen, nur hab ich noch nicht richtig gerafft wie.
Hab das alles nie gelernt und bin erst privat auf Arduino also C++ und seid einem Jahr mit ABB Rapid Code(ähnlich wie C++ aber simpler).
In OpenHAB hab ich die Art der Programmierung der "rules" nie so richtig gerafft. Hier über Java fühle ich mich zumindest schonmal deutlich mehr "zuhause". -
@darki sagte in Verbessungspotental am Script bzw. Vorgehensweise:
Die Funktion on() kann doch bestimmt direkt auf "true" und "false" prüfen
Ja, aber da beide Werte (false/true) ausgewertet werden, macht es im Trigger keinen Sinn. Vereinfachung:
var wert = getState("shelly.0.SHSW-25#10FB0A#1.Shutter.Position").val; on({id:"0_userdata.0.Alexa_Geräte.Jalousie_Couch.steuern"},function(obj){ if (obj.state.val) wert += 5; else wert -= 5; if(wert < 0) wert = 0; if(wert > 100) wert = 100; setState("shelly.0.SHSW-25#10FB0A#1.Shutter.Position", wert); });
-
Ja funktioniert genauso gut.
Ich werde mich wohl mal in Javascript einlesen müssen.
Ansonsten ist die Vorgehensweise so nicht grundlegend falsch? -
-
@darki was du noch ändern könntest wäre var mit let bzw. const zu ersätzen, da var eingentlich nicht mehr verwendet wird.
Und falls du deine Wertzuweisung noch ein bisschen kürzer machen möchtest kannst du dir die geänderte Zeile unten einmal anschauen.
Wenn die Vorgehensweise funktioniert, dann ist sie nicht falsch. Mitunter wirst du aber vielleicht nach einer Zeit merken, dass es auch einfacher oder eleganter geht.
let wert = getState("shelly.0.SHSW-25#10FB0A#1.Shutter.Position").val; on({id:"0_userdata.0.Alexa_Geräte.Jalousie_Couch.steuern"}, function(obj) { wert = obj.state.val ? wert + 5 : wert - 5; if(wert < 0) wert = 0; if(wert > 100) wert = 100; setState("shelly.0.SHSW-25#10FB0A#1.Shutter.Position", wert); });
-
@J-A-R-V-I-S said in Verbessungspotental am Script bzw. Vorgehensweise:
Wenn die Vorgehensweise funktioniert, dann ist sie nicht falsch. Mitunter wirst du aber vielleicht nach einer Zeit merken, dass es auch einfacher oder eleganter geht.
Deswegen frage ich ja
Da kommen noch einige Jalousien dazu.
Zudem noch ein haufen Rollos und später Dimmer.
Wenn meine Lampen fertig sind, auch ein haufen WS2812b Strpies mit ESP8266 gesteuert durch MQTT.
Ich muss ehrlich zugeben, das ioBroker zwar deutlich schlechter beschrieben/dokumentiert ist als OpenHAB.
Aber ich hab es deutlich schneller gerafft.Wenn ich in ein paar Tagen immer noch so überzeugt bin, werde ich wohl gerne was spenden.
Auch die Community scheint deutlich hilfsbereiter zu sein.
-
Hab jetzt noch Astro hinzugefügt, diesmal mit Blockly.
Leider funktioniert das so nicht.
Heute morgen wurden die Jalousien nicht geöffnet.
Abends sollen alle runterfahren, ausser die Terasse, die soll auf 60% runter und dann kurz darauf auf 65% um zu zu fahren.Längen und Breitengrad sind eingetragen, automatisch nachdem ich Land und Stadt eingegeben habe.
Habe ich was vergessen? -
@darki
Hat sich erledigt. Hatte die Richtungen falsch. -
wenn du mal 15 Prozent fahren willst musst du ja 3x Alexa anquatschen.
Mir ist es lieber ich kann eine gewünschte Position direkt anfahren.
ich habe im iot-Adapter den Datenpunkt meinen DP "shelly.0.SHSW-25#00815D#1.Shutter.Position" eingetragen mit Smartnamen "Rollladen Vitrinenfenster".
-> Alexa, suche Geräte
-> Alexa, schalte Rollladen Vitrinenfenster auf 15 Prozent" -> OKEin Script werde ich nur für die speziellen Aufgaben anlegen.
z.B bei den Rollläden wo die Fenster nach außen öffnen um zu verhindern dass der Laden die Fenster rammt, oder für die Terrrassentür(Haustierpippigehmodus, Aussperrschutz für Astroautomatik wenn wir im Garten sind), dynamische Verschattung bei Sonneneinstahlung.Gruß Michael
-
Jein, also ich benutzte mehrere Kommandos.
Mit "Auf/Zu" fahre ich jeweils 5 vom aktuellen wert.
Wenn ich "hoch/runter" benutze, dann fährt alles 25% hoch bzw runter. Das funktioniert einfach durch verknüpfen des "Position" werts mit einem IoT Gerät.
Kommando "ganz hoch/runter" fährt dann komplett.Hier die Konfiguration:
Jalousie Küche (Position) wirkt direkt auf die Position in %. Kommando "hoch/runter" sind wohl automatisch 25% und "ganz hoch/runter" dann jeweilt komplett.
Jalousie Küche steuern ist der oben genannte Script und wird in Alexa mit Routinen durch "Auf/Zu" ausgelöst.
Jalousie Küche stop setzt mit dem Kommando "Jalousie Küche stop" das Shelly element "pause" aus.Wobei das Kommando "Jalousie Küche stop" wohl auch direkt das Gerät "Jalousie Küche" steuert. Da muss ich mir noch was einfallen lassen.
Insgesammt funktioniert das so schon ganz gut. -
danke für die Erklärung! hoch/runter werde ich dann auch nutzen.