Meistere ioBroker, lerne Blockly und automatisiere Abläufe! Wie das geht, lernst Du im umfangreichen ioBroker-Master-Kurs: haus-automatisierung.com/iobroker-kurs/
Einfach genial, ich habe bis dato genauso umständlich gearbeitet aber du hast vollkommen recht mit deinen Tips. Ist einfacher und übersichtlicher. Super danke
Vielen Dank für das tolle Video. Hatte das auch nicht gewusst. Gleich mal meine Skripte upgedatet 😉 Hoffe das da noch mehr blockly Sachen kommt von dir.
...again what learned ! 😉👍 Richtig gemacht im Sinn von „funktioniert“ habe ich das bislang auch schon. Gerade eben aber habe ich gelernt wie es auch noch elegant geht und bei entsprechender Übung auch schneller programmiert werden kann... Vielen Dank für dieses Video ! 😊👍
Ein tolles Video und ein Klasse Thema!!! Ich würde mir noch mehr Videos zu Blockly wünschen. Ich habe jetzt schon etwas mitgenommen. Top!!! Schöne Grüße in meine alte Heimat Paderborn. 😁
Mal wieder sehr gut erklärt. Das kann ich bestimmt auch bei meiner Waschmaschine und Spülmaschine umsetzen wenn diese mir eine Nachricht senden sollen, das sie fertig sind mit der Arbeit.
Erst mal danke für deine Mühe uns hier immer wieder kostenlose Informationen zur Verfügung zu stellen. Bin auch schon seit Jahren dabei meine immer mehr werdenden Skripte zu optimieren und habe schon einiges mit deiner Hilfe verkürzt und auch besser strukturiert. Jetzt komme ich zu dem Wert-Baustein im Video und wollte fragen, wie der sich verhält, wenn mehrere Objekte im Trigger abgefragt werden? Beispiel: Mehrere Bewegungsmelder in einer Etage.
Na dann bekommst Du in „Wert“ auch immer den Wert des Objektes geliefert, welches den Trigger ausgelöst hat. Mit dem Trigger-Baustein „Object-ID“ findest Du auch raus, welches Objekt das war
Schön erklärt. Das erinnert mich an meine Jugendzeit, als wir in der Kinderjahren von C den Ehrgeiz hatten, eine Aufgabe mit möglichst wenig wenigen Zeichen zu programmieren. Das gab nicht immer super gut lesbaren Code, aber eine Menge kreativer Ideen
Ich hatte schon ein Abo von deinem Kanal...Ich wusste aber nicht das du so ein Teci bist. Ich dachte es geht um dein Smart Home.....aber das hier ist ja noch viel interessanter ;)
Richtig gut, habe direkt ein paar Optimierungen meiner Scripte vorgenommen :-) Bitte mehr davon! zB. wie ich Funktionen richtig einsetze, und in mehreren Scripten verwenden kann.
Also ich habe definitiv was gelernt und werde meine scripte mal nach und nach nacharbeiten was ich so schon ab und an gemacht habe aber jetzt wohl effektiver machen kann :) vielen dank :)
Ich hab das optimierte ausprobiert, aber aus welchen Gründen auch immer bleiben meine Lampen mit Bewegungsmeldern dann einfach an. Musste ich erstmal wieder zurückbauen. Ich überlege jetzt eventuell mir mal die Master Class zu gönnen :D
Ich arbeite als Automatisierungstechniler, und programmiere beinahe jeden Tag. Bei Blockly tue ich mich jedoch schwer. Ich wusste zum Beispiel nicht dass während einen Programmablaufs sich der Eingagswert ändern kann. Danke für das Video. Etwas anderes, gibt es eine Möglichkeit mit CoDeSys im iobroker zu programmieren. Ich habe bei der Arbeit CoDeSys auf einem Raspberry laufen. Wüste aber nicht wie ich die beiden zusammenführen könnte.
Wahrscheinlich schon, wobei natürlich auch der Controller entlastet wird, da er weniger häufig Anfragen nach Werten bekommt. Und die Logiken laufen zuverlässiger, da mit den Werten des Triggers gearbeitet wird. Theoretisch könnte sich der Wert ja sonst jederzeit wieder verändern. Das führt zu komischen Effekten (mal gehts, mal nicht)
Wie immer, sehr gut, danke dir. Wie macht man das am geschicktesten mit einen Taster, wo der Wert vom Taster nur kurz von false auf true wechselt, die Lampe aber schalten soll.
das Beispiel in 5:20 funktioniert nicht wenn der Eingangswert "Button=false" ist. Denn dann würde die Lampe trotzdem angehen. Bei 6:15 passt es dann wieder, da der Wert vom button 1:1 übergeben wird. Aber sonst TOP!
Wenn du das so zeigst - völlig logisch - so habe ich das aber noch nie gesehen als ich angefangen habe mit den Blocklys. Selber würde ich auf sowas nicht kommen und halte mich eben an alte Verhaltensweisen. Hab schon davon gelernt und setzte deinen Tip demnächst um. Ob ich selbst auch Optimierungsmöglichkeiten erkenne??? Ich glaub ja nicht. Danke
Nur zum Verständnis, eigentlich überprüft man doch den zustand der Lampe und nicht den zustand des Buttons (Taster nicht Schalter) und je nach zustand der Lampe schaltet der Button (Trigger) die Lampe in den jeweils anderen zustand also wenn die Lampe "war" ist wird sie auf "falsch" gesetzt und umgekehrt.
In diesem Beispiel ist es ein Schalter und die Lampe wird immer synchronisiert. Mit einem Taster würde man mit dem „umschalten“ Baustein am schnellsten zum Ziel kommen
@@haus_automation Ok, dacht ich mir zwar schon, aber ein Button ist bei mir im Kopf ein Taster und das hat mich ein wenig irritiert :-) Vielen Dank und weiter so mit deinen lehrreichen und gut verständlichen Videos. LG Volker
Ein wirklich sehr gutes Video thematisch und auch redaktionell. Ich hoffe du machst noch mehr Videos von dieser Thematik. Eine Frage habe ich an dieser Stelle an dich: Wie kann ich relativ schnell herausfinden wo ein Taster/Aktor in meiner Blockly-Welt überall vorkommt? Beispielsweise hat die CCUx einen wirklich komfortablen Weg; Man klickt einfach beim jeweiligen Gerät auf den Button "Direkte" oder "Programme". Lieber Matthias, vielen Dank nochmals für deine Tipps die du hier gegeben hast. Ich werde das Thema gleich in meiner Blockly--Welt umsetzen.
In der Liste deiner Scripts gibt es oben rechts ne Lupe zum suchen. Namen des Tasters/Aktors eingeben und es werden nurnoch die Scripte gelistet, wo der drin vorkommt. Öffnen per Doppelklick highlightet dir die Stelle dann sogar im Blocklycode selbst :)
Er findet die Datenpunkte aber nicht nur in Blockly sondern auch, wenn der Datenpunkt in reinen JS Scripten oder JS-Funktionsblöcken in Blockly verwendet wurde.
@@Xyolyp Na dass man eine Funktion nur einmal schreibt und in beliebig vielen Scripts wiederverwendet. Ich habe das so verstanden, dass es in meinem Video fehlt. Weil der JavaScript-Adapter erlaubt das ja.
Habe öfters Mal Probleme, dass ich über Zustandsänderungen von Schaltern etc doppelt/dreifach über Telegramm informiert werde. Werde die Scripts Mal nach diesen Tipps optimieren, Mal gucken, was rauskommt. Danke
Das geht aus dem Beispiel hier nicht hervor :) Das sind ja nur fiktive Datenpunkte. Erstmal bin ich von einem Schalter ausgegangen, welcher den Status hält. Wäre es ein Taster, würde ich den trigger auf „wahr“ stellen und dann den „umschalten“ Block nutzen
Mit dem Wert des Triggers habe ich schon immer gearbeitet, aber das verkürzen, wenn es nicht nur wahr/falsch ist - also wie bei >20 - ist dann schon unübersichtlich und man muss mehfach hinschauen was gemeint ist, wenn man sich nach Monaten das Script wieder vornimmt. Danke für die gute Erklärung und gerne mehr davon!
Das kommt drauf an wie sehr man das übt und wie häufig man das macht :) In blockly muss ich mich auch dran gewöhnen, aber im Code ist das total gängig dass man das so macht.
Ja, super! Ich wäre nicht darauf gekommen, dass alle Werte im Script zur Verfügung stehen. Leider kann man den letzten Schritt mit über mqtt gesteuerten Aktoren nicht machen, da diese mit on/off statt true/false arbeiten, oder?
Ja, on/off ist halt ein String. Also eine Zeichenkette. Ist ein anderer Datentyp. Aber man könnte eine Inline-Bedingung einfügen und das entsprechend wandeln
Der ioBroker Kurs wurde erst dieses Jahr neu aufgenommen 👍 NodeRed ist etwas in die Jahre gekommen, aber das Grundprinzip funktioniert noch genauso! Wird aber auch bald neu gemacht
Hallo Matthias, ich habe mal eine Frage zu deinem Video Beispiel: Und zwar ab Minute 8:26 ... Ist das hier beschriebene Beispiel semantisch richtig ??? Ich kann doch eigentlich keinen "Switch" mit einem (WERT > 20) schalten ? Ich kann das Objekt "Lampe" doch nur mit true bzw. false schalten ? Im Klartext würde doch in dem Blockly folgendes stehen: Falls Objekt "Temperatur" wurde geändert von z.B 22°C auf 23°C - Dann steuere Lampe mit 23 > 20 Das macht doch keinen Sinn ? ....oder habe das falsch verstanden ;-) ?
Du musst das Ergebnis davon noch auswerten. 23 > 20 === wahr. Und das Ergebnis davon wird übergeben. Das wird von innen nach außen aufgelöst vor der Ausführung. Also ja, das ist korrekt.
Wenn ich Dich frage, ob 4 + 5 == 9 ist, dann löst Du die eine Seite der Gleichung ja auch erst auf und vergleichst dann. Und so ist das hier auch. Wenn man steuere mit „4 + 5“ zusammenbaut, wird das ja auch erst berechnet und dann 9 übergeben.
@@haus_automation ah, alles klar...Vielen Dank für die Antwort. Aber für den Laien ist das doch schon etwas tricky die Logik auf den ersten, bzw...zweiten und dritten Blick zu durchschauen ;-)
Hallo vieleicht etwas Off Topic, ich wollte mir Deinen Iobroker Kurs kaufen dafür habe ich mich auf der Seite angemeldet doch ich bekomme keine Mail um meine Email Adresse zu bestätigen habe es einige male ausprobiert und auch sämtliche Ordner inclusive Spam bei mir durchgeschaut die Mail kommt nicht! Gibt es dort ein Problem?
Hallo, was kann ich den machen, wenn ich mehrere IDs habe und die mit und/oder auswerte? Dann klappt der Trick nicht, dann muss ich wieder mit falls arbeiten oder? Grüße Andy
Das kommt ganz drauf an, was das Script machen soll. In „Wert“ steht ja immer der geänderte/neue Wert. Und über „ObjectID“ weißt Du dann ja wieder welche ID geändert wurde. Damit würde ich immer arbeiten. Also nur mit „Wert von Objekt ID“ arbeiten, wenn es ein Objekt ist, welches eben nicht ausgelöst hat.
Oh wow, endlich einer der mit Köpfchen arbeitet! Das ist 1000 mal logischer. Ich hätte da eine andere Frage bezüglich Blockly: meine Tasmota-Steckdose gibt mir im IO-Broker als Sensor folgenden Wert aus {"Time":"2022-03-27T00:37:28","ENERGY":{"TotalStartTime":"2022-03-21T15:20:16","Total":12.034,"Yesterday":2.180,"Today":0.057,"Period": 1,"Power":86,"ApparentPower":125,"ReactivePower":91,"Factor":0.69,"Voltage":228,"Current":0.549}} wie kann ich damit in Blockly arbeiten? finde leider nichts dazu. Vielen Dank schonmal und mach bitte weitere Videos auf diesem Level!
Du musst den String in ein Objekt konvertieren. Dafür gibt es den Baustein „JSON zu Objekt“. Schau mal in den ioBroker Master Kurs. Da ist genau dafür ein Beispiel enthalten.
ja danke, cooler Tipp aber wie verhält sich "Wert" wenn ich im Trigger mehrere auslösende ObjektIDs habe ? Dann muss ich ja im Script nochmals die Werte aus den Objekt-IDs holen. ???
Dann wäre die Frage, warum Du mehrere Datenpunkte als Trigger hast und was das Ziel dahinter ist. Und nein, der Trigger teilt dir auch mit, welches Objekt zur Auslösung geführt hat. Klar, wenn Du weitere Daten brauchst, dann musst Du die holen.
Na, zum Beispiel bei der Auswertung eines Xiaomi-Cubes. Trigger auf "RotateLeft, Rotate-Right und Shake" und danach nochmal die Falls-Abfrage was denn jetzt getriggert hat. Oder macht es Sinn jedes Event mit einem eigenen Trigger auszuwerten ?
Das erste Skript mit dem man die Lampe einschaltet geht bei meinem Taster, der nach der Betätigung auf true danach gleich wieder auf false zurück springt, nicht. In dem Fall geht meine Lampe nämlich dann an und gleich wieder aus. Also dann doch wieder eine einfache wenn-sonst Logik.
@@haus_automation Genial, den Baustein kannte ich noch gar nicht. Vielen Dank, geht jetzt. Bei meiner anderen Zigbee Steckdose musste ich noch ein kleines Delay rein machen, sonst hat die immer wieder abgeschalten mit dem "umschalten" Baustein. ist jetzt alles viel aufgeräumter :)
Versuch macht klug leider futzt es bei mir nicht, habe schon en bisschen was gemacht bin aber immer noch sehr unwissend in dem Tehma. ichn nutze Taster und die sendemn halt nur für 1 Sec war und springendan zurük auf falsch daher gets bei mir so nicht es blitzt nur mal kurtz aber eigent lich logisch schade.
Dass man das Objekt des Triggers direkt nutzen kann, wusste ich auch noch nicht. Aber auch wenn ich mit Javascript bisher eher weniger zu tun hatte und deswegen Blockly sehr gern nutze, ist es selbst dafür einfach sehr von Vorteil, wenn man schon mal programmiert hat und all die Schleifen und bedingte Anweisung schon mal selbst geschrieben hat. Aber eine Frage habe ich dazu noch: Mal angenommen, du hast 5 TH-cam-Lampen, die jeweils einen Schalter haben. Gibt es eine Möglichkeit das Blockly-Script für verschiedene Geräte zu nutzen? Also z.B. TH-cam.0.Wohnzimer.Lampe, TH-cam.0.Küche.Lampe, TH-cam.0.Flur.Lampe usw.
Bei 5:18 blicke ich nicht durch, wo ist denn da die Bedingung? Falls Wert=wahr, schalte Lampe mit wahr, aber würde das gleiche nicht auch bei wert=falsch passieren?
Wahr / falsch IST die Bedingung. Bedingungen müssen immer ein wahr oder falsch liefern. In der Programmierung löst ein "falls wahr" immer die "dann" Aktion aus. "Falls falsch" entsprechend die "sonst" Aktion. Man muß nicht "wenn Wert = wahr" abfragen wenn wahr oder falsch schon im Wert enthalten ist. Es reicht "wenn Wert". Das hat man irgendwann mal eingeführt um Programm Code und Aufwand zu sparen. Jetzt verstanden?
@@kleztv1542 Aha, alles klar, Danke. Das würde heissen, wenn bei einem Trigger nur bei "falls falsch" etwas ausgelöst werden soll, müsste ich entweder die "dann" Aktion leer lassen und nur die "sonst" Aktion verwenden, oder "nicht-Wert" bei der "dann" Aktion benutzen. Richtig?
Ist es möglich über Blockly einen Wert per Mqtt, an ein D1 Mini Tasmota Display mit Display zu senden? Ich komme auf keinen grünen Zweig. Ein Video dazu wäre sehr interessant.. Gruß Marc
Jau klar, das Display einfach in Tasmota richtig konfigurieren, dann schauen wie der cmnd dafür ist um die Zeilen anzusteuern und dann diesen per MQTT Adapter einfach senden. Wo genau hängst Du denn?
@@haus_automation wenn das mal so einfach wäre.Falls Du mal Lust und Laune hast, könntest du ja dazu ein Video machen, würde bestimmt vielen Leuten helfen.
Hallo Matthias, die Herangehensweisen finde ich interessant und auch logisch. Mir als Rookie ist aber noch nicht ganz klar wie ich einen Datenpunkt erzeuge?!
Das war schon lange mal überfällig. Bei manchen Scripten sträuben sich einem die Nackenhaare. Aber zugegeben: Programmierer sind hier klar im Vorteil. Mich stört an Blockly dieses Eingedeutschte. Wenn man die Systemsprache auf Englisch umstellt ist das flüssiger.
Stimmt. Mich stört nichtmal DAS es auf deutsch übersetzt ist, sondern WIE. "Falls - mache" ist einfach schlechtes deutsch und liest sich auch im Kontext bescheuert: "Falls XY mache steuere...". Warum hat man es nicht einfach klassisch direkt übersetzt in "Wenn - dann". "Wenn XY, dann steuere..." macht viel mehr Sinn. Gibt noch mehr solche Beispiele. Ich vermute deutsch war nicht die Muttersprache des Übersetzers...
@@kleztv1542 andersherum gefragt, kann ich denn Blockly alleine auf englisch setzen? Ich stimme dir mit der Übersetzung voll zu, komme aus der SPS-Technik und ich finde dieses Falls.. dann sehr unglücklich, verwirrt meist.
Okay, das Video richtiget sich ja auch mehr fortgeschrittene Nutzer, welche bereits einige Scripts gebaut haben und diese jetzt verbessern möchten. Für Anfänger würde ich den ioBroker Master Kurs empfehlen, welcher von Anfang an startet und alle Basics aufzeigt, bis zu fortgeschrittenen Themen
Mist. Das hatte ich auch vor 😁 Warst schneller 😂 Dein erstes Beispiel geht sogar noch einfacher. Einfach unter Objekte das "binde Objekt mit Objekt" erstellen und mit beiden Datenpunkten Verknüpfen. Mehr brauch man nicht. Also einfach "nur" das eine blaue Blockly. Super erklärt 😄
Ja, „binde“ wollte ich nicht mit reinnehmen, da man da keine weiteren Regeln hinzufügen kann bzw dann wieder auf trigger umbauen muss. Da finde ich das die bessere Basis.
@@haus_automation dankeschön jetzt habe ich mein Skript extreme kürzen können. jetzt muss ich nur mal sehen wie ich eine gruppe bzw mehrere Lampen mit einem tastendruck umschalten kann. Benutze die Xiaomi taster mit der mehrfachbelegung und habe es immer so das wenn ich den taster lang drücke alle lampen in dem jeweiligen raum entweder an oder aus gehen. der baustein ist noch sehr lang leider. vielen dank für die hilfe.
Hallo Matthias, das ist mal wieder richtig hilfreich - was mich noch interessiert/irritiert: Kann "Wert" alle möglichen Datentypen annehmen? Wenn ein "Ein-/Aus-Zustand" getestet wird, dann ist "true" und "false" nachvollziehbar. Aber woher weiß ich, ob so eine Temperaturangebe als Zahl oder als String daher kommt? Gibt es bei Blockly auch irgendeine Funktion/Option, dass ich mir ansehen kann, was so passiert? In NodeRed kann man so schön mit dem "Debug-Node" forschen... Viele Grüße, Wolfgang
@@haus_automation Der Wert der geändert wurde, ist eine Temperaturangabe, also z.B. 20 (Grad). Du steuerst dann die Lampe mit Wert. Also steuerst du die Lampe mit 20! Hä? Mit dem Wert kannst du die Lampe weder ein noch aus schalten und ohne sonst könntest du auch sowieso nur einen Zustand schalten.
Hei. Also ich habe mein Skript zur Steuerung von 9 "Geräten" mittels eines Xiaomi Doppel Wandtasters (9 Eventmöglichkeiten) gemäß deiner Vorstellung vereinfacht. Habe aber 2 Probleme 1) Manchmal regiert die Lampe nicht. z.B. Bereich "Kochbereich" 1x links drücken. Wert geht auf 1002 aber die Lampe geht nicht an. Beim 2ten oder 3ten mal geht es dann 2) Ein Event habe ich auf eine Szene gesetzt. Die Szene ist eine Spotreinigung des Xiaomi Saugers. Im Bild z.B. "Saugen Küche". Das macht er beim Eventwert 2004. Der Sauger startet. Aber wenn er wieder zurück kommt startet er den Vorgang erneut. Warum? ibb.co/D793nPm
Das sieht erstmal komplett richtig aus. Auch, wenn ich eher mit „sonst falls“ arbeiten würde. So wird jedes Mal jede Bedingung geprüft, auch wenn nur die erste zutrifft zB. Die Frage wäre woran das liegen könnte. Wird denn ganz sicher der Datenpunkt immer aktualisiert?! Ich würde mal ein paar debug Bausteine einbauen um zu schauen was dort wirklich wann ankommt
Genauso. Es löst ja trotzdem immer nur ein Objekt den trigger aus. Welches Objekt das ist, bekommt man übrigens über den gleichen Baustein raus. Einfach nur „Objekt ID“ wählen.
Den zweiten Teil mit der Temperatur verstehe ich nicht. Es wird doch auf einen Zahlenwert geprüft. Also steht doch im Wert eine Zahl (=Temperatur). Dann bringt es mir doch nix zu schreiben „Steuere Lampe mit Wert“
Nein, die Lampe wird mit dem Ergebnis von "Wert > 20" angesteuert. Und das Ergebnis davon ist true (wahr) oder false (falsch). Am Ende ist es genau das gleiche wie in den Bedingungen.
Generell ist es genau das, was man verinnerlichen muss. Du könntest auch in einer Bedingung schreiben: Wert > 20 == wahr == wahr == wahr == wahr == wahr == wahr == wahr ..... Aber die ganzen == wahr lassen sich halt "wegkürzen". Das ist nicht falsch - nur eben überflüssig.
Das Problem ist eher, das Anfänger gar nicht wissen das "wert" oder zusätzliche Parameter in den Trigger Block als Variablen übergeben werden. Das müsste mmn wesentlich offener kommuniziert werden.
Genau richtig. Und dass man überall nur Scripts sieht, welche Fragen enthalten. Selten werden ja gute Lösungen vorgestellt oder geteilt. Also lernt man am Anfang direkt auf der „falschen“ Basis und ist froh, wenn überhaupt irgendwas läuft
Schönes Video, wie immer super erklärt :) Die Verknüpfung von Button- und Lampe-Status geht aber noch einfacher mit dem Binde-Block :D github.com/ioBroker/ioBroker.javascript/blob/master/docs/de/blockly.md#bind-states
Ich weiß, wollte ich auch erst zeigen, aber dann kann man keine weiteren Bedingungen einfügen usw. Ich hatte noch nie den Fall, dass ich das immer und zu jeder Zeit 1:1 verknüpfen wollte.
Gibt es denn IRGENDWEN, der einen booleschen Wert jemals mit "If wert = true ... else if wert = false ..." prüfen würde?? Das "Beispiel" wirkt doch ziemlich an den Haaren herbeigezogen, nur für den Effekt einer dramatischen Verkürzung. :-D
Ja, hunderte Leute. Schau mal ins Forum oder auf Facebook. Sind halt keine Entwickler, sondern normale Anwender... Da macht man das, was man wo anders schonmal gesehen hat. Einfach mal eine Zeit in der ioBroker Community bewegen ;) Dadurch dass ich das hunderte Male so gesehen habe, ist dieses Video ja entstanden
@@haus_automation Oooh, da habe ich mich wohl nicht genug informiert. Bin da ja (noch) kein Mitglied (billige Ausrede, ich weiß). Dann bitte ich um Entschuldigung. Aber dennoch kann ich mir nicht vorstellen, wie man auf so eine Idee kommen kann, auch als Anwender. :-D Warum sollte man mit "else if" gegen einen zweiten Wert prüfen, wenn es doch nur einen geben kann.
@@haus_automation Das meinte ich aber schon, auch ohne technisches Verständnis: "Prüf, ob der Knopf gedrückt ist. Wenn ja ... sonst ...". Schon bei der theoretischen Überlegung kommt gar keine Alternativprüfung vor. Die muss man doch gezielt auswählen und das kommt nur dann in Betracht, wenn es mindestens 3 unterscheidbare Zustände gibt. Aber naja, die erschreckende Realität straft einen Lügen. :-(
"steuere lampe mit (Wert > 20)" ist kurz und effizient, aber - meiner Meinung nach - schlecht bzw. langsamer lesbar. Bei If-Then erschliesst sich die Logik schneller. Verkürzen ist nicht immer sinnvoll. Irgendwann landet man bei den berüchtigten Einzeilern.
Das ist nur Gewohnheit, aber das sieht jeder etwas anders und jeder hat da auch andere Vorlieben. Ganz normal :) Wenn Du Dich mit der anderen Lösung besser fühlst, dann mach es weiter so 👍
ich tat mit anfangs auch schwer das zu lesen, aber man gewöhnt sich dran. Und im Zweifel hänge ich einen Kommentar dazu in dem ich mit meinen Worten die Funktion beschreibe... Schnelle sollte der Cod auf jeden fall werden und die Last im System verringern
Meistere ioBroker, lerne Blockly und automatisiere Abläufe! Wie das geht, lernst Du im umfangreichen ioBroker-Master-Kurs:
haus-automatisierung.com/iobroker-kurs/
Kannst du mal erklären wie man eine Zeit schalt uhr bastelt die auch geht also Licht nach 30 sic. Aus
Wusste nicht, daß im Trigger das Objekt mitgegeben wird, also was gelernt :-)
LG
Toll, vielen Dank. Gern mehr Tipps zu Blockly und vllt. zu den Möglichkeiten....
Super, vielen Dank. So langsam, wird es verständlicher, dank deines Videos.
Einfach genial, ich habe bis dato genauso umständlich gearbeitet aber du hast vollkommen recht mit deinen Tips. Ist einfacher und übersichtlicher. Super danke
Wow. Musste paar mal zurück spulen aber sehr hilfreich wenn man es verstanden hat.
Vielen Dank für das tolle Video. Hatte das auch nicht gewusst. Gleich mal meine Skripte upgedatet 😉 Hoffe das da noch mehr blockly Sachen kommt von dir.
Sehr wichtige Hinweise zur Optimierung. Danke dafür. Ressourcen kann man auf Raspberry Pis nicht genug sparen.
Vielen Dank! Viel gelernt, Bitte mehr Videos zum Thema Blockly
Bin kompletter Anfänger und habs verstanden. Top Video 👍🏻
Wieder ein gelungener Beitrag. Erste Vorschlag ist umgesetzt . Prima!!!!
Bitte mehr solche Beispiele zeigen.
Gruß Michael
Ich habe auf jedenfall was gelernt, gerne mehr davon!
Prima Video! Schön lehrreich und knackig kurz! Andere hätten da 45 Minuten draus gemacht. Super hier!
So soll es sein ;)
Du bist der Beste , DANKE weiter so mit Blockly
...again what learned !
😉👍
Richtig gemacht im Sinn von „funktioniert“ habe ich das bislang auch schon.
Gerade eben aber habe ich gelernt wie es auch noch elegant geht und bei entsprechender Übung auch schneller programmiert werden kann...
Vielen Dank für dieses Video !
😊👍
Wie immer sehr informativ und lernreich. Super, besten Dank hierfür.
sehr gut und eindeutig beschrieben. Ich habe selbstverständlich auch diese Fehler gemacht und werde meine Skripte anzupassen.
Ohhhh man, hätte ich das mal am Anfang meiner Programmierungen gewusst. Vielen Dank !!!
Ein tolles Video und ein Klasse Thema!!! Ich würde mir noch mehr Videos zu Blockly wünschen. Ich habe jetzt schon etwas mitgenommen. Top!!! Schöne Grüße in meine alte Heimat Paderborn. 😁
Super erklärt. Ich finde eh Blockly Tutorials spitze
Mal wieder sehr gut erklärt. Das kann ich bestimmt auch bei meiner Waschmaschine und Spülmaschine umsetzen wenn diese mir eine Nachricht senden sollen, das sie fertig sind mit der Arbeit.
Erst mal danke für deine Mühe uns hier immer wieder kostenlose Informationen zur Verfügung zu stellen. Bin auch schon seit Jahren dabei meine immer mehr werdenden Skripte zu optimieren und habe schon einiges mit deiner Hilfe verkürzt und auch besser strukturiert. Jetzt komme ich zu dem Wert-Baustein im Video und wollte fragen, wie der sich verhält, wenn mehrere Objekte im Trigger abgefragt werden? Beispiel: Mehrere Bewegungsmelder in einer Etage.
Na dann bekommst Du in „Wert“ auch immer den Wert des Objektes geliefert, welches den Trigger ausgelöst hat. Mit dem Trigger-Baustein „Object-ID“ findest Du auch raus, welches Objekt das war
@@haus_automation Danke, für die schnelle Antwort.
Vielen Dank für deine Tipps. Ich wünsche mir noch mehr Tipps!
oh man.. das sieht zwar alles ganz toll aus mit sonst falls und wahr oder falsch.. aber die einfache kompakte Lösung.. TOP ! danke für die Tipps...
Super Hilfreich, werde betroffene Skripte anpassen 👍🏻
Super ! Bitte mehr von diesen Tips!
Schön erklärt. Das erinnert mich an meine Jugendzeit, als wir in der Kinderjahren von C den Ehrgeiz hatten, eine Aufgabe mit möglichst wenig wenigen Zeichen zu programmieren.
Das gab nicht immer super gut lesbaren Code, aber eine Menge kreativer Ideen
Ich finde es kürzer eigentlich immer lesbarer. Aber hier sind ja auch Tipps dabei, wie man seltsame Fehler vermeiden kann
Naja die Abkürzungen in C sind doch was anderes als die schönen Vereinfachungen im blockly
Ich hatte schon ein Abo von deinem Kanal...Ich wusste aber nicht das du so ein Teci bist. Ich dachte es geht um dein Smart Home.....aber das hier ist ja noch viel interessanter ;)
Ne ich zeige alles kreuz und quer. Vieles setze ich selbst um, anderes zeige ich nur um anderen zu helfen oder weil es interessant ist ;)
Für mich persönlich recht simpel, aber dennoch sehr angenehm zum anschauen!
Gerne mehr davon :)
Das Video richtet sich ja auch eher an Anfänger ;)
Richtig gut, habe direkt ein paar Optimierungen meiner Scripte vorgenommen :-) Bitte mehr davon! zB. wie ich Funktionen richtig einsetze, und in mehreren Scripten verwenden kann.
Tolles Video! Ich konnte dadurch viele Blockly's von mir ganz schön verschlanken!!! Super! :-)
Also ich habe definitiv was gelernt und werde meine scripte mal nach und nach nacharbeiten was ich so schon ab und an gemacht habe aber jetzt wohl effektiver machen kann :) vielen dank :)
Ein Teil wusste ich, aber der 3. Tip war genial
Wenn man das einmal verinnerlicht hat, kann man damit extrem viel Code/Blöcke sparen ;)
Wieder was gelernt :).
Danke! Bitte mehr Videos in der Richtung :)
Ich hab das optimierte ausprobiert, aber aus welchen Gründen auch immer bleiben meine Lampen mit Bewegungsmeldern dann einfach an. Musste ich erstmal wieder zurückbauen. Ich überlege jetzt eventuell mir mal die Master Class zu gönnen :D
So hab ich es noch nie gesehen aber ist ein guter Tipp
Hallo
Gutes Video. Ich habe meine alles so wie deine am Anfang. Werde jetzt alle mal durchgehen und es ausprobieren.
Viel Erfolg dabei :) Freut mich, wenn ich helfen konnte
Ich arbeite als Automatisierungstechniler, und programmiere beinahe jeden Tag.
Bei Blockly tue ich mich jedoch schwer. Ich wusste zum Beispiel nicht dass während einen Programmablaufs sich der Eingagswert ändern kann. Danke für das Video.
Etwas anderes, gibt es eine Möglichkeit mit CoDeSys im iobroker zu programmieren. Ich habe bei der Arbeit CoDeSys auf einem Raspberry laufen. Wüste aber nicht wie ich die beiden zusammenführen könnte.
Sehr hilfreich. Danke!
Sehr gut, danke.
Definitiv schöner und schlanker. Der Performancevorteil ist aber vermutlich vernachlässigbar.
Wahrscheinlich schon, wobei natürlich auch der Controller entlastet wird, da er weniger häufig Anfragen nach Werten bekommt. Und die Logiken laufen zuverlässiger, da mit den Werten des Triggers gearbeitet wird. Theoretisch könnte sich der Wert ja sonst jederzeit wieder verändern. Das führt zu komischen Effekten (mal gehts, mal nicht)
danke... wieder was gelernt!
Für mich als Software-Entwickler zwar trivial, aber ein schönes Video für Anfänger!
Wie immer, sehr gut, danke dir.
Wie macht man das am geschicktesten mit einen Taster, wo der Wert vom Taster nur kurz von false auf true wechselt, die Lampe aber schalten soll.
Kommt drauf an was man vor hat. Am einfachsten mit dem umschalten Baustein. Beispiele dafür habe ich im ioBroker Master Kurs gezeigt
Was gelernt :) Gern mehr davon!
Gerne mehr davon :)
das Beispiel in 5:20 funktioniert nicht wenn der Eingangswert "Button=false" ist. Denn dann würde die Lampe trotzdem angehen. Bei 6:15 passt es dann wieder, da der Wert vom button 1:1 übergeben wird. Aber sonst TOP!
Wenn man auf false prüfen möchte, packt man ein „nicht“ dazwischen. Aber nicht mit false vergleichen 😉
Wenn du das so zeigst - völlig logisch - so habe ich das aber noch nie gesehen als ich angefangen habe mit den Blocklys. Selber würde ich auf sowas nicht kommen und halte mich eben an alte Verhaltensweisen. Hab schon davon gelernt und setzte deinen Tip demnächst um. Ob ich selbst auch Optimierungsmöglichkeiten erkenne??? Ich glaub ja nicht. Danke
Nur zum Verständnis,
eigentlich überprüft man doch den zustand der Lampe und nicht den zustand des Buttons (Taster nicht Schalter)
und je nach zustand der Lampe schaltet der Button (Trigger) die Lampe in den jeweils anderen zustand also wenn
die Lampe "war" ist wird sie auf "falsch" gesetzt und umgekehrt.
In diesem Beispiel ist es ein Schalter und die Lampe wird immer synchronisiert. Mit einem Taster würde man mit dem „umschalten“ Baustein am schnellsten zum Ziel kommen
@@haus_automation Ok, dacht ich mir zwar schon, aber ein Button
ist bei mir im Kopf ein Taster und das hat mich ein wenig irritiert :-)
Vielen Dank und weiter so mit deinen lehrreichen und gut verständlichen Videos.
LG Volker
Ein wirklich sehr gutes Video thematisch und auch redaktionell. Ich hoffe du machst noch mehr Videos von dieser Thematik. Eine Frage habe ich an dieser Stelle an dich: Wie kann ich relativ schnell herausfinden wo ein Taster/Aktor in meiner Blockly-Welt überall vorkommt? Beispielsweise hat die CCUx einen wirklich komfortablen Weg; Man klickt einfach beim jeweiligen Gerät auf den Button "Direkte" oder "Programme".
Lieber Matthias, vielen Dank nochmals für deine Tipps die du hier gegeben hast. Ich werde das Thema gleich in meiner Blockly--Welt umsetzen.
Gute Frage, da kenne ich leider auch keinen schönen/einfachen Weg.
In der Liste deiner Scripts gibt es oben rechts ne Lupe zum suchen. Namen des Tasters/Aktors eingeben und es werden nurnoch die Scripte gelistet, wo der drin vorkommt. Öffnen per Doppelklick highlightet dir die Stelle dann sogar im Blocklycode selbst :)
Er findet die Datenpunkte aber nicht nur in Blockly sondern auch, wenn der Datenpunkt in reinen JS Scripten oder JS-Funktionsblöcken in Blockly verwendet wurde.
@@Keepandippit Ach stark! :) Habe ich noch nie genutzt - danke für den Tipp
Schade, dass die Möglichkeit von skriptübergreifenden Funktionen in Blockly fehlt..
Was meinst du mit Skriptübergreifenden Funktionen? Eigentlich lässt sich alles realisieren.
@@Xyolyp Na dass man eine Funktion nur einmal schreibt und in beliebig vielen Scripts wiederverwendet. Ich habe das so verstanden, dass es in meinem Video fehlt. Weil der JavaScript-Adapter erlaubt das ja.
Ne mir war das tatsächlich nicht bewusst. Dachte es geht nur mit JS Skripten. Nicht im Blockly Kontext.
Video ist super ☺️👍 gerne mehr davon
Habe öfters Mal Probleme, dass ich über Zustandsänderungen von Schaltern etc doppelt/dreifach über Telegramm informiert werde. Werde die Scripts Mal nach diesen Tipps optimieren, Mal gucken, was rauskommt. Danke
Hi.
Ist der Änderungstrigger beim loslassen des Buttons nicht wieder ein neuer mit "falsch"?
Also ein "wahr" nur solange wie ich den Button drücke.
Das geht aus dem Beispiel hier nicht hervor :) Das sind ja nur fiktive Datenpunkte. Erstmal bin ich von einem Schalter ausgegangen, welcher den Status hält. Wäre es ein Taster, würde ich den trigger auf „wahr“ stellen und dann den „umschalten“ Block nutzen
Kann man mit Blockly unterfunktionen realisieren?
Ja, habe ich im Kurs auch erklärt. Kann dazu gerne aber noch ein paar praktische Beispiele machen
Super Video und für viele sicherlich hilfreich!
Kurze Frage: Woher kommt der "Geräte"-Tab im ioBroker?
Kurze Antwort: Vom Device-Adapter :)
Mit dem Wert des Triggers habe ich schon immer gearbeitet, aber das verkürzen, wenn es nicht nur wahr/falsch ist - also wie bei >20 - ist dann schon unübersichtlich und man muss mehfach hinschauen was gemeint ist, wenn man sich nach Monaten das Script wieder vornimmt.
Danke für die gute Erklärung und gerne mehr davon!
Das kommt drauf an wie sehr man das übt und wie häufig man das macht :) In blockly muss ich mich auch dran gewöhnen, aber im Code ist das total gängig dass man das so macht.
Geb Christian hier recht! Würde es dennoch so wie Matthias programmieren und einfach nen Kommentar mit einbauen. Das hilft immer sehr!
Bei mehreren Triggern kann man das aber nicht verwenden oder? Denn in dem Wert steht dann immer der Wert des jeweiligen Trigger. Sehe ich das richtig?
Ja, aber über die Objekt ID kann man ja rausfinden welcher Datenpunkt den Trigger ausgelöst hat
Ja, super! Ich wäre nicht darauf gekommen, dass alle Werte im Script zur Verfügung stehen.
Leider kann man den letzten Schritt mit über mqtt gesteuerten Aktoren nicht machen, da diese mit on/off statt true/false arbeiten, oder?
Ja, on/off ist halt ein String. Also eine Zeichenkette. Ist ein anderer Datentyp. Aber man könnte eine Inline-Bedingung einfügen und das entsprechend wandeln
Moin, wie sehen deine aktuellen Kurse aus? sind die Aktuell? Bin gerade am Anfang von iobroker mit Blockly und nodered.
Der ioBroker Kurs wurde erst dieses Jahr neu aufgenommen 👍 NodeRed ist etwas in die Jahre gekommen, aber das Grundprinzip funktioniert noch genauso! Wird aber auch bald neu gemacht
Ich kam, sah und lernte.
Jetzt auf Latein 😉
@@haus_automation Veni, vidi, didici
Hallo Matthias, ich habe mal eine Frage zu deinem Video Beispiel: Und zwar ab Minute 8:26 ...
Ist das hier beschriebene Beispiel semantisch richtig ???
Ich kann doch eigentlich keinen "Switch" mit einem (WERT > 20) schalten ? Ich kann das Objekt "Lampe" doch nur mit true bzw. false schalten ?
Im Klartext würde doch in dem Blockly folgendes stehen:
Falls Objekt "Temperatur" wurde geändert von z.B 22°C auf 23°C -
Dann steuere Lampe mit 23 > 20
Das macht doch keinen Sinn ? ....oder habe das falsch verstanden ;-) ?
Du musst das Ergebnis davon noch auswerten. 23 > 20 === wahr. Und das Ergebnis davon wird übergeben. Das wird von innen nach außen aufgelöst vor der Ausführung. Also ja, das ist korrekt.
Wenn ich Dich frage, ob 4 + 5 == 9 ist, dann löst Du die eine Seite der Gleichung ja auch erst auf und vergleichst dann. Und so ist das hier auch. Wenn man steuere mit „4 + 5“ zusammenbaut, wird das ja auch erst berechnet und dann 9 übergeben.
@@haus_automation ah, alles klar...Vielen Dank für die Antwort. Aber für den Laien ist das doch schon etwas tricky die Logik auf den ersten, bzw...zweiten und dritten Blick zu durchschauen ;-)
Eigentlich ist es immer die gleiche Reihenfolge. Es wird nur optisch anders dargestellt.
Hallo vieleicht etwas Off Topic, ich wollte mir Deinen Iobroker Kurs kaufen dafür habe ich mich auf der Seite angemeldet doch ich bekomme keine Mail um meine Email Adresse zu bestätigen habe es einige male ausprobiert und auch sämtliche Ordner inclusive Spam bei mir durchgeschaut die Mail kommt nicht! Gibt es dort ein Problem?
Ja, mit deinem Mailpostfach. Gmx nimmt keine weiteren Mails an, weil Du keinen freien Speicher mehr hast :)
Hallo,
was kann ich den machen, wenn ich mehrere IDs habe und die mit und/oder auswerte?
Dann klappt der Trick nicht, dann muss ich wieder mit falls arbeiten oder?
Grüße
Andy
Das kommt ganz drauf an, was das Script machen soll. In „Wert“ steht ja immer der geänderte/neue Wert. Und über „ObjectID“ weißt Du dann ja wieder welche ID geändert wurde. Damit würde ich immer arbeiten. Also nur mit „Wert von Objekt ID“ arbeiten, wenn es ein Objekt ist, welches eben nicht ausgelöst hat.
Oh wow, endlich einer der mit Köpfchen arbeitet! Das ist 1000 mal logischer.
Ich hätte da eine andere Frage bezüglich Blockly: meine Tasmota-Steckdose gibt mir im IO-Broker als Sensor folgenden Wert aus {"Time":"2022-03-27T00:37:28","ENERGY":{"TotalStartTime":"2022-03-21T15:20:16","Total":12.034,"Yesterday":2.180,"Today":0.057,"Period": 1,"Power":86,"ApparentPower":125,"ReactivePower":91,"Factor":0.69,"Voltage":228,"Current":0.549}} wie kann ich damit in Blockly arbeiten? finde leider nichts dazu. Vielen Dank schonmal und mach bitte weitere Videos auf diesem Level!
Du musst den String in ein Objekt konvertieren. Dafür gibt es den Baustein „JSON zu Objekt“.
Schau mal in den ioBroker Master Kurs. Da ist genau dafür ein Beispiel enthalten.
ja danke, cooler Tipp aber wie verhält sich "Wert" wenn ich im Trigger mehrere auslösende ObjektIDs habe ? Dann muss ich ja im Script nochmals die Werte aus den Objekt-IDs holen. ???
Dann wäre die Frage, warum Du mehrere Datenpunkte als Trigger hast und was das Ziel dahinter ist. Und nein, der Trigger teilt dir auch mit, welches Objekt zur Auslösung geführt hat. Klar, wenn Du weitere Daten brauchst, dann musst Du die holen.
Na, zum Beispiel bei der Auswertung eines Xiaomi-Cubes. Trigger auf "RotateLeft, Rotate-Right und Shake" und danach nochmal die Falls-Abfrage was denn jetzt getriggert hat. Oder macht es Sinn jedes Event mit einem eigenen Trigger auszuwerten ?
Das erste Skript mit dem man die Lampe einschaltet geht bei meinem Taster, der nach der Betätigung auf true danach gleich wieder auf false zurück springt, nicht. In dem Fall geht meine Lampe nämlich dann an und gleich wieder aus. Also dann doch wieder eine einfache wenn-sonst Logik.
Oder ein einzelner Baustein mit „umschalten“
@@haus_automation Genial, den Baustein kannte ich noch gar nicht. Vielen Dank, geht jetzt. Bei meiner anderen Zigbee Steckdose musste ich noch ein kleines Delay rein machen, sonst hat die immer wieder abgeschalten mit dem "umschalten" Baustein. ist jetzt alles viel aufgeräumter :)
Hallo möchte 1 schalter mit 2 Lampen verbinden wie geht das das sie 100% weiß sind?
Auf knopf Druck
Versuch macht klug leider futzt es bei mir nicht, habe schon en bisschen was gemacht bin aber immer noch sehr unwissend in dem Tehma. ichn nutze Taster und die sendemn halt nur für 1 Sec war und springendan zurük auf falsch daher gets bei mir so nicht es blitzt nur mal kurtz aber eigent lich logisch schade.
Dann verwendest Du den umschalten Baustein bei true. Fertig ✅
Dass man das Objekt des Triggers direkt nutzen kann, wusste ich auch noch nicht. Aber auch wenn ich mit Javascript bisher eher weniger zu tun hatte und deswegen Blockly sehr gern nutze, ist es selbst dafür einfach sehr von Vorteil, wenn man schon mal programmiert hat und all die Schleifen und bedingte Anweisung schon mal selbst geschrieben hat.
Aber eine Frage habe ich dazu noch:
Mal angenommen, du hast 5 TH-cam-Lampen, die jeweils einen Schalter haben. Gibt es eine Möglichkeit das Blockly-Script für verschiedene Geräte zu nutzen? Also z.B. TH-cam.0.Wohnzimer.Lampe, TH-cam.0.Küche.Lampe, TH-cam.0.Flur.Lampe usw.
Sehr gut
Danke !!
ÄH, bitte MEEEEEHHHHHHRRRRR Davon!!!!
Bei 5:18 blicke ich nicht durch, wo ist denn da die Bedingung? Falls Wert=wahr, schalte Lampe mit wahr, aber würde das gleiche nicht auch bei wert=falsch passieren?
Wahr / falsch IST die Bedingung. Bedingungen müssen immer ein wahr oder falsch liefern. In der Programmierung löst ein "falls wahr" immer die "dann" Aktion aus. "Falls falsch" entsprechend die "sonst" Aktion. Man muß nicht "wenn Wert = wahr" abfragen wenn wahr oder falsch schon im Wert enthalten ist. Es reicht "wenn Wert". Das hat man irgendwann mal eingeführt um Programm Code und Aufwand zu sparen. Jetzt verstanden?
@@kleztv1542 Aha, alles klar, Danke. Das würde heissen, wenn bei einem Trigger nur bei "falls falsch" etwas ausgelöst werden soll, müsste ich entweder die "dann" Aktion leer lassen und nur die "sonst" Aktion verwenden, oder "nicht-Wert" bei der "dann" Aktion benutzen. Richtig?
@@teichdiver9623 Völlig richtig. "dann" leer lassen finde ich allerdings nicht sauber. Würde hier also mit "nicht Wert" arbeiten.
@@kleztv1542 Super, vielen Dank
Ist es möglich über Blockly einen Wert per Mqtt, an ein D1 Mini Tasmota Display mit Display zu senden? Ich komme auf keinen grünen Zweig. Ein Video dazu wäre sehr interessant.. Gruß Marc
Jau klar, das Display einfach in Tasmota richtig konfigurieren, dann schauen wie der cmnd dafür ist um die Zeilen anzusteuern und dann diesen per MQTT Adapter einfach senden.
Wo genau hängst Du denn?
@@haus_automation wenn das mal so einfach wäre.Falls Du mal Lust und Laune hast, könntest du ja dazu ein Video machen, würde bestimmt vielen Leuten helfen.
@@marcb745 Im Prinzip ist es so einfach :)
Hallo Matthias, die Herangehensweisen finde ich interessant und auch logisch. Mir als Rookie ist aber noch nicht ganz klar wie ich einen Datenpunkt erzeuge?!
Das war schon lange mal überfällig. Bei manchen Scripten sträuben sich einem die Nackenhaare. Aber zugegeben: Programmierer sind hier klar im Vorteil. Mich stört an Blockly dieses Eingedeutschte. Wenn man die Systemsprache auf Englisch umstellt ist das flüssiger.
Stimmt. Mich stört nichtmal DAS es auf deutsch übersetzt ist, sondern WIE. "Falls - mache" ist einfach schlechtes deutsch und liest sich auch im Kontext bescheuert: "Falls XY mache steuere...". Warum hat man es nicht einfach klassisch direkt übersetzt in "Wenn - dann". "Wenn XY, dann steuere..." macht viel mehr Sinn. Gibt noch mehr solche Beispiele. Ich vermute deutsch war nicht die Muttersprache des Übersetzers...
@@kleztv1542 andersherum gefragt, kann ich denn Blockly alleine auf englisch setzen? Ich stimme dir mit der Übersetzung voll zu, komme aus der SPS-Technik und ich finde dieses Falls.. dann sehr unglücklich, verwirrt meist.
@@tugsi76 Ich glaube das geht leider nicht. Man kann die Systemsprache auf Englisch umstellen, aber das gilt dann halt für alles.
hmmm mir fehlt da die genauere Erklärung was was an welcher stelle auslöst .... ok ich bin Anfänger
Okay, das Video richtiget sich ja auch mehr fortgeschrittene Nutzer, welche bereits einige Scripts gebaut haben und diese jetzt verbessern möchten.
Für Anfänger würde ich den ioBroker Master Kurs empfehlen, welcher von Anfang an startet und alle Basics aufzeigt, bis zu fortgeschrittenen Themen
Mist. Das hatte ich auch vor 😁 Warst schneller 😂 Dein erstes Beispiel geht sogar noch einfacher. Einfach unter Objekte das "binde Objekt mit Objekt" erstellen und mit beiden Datenpunkten Verknüpfen. Mehr brauch man nicht. Also einfach "nur" das eine blaue Blockly. Super erklärt 😄
Ja, „binde“ wollte ich nicht mit reinnehmen, da man da keine weiteren Regeln hinzufügen kann bzw dann wieder auf trigger umbauen muss. Da finde ich das die bessere Basis.
Hallo ... danke für das Video. Wie wären das kurze skript wenn man einen Taster hätte und eine Lampe damit schalten wollen würde?
Die Lampe leuchtet synchron zum Taster.
Das Beispiel geht bei einem Taster nicht, da beim loslassen der Wert sich wieder ändert.
Indem man einfach den umschalten Baustein verwendet, ohne einen Wert zu übergeben
@@haus_automation dankeschön jetzt habe ich mein Skript extreme kürzen können. jetzt muss ich nur mal sehen wie ich eine gruppe bzw mehrere Lampen mit einem tastendruck umschalten kann. Benutze die Xiaomi taster mit der mehrfachbelegung und habe es immer so das wenn ich den taster lang drücke alle lampen in dem jeweiligen raum entweder an oder aus gehen. der baustein ist noch sehr lang leider. vielen dank für die hilfe.
@@markushuesken1480 jupp genau das war mein problem jetzt klappt aber alles dank der antwort von Mathias
Hallo Matthias,
das ist mal wieder richtig hilfreich - was mich noch interessiert/irritiert:
Kann "Wert" alle möglichen Datentypen annehmen?
Wenn ein "Ein-/Aus-Zustand" getestet wird, dann ist "true" und "false" nachvollziehbar.
Aber woher weiß ich, ob so eine Temperaturangebe als Zahl oder als String daher kommt?
Gibt es bei Blockly auch irgendeine Funktion/Option, dass ich mir ansehen kann, was so passiert?
In NodeRed kann man so schön mit dem "Debug-Node" forschen...
Viele Grüße,
Wolfgang
Jau „Wert“ ist nur eine Variable. Darin kann alles enthalten sein, was im Datenpunkt von deinem trigger auch erlaubt ist
In dem Beispiel mit der Temperatur kann man die Lampe aber nicht mehr ausschalten. Man kann auch zu viel wegnehmen.
Warum sollte das nicht mehr gehen?
(Ich entwickle beruflich seit über 15 Jahren Software, vertrau mir einfach dass das richtig ist) 😉
@@haus_automation Der Wert der geändert wurde, ist eine Temperaturangabe, also z.B. 20 (Grad). Du steuerst dann die Lampe mit Wert. Also steuerst du die Lampe mit 20! Hä? Mit dem Wert kannst du die Lampe weder ein noch aus schalten und ohne sonst könntest du auch sowieso nur einen Zustand schalten.
Das hast Du falsch verstanden. Welche Stelle meinst Du genau?
Bei 6:04 steuere ich die Lampe mit Wert an, richtig. Allerdings mit dem Wert aus dem Button-Trigger. Heißt: Da kann nur true oder false kommen
Hei. Also ich habe mein Skript zur Steuerung von 9 "Geräten" mittels eines Xiaomi Doppel Wandtasters (9 Eventmöglichkeiten) gemäß deiner Vorstellung vereinfacht.
Habe aber 2 Probleme
1) Manchmal regiert die Lampe nicht. z.B. Bereich "Kochbereich" 1x links drücken. Wert geht auf 1002 aber die Lampe geht nicht an. Beim 2ten oder 3ten mal geht es dann
2) Ein Event habe ich auf eine Szene gesetzt. Die Szene ist eine Spotreinigung des Xiaomi Saugers. Im Bild z.B. "Saugen Küche". Das macht er beim Eventwert 2004. Der Sauger startet. Aber wenn er wieder zurück kommt startet er den Vorgang erneut. Warum?
ibb.co/D793nPm
Das sieht erstmal komplett richtig aus. Auch, wenn ich eher mit „sonst falls“ arbeiten würde. So wird jedes Mal jede Bedingung geprüft, auch wenn nur die erste zutrifft zB.
Die Frage wäre woran das liegen könnte. Wird denn ganz sicher der Datenpunkt immer aktualisiert?! Ich würde mal ein paar debug Bausteine einbauen um zu schauen was dort wirklich wann ankommt
Gibt es solche ähnlichen Tipps auch bei FHEM?
Bestimmt :) Aber dazu habe ich generell schon soooo viel gezeigt, dass ich alles nur wiederholen würde
kann mir wer sagen wie das ist mit dem "wert" baustein wenn man ein "falls Objekt" baustein mit 2 objekten hat ?
Genauso. Es löst ja trotzdem immer nur ein Objekt den trigger aus. Welches Objekt das ist, bekommt man übrigens über den gleichen Baustein raus. Einfach nur „Objekt ID“ wählen.
Again what learned :-))
Den zweiten Teil mit der Temperatur verstehe ich nicht. Es wird doch auf einen Zahlenwert geprüft. Also steht doch im Wert eine Zahl (=Temperatur). Dann bringt es mir doch nix zu schreiben „Steuere Lampe mit Wert“
Ein Vergleich gibt immer WAHR oder FALSCH zurück. Mit diesem WAHR oder FALSCH wird dann die Lampe angesteuert.
Nein, die Lampe wird mit dem Ergebnis von "Wert > 20" angesteuert. Und das Ergebnis davon ist true (wahr) oder false (falsch). Am Ende ist es genau das gleiche wie in den Bedingungen.
Generell ist es genau das, was man verinnerlichen muss. Du könntest auch in einer Bedingung schreiben:
Wert > 20 == wahr == wahr == wahr == wahr == wahr == wahr == wahr .....
Aber die ganzen == wahr lassen sich halt "wegkürzen". Das ist nicht falsch - nur eben überflüssig.
@@haus_automation Ich glaub, dass das mit dem wahr == wahr == wahr == ... jetzt eher noch verwirrend ist... ;-) (Nicht für mich als ITler...)
@@AndreasRiddering Ich glaube ich muss das Thema nochmal von Anfang an erklären :)
Das Problem ist eher, das Anfänger gar nicht wissen das "wert" oder zusätzliche Parameter in den Trigger Block als Variablen übergeben werden.
Das müsste mmn wesentlich offener kommuniziert werden.
Genau richtig. Und dass man überall nur Scripts sieht, welche Fragen enthalten. Selten werden ja gute Lösungen vorgestellt oder geteilt. Also lernt man am Anfang direkt auf der „falschen“ Basis und ist froh, wenn überhaupt irgendwas läuft
again what learned :-D
ROFL learned something new again ;)
Schönes Video, wie immer super erklärt :)
Die Verknüpfung von Button- und Lampe-Status geht aber noch einfacher mit dem Binde-Block :D
github.com/ioBroker/ioBroker.javascript/blob/master/docs/de/blockly.md#bind-states
Ich weiß, wollte ich auch erst zeigen, aber dann kann man keine weiteren Bedingungen einfügen usw. Ich hatte noch nie den Fall, dass ich das immer und zu jeder Zeit 1:1 verknüpfen wollte.
Ich würde dir mehrere 👍🏼geben
Hammer vid Abo is raus danke hab was gelernt
Oooooh! Umgezogen?
Jau, aber noch viel zu tun
@@haus_automation Kenn ich. ;) Viel Erfolg! Gibts irgendwann mal ne Außenansicht und House Tour?
Jetzt ist mein Gehirn ausgestiegen 😂
Mh, das tut mir leid 😕
Gibt es denn IRGENDWEN, der einen booleschen Wert jemals mit "If wert = true ... else if wert = false ..." prüfen würde?? Das "Beispiel" wirkt doch ziemlich an den Haaren herbeigezogen, nur für den Effekt einer dramatischen Verkürzung. :-D
Ja, hunderte Leute. Schau mal ins Forum oder auf Facebook. Sind halt keine Entwickler, sondern normale Anwender... Da macht man das, was man wo anders schonmal gesehen hat.
Einfach mal eine Zeit in der ioBroker Community bewegen ;) Dadurch dass ich das hunderte Male so gesehen habe, ist dieses Video ja entstanden
@@haus_automation Oooh, da habe ich mich wohl nicht genug informiert. Bin da ja (noch) kein Mitglied (billige Ausrede, ich weiß). Dann bitte ich um Entschuldigung. Aber dennoch kann ich mir nicht vorstellen, wie man auf so eine Idee kommen kann, auch als Anwender. :-D Warum sollte man mit "else if" gegen einen zweiten Wert prüfen, wenn es doch nur einen geben kann.
Naja - frag doch mal jemanden ohne technisches Verständnis im Familienumfeld danach :) Dann wird das schnell klar.
@@haus_automation Das meinte ich aber schon, auch ohne technisches Verständnis: "Prüf, ob der Knopf gedrückt ist. Wenn ja ... sonst ...". Schon bei der theoretischen Überlegung kommt gar keine Alternativprüfung vor. Die muss man doch gezielt auswählen und das kommt nur dann in Betracht, wenn es mindestens 3 unterscheidbare Zustände gibt.
Aber naja, die erschreckende Realität straft einen Lügen. :-(
"steuere lampe mit (Wert > 20)" ist kurz und effizient, aber - meiner Meinung nach - schlecht bzw. langsamer lesbar.
Bei If-Then erschliesst sich die Logik schneller.
Verkürzen ist nicht immer sinnvoll. Irgendwann landet man bei den berüchtigten Einzeilern.
Das ist nur Gewohnheit, aber das sieht jeder etwas anders und jeder hat da auch andere Vorlieben. Ganz normal :) Wenn Du Dich mit der anderen Lösung besser fühlst, dann mach es weiter so 👍
Man sollte daran denken, dass auch ein anderer die Logik schnell und einfach nachvollziehen kann. Daran denken viele im Bereich Smarthome nicht.
@@blockmove3 Viel allgemeiner konntest Du das nicht mehr formulieren, oder? :)
ich tat mit anfangs auch schwer das zu lesen, aber man gewöhnt sich dran. Und im Zweifel hänge ich einen Kommentar dazu in dem ich mit meinen Worten die Funktion beschreibe... Schnelle sollte der Cod auf jeden fall werden und die Last im System verringern
Jetzt fühl ich mich dumm XD
Das war nicht meine Absicht 🙁
wieder was gelernt danke