NEWS
Anfänger - Wie mit Script beginnen
-
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
-
@doppellhelix sagte in Anfänger - Wie mit Script beginnen:
Ich komme aus der SPS Welt.
Da muss man sich dann umgewöhnen. Wie @BananaJoe schon schriebt, läuft im ioBroker (fast) alles ereignisorientiert ab. Das kann eine Änderung an einem State sein, oder z.B. auch ein Zeitereignis.
GUI-Programme für Windows funktionieren übrigens genauso ... da passiert nix, solange nicht ein Ereignis eintritt. Mausklick auf einen Button, Mausbewegung, Tastatureingabe usw.
Das ist letzendlich auch deutlich ressourcenschonender als ständig irgendwelche Schleifen abzuarbeiten. Wozu sollte ein Programm etwas tun, wenn gerade nix zu tun ist`?In der SPS Welt hat man eine einfachere Sprache
Ansichtssache. Wer in der großen Nicht-SPS-Welt eine (fast beliebige) Sprache beherrscht, findet sich da eigentlich sofort zurecht. SPS ist nicht die Regel, sondern eher die Ausnahme.
Proframmierung in FUP (Funktionsplan) kommt der Blockly Geschicht recht nahe.
Ist aber in der SPS Welt m.M. nah besser gelöstDu musst Dich leider von Dingen wie Funktions- oder Ablaufplänen verabschieden. Fange an, ereignisorientiert an die Sache heranzugehen. Was ist der Auslöser (Trigger) und welche zusätzlichen Bedingungen müssen beim Eintritt desselben erfüllt sein, um etwas zu tun.
und wenn jetzt noch ein "UND" oder ein "ODER" dabei kommt ....... brrrr
Das ist die eigentliche Kunst. Nennt sich "bool'sche Algebra". Hat viel mit der einst so gehassten "Mengenlehre" zu tun. Das Problem hat man aber grundsätzlich mit allen modernen Sprachen. Egal ob Basic, C, Pascal, JavaScript etc.p.p.
By the way (zu Deinem Screenshot): In einem Trigger muss man den Wert des "triggernden" DP nicht nochmal lesen. Der Trigger kennt "seinen Wert" bereits (wie auch alle anderen Eigenschaften des State). Für sowas verwendet man den Block "Wert" aus dem Bereich "Trigger".
Vielleicht schaust Du Dir "Blockly für Dummies" nochmal an