NEWS
Skript läuft zu schnell durch ....
-
Hey, ich bin noch etwas neu in der ganzen Materie, habe aber nur mal probiert mein erstes Skript selber anzufertigen...
Hier habe ich nur ein Problem:
Ich möchte herausfinden ob der Stecker Leistung zieht oder eben nicht und daran erkennen, ob mein Luftentfeuchter voll ist oder eine andere Störung hat.
Die Datenabfrage mit Tuya dauert immer so locker 20sec. bis sich der Wert der Leistung aktualisiert. Nun habe ich deswegen eine Pause eingebaut, damit sich eben genau dieser Wert aufbauen kann. Das Problem ist, ich bekomme schon vor Ablauf der einen Minute eine Nachricht auf mein Handy.... Ich verstehe leider nicht warum.. -
@freemy sagte in Skript läuft zu schnell durch ....:
Die Datenabfrage mit Tuya dauert immer so locker 20sec. bis sich der Wert der Leistung aktualisiert
spielt ja keine Rolle, dein Trigger ist aber auf Wertänderung deines switch, wenn der immer auf true steht passiert da nix
-
@freemy sagte: herausfinden ob der Stecker Leistung zieht
Wenn auf eine Veränderung der Leistung reagiert werden soll, muss die Leistung als Trigger dienen.
Was für ein Datenpunkt ist "switch_1"? Wenn er den Schaltzustand repräsentiert, ist erstaunlich, dass überhaupt getriggert wird - außer beim Schalten von "switch_1".Versuche es mal so:
Anmerkung: "stop timeout" und "Verzögerung timeout" stehen erst zur Verfügung nachdem "Ausführen timeout" in das Programm eingefügt wurde.
-
@crunchip Es soll ja so sein, dass sich der Switch einschaltet (smarte Steckdose vorm Luftentfeuchter) und erst wenn diese "Ein" ist wird ja erkannt, ob der Luftentfeuchter läuft oder eben nicht, deswegen hatte ich den als Trigger ...
-
@freemy les nochmal meine Antwort, bzw Pauls`s
-
@freemy sagte: erst wenn diese "Ein" ist wird ja erkannt, ob der Luftentfeuchter läuft
Genau eine Minute nach dem Einschalten des Switch wird die Leistung geprüft, danach nicht mehr. Deshalb muss die Leistung der Trigger-Datenpunkt sein.
-
@paul53 könntest du mir den sonst nicht Schritt nochmal aufschlüsseln??
-
@freemy sagte: sonst nicht Schritt nochmal aufschlüsseln??
sonst: Wenn Leistung <= 5 UND Switch ist ein UND Timeout ist noch nicht gestartet
dann starte Timeout (Verzögerung um 1 Minute) -
@paul53 vielen dank!
-
@paul53 sagte in Skript läuft zu schnell durch ....:
@freemy sagte: erst wenn diese "Ein" ist wird ja erkannt, ob der Luftentfeuchter läuft
Genau eine Minute nach dem Einschalten des Switch wird die Leistung geprüft, danach nicht mehr. Deshalb muss die Leistung der Trigger-Datenpunkt sein.
Das funktioniert allerdings nur, wenn nach dem Einschalten des Geräts sich die Leistung auch dann ändert, wenn das Gerät nicht startet sondern einen Fehler hat.
Ich würde es so probieren:
Edit: Noch eine kleine Korrektur im Skript, damit der Timeout gestoppt wird, falls vor Ablauf der Minute die Steckdose wieder ausgeschaltet werden sollte.
-
@zarello sagte: Das funktioniert allerdings nur, wenn nach dem Einschalten des Geräts sich die Leistung auch dann ändert, wenn das Gerät nicht startet sondern einen Fehler hat.
Wenn das Gerät beim Einschalten per "Switch" einen Fehler hat, wird es eine nicht konstante Leistung < 5 W aufnehmen.
-
@freemy eine frage zu meinem nochmal, wieso geht das Ganze nicht mit Pause?
-
@paul53 aber fehlt dort nicht noch ein = true?
-
@freemy sagte in Skript läuft zu schnell durch ....:
@freemy eine frage zu meinem nochmal, wieso geht das Ganze nicht mit Pause?
Da bin ich mir nicht wirklich sicher, aber ich vermute, dass die Pause evtl. durch irgendwelche Signale vorzeitig beendet wird.
Du könntest vermutlich statt der Pause einfach einen Timeout verwenden und die Bedingung und Benachrichtigung wie bei Deinem ersten Post innerhalb des Timeout verwenden.
Aber bei einem Event-basierten System programmiert man lieber mittels der Trigger.@paul53 sagte in Skript läuft zu schnell durch ....:
Wenn das Gerät beim Einschalten per "Switch" einen Fehler hat, wird es eine nicht konstante Leistung < 5 W aufnehmen.
Ja, das stimmt, solange die Leistung >= 0.5W bzw. der Wert des Datenpunktes eine Fließkommazahl ist.
-
@freemy sagte in Skript läuft zu schnell durch ....:
@paul53 aber fehlt dort nicht noch ein = true?
Ein Vergleich liefert Dir einen Wahrheitswert (der ist entweder true oder false). Da der Datenpunkt aber schon ein Wahrheitswert ist, muss der nicht verglichen werden.
Der Wert ist ja ein Platzhalter, der in dem Fall entweder true oder false enthält. Beim Vergleich wird Wert durch seinen Inhalt ersetzt und es steht dort: true = true und das Ergebnis dieses Vergleichs ist wiederum true. Ich hoffe, es wird klar was ich meine.
-
@zarello ich habe es nun abgeändert und es passiert nix, wenn eine Störung vorliegt
-
@freemy Zeig mal ein Bild von Deinem aktuellen Blockly
-
@zarello
Die zwei habe ich jetzt -
@freemy Hm, okay, aber das ist jetzt etwas ganz anderes als das was ich vorgeschlagen habe.
-
@zarello aber meins mit dem Timeout funktioniert jetzt