Skip to content

Skripten / Logik

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

16.4k Themen 211.7k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Themen
    48k Beiträge
    P
    @ArnoD sagte in E3DC Hauskraftwerk steuern: Neue Version TibberSkript auf GitHub hochgeladen. Version: 2.1.1 Änderungen: interne Code-Optimierungen, Bugfixes Habe ein paar Fehler gefunden, die ich heute korrigiert habe. Ich konnte es aber noch nicht wirklich testen. Ich versuchs mal :-) Danke dir
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Themen
    78k Beiträge
    nik82N
    Hi, hab downgrade gemacht, kommt aber immer noch leider :-)
  • Hilfe für Skripterstellung mit Node-RED

    952 13k
    952 Themen
    13k Beiträge
    HomoranH
    @fiddle sagte in [Gelöst]: Adapter per {Node Red | JS} (de)aktivieren: Ok, nicht als "Wert" schreiben, sondern als "Befehl". Dann scheint ihn das zu beeindrucken. du zeigst ja nichts, aber es geht mit true/false [image: 1763416200051-screenshot_20251117-224854_firefox.jpg] gesteuert über eigenen DP vom typ Bool
  • Rolladensteuerung ccu2 Wochenende, Wochentags, Feiertage

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    F
    Hi, ich steuere auch komplett via CCU2 meine Rollläden. Dabei nutze ich dann auch diverse Situationen, um andere Schaltmodi zu verwenden. Das mache ich mit der CCU2 eigenen Klick-Oberfläche. Wenn So-Do UND kein Feiertag UND kein URLAUB, dann gehe um 22.00 Uhr runter. sonst, wenn Fr-Sa ODER Feiertag morgen ODER URLAUB, dann gehe um 23.00Uhr runter. Usw. "Urlaub" setze ich über eine Variablen. "Feiertag morgen" ermittle ich mittels einem Skript aus dem Homematic Forum, welches auch Variablen setzt. Findest Du schnell wenn DU nach Feiertag suchst. Hilft Dir das? Fitti
  • Flot Chart oder Vis View in eine e-Mail einfügen

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    897 Aufrufe
    F
    Interessante Frage. Wäre auch für Telegram und Co interessant. IMHO würde es mit PhantomJS gehen. Also ein Webseiten-Screendumper. Nur der ist extrem Ressourcen fressend: http://forum.iobroker.net/viewtopic.php … 847#p36531 Aus deiner Signatur erkenne ich, dass Du Himbeeren verwendest. Das wird dann wohl leider nix. Ich habe hier https://github.com/mbochynski/canvas2image noch was schönes gefunden. Kann es leider nicht testen, da mein VPN nicht geht. Aber vielleicht hat der eine oder andere Fuchs 8-) dazu eine Idee? Idee dahinter, man hat irgendwo eine kleine Webseite oder HTML Sniplet mit einem Flotaufruf in einem div. Dann könnte diese lösung daraus ein Bild machen.
  • [gelöst]Script enabled gelöscht…

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    932 Aufrufe
    S
    Hallo Thilo, vielen Dank für die Hilfe. Und tatsächlich hat ein umbenennen der scripte ausgereicht um die 'verschwundenen' Einträge wieder zu bekommen….guter Tip, man lernt nie aus! Lg
  • [gelöst]Frage zu setTimeout Funktion….

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    etvE
    @paul53: Beispiel für Sony starten mit 5 Minuten Verzögerung: var timersony = null; var starte_sony = "http://192.168.68.37:50000/tasker=displayoff"; if(timersony) clearTimeout(timersony); timersony = setTimeout(function() {request(starte_sony);}, 5 * 60000); ```` ` danke dir paul53 - werd' ich gleich einbauen… Liebe Grüße tom
  • HM-PB-2-WM Anfängerfrage

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    2k Aufrufe
    P
    Sorry, hab keine HUE. Gruß Pix
  • Einführung Programmieren mit Javascript

    Verschoben javascript
    12
    1 Stimmen
    12 Beiträge
    14k Aufrufe
    G
    Funktionen Wir haben sie bereits verwendet, wir haben selber etliche geschrieben, nur was ist das? Eine Funktion ist eine Zusammenfassung mehrere Anweisungen zu einem Block. Eine Funktion wird (in der Regel) über Ihren Namen aufgerufen. Ihr können Parameter übergeben werden und sie kann einen Rückgabewert haben. Nehmen wir die Funktion getState(). Der Funktion übergeben wir die id des States, den wir haben möchten. Als Rückgabewert erhalten wir dann den Zustand des States. Gut, eine Funktion verwendet man, wenn man sie braucht. Wann aber schreibt man eine Funktion? Dann, wenn man muss, oder wenn man sie braucht. Wir brauchen z.B. eine Funktion bei der Funktion subscribe() bzw. on(). on({id: 'hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT‘}, function (obj) { setState("hm-rpc.1.IEQ038xxxx.3.State",!getState("hm-rpc.1.IEQ038xxxx3.State").val); setState("hm-rpc.1\. IEQ056xxxx.3.State",!getState("hm-rpc.1\. IEQ056xxxx.State").val); }); Die Funktion ist der Bereich > function (obj) { … } In diesem Fall hat die Funktion keinen Namen. Wichtig ist folgendes festzuhalten: Eine Funktion ist mit dem Schlüsselwort function gekennzeichnet. Eine Funktion kann einen Namen haben. Beispiel function irgendetwas. Der Name kann nach den gleichen Regeln wie der Name einer Variablen gewählt werden. Einer Funktion kann ein oder mehrere Werte Übergeben werden. In dem Beispiel wird ein Wert, obj, übergeben. Mehrere Werte werden durch Komma übergeben. Die Werte werden von Runden Klammern eingeschlossen. Wird kein Wert übergeben, so bleibt der Raum zwischen den runden Klammern leer. In den geschweiften Klammern wird dann die Anweisungen wie in einem ganz normalen Programm geschrieben. Eine Funktion kann einen Wert zurückgeben. Nur wann schreibt man sonst noch eine Funktion. Eine Funktion hilft dabei, ein Programm zu strukturieren und übersichtlicher zu gestalten. Gerade wenn ein Programmabschnitt mehrfach verwendet werden soll, macht es Sinn, ihn in eine Funktion auszugliedern. Zum Beispiel wollen wir an verschiedenen Stellen eines Programms die Temperatur schön formatieren. Das Programm könnte so aussehen: console.log('Wohnzimmer: '+formatTemp(20)); console.log('Küche: '+formatTemp(18.27)); function formatTemp(temp) { return(temp.toFixed(1)+'°C'); } Die Funktion selber gibt nichts aus (könnte sie natürlich). Vielmehr gibt sie per return einen Wert zurück, den wir dann ausgeben. Ob sich für so eine einfache Aufgabe bereits eine Funktion lohnt liegt im Auge des Betrachters. Dem typografisch versierten Leser dürfte aufgefallen sein, dass man zwischen der Zahl und °C eigentlich ein Leerzeichen schreibt. Wenn wir dieses in der Funktion korregieren, brauchen wir den Rest des Programms nicht mehr kontollieren. Also auch bei so einem kleinen Programm kann es Sinn machen. Der Name der Funktion ist eine Variable. Daher müsste eigentlich auch folgendes gehen: console.log('Wohnzimmer: '+formatTemp(20)); console.log('Küche: '+formatTemp(18.27)); var formatTemp=function (temp) { return(temp.toFixed(1)+'°C'); }; Das Programm beschert uns jetzt aber leider einen Fehler: > Test: ReferenceError: formatTemp is not defined at script.js Das hängt damit zusammen, dass wir zunächst die Funktion (Variable) verwenden und diese erst später definiert wurde. So geht es: var formatTemp=function (temp) { return(temp.toFixed(1)+'°C'); }; console.log('Wohnzimmer: '+formatTemp(20)); console.log('Küche: '+formatTemp(18.27)); Daher macht es in der Regel Sinn bei der Deklaration der FUnktion auch den Namen anzugeben. Bei dieser Schreibweise kommt es im Skript (fast) nicht darauf an, wo die Funktion deklariert wird. Idealer Weise schreibt man erst das eigentliche Programm und hängt am Ende die Hilfsfunktionen an. Wenn man der Funktion selber den Namen gibt sind Rekursionen möglich. Ein Rekursion ist eine Funktion, die sich selber aufruft. Es gibt Situationen in denen dieses notwendig ist. Nach Möglichkeiten sollte man diese wegen ihrer schlechten Lesbarkeit vermeiden. EIn Beispiel hierzu ist die Fakultät eine Zahl. Die Fakultät von 3 ist 6. Die Fakultät ist eine mathematische Funktion, die einer natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Null) kleiner und gleich dieser Zahl zuordnet. Bei 3 wird also gerechnet: 123=6 Das Programm könnte hierzu wie folgt aussehen: function fac(n) { if (n<2) { console.log(n); return 1; } else { console.log(n+'*') return n*fac(n-1) } } console.log('='+fac(3)); Wichtig ist die Zeile return n*fac(n-1) Hier ruft sich die Funktion selber auf. Bei der Variablenschreibweise wäre das nicht möglich. Trotzdem wäre ein solches Kontrukt nicht notwendig gewesen. Mit einer for-Schleife wäre das eleganter gewesen: function fac(n) { var ergebnis=1; for(var i=2;i<=n;i++) ergebnis*=i; return ergebnis; } console.log(fac(3)); Einer Funktion können beliebig viele Argumente übergeben werden. Spannend ist es, wenn die Zahl der Argumente variiert. Hier gibt es die Möglichkeit diese mit dem arguments Objekt abzufragen: `function printArgs() { var result = ""; var i; for (i = 0; i < arguments.length; i++) { result += arguments[i] + ', '; } return result; } console.log(printArgs(1,2,3,4,'Maus'));` [/i]
  • Gelöst - Programm funktioniert nicht so wie's soll :(

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    829 Aufrufe
    P
    Kein Problem !!! Ich habe selber schon so viel aus dem Forum an Infos gezogen und Hilfe bekommen, da bin froh wenn ich auch mal helfen kann. Gruß Phantomio
  • Sayit-Adapter mit falschem PFad

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    1k Aufrufe
    B
    Hallo Rainer, hab eben noch mal die Konfiguration angesehen. Dort gibt es einen Eintrag "Cache". Dieser war angewählt. Habe den Haken entfernt und siehe da, es läuft. Was für eine Funktion hat "Cache"? Um schneller auf bestimmte Dinge zugreifen zu können?
  • Sleeptimer mit Countdown

    Verschoben
    30
    0 Stimmen
    30 Beiträge
    9k Aufrufe
    B
    Hallo Pix, erstmal danke. Das mit dem Widget habe ich verstanden. Wie muss ich das Skript anpassen, dass der Timer los läuft, wenn eine bestimmte Variable=true ist? Gruß Balu Edit: hab es jetzt angepasst, funktioniert sogar. Wer evtl. das gleiche "Problem" hat, hier das Skript. hm-rega.0.xxxxx startet den Timer (in meinem Fall wenn alle Personen abwesend sind) hm-rega.0.yyyyy schaltet dann den Alarm scharf ` > createState('countdown', 20); function count() { setTimeout(function () { var timer = getState('countdown').val || 20; if (timer > 1) { setState("hm-rega.0.xxxxx", false); setState('countdown', timer - 1); count(); } else { setState('countdown', 0); setState("hm-rega.0.yyyyy", true); } }, 1000); } on("hm-rega.0.xxxxx", function (obj) { if (obj.newState.val === true || obj.newState.val === 'true' || obj.newState.val == 1) { setState('countdown', 20); setState("hm-rega.0.yyyyy", false); count(); } }); ` Super, wie einem hier geholfen wird. Daumen hoch Danke und Gruß Balu
  • [nicht mehr relevant] Anzeige des Duty Cycles in VIS

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    937 Aufrufe
    Jeeper.atJ
    Ja, habe ich. Aber mir sträubt es sich, etwas alle paar Minuten auszuführen nur damit mein Spieltrieb befriedigt ist. LG Günther
  • Metro Tile Dialog

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    642 Aufrufe
    M
    Genau die Anforderung habe ich auch. Habe einen älteren Thread gefunden in dem Bluefox geantwortet hat, dass das möglich ist, er das aber noch nicht eingebaut hat. Würde das gerne wieder pushen! :-)
  • Io.broker.javascript WebSocket ansprechen

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    D
    Hallo! Ich verzweifle mit dem WebSocket Zeug … ich habe nun folgendes in ein Script kopiert: var WebSocketClient = require('websocket').client; var client = new WebSocketClient(); client.connect('ws://192.168.178.103:99'); client.onopen = function () { console.log('Sending...'); client.send('Ping'); }; client.onclose = function(){ console.log('Server offline.'); }; client.onmessage = function(msg){ console.log(msg.data); }; client.onerror = function(msg){ console.log('Sorry but there was an error.'); }; per OC-console sehe ich auch etwas auf dem RS485 Bus ankommen: 47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A GET / HTTP/1.1.. 55 70 67 72 61 64 65 3A 20 77 65 62 73 6F 63 6B Upgrade: websock 65 74 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 et..Connection: 55 70 67 72 61 64 65 0D 0A 53 65 63 2D 57 65 62 Upgrade..Sec-Web 53 6F 63 6B 65 74 2D 56 65 72 73 69 6F 6E 3A 20 Socket-Version: 31 33 0D 0A 53 65 63 2D 57 65 62 53 6F 63 6B 65 13..Sec-WebSocke 74 2D 4B 65 79 3A 20 75 65 5A 4C 33 73 32 67 2F t-Key: ueZL3s2g/ 61 39 30 72 67 35 58 74 2B 5A 2F 77 51 3D 3D 0D a90rg5Xt+Z/wQ==. 0A 48 6F 73 74 3A 20 31 39 32 2E 31 36 38 2E 31 .Host: 192.168.1 37 38 2E 31 30 33 3A 39 39 0D 0A 0D 0A 78.103:99.... Aber jetzt komme ich nicht weiter, "onopen" wird nicht ausgelöst, alle Versuche etwas zu senden gehen leer aus!!! Hat jemand mit io.broker JavaScript schon mal einen eigenen WebSocket Client entwickelt?
  • Blockly logic Not

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    839 Aufrufe
    A
    Super Danke für den Vorschlag!! So funktioniert es jetzt! mfg Arminhh
  • Finde fehler im Script nicht if/else Verschachtelung

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    G
    Kleine Anregungen: Das Ereignis soll letztendlich nur ausgeführt werden, wenn der Wert von idAbwesendKurzVariable false wird. Hier dürfte es effizienter sein, die Prüfung gleich bei on() vorzunehmen: on({id: idAbwesendKurzVariable', value: false},...) Da Programm würde sich dadurch noch mal verkürzen. /* Programm Abwesend Kurz Ablösen des CCU2 Programms Mit Hilfe von Jey Cee, Pix und Paul53 */ // Das Einschalten der Alarmierung der INSTAR2 Kamera erfolgt über CCU2 Programm "Anwesend kurz INSTAR2 Balkon Alarm Aus" // Abfrage der Abwesenheit Kurz: var idAbwesendKurzVariable = 'hm-rega.0.2330'; // System Variable CCU2 Abwesend Kurz idLichthelligkeit = "hm-rega.0.19606", idAstro = 'hm-rega.0.7961'; // kurze Schreibweise on({id: idAbwesendKurzVariable, value: false}, function (obj) { var helligkeit = getState(idLichthelligkeit).val, astro = getState(idAstro).val; if (!astro) { // wenn Astro ist Nacht if (!helligkeit) starteAktion2(); } else { // wenn Astro ist Tag if (helligkeit) starteAktion3(); else starteAktion4(); } }); Warum verwendest Du Variablen von der Homematic? Wenn es geht solltest DU in Betracht ziehen, dass zu ändern. Die Variablen von Homematic werden nur von Zeit zu Zeit aktualisiert (gewollt). Daher kann es zu deutlichen Verzögerungen kommen. Ich habe bei mir nach und nach alle Abhängigkeiten der Homematic soweit möglich entfernt. Auch der Zustand Tag/Nacht wäre ein Punkt den man nach ioBroker verschieben könnte.
  • Unterstützung gesucht ($): Entwicklung eines Scripts

    Verschoben
    9
    2
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    HomoranH
    @ChristianF: Das Script funktioniert übrigens prima ` @ChristianF: eider scheint gerade keine Sonne, aber ich probiere es morgen natürlich sofort aus ` Wieso konntest du das denn gestern abend nicht testen. Hast du bei der Planung der Anlage vergessen auch einige Lunarmodule einzubauen? :lol: :lol: Schön das jetzt alles klappt. Gruß Rainer
  • Zeitsteuerung über Variable

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    2k Aufrufe
    K
    Oh vielen Dank für die rasche Antwort.
  • (Gelöst)Blockly auf 2 States reagieren

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    3k Aufrufe
    L
    Moin, Danke Apollon77 und Rantanplan. Soweit war ich fast auch ;) aber hat nie funktioniert,glaub ich habe immer gleich den Steuere-Baustein genommen. So funktioniert es vielen Dank für den Schupser! Gruß Sven
  • [GELÖST]var.split(" ")[1]; was mach ich hieran Falsch?

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    G
    Gerne geschehen. Dürfte auch ein Thema für die Einführung in Javascript sein. Thema Datentypen und Typenumwandlung. Hast damit für ein weiteres Thema gesorgt. Danke, wird anderen auch helfen.
  • Blockly Beispiele - keine Fragen

    Verschoben
    9
    1
    0 Stimmen
    9 Beiträge
    12k Aufrufe
    S
    @a-flow2: Wie installiere ich dieses Blockly? ` Was steht im Titel dieses Threades? :lol: Blockly ist Bestandteil von dem Javascript-Adapter.
  • Urlaubsmodus für Heizung - Einzelne Parameter aus Datum und Uhrzeit auslesen

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet

744

Online

32.4k

Benutzer

81.5k

Themen

1.3m

Beiträge