NEWS
Anfänger - Wie mit Script beginnen
-
Hi alle,
ich versuche mich gerade das erste mal in Blockly.
Leider finde ich es wenig intuitiv, bzw bei mir fällt der Groschen irgendwie nicht.Als erstes Projekt habe ich mir folgendes Szenario überlegt.
Ich habe am TV eine FritzDect Steckdose, die mir den Stromverbrauch misst.
Hinter dem TV steht eine AVM LED Lampe.Ich möchte, dass die LED Lampe abends bei Sonnentuntergang eingeschaltet wird, aber nur wenn der TV läuft.
Oder morgens, vor Sonnenaufgang, wenn es noch dunkel ist und der TV läuft.
Also kurz, wenn draussen Dunkel und TV ist an, dann LED Lampe an.Jetzt probiere ich schon seit Stunden, bzw Tage, wie das Script funktioniert.
Genaugenommen, was ist der Auslöse oder Trigger?
Ich suche den ersten BlockIst es Astro (Goldene Stunden)
oder ist der Auslöser Falls Objekt (TV) über einen bestimmten Stromwert geht.Hier mal meine bescheidene Anfänge.
Danke fürs anschubsen.
Gruß Helix
-
-
@doppellhelix vielleicht probierst du es mit NodeRed. vielleicht ist das intuitiver für dich.
-
@doppellhelix sagte in Anfänger - Wie mit Script beginnen:
Leider finde ich es wenig intuitiv
ist es eigentlich schon.
du hast allerdings noch keine wirklich strukturierte Idee
@doppellhelix sagte in Anfänger - Wie mit Script beginnen:
Ich möchte, dass die LED Lampe abends bei Sonnentuntergang eingeschaltet wird, aber nur wenn der TV läuft.
das sollte so funktionieren wenn die richtigen Datenpunkte gewählt sind.
Aber nun wirds ziemlich komplex
@doppellhelix sagte in Anfänger - Wie mit Script beginnen:
Oder morgens, vor Sonnenaufgang, wenn es noch dunkel ist und der TV läuft.
oder, oder und?
-
@doppellhelix sagte: Ist es Astro (Goldene Stunden)
oder ist der Auslöser Falls Objekt (TV) über einen bestimmten Stromwert geht.Beide Trigger werden benötigt:
- Es wird dunkel und der TV läuft bereits (Astro-Trigger)
- TV wird eingeschaltet und es ist dunkel (Strom-Trigger)
Wie soll das Ausschalten erfolgen? Manuell oder automatisch (TV aus oder es wird hell)?
Anmerkung: "Golden hour Ende" ist am Vormittag.
-
@doppellhelix sagte: wenn draussen Dunkel und TV ist an, dann LED Lampe an.
Vorschlag:
Wenn die Leistungsaufnahme des TV ständig schwankt, kann auf die Astro-Trigger verzichtet werden.
-
@homoran said in Anfänger - Wie mit Script beginnen:
du hast allerdings noch keine wirklich strukturierte Idee
Dem stimme ich zu 100% zu
Vielen Dank euch allen für die Hilfe.
Das sind genau die "Kleinigkeiten", womit mir das eingrooven spaß macht.
Wildes rumprobieren ist ohne einen schnellen Erfolg doch sehr frustrieren. -
@doppellhelix Um eine "Spielwiese" für Tests zu haben, habe ich mir irgendwann ein paar Userdata - Datenpunkte angelegt...
Dafür habe ich dann einen Vis View angelegt, mit dem ich den Zustand der Test-States verändern kann, und Veränderungen durch das Skript auch sehe ...
Mit dieser Testumgebung kann ich dann Skripte ausprobieren, ohne echte Hardware durch falsche Programmierung zu gefährden...
-
Hier habe ich noch zwei Fragen zu.
-
Wo bekomme ich den Block "setzte" (Licht) her?
Finde den irgendwie nicht. -
was passiert in diesem Block "setze" genau?
Gruß Helix
-
-
@doppellhelix sagte: Wo bekomme ich den Block "setzte" (Licht) her?
Du musst erst die Variable
Licht
erstellen. Danach wird "setze Licht auf" angeboten.@doppellhelix sagte in Anfänger - Wie mit Script beginnen:
was passiert in diesem Block "setze" genau?
Die Variable
Licht
erhält das Ergebnis der UND-Vernüpfung. -
Ok, ich konnte es umsetzen.
Wenn ich es vor mir sehen, ist es logisch. Aber selber drauf kommen....
Gibts ne Möglichkeit innerhalb von Blockly zu sehen, welche Bedingungen erfüllt sind?
Bei Scripten vom Typ Rules geht das ja. -
Ich habe mich jetzt nochmal an diesen Script versucht und es ein wenig anders gelöst. Für mich nachvollziehbarer.
Es funktioniert. Aber vllt findet ihr ja etwas, was man verbessern kann.Ich habe erstmal einen Datepunkt "dunkel" unter 0_userdata angelegt.
Mit einem extra Script setze ich diese Variable auf "wahr", wenn es dunkel ist.
Ich habe extra ein eigenständiges Script daraus gemacht, da ich die Vartiable "dunkel" auch noch woanders verwenden kann und so eine bessere Übersicht (zumindest für mich) bekommen.Danach habe ich ein eigenständiges Script erstellt, nur für das Schalten der LED Lampe in abhängigkeit ob der TV Strom verbraucht, also an ist und es dunkel ist.
Was sagt ihr?
Gruß Helix
-
@doppellhelix sagte: Was sagt ihr?
Man verwendet pro Datenpunkt nur einen Trigger in einem Skript (Ressourcen).
Soll das Licht nicht angehen, wenn der TV bei Dunkelheit eingeschaltet wird?Besser so:
Der Vergleich unten dient dazu, dass nicht ständig gesendet wird, wenn die Leistungsaufnahme schwankt.
-
@paul53 said in Anfänger - Wie mit Script beginnen:
Man verwendet pro Datenpunkt nur einen Trigger in einem Skript (Ressourcen).
Guter Hinweis.
Aber sind es viele Resourcen? Wo kann ich sehen, wieviele Resourcen mein (ineffizientes) Script benötigt?@paul53 said in Anfänger - Wie mit Script beginnen:
Soll das Licht nicht angehen, wenn der TV bei Dunkelheit eingeschaltet wird?
Ich dachte das würde auch schon im ersten Teil passieren.
@paul53 said in Anfänger - Wie mit Script beginnen:
Der Vergleich unten dient dazu, dass nicht ständig gesendet wird, wenn die Leistungsaufnahme schwankt.
Der TV nimmt immer über 70W auf im Betrieb.
Versteh ich das richtig? Sobald sich die Stromaufnahme schon um 1 Watt oder 0,1 Watt ändert, macht das Script etwas? Also sendet etwas? -
@doppellhelix sagte: das würde auch schon im ersten Teil passieren.
Der triggert nur einmal am Tag, nicht wenn sich die TV-Leistung ändert.
@doppellhelix sagte in Anfänger - Wie mit Script beginnen:
Sobald sich die Stromaufnahme schon um 1 Watt oder 0,1 Watt ändert, macht das Script etwas? Also sendet etwas?
Ja (ohne den Vergleich).
-
-
@doppellhelix wie wäre es mit der Arbeit die @Codierknecht sich gemacht hat: https://forum.iobroker.net/topic/70481/blockly-for-dummies-starthilfe-und-tipps
Oder die Videos von @haus-automatisierung https://www.youtube.com/@haus_automation/search?query=blockly
und/oder der Masterkurs von Ihm: https://haus-automatisierung.com/iobroker-kurs/ -
Du wirst lachen.....Tips und Tricks gelesen, Masterkurs bezahlt und zur Hälfte abgearbeitet.
Den kann ich übrigens empfehlen.Das Problem ist bei mir ein anderes.
Ich komme aus der SPS Welt.
Hier wird das Script in einer Schleife immer wieder gelesen bzw ausgeführt.
Das mag sich nicht nach einem großen Untershcied anhören, ist es aber.Dazu finde ich die Übersetzung von Blockly nicht ganz gelungen.
In der SPS Welt hat man eine einfachere Sprache. Und Oder Undnicht usw.
Die SPS Proframmierung in FUP (Funktionsplan) kommt der Blockly Geschicht recht nahe.
Ist aber in der SPS Welt m.M. nah besser gelöst.Z.B.
Der Auslöser "Falls Objekt" und dann nochmal "falls mache".
Für mich ist es teilweise schwer auf einem Blick zu sehen, dass es sich bei dem zweiten "falls mache" um eine UND Verknüpung handelt.und wenn jetzt noch ein "UND" oder ein "ODER" dabei kommt ....... brrrr. Dann suche ich mir einen Ast, wie man das am besten umsetzt.
Vllt denke ich auch viel zu kompliziert, NochHabe mir mal ein paar Videos mit NodeRed angeschaut, aber das erscheint mir noch komplizierter.
-
@doppellhelix wir hatten hier schon mal einen Kollegen der aus der SPS Welt kam und alles in Schleifen abarbeiten wollte.
Das wichtigste hier an iobroker (und nodeJS / JavaScript) ist das man hier Ereignisorientiert arbeitet.
Die Datenpunkte sagen schon bescheid wenn etwas ist.Meine alte Smarthome-Lösung war ein Raspberry Pi mit 32 Relais und 32 Eingängen welche ich in einer Endlosschleife immer Abfragen musste um zu erkennen wie denn was geschaltet ist.
Hohe Last auf dem Pi weil ist ja auch Arbeit.Ich habe dann auf Shellys umgestellt - die waren eine Offenbarung! Die Dinger sagen einfach per MQTT bescheid wenn sich etwas ändert. Und reagieren sofort auf jeden Befehl über MQTT.
Dann kam iobroker mit dem gleichen Prinzp - die Daten aus den Shellys sind in Echtzeit einfach da (man Schaltet den Lichtschalter und sofort ändert sich der Datenpunkt in iobroker. Oder öffnet eine Tür und der ZigBee-Sensor meldet).Und dann kam das nächste Coole: Man kann ein Skript einfach ein einen oder mehrere Datenpunkte hängen, sogar per Suchmaske (Selektor). Und das Skript macht nichts bis sich etwas ändert, arbeitet das ab und legt sich wieder schlafen.
Das fand ich Hammer!Klar, ich habe auch ein paar Routinen die 1x die Minute etwas machen. Aber das ist die Ausnahme.
-
@doppellhelix sagte in Anfänger - Wie mit Script beginnen:
Der Auslöser "Falls Objekt" und dann nochmal "falls mache".
Naja, du hast halt eine Menge Auswahl im
Falls Objekt
. Und du bekommst von diesem Trigger nicht nur den Wert zurück sondern das ganze Objekt.
Inklusive vorherigen Wert, Zeitstempel, wer das Objekt denn geändert hat.
Und du kannst die Reaktion weiter einstampfen, z.b. auf "ist größer als der letzte Wert" oder "Ist wahr"
Zur Übersicht: Es gibt auch den Falls Block wo man seitlich etwas anstöpseln kann:
Über das Zahnrad dann auch mehr als einen. Da kann man auch Textfelder draufziehen, z.B. mit dem Pfad des Datenpunktes. Oder den Pfad aus Textbausteinen zusammenbauen.Cool ist auch die "bestätigte" und "unbestätigte" Änderung, damit kannst du leicht unterscheiden ob ein Wert nur gesetzt werden soll oder ob auch darauf reagiert werden soll.
Adapter setzen Werte immer bestätigt. Schreibst du in den gleichen Datenpunkt unbestätigt, weis der Adapter das er handeln muss.Dein 2. Freund der Übersichtlichkeit ist die Rechte Maustastet und die Umschaltung zwischen
interne Eingänge
undexterne Eingänge