NEWS
"Badfenster offen" funktioniert nur teilweise
-
Hallo zusammen,
ich habe mir - mit einlesen und Copy&Paste aus diesem Forum - das Blockly hier zusammengebastelt.
Das Skript funktioniert tadellos, sobald ich nur EIN Fenster öffne.
Öffne ich BEIDE Fenster, erhalte ich die Meldung alle 15 Minuten (unabhängig davon, ob ich die Fenster bereits innerhalb den 15 Minuten geschlossen habe oder erst nachdem ich daran erinnert wurde).Stehe ich auf dem Schlauch?
-
@hertob81 sagte: Öffne ich BEIDE Fenster, erhalte ich die Meldung alle 15 Minuten
Es muss verhindert werden, dass das Intervall beim Öffnen des zweiten Fensters noch einmal gestartet wird, da es sich dann nicht mehr stoppen lässt. Vorschlag:
Anmerkung: Man muss erst eine dummy-Variable erstellen, um auf die Timer-Variable Intervall zugreifen zu können.
-
@hertob81
Moin, so wie ich das sehe übergibst Du ja auch nur einen Wert in der Benachrichtigung.
Warum brauchst Du "sonst falls" ?Für mich erscheint das logischer
-
@paul53
Ich wäre nie darauf gekommen, dass durch das öffnen des zweiten Fensters das Programm nochmal gestartet wird und sich nicht mehr stoppen lässt....
Aus diesem Grund habe ich eigentlich "sonst falls" -> "Fensterkontakte auf TRUE" damit, wenn die Fenster zu sind, das ganze gestoppt wird.
Ist aber wohl ein Denkfehler.@Thomas4170
Zu deiner Frage "sonst falls" siehe oben. Ich übergebe - aus Spass - die Außentemperatur, daher nur ein Wert.
Du benutzt bei Dir "TIMEOUT" ich bzw. @paul53 hat "Intervall". Komme ich mit beiden ans Ziel?Und Danke für die schnelle Hilfe! Ich habe es jetzt aktuell so...
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable type="interval" id="Intervall">Intervall</variable> </variables> <block type="on_ext" id="|dH|olOMYVn~H%Jn|nyS" x="-487" y="-87"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="Nk5ABz@dhUhd8bYqb7IE"> <field name="oid">zigbee.0.00158d0006d416f7.opened</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="bR^W?^XUx~f2ep-bReP."> <field name="oid">zigbee.0.00158d0006d6892c.opened</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="]6NmY5Arm*oC(/C4C9fx"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_operation" id="?9`npQFK0yr$J{g7m,qy" inline="false"> <field name="OP">OR</field> <value name="A"> <block type="logic_compare" id="ir8%O$UIa_2vun^eR:gs"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="-#)apV4ko?9bjc34q,cp"> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d0006d416f7.opened</field> </block> </value> <value name="B"> <block type="logic_boolean" id="E_QD2`tR^rij]xRveiSk"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="fIzAp1iVwg3QXon;T]eV"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="K;LAH/JOXy:Pz2gWPtw8"> <field name="ATTR">val</field> <field name="OID">zigbee.0.00158d0006d6892c.opened</field> </block> </value> <value name="B"> <block type="logic_boolean" id="f,3g-P=S_+71(~v9@)Q9"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="controls_if" id="WdB*x=Yb1s5`s%1;8sb8"> <value name="IF0"> <block type="logic_operation" id="=!,%0^7{Nr,#RGpgyjbO" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="oAm7uGv*1hz~!d7h.+7|"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="4Q+ym)29|XcJ)|[}nB^e"> <field name="ATTR">val</field> <field name="OID">weatherunderground.0.forecast.current.temp</field> </block> </value> <value name="B"> <block type="math_number" id="=DyNr]:#+Kvba%|LYfs%"> <field name="NUM">15</field> </block> </value> </block> </value> <value name="B"> <block type="logic_negate" id="#rF.Zz_,)nYa)iDBk9y+"> <value name="BOOL"> <block type="variables_get" id="-NmcPMz/A)TI;vo+w:KC"> <field name="VAR" id="Intervall" variabletype="interval">Intervall</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_setinterval" id="7%/Ll?G,CpruwYL_;RTc"> <field name="NAME">Intervall</field> <field name="INTERVAL">15</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="control" id="l/2nAsk,Yq0HEsysAzGu"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G090U50990850U2X.Commands.speak-volume</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="Pi-hhOCBN(6E`C7=3fS1"> <field name="NUM">20</field> </block> </value> <next> <block type="control" id="j*|p}Jx{9cW6+-.IqSSx"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">alexa2.0.Echo-Devices.G090U50990850U2X.Commands.speak</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="text_join" id="!xmEaZVK3x;(p,#-.3~y" inline="false"> <mutation items="3"></mutation> <value name="ADD0"> <block type="text" id="c:zqL~*PW9u]u6e8a$*1"> <field name="TEXT">Achtung, im Bad ist seit 15 Minuten ein Fenster offen und die Außentemperatur beträgt </field> </block> </value> <value name="ADD1"> <block type="get_value" id="Fv;Xty[=-uMXc3v@U?%)"> <field name="ATTR">val</field> <field name="OID">weatherunderground.0.forecast.current.temp</field> </block> </value> <value name="ADD2"> <block type="text" id="MUm7dd#|B~9ZAMH}qLZM"> <field name="TEXT"> Grad.</field> </block> </value> </block> </value> <next> <block type="whatsapp-cmb" id=".IiKmKd(09qzP}**y#S|"> <field name="INSTANCE"></field> <field name="LOG"></field> <value name="MESSAGE"> <shadow type="text" id="GXbO@][G8;9C9qXL#jMx"> <field name="TEXT">Badfenster offen!</field> </shadow> </value> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </statement> <statement name="ELSE"> <block type="timeouts_clearinterval" id="g!d_u2QD0J@cFB#%4,@-"> <field name="NAME">Intervall</field> </block> </statement> </block> </statement> </block> </xml>
-
Ich habe timeout nur hastig genommen. Timeout wäre eine Verzögerung für das Senden.
-
@thomas4170 sagte in Hinweis "Badfenster offen" funktioniert nur teilweise:
@hertob81
Moin, so wie ich das sehe übergibst Du ja auch nur einen Wert in der Benachrichtigung.
Warum brauchst Du "sonst falls" ?Für mich erscheint das logischer
Verständnissfrage:
Warum packst Du das "STOP" oben rein, und nicht ganz unten? -
@thomas4170 sagte in Hinweis "Badfenster offen" funktioniert nur teilweise:
Ich habe timeout nur hastig genommen. Timeout wäre eine Verzögerung für das Senden.
Ah okay, dann ist Intervall okay?
-
@hertob81 sagte: Warum packst Du das "STOP" oben rein
Damit wird bei jeder Änderung eines Fensters gestoppt und bei Öffnen eines Fensters das Intervall neu gestartet. Unterschied: In meinem Vorschlag läuft das bereits gestartete Intervall weiter.
-
Ich habe auch ein Blockly mit "Fenster länger als 20 min. auf dann Heizung auf 18 °C" Den Stop hatte ich auch am Ende und mal das Skipt und mal nicht. Irgendwo habe ich mal gesehen das es besser ist. Seitdem läuft es auch ohne Probleme. Ich bin allerdings auch nicht so fit mit Blockly und noch fleißig am dazulernen. Paul ist sicherlich professioneller.
-
@thomas4170 sagte in Hinweis "Badfenster offen" funktioniert nur teilweise:
Irgendwo habe ich mal gesehen das es besser ist
weil sonst bei gleichem Trigger der Timeot ein zweites mal gestartet wird, was dazu führt, dass er nicht mehr gestoppt werden kann.
Deswegen muss der laufende Timeout vor einem erneuten Start erst gestoppt werden. -
Cool danke, jetzt kenne ich den Grund
-
@paul53 sagte in Hinweis "Badfenster offen" funktioniert nur teilweise:
@hertob81 sagte: Warum packst Du das "STOP" oben rein
Damit wird bei jeder Änderung eines Fensters gestoppt und bei Öffnen eines Fensters das Intervall neu gestartet. Unterschied: In meinem Vorschlag läuft das bereits gestartete Intervall weiter.
Danke für die Info, habe es ein paar Mal lesen müssen bevor ich es verstanden habe.
-
Könntet Ihr bitte kurz da drauf schauen, ich verstehe nicht, warum ich keine Meldung erhalte. Ich habe das Skript oben kopiert aber so modifiziert, dass im Kinderzimmer die Innentemperatur mit abgefragt werden soll:
Wenn das Fenster offen ist UND die Innentemperatur unter 21 °C fällt soll die Meldung abgesetzt werden, jedoch nur zwischen 7.00 Uhr und 19.00 Uhr.
Wie gesagt, es passiert nix:Danke euch!
-
@hertob81 sagte in "Badfenster offen" funktioniert nur teilweise [GELÖST]:
Wie gesagt, es passiert nix:
dann setz mal debug Bausteine an die kritischen Stellen um zu sehen wo es hängt
-
Wie oft sendet denn der Thermostat die Temperatur? Wenn der nur alle 10 Minuten oder so sendet, dann kann das natürlich ewig dauern bis alle Bedingungen erfüllt sind...
-
Ich habe den Fehler entdeckt, siehe screenshot:
Jetzt kommt die Meldung, allerdings auch noch, wenn ich das Fenster geschlossen habe.
Ich vermute, das Skript wird noch über die Raumtemperatur getriggert.Für mein Verständnis benötige ich noch eine Bedingung, dass das Skript nicht mehr getriggert wird, sobald das Fenster zu ist, auch wenn die Temperatur im Ruam immernoch unter dem Schwellwert liegt, richtig?
@JoergH: Es ist ein Xiaomi Aquara Sensor, der meldet sich sobald sich die Temperatur ändert.
-
@hertob81 sagte in "Badfenster offen" funktioniert nur teilweise [GELÖST]:
Für mein Verständnis benötige ich noch eine Bedingung, dass das Skript nicht mehr getriggert wird, sobald das Fenster zu ist, auch wenn die Temperatur im Ruam immernoch unter dem Schwellwert liegt, richtig?
richtig. Dein sonst bezieht sich nur auf die Uhrzeit
-
@hertob81 Ja, stimmt. Logisch. Er hat ja nur das Skript beim Öffnen ausgeführt und nicht wenn sich danach die Temperatur ändert...
-
Sollte das schon die Lösung sein?
Für den Trigger "Zeit" benötige ich kein weiteres "sonst", oder?
-
Mittlerweile habe ich einen weiteren Türsensor an das zweite Fenster angebracht.
Durch den Debug Output erkenne ich, dass das Programm bzw. der Intervall beendet wird, wenn ich das zweite Fenster öffne.
Im Klartext: EIN Fenster auf-> Meldung kommt ordnungsgemäß
BEIDE Fenster auf -> keine MeldungIch verstehe es nicht...