NEWS
(gelöst) mein erstes Blockly... korrekt?
-
Hallo Gemeinde!
Möchte euch Korrektur fragen für meinen ersten Bock.
Ein Feuchtigkeitssensor per zigbee wird eingelesen, dieser soll unter 65% ein Telegram und über 75% abschicken.
Passt der Block dazu?on({id: 'zigbee.0.00158d00042704c0.humidity', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("zigbee.0.00158d00042704c0.humidity").val < 65) { sendTo("telegram.0", "send", { text: 'Feuchtigkeit im Humidor zu gering !' }); console.log("telegram: " + 'Feuchtigkeit im Humidor zu gering !'); } else if (getState("zigbee.0.00158d00042704c0.humidity").val > 75) { sendTo("telegram.0", "send", { text: 'Feuchtigkeit im Humidor zu hoch !' }); console.log("telegram: " + 'Feuchtigkeit im Humidor zu hoch !'); } }); parseFloat();
-
Kommt darauf an... Du schickst immer ein Telegram wenn sich der Wert außerhalb der Grenzen ändert.
Also fällt auf 64.9% -> telegram
fällt auf 64.3 -> telegram
steigt auf 64.7 -> telegram...
Bei Luftfeuchte ists wahrscheinlich nicht besonders dynamisch, weil eher ein träges System.Jede Änderung wird also ein Telegram auslösen, außer sie finden im Bereich zwischen 65 und 75 statt. Kann man wollen, kann aber auch nervig sein...
Du könntest vlt ein Flag einbauen, dass sich merkt, ob du schon benachrichtigt hast und dann in der Folge kein Telegram mehr senden. Flag wieder auf true setzen, wenn deine Humidity um soll-Bereich angekommen ist. Oder Flag nach einer Stunde zurücksetzen. Dann meldet Telegram was, lässt dich aber eine Stunde lang in Ruhe.
Kommt also darauf an, was du erreichen möchtest. -
Hi,
d.h. das Blockly fkt. so wie es mal ist, korrekt projektiert.Dein Einwand ist sehr gut, ist auch meine nächste Änderung die ich vor hatte.
Da weiß ich aber noch nicht recht wie ich das angehen soll.
Variable erstellen "bBlock" für Bool (0/1)
dann eine Abfrage ob bBlock true/false ist und bei true nach einer Zeit resetten.
-
Ha, hab grad die erste Benachrichtigung erhalten
noch falsch geschrieben, aber es funktioniert.wie funktioniert denn das Debug?, kann ich mir den Zustand von bBlock anzeigen lassen bzw. den Zeitintervall?
-
@Humidor sagte in mein erstes Blockly... korrekt?:
wie funktioniert denn das Debug?, kann ich mir den Zustand von bBlock anzeigen lassen bzw. den Zeitintervall?
Einen richtigen Debugger, wie aus programmierumgebungen gibt es nicht wirklich. Ich kenne nur die Möglichkeit, einen Debug Output Block einzufügen.
-
@OstfrieseUnterwegs sagte in mein erstes Blockly... korrekt?:
@Humidor sagte in mein erstes Blockly... korrekt?:
wie funktioniert denn das Debug?, kann ich mir den Zustand von bBlock anzeigen lassen bzw. den Zeitintervall?
Einen richtigen Debugger, wie aus programmierumgebungen gibt es nicht wirklich. Ich kenne nur die Möglichkeit, einen Debug Output Block einzufügen.
schade, das ist das A&O ...
-
Gerade gesehen, du stoppst deinen Timer nicht... Wenn jetzt das script triggert, dann macht er jedesmal einen neuen Timer und die setzen dann jeder für sich jeweils nach 30 min deine Variable zurück.
Du solltest Block 'Ausführen in' nehmen. Der führt einmal nach einer bestimmten Zeit aus und dann ist er weg. -
@Humidor sagte in mein erstes Blockly... korrekt?:
schade, das ist das A&O ...
Ähm, aber wo ist das Problem?
@Humidor sagte in mein erstes Blockly... korrekt?:
wie funktioniert denn das Debug?, kann ich mir den Zustand von bBlock anzeigen lassen bzw. den Zeitintervall?
Natürlich geht das mit dem Debug-Baustein.
Und wenn du fertig bist kannst du ihn löschen oder für späteren Gebrauch einfach deaktivieren -
@Humidor
hm...ich habe es jetzt so noch nicht probiert, aber es sieht auf den ersten Blick so aus, das hier im Laufe der Zeit jede Menge Intervalle laufen werden, da das Intervall nirgends gestoppt wird.
Ich glaube Du brauchst ein timeout, aber auch das sollte gestoppt werden. -
ich verstehe die Worte, kann ich aber nicht in Taten umsetzen, wäre das etwa so?
-
@Humidor sagte in mein erstes Blockly... korrekt?:
wäre das etwa so?
etwa, ja!
ein weiteres Stop timeout direkt vor dem timeout, damit das alte gestoppt wird auch wenn ein neues gestartet wird
-
@Homoran sagte in mein erstes Blockly... korrekt?:
@Humidor sagte in mein erstes Blockly... korrekt?:
wäre das etwa so?
etwa, ja!
ein weiteres Stop timeout direkt vor dem timeout, damit das alte gestoppt wird auch wenn ein neues gestartet wird
verstehe nicht ganz, wäre das die Lösung?
-
@Humidor sagte in mein erstes Blockly... korrekt?:
verstehe nicht ganz, wäre das die Lösung?
nein!
das stop direkt VOR "Ausführen...."
-
so?
-
@Humidor Ja!
und zum Thema Debug:
Mal auf die Schnelle einen beliebigen Debug-Baustein genommen.
Das Ergebnis wird im log eangezeigt -
Super!
dann möchte ich noch einen Debug Ausgabe machen, wo alle 10s die Werte von bBlock, Intervall ausgegeben werden.
läuft das so:
-
@Humidor sagte in mein erstes Blockly... korrekt?:
läuft das so:
neee.
Das ist kein Intervall, sondern ein Timeout.@Humidor sagte in mein erstes Blockly... korrekt?:
wo alle 10s die Werte
Wieso alle 10 Sekunden.
Es muss doch reichen wenn sie geändert werden, oder?
Dann einfach den Debug ganz oben als erstes unter den Trigger vor "falls bBlock"...Mit dem
IntervallTimeout (???) ist das schon etwas komplizierter, da dort ein fester Name vergeben ist und du den nicht abfragen kannst. Zumindest habe ich es noch nie versucht.Du kannst aber einen eigenen Namen statt "Intervall" eingeben, legst dazu noch eine Variable mit eben diesem Namen an, und fragst die im debug ab.
-
@Humidor sagte:
soll unter 65% ein Telegram und über 75% abschicken.
Wenn nur einmal bei Grenzwertunterschreitung bzw. -überschreitung ein Telegramm gesendet werden soll, kann man es so machen:
Wert findet man unter "Trigger".
-
die Debug-Anzeige soll unabhängig vom Code sein, zeitlich reicht mir
15:04:55.003 info javascript.0 (5315) script.js.common.Humidity: bBlock: , Timeout: 15:05:00.005 info javascript.0 (5315) script.js.common.Humidity: bBlock: , Timeout:
verstehe noch nicht wie ich den Bool Block als True/False oder 1/2 anzeige bzw. die timeouts.. ?
-
@Humidor sagte in mein erstes Blockly... korrekt?:
die Debug-Anzeige soll unabhängig vom Code sein
Da die Variable bBlock aber nur in dem Code vorkommt muss der Cron-Block sich aber im gleichen Blockly (genau gesagt neben oder über/unter dem anderen) befinden