Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 48.3k Beiträge

NEWS

  • Array erstellen mit Prüfung für Json Tabelle

    10
    0 Stimmen
    10 Beiträge
    1k Aufrufe
    T
    @ple sagte in Array erstellen mit Prüfung für Json Tabelle: mit .findIndex kannst du eine Funktion aufrufen, in der du prüfen kannst ob das übergebene Object(oder was auch immer) deiner Suche entspricht. Ich suche hier den Eintrag in dem from und msg == den übergebenen Werten ist und geben über return true zurück, wenn dem so ist. messageArray.findIndex(function(a) { return (a.from == f && a.msg == msg) }) Ich hab nen Display der 3 Zeilen anzeigen kann und dieses Script verwaltet das. var messageArray = [{},{},{}]; messageArray[0] = {"from":"","msg":"-1"}; messageArray[1] = {"from":"","msg":"-1"}; messageArray[2] = {"from":"","msg":"-1"}; onMessage("DisplayMessage", function(data,result){ var msgfrom = data[2]; var mode = data[1]; var msg = data[0].toString(); if (msg.length == 0 && mode !=0) return; var done = false; switch (mode) { case 0: done = deleteAllMsg(msgfrom); break; case 1: done = sendMsg(msgfrom,msg); break; case 2: done = deleteMsg(msgfrom,msg); break; } if (done) { var check=true; while(check) { check=false; var first=-1; for (var i=0; i<3;i++){ if (messageArray[i].msg != '-1' && first != -1) { messageArray[first] = messageArray[i]; log(messageArray[i].msg+' swap int:'+ i +' '+first); check = true; break; } if (messageArray[i].msg=='-1') { first = i; } } } for (var i=0; i<messageArray.length;i++){ if (typeof messageArray[i].msg == 'number') { setState('mqtt.1.display.show.Nachricht.msg'+(i+1), '-1'); } else { setState('mqtt.1.display.show.Nachricht.msg'+(i+1), messageArray[i].msg); } } } }); function sendMsg(f, msg) { if (messageArray.findIndex(function(a){ return (a.from == f && a.msg == msg)}) != -1) return; // keine doppelten Einträge var a = 2; while (a--) { messageArray[a] = messageArray[a-1]; } messageArray[0]={"from":f,"msg":msg}; return true; } function deleteAllMsg(f) { for (var a=0;a<3;a++){ if (messageArray[a].from == f) messageArray[a]={"from":"","msg":"-1"}; } return true; } function deleteMsg(f,msg) { for (var a=0;a<3;a++){ if (messageArray[a].msg==msg && messageArray[a].from == f ) { messageArray[a]={"from":"","msg":"-1"}; return true; } } return false; }
  • Javascript Multiplikator kW in W

    3
    0 Stimmen
    3 Beiträge
    257 Aufrufe
    T
    @ticaki Jupp, das ist es. Vielen Lieben Dank für die Wahnsinnig schnelle Antwort :-)
  • Google Einkaufsliste anzeigen

    4
    0 Stimmen
    4 Beiträge
    445 Aufrufe
    Stephan SchleichS
    @OSSILAMPE Das war nur als Tipp, ich hab es selber nicht getestet - sorry.
  • Aufzählungen säubern

    16
    0 Stimmen
    16 Beiträge
    1k Aufrufe
    paul53P
    @sigi234 sagte: @CruziX sagte in Aufzählungen säubern: Also Objekte, die nirgendswo mehr verwendet werden? Jupp Wie soll man so etwas automatisch feststellen ? Ein Automatismus kann sehr leicht unerwünschte Auswirkungen (fehlende Objekte) haben. @CruziX sagte in Aufzählungen säubern: Doppelte Objekte kann es ja eig. nicht geben, weil die ID eindeutig ist, oder? So ist es.
  • socket io - state lesen und setzen

    javascript
    36
    0 Stimmen
    36 Beiträge
    5k Aufrufe
    MicM
    Danke für die Infos hier. Hier ein Anwendungsbeispiel: https://forum.iobroker.net/topic/30552/tipp-in-vis-in-html-widget-getstate-nutzen-zur-anzeige
  • [gelöst]: Bei Scrip-Start alle Sensoren abfragen

    6
    0 Stimmen
    6 Beiträge
    257 Aufrufe
    paul53P
    @hanss sagte: vor 40 Jahren mit Z80 Assembler Dito, vor ca. 35 Jahren.
  • [gelöst] Raum/Funktion werden nicht gefunden

    javascript
    6
    1
    0 Stimmen
    6 Beiträge
    265 Aufrufe
    dslraserD
    @hanss sagte in Raum/Funktion werden nicht gefunden: aber erst nachdem ich JS neu gestartet habe. manchmal reicht auch das nicht. Admin und JS Adapter neu starten (nicht stoppen !) hilft bei mir dann eigentlich immer.
  • Java Script scripte nach Neustart NICHT ausführen

    4
    2
    0 Stimmen
    4 Beiträge
    590 Aufrufe
    T
    Bis zu dem Tag wo etwas schief läuft und der Adapter alle paar Sekunden neugestartet wird. :) Aber das merkst du dann ja recht schnell. Du könntest auch etwas mehr an Skripten posten, so das man die Funktionsweise erkennt und vielleicht einen Vorschlag hat.
  • [gelöst]Mit Verzögerung Wert schreiben

    javascript
    11
    1
    0 Stimmen
    11 Beiträge
    377 Aufrufe
    M
    @paul53 danke - verflucht nochmal...
  • For-Schleife mit 1s Verzögerung

    19
    0 Stimmen
    19 Beiträge
    2k Aufrufe
    GarfonsoG
    @wye said in For-Schleife mit 1s Verzögerung: Z.B. hier das... einfach ausgedrückt, wenn interval1 true ist wird interval1 per ClearInterval() auf was genau gecleart? False? Lass dich nicht so sehr vom "clear" beindrucken. clearInterval bricht das Interval ab, also die Funktion innerhalb von setInterval wird danach nicht mehr aufgerufen. Damit clearInterval weiß, welches von ggf. mehreren Intervallen es abbrechen soll, gibst du ihm in interval1 die ID des Intervals mit. Im Grunde kannst du dir auch sparen interval1 selber auf null/false zu setzen. Dann rufst du nur am Anfang immer clearInterval für ein Interval auf, das es nicht mehr gibt (was aber m.E. keine Probleme erzeugt). So wie @ticaki geschrieben hat ist es am saubersten.
  • [Vorlage] Script zum Aufräumen in Aufzählungen

    javascript
    4
    1 Stimmen
    4 Beiträge
    605 Aufrufe
    sigi234S
    @paul53 sagte in [Vorlage] Script zum Aufräumen in Aufzählungen: Genügt das Log nicht ? Wenn ich das Log lösche kann ich es nicht mehr nachvollziehen. Ist aber nicht so Wichtig.
  • GPS Daten aus Haupteinstellungen lesen / schreiben

    7
    0 Stimmen
    7 Beiträge
    676 Aufrufe
    G
    Erstmal vielen Dank für die Vorschläge ! Ist es dann auch möglich, in dieses Objekt zu schreiben und ändert das dann die Haupteinstellungen bezüglich der GPS-Daten des Standortes ??
  • TCP-Server für Netzwerk I/O Modul

    9
    0 Stimmen
    9 Beiträge
    710 Aufrufe
    OliverIOO
    Zum Thema Server oder client Wenn du auf Anfragen von aussen wartest ohne das du etwas initiierst, dann ist es ein Server. Deswegen schreibst du server.listen(6000) das heißt dein Server wartet auf Anfragen auf Port 6000. Wenn du selbst die Kommunikation immer initiierst, dann bist du ein client und der andere Server (der wartet ja auf Anfragen von dir) Aufräumen In IOBroker sagt dir das die Adapterschnittstelle (Funktion unload) ob der adapter beendet wird, den rest musst du tun, da iobroker ja nicht weiß was dein adapter alles machtn Wenn du ein node skript standalone laufen hast und mit ctrl C stoppst, dann schau hier https://stackoverflow.com/questions/20165605/detecting-ctrlc-in-node-js Zu deiner neuesten Erkenntnis zu deinem konkreten Protokoll kann ich dir nicht helfen, da ich das Gerät nicht kenne. Wenn du kein ordentliches datasheet hast, dann darfst du rumprobieren beachte bei aliexpress wird automatisch übersetzt. sei dir sicher dass nicht auch ein teil der befehle unter umständen übersetzt wurden, was natürlich falsch ist, da der chip das nicht versteht. wenn du die sprache auf englisch umstellst, dann sehen die befehle besser aus dann musst du das senden. Das AT kommt mir bekannt vor, so musste man früher Modems ansteuern um ins Internet zu kommen AT+OCCH1=?
  • update CSS variable

    9
    0 Stimmen
    9 Beiträge
    765 Aufrufe
    I
    @OliverIO ah ... jetzt hab ich noch mal reingeschaut. Da stehts eh wie es geht: 2.1.Farben variabel verwenden 3.In den betroffenden Widgets in der CSS Eigenschaft "mdui-{javascript.0.mybackground}-bg" eintragen Die var kann ich mir ersparen. Danke für den Anstoß.
  • getState - warning log / JS Dokumentation

    Verschoben
    17
    0 Stimmen
    17 Beiträge
    2k Aufrufe
    T
    @AlCalzone Danke
  • (gelöst) Verständnisfrage

    4
    1
    0 Stimmen
    4 Beiträge
    381 Aufrufe
    M
    Hi, war das Wochenende nicht zu Hause. Die Datenpunkte habe ich per script angelegt. Spoiler createState('steckdosen.steckdose_1', 0, { type: 'number' }); createState('steckdosen.steckdose_2', 0, { type: 'number' }); createState('steckdosen.steckdose_3', 0, { type: 'number' }); createState('steckdosen.steckdose_4', 0, { type: 'number' }); createState('steckdosen.steckdose_5', 0, { type: 'number' }); Geändert hab ich die auch schon, Zahl oder Logikwert. Sind jedenfalls immer identisch. Bisher keine Änderung. Jetzt sämtliche steckdosen-DP in den Objekten gelöscht und per script, wie oben, neu angelegt. Alle DP zeigen jetzt 0/1! Warum das vorher anders war, wird mir aber dennoch ein Rätsel bleiben. Das Passwort wird noch geändert. Stammt noch vom setup und ist einfacher einzugeben. Danke
  • Reaktion von shedule abhängig von einer Variablen machen

    javascript
    2
    0 Stimmen
    2 Beiträge
    220 Aufrufe
    T
    var VariableInDerInMillisekundenDerIntervallAngegebenIst = 10000; //10 Sekunden var myPowerInterval = null; if (myPowerInterval) clearInterval(myPowerInterval); myPowerInterval = setInterval(function(){ do this; },VariableInDerInMillisekundenDerIntervallAngegebenIst);
  • Hilfe bei Javascript

    7
    0 Stimmen
    7 Beiträge
    630 Aufrufe
    C
    Hi gerne Helfe ich dir bei meinem Script. Die Bezeichnung Namen ist etwas ungünstig, habe das Script aktualisiert: Ich erkläre mal die Config für: var pfad_javascript ='javascript.0.watchdog.' var default_zeit = 240; var ueberwachung = ['mqtt.0.zigbee2mqtt.Fenster_1;Fenster_1;7000']; mqtt.0.zigbee2mqtt.Fenster_1 = State von dem du ungefähr weisst in welchen Intervall er aktualisiert wird. (Hier ein Zigbee Xiaomi Fenster Sensor, 7000s ist ein Erfahrungswert von mir) Fenster_1 = Der Datenpunkt javascript.0.watchdog.Fenster_1 wird automatisch angelegt durch das Script. True wenn der Datenpunkt jünger als 7000s aktualisiert ist, False wenn älter. In meiner Vis steuere ich mit dem Datenpunkt ein Hinweis. 7000 = Sekunden, die seit der letzten Aktualisierung des States vergangen sein dürfen. Trägst du 0 ein wird die default Zeit verwendet Licht Gartenhaus würde ich auf Licht_Gartenhaus ändern :) Gruß Martin
  • [Gelöst] Sortierung Json-String aus SQL-Datenbank

    8
    2
    0 Stimmen
    8 Beiträge
    361 Aufrufe
    S
    @ticaki Danke für deine Unterstützung. So wie es aussieht funktioniert es mit function sortArray(a,b) { return b.ts > a.ts; } Ich musste a und b vertauschen.
  • Script für Heizungssteuerung (ohne Vis)

    javascript heating scenes template
    3
    0 Stimmen
    3 Beiträge
    430 Aufrufe
    P
    Dafür gibts den Adapter HeatingControl. Das Heizungsskript wird nicht mehr aktualisiert/gepflegt. Hier der Thread zum Adapter: https://forum.iobroker.net/topic/22579/test-adapter-heatingcontrol-v0-3-x Und dazu gibts sogar ein fertiges Vis hier: https://github.com/Pittini/iobroker-heatingcontrol-vis Und das sähe dann z.B. so aus: [image: 1581150595801-preview.png]

434

Online

32.4k

Benutzer

81.5k

Themen

1.3m

Beiträge