NEWS
[WLED] LED streifen (WS2812B,WS2811,SK6812,APA102) bedienen
-
Hallo, @vocaris,
nimm mal den "Pause"-Befehl aus Deinem Script raus. Hatte ich vorher auch so, lief nicht.
Zitat von @Asgothian aus diesem Post:Zitat Anfang:
Timeout: Es wird Ein Block an Aktionen im Timeout angegeben der in x ms ausgeführt wird, aber die "normale" Bearbeitung des Skriptes geht weiter.
Pause: Es wird x ms gewartet bis es weiter geht.
Der Haupt unterschied besteht in der Art der Abarbeitung.
Der Einsatz von "Pause" führt zu einer synchronen Abarbeitung der im Skript stehenden Befehle in genau der angegebenen Reihenfolge. Pause kann beim Thema "Skript erneut auslösen" zu Problemen führen.
Der Einsatz von Timeout führt zu einer asynchronen Abarbeitung so das das eigentliche Skript beendet wird und nur die im Timeout angegebenen Befehle werden in einem eigenen Ablauf im Hintergrund ausgelöst.
Insgesamt sollte wann immer möglich mit einem Timeout gearbeitet werden da die "Pause" die zu dem Skript gehörenden Ressourcen weiter belegt bleiben. Je länger die Zeit ist die gewartet wird desto wichtiger ist der Einsatz von Timeout an Stelle von Pause.
Ich persönlich würde Pause nur einsetzen wenn sichergestellt ist das das Skript während der Pause nicht ein zweites mal aktiviert werden kann. Das wäre zu Beginn von Skripten oder innerhalb eines Zeitplans. Immer dann wenn ein Skript über einen "event" (Trigger, nicht Zeitplan) ausgelöst wird würde ich mit einem Timeout arbeiten.Zitat Ende
Vielleicht hilft es Dir ja. -
@berges01. Moin
Danke. Ich schau mir das mal an. -
@opossum Hei.
Also in der Tat läuft es dann. Aber dadurch, dass ich keine Pause drin habe, macht er natürlich im Bereich "Garage offen" nicht die Schritte Grünes Licht, dann weißes Lauflicht und am Ende die Spots. Da fliegt er ja in Millisekunden drüber und endet bei den Sport. Wie bekomme ich denn nun diese sequantiellen "ToDos" rein? -
Hallo, @vocaris,
Du könntest die einzelnen Schritte mit Verzögerungen starten, so geht es zumindest bei mir.
Allerdings lasse ich während der Torbewegung nur zwei Lauflichter in Rot anzeigen. Hier mal das ganze Script. Ich benutze, wie schon geschrieben, ein weiteres Script, dass die Sensoren auswertet und einen Datenpunkt setzt.
-
@opossum
Hei,habe ich auch schon versucht. Aber Er scheitert wieder beim runterfahren.
Dort startet das rote Lauflicht und auf halber Fahrt geht er dann einfach über in den Bereich als wäre die Garage schon zu... Ich raffe das einfach nicht.
Ggf. kann mir ein mal ein Script geben, dass die Stellungen der Fensterkontakte logt. Damit ich in einer Liste sehen kann, ob ggf. beim runterfahren ein Wert geändert wird. Das Log kann bestimmt eine Liste der Timestamps ausgeben. Ich bin einfach zu blöd für Blockly... -
Also mein Blockly sieht fast so aus wie das von @opossum .
Kann es sein, das dein Fensterkontakt beim runter fahren an dem Magneten vorbei fährt der für offen oder geschlossen angebracht ist ?
Magnetkontakte sind da ab und an sehr empfindlich. Weiterhin sind die mit Reedkontakten erschütterungsempfindlich. Lock mal die Schalter mit.
Unsere Blocklies laufen zumindest bei mir ohne Probleme.
Gruss -
Hallo, @berges01,
das Problem mit den Magnetkontakten hatte ich auch. Habe dann auf optische Fensterkontakte von Homematic umgestellt, dann lief es. Bei den Magneten hatte ich die Effekte von @vocaris.
@Vocaris
Du kannst Dein Script erweitern, in dem Du Debug output-Blöcke einbaust. Immer dann, wenn Du den Zustand der Kontakte abfragst, würde ich solch einen Block einbauen. Dann siehst Du im Protokoll, wann welcher Zustand vorhanden ist. Einfach den Debug output an die Stellen setzen, wo Du eine Protokollausgabe möchtest. Dann noch einen Text reinschreiben und mal schauen, was beim Tor dann passiert mit den Kontakten. Nur so wirst Du herausfinden, wo der Fehler liegt.
Ich würde auch mal die on/off-Befehle aus dem Script nehmen. Ich habe das nur am Anfang drin, wenn das Tor von geschlossen auf fahren geht. -
@opossum Danke aber habe leider null Plan davon.
Weiß ja gar nicht, wo ich das debug reinsetzen soll und was er dann ausgeben soll.
Ich verstehe einfach nicht, warum er beim runterfahren den "Driss" macht.
Rauf klappt ja auch.
Die Installation ist so, dass die beiden Fensterkontakte (Sendeeinheit) Fix an ihren Punkten kleben. Einer oben und einer unten. Auf dem Torschiene beweget sich nur das kl. Magnet.
Da er ja beim runterfahren mitten in dem Ablauf für "Rotes Licht" in die Prozedur "Garage offen" springt, muss er ja auf dem Fahrweg bei oberen Schalter nochmals "schließen".
Ergo muss bei ihm etwas magnetisches vorbeikommen. In dem Fall müsste aber der Timestamp sich bei dem Gerät ändern.
Wenn ich während der Fahrt das ioB Objekt beobachte, sehe ich keine Änderung... -
@vocaris
schau mal in den Chat. -
Schau wenn du solche Debugeinträge einfügst, so kannst du Unten im Fenster sehen wann und was passiert.
Solche Einträge wie hier zu sehen "Trigger (2)", "Toor fährt" usw. kannst du sehen und bekommst so genau angezeigt was im Programmablauf passiert.
Gruss -
@opossum Ich habe für alle drei Blöck einen eigenen Trigger gemacht.
Dann geht es. Muss ich nicht verstehen... Aber ich bin ja auch kein Informatiker -
Bei deinen Trigger Blöcken (Weinrote Blöcke), sind als Trigger der ID Open drin.
Das auch noch 2 x.
Die Anweisungen in solch einem Block wird jedes mal durchlaufen wenn der ID Open seinen Zustand verändert.
Das macht so eigentlich keinen Sinn.
Mein Block wir nur durchlaufen wenn der Endschalter auf oder zu seinen Zustand verändert.
Schau mein Beispiel.
Innerhalb dieses Triggerblockes kontrolliere ich die Zustände der Endschalter auf/zu und reagiere dementsprechend.
Nur Guten Mutes, Rom ist auch nicht in einem Tag gebaut.
Für die Blocklyprogrammierung muss man kein Informatiker sein nur Logisches Denken ist unabdingbar.
Schau dir mal erst alle Blocklys an und versuche heraus zu bekommen was wie arbeitet.
Gruss -
Mein Tor stellt zwar die Endlagen zur Verfügung, aber ich steuer das nur über n timeout.
-
Ja es ist wie immer "viele Wege führen nach Rom".
Darum würde ich auch jedes Mal sagen, ich stelle ein Beispiel hier ein und keine Vorgabe.
Ich freue mich immer wenn einer Hier Beispiele reinsetzt, dadurch habe ich schon vieles gelernt.
Ich baue wenn Möglich alles mit Festen Vorgaben auf und weniger mit Timern.
Ab und an baue ich etwas auch mit Countern auf.
Von den Vorher benutzen SmartHome Systemen bin ich was Timer, Paúse und Timeout betrifft ein gebranntes Kind.
Läuft der Timer noch oder nicht, löst er Aktionen aus die ich gar nicht haben möchte oder reagiert er Unlogisch und nicht nach Zeitvorgabe.
Aber das ist nur Meine Meinung und soll erklären warum ich etwas mache.
Gruss -
Versteh Dich schon. Man muss halt wissen was man macht
Mich hat mehr das abrupte ab / umschalten des Lichts bei erreichen einer Endlage gestört. Das sieht einfach nicht schön aus, wenn zum Beipiel das rote Lauflicht mitten in der Bewegung abgewürgt wird.
Hat zwar einiges an Zeit gekostet das abzustimmen, aber jetzt sieht es halt super harmonisch aus. -
@berges01 dank dir für dein Post.
Vorab. Es funktionierte und am nächsten Tag (ohne das ich was geändert habe) war es wieder so wie vorher.. Von Geisterhand.OK das mit dem Triggern und den beiden Open habe ich aus Scripten von hier.
In verstehe das so:
Das Script (bzw. dieser Trigger-Block) läuft nur dann los, wenn sich bei einem der oberen beiden Objekten (das sind die States der beide Kontakte) einen Veränderung ergibt.
Und ich meine, das ich das auch brauche. Wenn ich nur ein Objekt einbinde (z.B. den Kontakt oben, der im geschlossenen Zustand ja auch true steht) und ich die Garage hoch fahre, dann dürfte der Trigger ja nicht "ziehen", denn der Kontakt oben ändert sich erst, wenn das Tor oben ist.
Aber ggf. ist bei mir das logische Denken für sowas ausgeschaltet (Gott sei dank finde ich noch dir Toilette ) -
Hallo Vorab das mit dem Logischen Denken wahr nicht Diskriminierent gemeint sondern Sachlich !
Wenn du mich kennen würdest, währe das mit den Lockeren Sprüchen normal und unmissverständlich.
Ab und an schlage ich über die Stränge aber immer locker vom Hocker auch mit 64 Lenzen.So jetzt zu deinem Problem.
Schau dir mal mein Beispiel an :
Der Trigger wird bei mir von den Endschaltern offen und geschlossen durchgeführt.
Beide sind gleichberechtigt im Triggerblock.
Der Triggerblock steht auf "wurde geändert" also bei jeder Änderung an den Endschaltern wird alles das was in dem Block eingeschlossen ist abgearbeitet.
Innerhalb dieses Blockes frage ich dann die Zustände der Endschalter ab und habe somit die Toorzustände offen, in Bewegung und geschlossen selektiert.
Jetzt muss ich nur noch innerhalb von jeder Selektion die Arbeitsweise des WLED anweisen und habe somit die volle Funktion des Garageneffektlichtes erzeugt.
Wenn ich jetzt noch innerhalb der Selektion einen "debug output Block" mit dem text offen, zu und in Bewegung einfüge, so kann ich im Fenster unterhalb der Blockeditierung sehen wann was passiert.
Ist etwas dumm zu erklären, aber ich hoffe das du mir folgen kannst.
Probiere mal das wird dir schon gelingen. -
@berges01 hei... Ich habe das auch so "lustig" verstanden.... Mein Antwort sollte auch eher lustig sein
Sender/Empfänger Problem...Also ich habe das auch so gemacht.
Was ich am Trigger blöd finde, dass ich den Wert des Objektex nicht abfragen kann, dass zum Auslösen führt. Es steht ja nur true oder false zur Verfügung. sonst könnte ich als Objekt einen Datenpunkt nehmen, der drei Werte annehmen kann. So müsste ich drei Datenpunkte mit offen zu und bewegung erstellen und diese auf true/false stellen.Ich habe jetzt beim Block AUF nur ein Objekt eingebunden und zwar das den Schalters OBEN.
Wenn das auf False (also geschlossen=> Tor ist oben) geht, löst der Trigger aus. Wenn man 2 Objekte hat, dann scheint sich "Ändern" auf eins der Objekte zu beziehen. Also eine ODER Verknüpfung.
Habe aber parallel den Schalter oben gewechselt. Jetzt läuft es. Mal sehen wie lange. -
@vocaris
Noch mal der Triggerblock ist Rot.
Blau ist ein Abfrageblock.
Wo mit Triggerst du da ?
Am Roten Block hängt oben der Graue Open dran.
Daan wir nur Getriggert wenn "open" unwahr also in dem Moment von wahr auf unwahr geht.
Fachbegriff heißt hier "Triggern auf abfallende Flanke".
Dann Fragst du "open" auf wahr und falsch ab.
Ich vermute mal das ist Schalter "Toor oben" und "Toor unten" haben beide die Bezeichnung open und sind somit schlecht voneinander zu unterscheiden.
Kleiner Tipp schau dir die "Alias-Manager" Instanz mal an, ist etwas Kryptisch zu bedienen (Meine Meinung") aber hat einen Riesengrossen Vorteil, die Schalter können jede Bezeichnung annehmen und beim Wechseln braucht man die Scripte nicht mehr anzupassen. Aber das solltest du erst anpacken wenn du besser mit ioBroker zurecht kommst.
Nich alles auf einmal. Ich erwähne das nur da es dir bei der Programmendwicklung (Scripte) Eindeutige Bezeichner hast und nicht für oben und unten nur "open".
Nur mal zur Erwähnung man kann auf Werte triggern aber für die Garagenfunktion ist das nicht nötig und bleiben wir erst mal beim einfachen und nicht gleich mit dem "Vorschlaghammer".
Schau dir noch mal meinen Trigger und meine Abfragen an oder die von den Anderen die Hier genau so etwas eingestellt haben.
Die funktionieren sicher alle und sind ohne Schnörkel. -
@berges01
Moin,
ich habe den Trigger in gleicher Verwendung wie du.
Du nimmst ja auch die beiden Kontakte. Ich auch. Ja bei mir heißen beide OPEN. Wie du beschrieben hast, kann native (wohl) kein Aliasname verwendet werden. Da es beides Aquara Kontakte sind, heißen sie leider beide gleich.
Ich habe ja das Script für "Garage oben" ja am Trigger angepasst. Habe hier nur ein Objekt eingebunden und das es mit "ändert sich" wieder nicht ging habe ich es mit true/false versucht. Wenn das Tor oben ist, wird ja der obere Kontakt false. Dann soll er es ausführen. Wenn das Tor fährt (und dabei hat er ja das Problem gehabt, dass er das "oben Script" während der Fahrt ausgeführt hat) wird ja der obere Kontakt zu true.
Ich dachte das wäre die Lösung. War es auch ABER ich habe auch gleichzeitig den Kontakt ausgetauscht. Was jetzt die Ursache war, weiß ich nicht. Mal gucken wie lange das hält.
DEnnoch zum Trigger: WEnn ich 2 Objekte habe und den Wert "ändert sich", dann läuft der Trigger wenn EINER der Objekte eine Änderung aufweist? Ist also eine ODER Verknüpfung?
Finde keine Kurse die da mal auf der Ebene erklären. Gerade bei Trigger fliegen viele Kurse schnell drüber und erklären da nicht. Auch nicht ob man Trigger-Objekte hinsichtlich ihres Wertes abfragen kann. Es gibt wohl nur true und flase.