Beiträge von geschild

    Noch ein Tip.

    Um zu beobachten, was im script passiert ist das debug-Element sehr nützlich. Du findest es unter dem Menue "System".

    Ich habe es mal in den cron eingefügt und ihm den Wert von <ZeitbegrenzungHandsteuerung> zugewiesen. Unten kannst du dann beobachten wie der Wert heruntergezählt wird.

    Beim testen würde ich den cron aber auf einen Takt von wenigen Sekunden einstellen. Sonst wirds langweilig. ;)

    Debugs kannst du so viele du willst an beliebiger Stelle einsetzen. Hat mir oft sehr geholfen, wenn ich Programmierfehler gesuchjt habe.

    Ein Vorschlag auf die Schnelle ohne Gewähr:

    Erstelle einen weiteren Datenpunkt. <ZeitbegrenzungHandsteuerung> habe ich ihn genannt und einen Zeitplan, der z.B. alle Minute ausgeführt wird. In diesem wird deine <ZeitbegrenzungHandsteuerung> im Minutentakt um 1 heruntergezählt, bis der Wert kleiner gleich Null ist. Danach wird der Wert auf Null begrenzt, damit auf Dauer nicht bis minus zigmillionen ;) gezählt wird. Falls du als <ZeitbegrenzungHandsteuerung> einen Wert von 1000 eingibst läuft die Handsteuerung ohne diese Zeitbegrenzung, bzw. nur noch begrenzt beim Wechsel Morgen/Mittag/Nacht.

    In deinen Bilder fehlen mir die folgenden Trigger, die letztendlich die Steuerung aufrufen. Ich habe die script-Datei nochmal unter quellcode begefügt.

    Ich bin nicht der grosse vis-Programmierer. Vielleicht gibt es sowas wie eine "checkbox" wo man einen Haken setzen kann oder löschen und das dann mit dem Datenpunkt <ManuelleSollTemperaturGueltig> verbinden.

    Oder Zwei Button <ManuelleSollTemperaturGueltig> = True <ManuelleSollTemperaturGueltig> = False.

    Sollte ich dich nicht richtig verstanden haben, melde dich nochmal.

    Ich selber arbeite mit dem AppInventor. Man schreibt damit eine Android App und das Starten einer App geht wesentlich schneller als das einloggen in vis, das mich immer sehr genervt hat.

    Ich habe die Steuerbefehle in eine Funktion verschoben und zwei trigger hinzugefügt.

    Scipttext anbei:

    <block xmlns="https://developers.google.com/blockly/xml" type="procedures_defnoreturn" id="8l/unR5O:MKqnMkKUMPz" x="538" y="-537.0000000000001">

    <field name="NAME">temperaturSteuerung</field>

    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>

    <statement name="STACK">

    <block type="controls_if" id="C0zj{Nk3~3Ssk?xtp4]?">

    <mutation else="1"></mutation>

    <value name="IF0">

    <block type="logic_compare" id="xy/M5sb5nem[yfF/PS9p">

    <field name="OP">EQ</field>

    <value name="A">

    <block type="get_value" id="Odtoa3ApV$ct,$WPR`(a">

    <field name="ATTR">val</field>

    <field name="OID">0_userdata.0.FensterSchlafzimmerOpen</field>

    </block>

    </value>

    <value name="B">

    <block type="logic_boolean" id="pHlQZW5l^B,dB1v^~.I|">

    <field name="BOOL">TRUE</field>

    </block>

    </value>

    </block>

    </value>

    <statement name="DO0">

    <block type="control" id="0^jg7szSJ%SYD$9zPn8x">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="math_number" id="QsCPc~BOQt%SF4*z}0/l">

    <field name="NUM">16</field>

    </block>

    </value>

    </block>

    </statement>

    <statement name="ELSE">

    <block type="controls_if" id="B;{;l0YPL}rwg4^NR-10">

    <mutation else="1"></mutation>

    <value name="IF0">

    <block type="get_value" id="go(O/KN:Wnhlbj{?lAeJ">

    <field name="ATTR">val</field>

    <field name="OID">0_userdata.0.ManuelleSolltemperaturGueltig</field>

    </block>

    </value>

    <statement name="DO0">

    <block type="control" id="Ap[OuGN?l+k!A{A8JAUA">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="get_value" id="~2+n)McvTv}uMuZk5vSY">

    <field name="ATTR">val</field>

    <field name="OID">0_userdata.0.ManuelleSollTemperatur</field>

    </block>

    </value>

    </block>

    </statement>

    <statement name="ELSE">

    <block type="controls_if" id="SYm_D$?9qMP6)*%U*M[=">

    <mutation elseif="2"></mutation>

    <value name="IF0">

    <block type="variables_get" id="?FF~~Ew@N]v:1L/#j99B">

    <field name="VAR" id="wG2z%e(^#dz(:emo!uwn">Morgen</field>

    </block>

    </value>

    <statement name="DO0">

    <block type="control" id="T=c[Ks/OKk/2$Z8iOkH:">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="math_number" id="lO+V]5Ry+lJ2S#DDh38N">

    <field name="NUM">27</field>

    </block>

    </value>

    </block>

    </statement>

    <value name="IF1">

    <block type="variables_get" id="3TX;0T01Osw_[YVfht4/">

    <field name="VAR" id="9u/1QX^*}PQP=Xk*N=lC">Mittag</field>

    </block>

    </value>

    <statement name="DO1">

    <block type="control" id="R@=RWQzdvox%d/Sy=cTW">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="math_number" id="a:v/FeFL6U%NIfH7~LOb">

    <field name="NUM">18</field>

    </block>

    </value>

    </block>

    </statement>

    <value name="IF2">

    <block type="variables_get" id=".P]D}x5x+F.?}$A#pKFG">

    <field name="VAR" id="y,ou3srEvfx~9qmk^;g(">Nacht</field>

    </block>

    </value>

    <statement name="DO2">

    <block type="control" id="^.2=,8!k7d4|rF1-4ULO">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="math_number" id="w`r``%AM]/T*Z9H!)FRo">

    <field name="NUM">20</field>

    </block>

    </value>

    </block>

    </statement>

    </block>

    </statement>

    </block>

    </statement>

    </block>

    </statement>

    </block>

    Bilder siehe unten.

    Ich habe im iobroker 2 Datenpunkte erzeugt:

    ManuelleSollTemperaturGueltig als Logikwert

    ManuelleSollTemperatur als Zahl.

    Von Vis aus diese Datenpunkte beschreiben.

    Diese Variante sorgt dafür, dass der Fensterkontakt sofort ausgewertet wird und erst nicht alle 5 MInuten im Zeitplan.


    -------------------------------------------------------

    Diesen Bereich kopieren und in script importieren:

    <block xmlns="https://developers.google.com/blockly/xml" type="on_ext" id="j9Y7hYIug=N6%a!NX;Kt" x="62.728" y="-412.42400000000004">

    <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>

    <field name="CONDITION">ne</field>

    <field name="ACK_CONDITION"></field>

    <value name="OID0">

    <shadow type="field_oid" id="KR~axIn2hRAyiTE|+,q:">

    <field name="oid">0_userdata.0.Fenster1auf</field>

    </shadow>

    </value>

    <statement name="STATEMENT">

    <block type="controls_if" id="C0zj{Nk3~3Ssk?xtp4]?">

    <mutation else="1"></mutation>

    <value name="IF0">

    <block type="logic_compare" id="xy/M5sb5nem[yfF/PS9p">

    <field name="OP">EQ</field>

    <value name="A">

    <block type="get_value" id="Odtoa3ApV$ct,$WPR`(a">

    <field name="ATTR">val</field>

    <field name="OID">0_userdata.0.FensterSchlafzimmerOpen</field>

    </block>

    </value>

    <value name="B">

    <block type="logic_boolean" id="pHlQZW5l^B,dB1v^~.I|">

    <field name="BOOL">TRUE</field>

    </block>

    </value>

    </block>

    </value>

    <statement name="DO0">

    <block type="control" id="0^jg7szSJ%SYD$9zPn8x">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="math_number" id="QsCPc~BOQt%SF4*z}0/l">

    <field name="NUM">16</field>

    </block>

    </value>

    </block>

    </statement>

    <statement name="ELSE">

    <block type="controls_if" id="B;{;l0YPL}rwg4^NR-10">

    <mutation else="1"></mutation>

    <value name="IF0">

    <block type="get_value" id="go(O/KN:Wnhlbj{?lAeJ">

    <field name="ATTR">val</field>

    <field name="OID">0_userdata.0.ManuelleSolltemperaturGueltig</field>

    </block>

    </value>

    <statement name="DO0">

    <block type="control" id="Ap[OuGN?l+k!A{A8JAUA">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="get_value" id="~2+n)McvTv}uMuZk5vSY">

    <field name="ATTR">val</field>

    <field name="OID">0_userdata.0.ManuelleSollTemperatur</field>

    </block>

    </value>

    </block>

    </statement>

    <statement name="ELSE">

    <block type="controls_if" id="SYm_D$?9qMP6)*%U*M[=">

    <mutation elseif="2"></mutation>

    <value name="IF0">

    <block type="variables_get" id="?FF~~Ew@N]v:1L/#j99B">

    <field name="VAR" id="wG2z%e(^#dz(:emo!uwn">Morgen</field>

    </block>

    </value>

    <statement name="DO0">

    <block type="control" id="T=c[Ks/OKk/2$Z8iOkH:">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="math_number" id="lO+V]5Ry+lJ2S#DDh38N">

    <field name="NUM">27</field>

    </block>

    </value>

    </block>

    </statement>

    <value name="IF1">

    <block type="variables_get" id="3TX;0T01Osw_[YVfht4/">

    <field name="VAR" id="9u/1QX^*}PQP=Xk*N=lC">Mittag</field>

    </block>

    </value>

    <statement name="DO1">

    <block type="control" id="R@=RWQzdvox%d/Sy=cTW">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="math_number" id="a:v/FeFL6U%NIfH7~LOb">

    <field name="NUM">18</field>

    </block>

    </value>

    </block>

    </statement>

    <value name="IF2">

    <block type="variables_get" id=".P]D}x5x+F.?}$A#pKFG">

    <field name="VAR" id="y,ou3srEvfx~9qmk^;g(">Nacht</field>

    </block>

    </value>

    <statement name="DO2">

    <block type="control" id="^.2=,8!k7d4|rF1-4ULO">

    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>

    <field name="OID">0_userdata.0.TargetTemp</field>

    <field name="WITH_DELAY">TRUE</field>

    <field name="DELAY_MS">1000</field>

    <field name="UNIT">ms</field>

    <field name="CLEAR_RUNNING">FALSE</field>

    <value name="VALUE">

    <block type="math_number" id="w`r``%AM]/T*Z9H!)FRo">

    <field name="NUM">20</field>

    </block>

    </value>

    </block>

    </statement>

    </block>

    </statement>

    </block>

    </statement>

    </block>

    </statement>

    </block>

    Die cron-Regel besagt: in der Zeit von 8 bis 10 Uhr mach, was im folgenden steht.... und das wird gemacht.

    Du könntest z.B. mit dem ersten cron eine Variable setzen z.B. <Es ist zwischen 8 und 10> = 1. Fertig.

    Den jeweiligen Fensterkontakt verwendest du als Trigger (bei Änderung)

    fragst dann ab, ob o.g. Variable gesetzt ist

    und wenn ja bearbeitest du erst dann deine falls-Abfrage, die zur Zeit im cron steht..

    Ist nur ein Vorschlag von mehreren möglichen.

    In allen andern cron-Abfragen nicht vergessen, die nun nicht verwendeten Variablen wieder auf 0 zu setzen.

    Solltest du, wenn das Fenster wieder geschlossen wird, die geänderte Temperatur weiter verwenden wollen,

    diese bei "Fenster geöffnet" zwischenspeichern und bei "Fenster geschlossen" verwenden.

    Viele Wege führen nach Rom.

    Ich habe um den Iot_Adapter bisher einen Bogen gemacht, hatte auch keinen Bedarf. Der Alexa2 Adapter arbeitet bestens. Keine Iot-Cloud Umwege, keine Kosten.

    Ich habe auch alle Geräte von meiner Alexa gelöscht und arbeite nur noch mit Spach-Text-Erkennung via .../history und script. Ist m.E. übersichtlicher und einfacher, da die scripte alle gleich aufgebaut sind. Keine lange Gerätesucherei mit der Alexa (manchmal 2 - 3mal bis ein Gerät erkannt wurde) und wenn meine Sprache nicht sauber erkannt wird (also Alexa behauptet, das Gerät nicht zu kennen), kann ich nachsehen was Alexa nicht richtig versteht (Gartenlaterne -> garten laterne) und wesentlich schneller anpassen als via AlexaGerät.

    Desweitern kann ich erkennen welches Gerät den Befehl gehört hat und gleichlautende Befehle selektiv bearbeiten. "Licht an" an die Alexa Wohnzimmer ---> Im Wohnzimmer geht das Licht an.

    Als auslösende Kommandos bin ich nicht an ein, an, aus ... gebunden. Ich habe z.B. festgestellt, dass bei den Rollos: rauf, runter, halt desweiteren halb, viertel,.. für Zwischenposition sehr sicher verstanden werden.


    Den Ton der Alexa schalte ich nach jedem Befehl für ein paar Sekunden ab, dann brauche ich mir nicht immer die Standardsätze anzuhören.

    Aber wie gesagt, es gibt viele Wege und jeder sollte den für sich gangbarsten finden.

    Hier ein Ausschnitt aus einem bei mir laufenden script. Der Datenpunkt <alexa2.0/history/summary> wird als Trigger verwendet und (bei mir Wort für Wort = rollo -> eins -> rauf) ausgewertet. Schau bitte im history nach was Alexa genau!! verstanden hat, sonst klappt der Vergleich nicht. Manchmal versteht sie etwas ganz anders als man denkt. Aus "Gartenlaterne" macht sie "garten" "laterne", also zwei Worte und bei klein geschrieben.

    Dann setzt du den Text den Alexa sagen soll wie folgt zusammen:

    Hinter dem Objekt <speak> steckt: Alexa2.0/Echo-Devcices//"DeinDevice"/Commands/speak.

    Und schon sprich Alexa mit dir.

    Häng dich mit dem Rx Eingang eines FTDI Adapters an diese Rx Tx Leitungen und protokolliere mit einem Terminalprogramm mit. Du kannst auch die beiden Leitungen über 2 Dioden verbinden (ob Anoden oder Kathoden zusammen an den FTDI hab ich leider vergessen, ausprobieren) und so bei Datenrichtungen auf einmal sehen.

    Tuya verbaut in letzter Zeit das WB2S Modul, was keinen ESP82xx enthält. Ich hoffe du hast so ein Ding nicht erwischt, da es dann nicht so einfach ist mit dem flashen.

    Wenn du einen FTDI Adapter (USB <-> seriell) und einen Lötkolben hast, kann du einen die orginal .bin wieder aufspielen und zum anderen dann den Datenverkehr zwischen ESP + microControler mit einem Terminalprogramm (z.B. Termite) beobachten und auswerten. So ein Adapter kostet nur ein paar Euro fünfzig bei ebay. Bei Datailfragen stehe ich gerne zur Verfügung.