NEWS
[WLED] LED streifen (WS2812B,WS2811,SK6812,APA102) bedienen
-
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. -
Guten Morgen
schau mal !
Meinst du so etwas ?
Die Anweisungen im Triggerblock werden ausgeführt wenn die Variabel Weckzaehler auf von 24 auf 25 springt oder von 26 auf 25.
"ist wahr" bezieht sich dabei auf die Aussage "Weckzaehler = 25".
Oder habe ich dich falsch verstanden ?Auch hierbei wird getriggert und da auch auf eine Variabel "Weckzaehler"
Hierbei Triggert der immer wenn die Variabel größer wird (25 nach 26) aber nicht von (26 auf 25).
Das legt die Abfrage "ist gleich oder größer als letztes" fest.Das mit der Doku zu Blockly´s gebe ich dir recht, das ist nicht so einfach.
Ich habe auch schon vieles gesucht und nicht gefunden oder etwas falsches was genau so aussah.
Es ist so das dieses Blockly zu Java gehört und eigentlich eine Grafische Aufarbeitung von Java ist.
Oder zumindest gedacht ist.
Mann kann in der Ursprungsversion auch selber Bausteine progammieren, ob das hier auch geht keine Ahnung.
Wenn due etwas mit Blockly aufgebaut hast kannst du dir das auch in Java ansehen wenn du im Editor aufDas JS klickst.
Das hilft beim Verstäntniss etwas (Zumindest hat mir das geholfen).
Ab und an muss ich aber auch die Sprache beim ioBroker wieder auf Englisch stellen da das Deutsche mich ab und an mal verwirrt und nicht eindeutig ist.
Na ja auch Probieren hilft ab und an.
Ich nehme mein Licht im Zimmer und trigger damit um einige Funktionen zu testen die ich nicht verstanden habe (Zumindest in der Anfangsfase).
Da ich aber von einer Grafischen Programmiersprache komme (zumindestens einiges mit gemacht habe ist das etwas einfacher.
Auch Beruflich wahr ich mit Automation und Prüftechnik beschäftigt und bin so vorbelastet.
Wenn man ohne Vorkenntnis da reingeworfen wird ist das ein Berg von Fragen die schwer zu beantworten sind da Doku meinst nur in Englisch vorliegt oder zu hochgestochen und Teilweise gar nicht vorhanden ist.
Also Probieren, immer in kleinen Happen damit es nicht zu Unübersichtlich wird. -
@berges01 sagte in [WLED] LED streifen (WS2812B,WS2811,SK6812,APA102) bedienen:
Auch hierbei wird getriggert und da auch auf eine Variabel "Weckzaehler"
Hierbei Triggert der immer wenn die Variabel größer wird (25 nach 26) aber nicht von (26 auf 25).
Das legt die Abfrage "ist gleich oder größer als letztes" fest.Jetzt muss ich auch mal nachfragen... Warum wird hier bei 25 getriggert? Die 25 stehen doch nirgens?
-
Ich habe geschrieben :
Hierbei Triggert der immer wenn die Variabel größer wird (25 nach 26) aber nicht von (26 auf 25).
Der triggert bei jeder zahl sie muss aber größer als der Letzte Wert von der Variabel "Weckzähler" sein.
Die 25 ist dabei völlig nebensächlich und diente nur zur veranschaulichung der Triggerung.
-
@berges01
Es fängt schon damit an, wie ich den Datenpunkt "XYZ" mit dem Stringwert "bewegung" in den Trigger bekomme. Ich finde im Blockly keine "Funktion", um den Datenpunkt einzubinden.
Wird wohl nur über Variable gehen. Aber in Variblen kann ich z.B. eine neu Variable "Garage" erstellen und einbinden. Aber diese ist ja nicht mit dem auslösenden Datenpunkt verbunden.
Da ist schon mein erstes Problem. Dann der Wert. Du hast das Ding aus "Mathematik" gezogen. Ich brauche einen Textwert, Wenn die Garage sich bewegt, wird der Datenpukt zu "bewegung".
Kann ich dafür einfach die Funktion Text "bewegung" einbinden? -
Erst mal ist das hier eigentlich etwas für Blockly und somit hier falsch.
Aber seih es drum.
Wenn ich das Richtig verstehe, so hast du einen Sensor der als wert "bewegung" und "keine bewegung" oder "" als Wert hat?
Darauf kannst du nicht Triggern !
Ich bekomme es nicht hin, auch mit Tricks die ich so kenne nicht um auf einen String , dessen Wert, Inhalt oder eine Auswahl daraus zu Triggern.
Schau dir den Sensor noch mal genau an, meine Sensoren für Fenster und Türen geben Wert "22" und "23" für auf oder zu raus.
(Vorsichtshalber noch mal Geprüft)
Darauf kann man Triggern.
Da ist etwas Falsch, nicht Komplett oder ich verstehe dich nicht richtig.Hier mal z-Wave Philio Sensor an meiner Balkontür. was da rechts steht ist vom Programm Interüretiert und endspricht in dieser Darstellung nicht dem Richtigen Wert sondern dem Interpretierten Zustand.
accessControl_doorState hat den Wert 22 oder 23.
Hier die Alias-Umsetzung
-
@berges01
Ich verzweifele und habe auch langsam keine Lust mehr.
Ich habe mein Script jetzt umgestellt und es reagiert nur noch auf den Datenpunkt mit den Werten 1, 2 oder 3.
Anbei das Script:Wie gesagt es besteht ja nur das Problem beim Runterfahren.
Habe jetzt der Trigger gedebuged und das Event an sich.
Hier erkennt man, dass der Datenpunkt beim Runterfahren 2x geändert wird. Wie.... keine Ahnung. Wenn man sich den Datenpunkt in den Objekten anguckt, sieht man keine Änderung. Aber das Debug spukt es ja aus.Also er fährt runter. Der DP wechselt auf 2.
Klar der Trigger löst alles drei "Unterscripte" aus. Somit sind die ersten drei Zeilen korrekt.
Die Zeile 4 ist auch korrekt, denn nur Script FÄHRT wird aufgrund der 3 im Datenpunkt durchlaufen.
Aber dann kommt es. Nur kurz später wird der Trigger durch eine Änderung wieder aktiviert und da es in das Unterscript "Tor auf" geht, muss der obere Kontakt (der ja beim offenen Tor auf false steht und beim Fahren auf true ging, wieder geschlossen worden sein!!??)
Das ginge ja nur, wenn sich da wo der Fensterkontakt befindet nochmal ein Magnet vorbei kommt... Und danach schaltet er ja nochmal.... Das ist krass.PSS:
Ich glaube ich habe es:
Also nach einem filigranen Test scheint es so zu sein, dass wenn man den Magnet von ganz rechts am Kontakt vorbei laufen lässt er auf dem Wege true/false/true erzeugt... Was für ein Quatsch. Krass.
Ich habe jetzt den Magnet so weit außen platziert, dass er beim hochfahren gerade noch das flase auslöst. Damit wäre das Thema hoffentlich durch.
Finde es nur krass, dass ich das nur durch den Debug im Script rausbekommen habe. Am Datenpunkt muss es ja das gleiche sein. Aber dort sieht man nix.