NEWS
[gelöst]Nur einmal im definierten Zeitraum auslösen? -Sonos Ansage
-
Liebes Forum,
ich bräuchte da mal ein bisschen Programierhilfe: ich möchte eine Aktion/ ein Skript abhängig vom Zustand eines Bewegungsmelders "Bewegung erkannt" starten, aber eben nur genau einmal in einem definierten Zeitraum und eben nicht jedes Mal, wenn der Bewegungsmelder eine Bewegung erkennt. Zur Verdeutlichung: zwischen 06:30 und 10:00 soll das Skript, wenn eine Bewegung erkannt wird, ausgelöst werden. Wie kann ich das in JavaSkript programmieren? Ich habe keine richtige Udee….
Danke für die Hilfe.
-
Leg dir doch einfach eine Variable an die du bei der ersten erkannten Bewegung auf true setzt und immer abfrägst bevor die Aktion ausgeführt wird. Und zu Beginn des Zeitraums setzt du sie zurück.
Btw gäbe nicht erst genau die gleiche Frage hier im Forum?
-
@Jey Cee:Btw gäbe nicht erst genau die gleiche Frage hier im Forum? `
Jup
–-----------------------
Send from mobile device
-
@Dutchman wenn du weist wo kannst du es hier verlinkten? Ich habe nicht gefunden.
-
Danke! Ja, so ähnlich hatte ich das schon mal gefragt. Aber da ging es ausschließlich um die Veränderung dez Zustandes. Und jetzt ging es mir um den Zeitraum, in dem nur EINMAL die Änderung ermittelt werden soll. Ich hatte auch etwas mit dem Befehl "Schedule" gefunden. Ich werde daraus aber leider nicht richtig schlau…
-
Hi,
Hilft dieser thread ?
http://forum.iobroker.net/viewtopic.php?f=22&t=6486
~Dutch
–-----------------------
Send from mobile device
-
Danke! Schau ich mir in Ruhe an!
-
Danke! Schau ich mir in Ruhe an! `
Von unterwegs/tapatalk bisschen öde mit cooy Paste
In den Link steht das Beispiel mit compare time, damit definierst du den Zeitraum worin das Script etwas machen muss.
Zusätzlich halt noch eine Variable steuern und dann mit if den Wert auslesen.
Vergesse nur nicht irgendwo die Variable zu resetten.
Wen ich daheim bin kann ich ein Beispiel Posten das ich benutze um die Variable bettzeit zu setzen (einmalig) welches Lampen ausschaltet, per sunrise setze ich dies wieder auf FALSE (könnte auch auf Zeit per cron)
Sag Bescheid wenn du Beispiel brauchst.
~Dutch
–-----------------------
Send from mobile device
-
Das ist sehr lieb, Dutchman. Ich probiere erstmal und werde das funktionsfähige Skript hier posten - wenn ich es hinkriege.
-
Das ist sehr lieb, Dutchman. Ich probiere erstmal und werde das funktionsfähige Skript hier posten - wenn ich es hinkriege. `
so wieder am PC, hier hast du mal ein beispiel wie ich es gelöst habe zur inspieration
Blöcke:
Der generierte JavaCode sieht dan in etwa so aus:
var Bedtime; // Activate Bed-Time Modus by TV off Bedtime = false; on({id: "harmony.0.Woonkamer.activities.currentStatus"/*activity:currentStatus*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; // Disable lights living room with delay of 15 seconds if (getState("harmony.0.Woonkamer.activities.currentStatus").val == 0 && getState("openhab.0.items.Woonkamer_Kast").val == true && compareTime("22:00", "6:00", "between")) { setStateDelayed("openhab.0.items.Woonkamer_Kast", false, 15000, false); } Bedtime = true; }); schedule({astro: "sunrise", shift: 0}, function () { if (compareTime(getAstroDate("sunrise", undefined, 0), null, "<", null) && Bedtime == true) { Bedtime = false; } });
In dem block setze ich eine variable auf falsch, danach die abfrage ob die variable false ist wen ja setze auf true.
Bei nästen mal ist die variable true und wird nichts ausgeöst.
Der zweite block setz per astro funtion den block wieder auf falsch (war in meinem fall praktisch kan aber auch anderer shedule usw sein).
Da ich es mit variablen löse ist der wert nicht festgelegd, also adapter, script oder iobroker neustart fängt dan wieder bei NULL an.
Dutch
PS: wenn du diese blöcke probieren möchtest hier der code zum import:
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="comment" id="4j}*1#+#WVgT)p4M#cK7" x="38" y="38"><field name="COMMENT">Activate Bed-Time Modus by TV off</field>
<next><block type="variables_set" id="xvs=nbv9z_Z)s;4Z!|#^"><field name="VAR">Bedtime</field>
<value name="VALUE"><block type="logic_boolean" id="AjrYZTXBGz7w,~Vol6Wz"><field name="BOOL">FALSE</field></block></value>
<next><block type="on" id="kPCG3bU;Fc7HHYySm@{Q"><field name="OID">harmony.0.Woonkamer.activities.currentStatus</field>
<field name="CONDITION">ne</field><statement name="STATEMENT"><block type="comment" id="uqbWZ2UlU)j6at~,Z/2B"><field name="COMMENT">Disable lights living room with delay of 15 seconds</field> <next><block type="controls_if" id="sj8Fv8r-kr_)ErG;Yf;;"><value name="IF0"><block type="logic_operation" id="|h1IJOenPb,#rP[L|R]^"><field name="OP">AND</field> <value name="A"><block type="logic_operation" id="BvI15Eej?(*1|0i~`q-?"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="%/t`k|moXhs_pf@+@4jH"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="eD5hAr/sj%%Gj=~nEy#s"><field name="ATTR">val</field> <field name="OID">harmony.0.Woonkamer.activities.currentStatus</field></block></value> <value name="B"><block type="math_number" id="_*b=OQb:S}sY.sF|N3_~"><field name="NUM">0</field></block></value></block></value> <value name="B"><block type="logic_compare" id=")onbLwMpgl32fcvB1w+N"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="An`zE6!!=a%YQBUf79}P"><field name="ATTR">val</field> <field name="OID">openhab.0.items.Woonkamer_Kast</field></block></value> <value name="B"><block type="logic_boolean" id="YQQV+JG[t+nkr3Ag:3mj"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <value name="B"><block type="time_compare" id="%WY?|AebIvo?*ZA,p#8{"><mutation end_time="true"></mutation> <field name="OPTION">between</field> <field name="START_TIME">22:00</field> <field name="END_TIME">6:00</field></block></value></block></value> <statement name="DO0"><block type="control" id="B_1~Cv`Iiw-/3q9?4pgv"><mutation delay_input="true"></mutation> <field name="OID">openhab.0.items.Woonkamer_Kast</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">15000</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="c87lFDJLKId2B+qp#aUQ"><field name="BOOL">FALSE</field></block></value></block></statement> <next><block type="variables_set" id="=~tAtK@6owV.Uq`Br9MB"><field name="VAR">Bedtime</field> <value name="VALUE"><block type="logic_boolean" id="Ahp!B(;)WC+R#C`kAQ{K"><field name="BOOL">TRUE</field></block></value></block></next></block></next></block></statement> <next><block type="astro" id="nqQ4%f_iInvU{ytAz]47"><field name="TYPE">sunrise</field> <field name="OFFSET">0</field> <statement name="STATEMENT"><block type="controls_if" id=";@|9?-X9ar]3sk+h`|1T"><value name="IF0"><block type="logic_operation" id="G+a9C.cH4Ulu`sQ3JfTP"><field name="OP">AND</field> <value name="A"><block type="time_compare_ex" id="S!|M8-u}DG4r(tA;X@(-"><mutation end_time="false" actual_time="true"></mutation> <field name="USE_ACTUAL_TIME">TRUE</field> <field name="OPTION"><</field> <value name="START_TIME"><shadow type="text" id="tK`gyY)_fn#+gwhF-f`T"><field name="TEXT">12:00</field></shadow> <block type="time_astro" id="X0.J?OLzgCDMG|#6`qo,"><field name="TYPE">sunrise</field> <field name="OFFSET">0</field></block></value></block></value> <value name="B"><block type="logic_compare" id="rIsza`dc[(,q[z0Z4z}N"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="J]H`(I+93=?DT/f7DPiw"><field name="VAR">Bedtime</field></block></value> <value name="B"><block type="logic_boolean" id="R=+:4N;=5u?Zln_`)aG`"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO0"><block type="variables_set" id="aG6Cp4X#Id|6cur],Hpd"><field name="VAR">Bedtime</field> <value name="VALUE"><block type="logic_boolean" id="yZN#K,zD;JtsmK(/k4Rj"><field name="BOOL">FALSE</field></block></value></block></statement></block></statement></block></next></block></next></block></next></block></xml>
-
Super, herzlichen Dank! Ich werde es testen.
-
nur genau einmal in einem definierten Zeitraum und eben nicht jedes Mal, wenn der Bewegungsmelder eine Bewegung erkennt. Zur Verdeutlichung: zwischen 06:30 und 10:00 soll das Skript, wenn eine Bewegung erkannt wird, ausgelöst werden. `
Vorschlag:var idMove = '...'; // ID des Bewegungsmelders var idResult = '...'; // ID des Datenpunktes, der auf Bewegung reagieren soll var move = false; on({id: idMove, val: true}, function() { if(!move && compareTime('6:30', '10:00', 'between')) { move = true; setState(idResult, true); } }); schedule('30 6 * * *', function() { // täglich 6:30 Uhr move = false; });
-
Danke, Paul!
-
Bisher habe ich dieses Problem mit der Auslösung im definierten Zeitraum einfach mittels eines ccu Programms gelöst. Und weil das nicht gut funktioniert hat, wollte ich es direkt in iobroker lösen. Inzwischen hat sich jedoch ergeben, dass es irgendwie an meiner Sonos liegt. Es ging darum, morgens eine Ansage zu haben. Das funktioniert aber leider nur unregelmäßig und ich weiß noch nicht, woran es liegt. Ich habe den Sonos Adapter in Verdacht. Denn auch, wenn ich mein Skript dazu manuell auslöse, kommt die Ansage nicht immer….Ich muss mich jetzt einmal daran machen, dem Problem auf den Grund zu gehen. Bis hierhin erstmal vielen Dank euch allen. Ich werde berichten...
-
Kommt deine Ansage gar nicht (also wird SayIt nicht "bespielt"?), oder ist nur die Sonos stumm? Es geht doch sicherlich um das Wetter/Termin Skript, oder?
Ich löse das auch über eine CCU Variable und das funktioniert einwandfrei.
-
Tempestas,
Richtig! Darum geht es. Ich habe das ja auch mit der CCU Variablen gelöst. Sayit wird bespielt. Hier mal ein log Auszug
sonos-0 2017-06-20 07:51:35.576 info Restore state: volume - 49, mute: false, uri: sonos-0 2017-06-20 07:51:17.946 info Play on sonos[RINCON_B8E937E5C96201400]: http://192.168.xx.xx:8082/state/sayit.3.tts.mp3, Volume: 40 sonos-0 2017-06-20 07:51:17.931 info try to control id sonos.0.root.192_168_0_89.tts with {"val":"40;http://192.168.xx.xx:8082/state/sayit.3.tts.mp3","ack":false,"ts":1497937877917,"q":0,"from":"system.adapter.sayit.3","lc":1453448706} sayit-3 2017-06-20 07:51:17.853 info Copied file '/opt/iobroker/node_modules/iobroker.sayit/say.mp3' to '/opt/iobroker/cache/4fb8e282a851c96d6a99a645f84b4505.mp3' sayit-3 2017-06-20 07:51:17.844 info Set "sonos.0.root.192_168_0_89.tts: 40;http://192.168.xx.xx:8082/state/sayit.3.tts.mp3 sayit-3 2017-06-20 07:51:16.977 info saying: Guten Morgen, heute ist Dienstag der 20te Juni 2017\. Es ist 7 Uhr und 51 Minuten. Die Aussentemperatur beträgt 17,6 Grad. Wetter Bedingungen, Heiter .Heute haben Geburtstag, Xxxxxx
Dennoch bleibt die Sonos manchmal stumm, manchmal nicht. Ich habe den Eindruck, dass das mit dem Abspielen eines Radiosenders nach der Ansage zu tun hat. Bin aber nicht sicher. Ich beobachte vier Situationen:
1. ein Radiosender läuft. Wenn ich dann die Durchsage sende, wird sie zunächst korrekt angespielt. Dann allerdings nochmal, aber deutlich leiser. Warum zweimal, ich weiß es nicht. Und danach wird das Radio auch nicht fortgesetzt
2. eine Playlist läuft: diese wird von der Durchsage wunschgemäß unterbrochen und danach die Playlist fortgesetzt. Also alles bestens
3. Radio läuft und gleichzeitig gibt es auch noch eine Playlist in der Sonos Anzeige: Durchsage erfolgt wie unter 1. zweimal, beim zweitenmal leiser und weder das Radio noch die Playlist werden danach gespielt.
4. kein Radiosender, keine in der Sonos Anzeige: die Durchsage erfolgt korrekt. Das file wird angespielt und "verschwindet" danach auch aus der Playeransicht bei Sonos.
Fazit und Frage: wenn ein Radiosender aktiv ist, werden Durchsagen nicht mehr sauber angespielt. Hat jemand eine Idee, wie das korrigiert werden kann?
-
Sollten wir das nicht in einen separaten thread besprechen ?
Auslösung in Zeitraum ist gelöst oder?
Jetzt haben wir noch ein Sonos Problem
–-----------------------
Send from mobile device
-
Das war mir auch schon im Kopf herumgegangen. Soll ich den Titel ändern?
Vielleicht hören wir noch, was tempestas sagt….
-
Hallo skorpil,
nur in Kürze:
Auch ich (und andere) kennen das Problem mit SayIt, das es leiser wird, wenn mehrere Ansagen kommen.
Meine Vermutung ist, dass SayIt seinen Volume Befehl, sofern gesetzt, multipliziert, d.h. z.B. aus 15 (=0.15 von max 1) wird beim nächsten Mal 0.15 x 0.15 = 0,025 . Oder irgendwie so in der Richtung. Genaues bleibt unklar.
Ich kenne es von meiner "Fenster offen" Ansage, dass es immer leiser wurde bis hin zum totalen Muten der Boxen.
Siehe den Link, da beschreibt ein anderer User ebenfalls ähnliche Probleme. Dort war mir aufgefallen, dass er seine Ansage aus mehreren SayIts zusammensetzt, statt eine Datei zu schaffen, die dann abgespielt wird. Entsprechend wurde es bei ihm auch immer leiser. Leider hat er auf meine Nachfrage nicht mehr reagiert.
http://forum.iobroker.net/viewtopic.php?f=21&t=6694
Auch bei meinen Versuchen, meinen Alarmsound für die Alarmanlage über SayIT auszugeben, ist es mir aufgefallen. Da hatte ich zwar auch Skript Fehler, tatsache war aber, dass es immer leiser wurde, wenn das Skript die nächste Runde SayIT "eingeleitet" hat, während die alte noch aktiv war. Wobei "aktiv" teilweise nach meinem Eindruck länger ist als die reine Spielzeit der mp3.
Was für einen Radiostream nutzt du, wenn es zu Problemen kommt? Irgendwo habe ich von Problemen bei Amazon Prime gelesen, wohingegen tuneIn funktioniert (bei mir läufts ohne Probleme).
Bin nun erstmal unterwegs, mehr später.
-
Ich arbeite mit tuneIn. Das sieht ja danach aus, als hätte noch niemand eine Lösung. Und das scheint auch die Ursache für mein Problem zu sein…
Restore state: volume - 8, mute: false, uri: sonos-0 2017-06-21 08:02:06.429 info Play on sonos[RINCON_B8E937E5C96201400]: http://192.168.0.80:8082/state/sayit.3.tts.mp3, Volume: 40 sonos-0 2017-06-21 08:02:06.414 info try to control id sonos.0.root.192_168_0_89.tts with {"val":"40;http://192.168.0.80:8082/state/sayit.3.tts.mp3","ack":false,"ts":1498024926399,"q":0,"from":"system.adapter.sayit.3","lc":1453448706}
Schau mal auf mein Post #16. Da war "restore state: volume -40" und jetzt war es "-8".
Heute war die Ansage da.
Vielleicht sollten wir das mal als Fehler im GitHub melden und ggf. in einen neuen threat unter Adapter formulieren. Was mein ihr?