NEWS
Gelöst: Temperaturen Vergleichen Alarm zu Lüften
-
Hallo.
Ich möchte gerne ein Skript erstellen, dass die Innen und Außentemperatur vergleicht und, sobald die Außentemperatur z.B. nach 10 Minuten immer noch kälter ist als innen mir per Telegram ne Nachricht schreibt, dass es Zeit ist zu Lüften.
Folgendes Blockly Skript habe ich erstellt. Es funktioniert aber nicht .(
Ich habe eine neue Logik Variable "TemperaturInnenGroesserAussen" unter einem der Sensoren (bei Objekte) angelegt. Diese soll so lange false geschrieben werden, bis die Temperatur Innen größer ist als außen. Dann True. Nach 10 Minuten wird das überprüft und wenn es immer noch so ist, soll Telgramm die Meldung raus schicken.
Der zweite Timeout soll die Variable wieder zurücksetzen auf false, ist aber wahrscheinlich unnötig?<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="undefined" id="timeout">timeout</variable> <variable type="undefined" id="timeout2">timeout2</variable> </variables> <block type="on_ext" id="+A7wlutQO8gBfqosc.y3" x="-437" y="-162"> <mutation items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="L[i=p{|ii-ai*/YAZ@8s"> <field name="oid">mihome.0.devices.sensor_ht_158d00025efa37.TempDiffAusIn</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="V6]e:v6u:?I_dnQ6L_VO"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="YL]^MiM0C_d90EjXd7qr"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="yM=9zWrslsViHeXAVGm6"> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.sensor_ht_158d00025efa37.temperature</field> </block> </value> <value name="B"> <block type="get_value" id="/3eNhoAte1niWVsZs5d7"> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.weather_v1_158d00027347cf.temperature</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="vs.J|^}}{M%%SJ1bpk;V"> <mutation delay_input="false"></mutation> <field name="OID">mihome.0.devices.sensor_ht_158d00025efa37.TempDiffAusIn</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="gvfoVV5t!!Us3^C~!w.H"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> <value name="IF1"> <block type="logic_compare" id=":rKTiz?VFc]K_$qY{B3K"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="lP0HAoS@h;yT3dy^_~8S"> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.sensor_ht_158d00025efa37.temperature</field> </block> </value> <value name="B"> <block type="get_value" id="Wttc:@p*]hD5~;zi@c~["> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.weather_v1_158d00027347cf.temperature</field> </block> </value> </block> </value> <statement name="DO1"> <block type="timeouts_settimeout" id="HfP,*YbUQA`6`tz^c%8@"> <field name="NAME">timeout</field> <field name="DELAY">10</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="controls_if" id="#i0z_i/=]aukl{x6{y`#"> <value name="IF0"> <block type="logic_compare" id="L1SNI87Cga.jo{5ZT3nS"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="ZE5#X`ZLiRa2v,txpZ6A"> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.sensor_ht_158d00025efa37.temperature</field> </block> </value> <value name="B"> <block type="get_value" id="k}]h#=*[r{E!B(.Jk=43"> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.weather_v1_158d00027347cf.temperature</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="W@d-F3O_9HHWW#dCNkL="> <mutation delay_input="false"></mutation> <field name="OID">mihome.0.devices.sensor_ht_158d00025efa37.TempDiffAusIn</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="A4H}`x`xaT~u.qw:OMjO"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> </statement> </block> </statement> </block> </statement> <next> <block type="on_ext" id="u:R0u7j.Y,8EdsUCK6kQ"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="jgpdw:j!HF59WUplmK}~"> <field name="oid">mihome.0.devices.sensor_ht_158d00025efa37.TempDiffAusIn</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="1`6)x~5WEdGy@TW,E9%n"> <value name="IF0"> <block type="logic_compare" id="]-Zb+?Hn_!lMC-aT9alk"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="ln#_*!,/omF%2!L4WRp-"> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.sensor_ht_158d00025efa37.TempDiffAusIn</field> </block> </value> <value name="B"> <block type="logic_boolean" id="pSN^b91_Se1kc2o;W4J^"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="telegram" id="i||{vH9*ebG3rYojyq#~"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="U][E8N^7Bu/+`G(NxN}#"> <field name="TEXT">Zeit zum Lüften!</field> </shadow> </value> <next> <block type="timeouts_settimeout" id="n^dS?c},;PzvI6RcY-Dw"> <field name="NAME">timeout2</field> <field name="DELAY">480</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="controls_if" id="h-%LzdDV},Z_]ja^C.*d"> <value name="IF0"> <block type="logic_compare" id="ZFTid72c:x=[!C[8[f(K"> <field name="OP">LT</field> <value name="A"> <block type="get_value" id="pc3usF6n(:.=QZx7FN_q"> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.sensor_ht_158d00025efa37.temperature</field> </block> </value> <value name="B"> <block type="get_value" id="0,7*~wxO2%*].8%E{yT,"> <field name="ATTR">val</field> <field name="OID">mihome.0.devices.weather_v1_158d00027347cf.temperature</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="HM#W/S,A]m1Q/D8TJAGK"> <mutation delay_input="false"></mutation> <field name="OID">mihome.0.devices.sensor_ht_158d00025efa37.TempDiffAusIn</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="T-n_wdu]Hp:)Ojd}Qf(4"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </statement> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </xml>
EDIT: Wie füge ich das Blockly Bild ein? Meine Auflösung ist nicht groß genug das ganze Bild anzuzeigen im IoBroker
-
@Madaraxa
In diesem Tread wurde ein ähnliche Probleme höchste-windgeschwindigkeit-der-letzten-30-min besprochen.
Blockly Bild:
Wenn du im Editor das Bild verkleinerst? Ansonsten für Dich:
-
Hey.
Oh. Ich wusste nicht dass man den Editor verkleinern kann werde ich mal ausprobieren.
In dem anderen Beitrag geht es eher darum wie man das dort gepostete Script so verändert, dass man die letzten 30 Minuten überwacht.
Mein Problem ist, dass ich gar keine telegram Meldung bekomme. Also scheine ich einen grundsätzlichen Fehler gemacht zu haben.
Das Script ist stark verändert mein 'Trockner' Script. Dort wird die Leistungsaufnahme einer Steckdose überwacht und wenn diese innerhalb von 5 Minuten immer noch unter 2 Watt liegt bekomme ich die Meldung, dass der Trockner fertig ist.
Ich denke also es muss damit zusammen hängen, dass ich hier zwei Werte Vergleiche, statt einen absoluten Wert. Oder ich habe ein Logik Problem nicht bemerkt. Oder das Script läuft gar nicht los. Theoretisch sollte es doch sobald sich eine der Temperaturen um 0,1 Grad ändert los laufen, oder nicht? -
@Madaraxa sagte in Temperaturen Vergleichen Alarm zu Lüften:
Editor verkleinern
Rechts unten + - und der Mülleimer, einfach ausprobieren.
Bei Thempänderung loslaufen? sehe ich auch so.
Was für Werte nehmen Deine Objekte an? Schon mal mit debug nachgesehen? Du prüfst mal auf wahr mal auf Größer/Kleiner. -
@Madaraxa
magst du mal das Probieren, ob das hinkommt?
Mit viel Logausgaben zum Testen
Habe 1 Minute anstatt 30, sonst dauert das testen so lang und Logausgabe anstatt Telegram.
-
Hey.
Habe das Testskript mal eingefügt und folgende Meldungen bekommenjavascript.0 2019-04-24 17:31:51.369 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: true javascript.0 2019-04-24 17:31:51.368 info script.js.Temperaturen.Testskript_Lüften: Timer erstellt javascript.0 2019-04-24 17:30:51.367 info script.js.Temperaturen.Testskript_Lüften: Timer starten javascript.0 2019-04-24 17:30:51.366 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: true javascript.0 2019-04-24 17:11:36.974 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: true javascript.0 2019-04-24 17:11:36.974 info script.js.Temperaturen.Testskript_Lüften: Timer erstellt javascript.0 2019-04-24 17:10:36.971 info script.js.Temperaturen.Testskript_Lüften: Timer starten javascript.0 2019-04-24 17:10:36.971 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false javascript.0 2019-04-24 16:54:23.557 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: false javascript.0 2019-04-24 16:54:23.555 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false javascript.0 2019-04-24 16:37:09.363 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: false javascript.0 2019-04-24 16:37:09.362 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false javascript.0 2019-04-24 16:33:08.342 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: false javascript.0 2019-04-24 16:33:08.341 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false javascript.0 2019-04-24 16:16:34.759 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: false javascript.0 2019-04-24 16:16:34.758 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false javascript.0 2019-04-24 16:01:11.269 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: false javascript.0 2019-04-24 16:01:11.268 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false javascript.0 2019-04-24 15:44:37.528 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: false javascript.0 2019-04-24 15:44:37.527 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false javascript.0 2019-04-24 15:42:56.525 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: false javascript.0 2019-04-24 15:42:56.524 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false
Noch habe ich 24,5 Grad außen und 24,1 Grad innen Ich weiß also noch nicht, was passiert sobald außen < innen ist
EDIT: Habe das Log erweitert. Dein Testscript scheint zu funktionieren
Allerdings gibt er ja jetzt mehrfach das "Bitte Lüften: true" aus. Das sollte durch den Timer verhindert werden? Oder wie kann ich das machen? Im Prinzip muss er ja nur so lange die Ausgabe stoppen, bis das nächste Mal von false auf true gestellt wird, oder? Also
"Falls Objekt "bitteLüften" wurde geändert" vor alles stellen? -
Probier mal Den timeout Block mit dem fallsblock zu steuern;
Passt es dann? -
Hey.
Schon mal vielen Dank für die rasche und kompetente Hilfe.
Du meinst zusätzlich das Falls BitteLüften = falsch? also so:
EDIT:javascript.0 2019-04-24 19:26:50.934 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: true javascript.0 2019-04-24 19:24:40.144 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: true javascript.0 2019-04-24 19:23:59.265 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: true javascript.0 2019-04-24 19:20:17.824 info script.js.Temperaturen.Testskript_Lüften: BitteLüften: true javascript.0 2019-04-24 19:20:17.823 info script.js.Temperaturen.Testskript_Lüften: Timer erstellt javascript.0 2019-04-24 19:19:17.821 info script.js.Temperaturen.Testskript_Lüften: Timer starten javascript.0 2019-04-24 19:19:17.820 info script.js.Temperaturen.Testskript_Lüften: Temperatur hat sich geändert, Bitte Lüften: false javascript.0 2019-04-24 19:15:39.043 info script.js.Temperaturen.Testskript_Lüften: registered 1 subscription and 0 schedules
Leider immer noch Doppelmeldungen
-
@Madaraxa sagte in Temperaturen Vergleichen Alarm zu Lüften:
kompetente
Kompetent sieht anders aus, Danke für Deine Geduld.
Der Log Eintrag: "Temperatur hat sich geändert, Bitte Lüften: true" ist irreführend.
Ich hätte es so gedacht, jetzt mit "verständlicheren?" Logeinträgen:
oben im Vergleich Deine Datenpunkte anstatt meiner eintragen und wenn es geht, Zeit anpassen und Rechtsklick auf den Telegram Block und aktivieren.
-
Hey,
sieht gut aus (Außer, dass du im Text des Debug / Telegram zweimal Außentemperatur geschrieben hast^^)
Kannst du mir (unabhängig davon, dass es jetzt anscheind klappt) erklären, warum du beim blauen "falls" Objekt ID vom Objekt ID .... nimmst und nicht nur einmal Objekt ID und dann direkt auf die Temperatur verlinkst?javascript.0 2019-04-24 20:57:51.682 info script.js.Temperaturen.Testskript2: Timer läuft schon javascript.0 2019-04-24 20:57:51.681 info script.js.Temperaturen.Testskript2: Temperatur hat sich geändert, Script startet: javascript.0 2019-04-24 20:54:40.435 info script.js.Temperaturen.Testskript2: Meldung Telegram: Bitte Lüften, die Innentemperatur beträgt: 24.14 die Außentemperatur beträgt: 11.31 javascript.0 2019-04-24 20:54:40.431 info script.js.Temperaturen.Testskript2: Timer erstellt javascript.0 2019-04-24 20:54:20.428 info script.js.Temperaturen.Testskript2: Timer starten javascript.0 2019-04-24 20:54:20.428 info script.js.Temperaturen.Testskript2: Temperatur hat sich geändert, Script startet: javascript.0 2019-04-24 20:54:08.569 info script.js.Temperaturen.Testskript2: registered 1 subscription and 0 schedules javascript.0 2019-04-24 20:54:08.568 info Start javascript script.js.Temperaturen.Testskript2
EDIT: Da ich die Meldung derzeit ca. alle 3 Minuten bekomme, gehe ich davon aus, dass der Sensor nur alle 3 Minuten sendet und daher die 20 Sekunden im Skript "egal" sind? Ich kann es nur auf über 3 Minuten setzen und damit Abfragen sparen? Ganz weglassen macht keinen Sinn, falls die Temperatur kurzzeitig hin und her schwankt?
Edit 2: ich habe mich geirrt. Das mit den 3 Minuten war Zufall. Es kommt (denke ich) jedesmal ne Meldung wenn sich die Temperatur ändert -
@Madaraxa sagte in Temperaturen Vergleichen Alarm zu Lüften:
, warum du beim blauen "falls" Objekt ID vom Objekt ID vom Objekt ID .... nimmst und nicht nur einmal Objekt ID und dann direkt auf die Temperatur verlinkst?
meinst du da?
-
@iomountain
Ja -
@Madaraxa sagte in Temperaturen Vergleichen Alarm zu Lüften:
Edit 2: Richtig: Der Log Eintrag: "Temperatur hat sich geändert, Script startet:" müsste bei jeder Temperaturänderung kommen. Diente nur zur Kontrolle und kannst du löschen oder ignorieren.Der Log Eintrag: "Meldung Telegram: Bitte Lüften, die Innentemperatur beträgt: xx.xx die Außentemperatur beträgt: xx.xx" kommt wenn die Innentemp größer als die Außentemp ist und das für mindestens durchgehend 20 Sekunden (timeout: du wolltest 30 Minuten)
Sobald die Innentemp dann mal kleiner als die Außentemp ist, wird der Timer zurückgesetzt und wenn dann wieder die Innentemp größer als die Außentemp für durchgehend 20 Sekunden ist wird wieder eine Meldung "Meldung Telegram: Bitte Lüften, die Innentemperatur beträgt: xx.xx die Außentemperatur beträgt: xx.xx" ausgegeben.
@Madaraxa sagte in Temperaturen Vergleichen Alarm zu Lüften:
warum du beim blauen "falls" Objekt ID vom Objekt ID vom Objekt ID .... nimmst und nicht nur einmal Objekt ID und dann direkt auf die Temperatur verlinkst?
Weil es bei mir so funktioniert hat :), bin aber auch noch am lernen. Wie würdest du es machen?
-
Bin aber nicht sicher ob das klappt
Vielen Lieben Dank für all die Mühe und Zeit, die du investiert hast. Habe viel gelernt und nen funktionierendes Skript. -
Jetzt weiß ich was du meinst, wenn du jetzt die ObjektID auswählst, kommst du auf das gleiche wie ich. Dürfte keinen Unterschied ergeben.
Ansonsten: Gern gemacht, ich hab auch dabei gelernt, viel Spass noch. -
@iomountain
Danke, dir auch