Weiter zum Inhalt

JavaScript

2.5k Themen 49.3k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • Zendure zenSDK Lokal API, SmartMode, SolarFlow AC 800 Pro 2

    274
    9 Stimmen
    274 Beiträge
    21k Aufrufe
    D
    @maxclaudi Werde mal bei Gelegenheit das aktuelle Script nochmal einfügen mit deinem Update von gestern und werde berichten.
  • ioBroker Prozess- & Gesundheitsmonitor + Grafana + HTML

    javascript monitoring
    78
    5
    4 Stimmen
    78 Beiträge
    2k Aufrufe
    crunchipC
    @rallef sagte: ok aber was ist was ich habs oben im ersten Beitrag ergänzt
  • Todoist Script Lösung

    7
    1
    1 Stimmen
    7 Beiträge
    125 Aufrufe
    haselchenH
    Fortsetzung: Ansage von Alexa, was auf der Einkaufsliste steht. Eine Routine anlegen mit , wenn gesagt wird einkaufsliste, dann soll Alexa benutzerdefiniert anworten (was, könnt ihr euch aussuchen). Hat den Hintergrund, dass Alexa auf das Wort "einkaufsliste" reagiert und nicht eine Fehlermeldung raushaut. Dann ein Blockly anlegen: [image: 1777925756428-443abf28-f488-40d4-9014-268512c05ed6-image.jpeg] Damit triggern wir auf das Wort einkaufsliste (Kleinschreibung beachten) Den DP setzen wir , wenn das Wort erkannt wird, kurz auf true (dadurch wird das Script ausgelöst) und 2 sek später wieder auf false. Der DP wird vom Skript angelegt. Korrektur. Den müsst ihr selber anlegen. [image: 1777926332516-09a736ff-cd17-44aa-9462-8ff5a4a044aa-image.jpeg] const TOKEN = "XXXXXXXXXXXX"; // 🔴 numerische Projekt-ID const PROJECT_ID = "XXXXXXXX"; // 🔵 TRIGGER const TRIGGER_DP = "0_userdata.0.todoist.readList"; let isRunning = false; // ===================== // TRIGGER // ===================== on({ id: TRIGGER_DP, change: "ne" }, (obj) => { if (obj.state.val !== true) return; if (isRunning) return; isRunning = true; loadTasks(); // Trigger sofort zurücksetzen (kein Loop!) setTimeout(() => { setState(TRIGGER_DP, false, true); isRunning = false; }, 1500); }); // ===================== // MAIN // ===================== function loadTasks() { httpPost( "https://api.todoist.com/api/v1/sync", "sync_token=*&resource_types=" + encodeURIComponent('["items"]'), { headers: { "Authorization": "Bearer " + TOKEN, "Content-Type": "application/x-www-form-urlencoded" }, timeout: 10000 }, (err, res) => { if (err) { speak("Ich konnte deine Einkaufsliste nicht laden."); return; } let data; try { data = JSON.parse(res.data); } catch (e) { speak("Fehler beim Verarbeiten der Daten."); return; } const items = data.items || []; const list = items.filter(t => t.project_id == PROJECT_ID ); if (!list.length) { speak("Deine Einkaufsliste ist leer."); return; } let text; if (list.length === 1) { text = "Du hast nur " + list[0].content + " auf deiner Einkaufsliste."; } else if (list.length <= 5) { text = "Auf deiner Einkaufsliste stehen: " + list.map(t => t.content).join(", "); } else { text = "Du hast " + list.length + " Artikel. Zum Beispiel: " + list.slice(0, 5).map(t => t.content).join(", "); } speak(text); } ); } // ===================== // 🔊 SPEAK (DEIN FIX BEIBEHALTEN) // ===================== function speak(text) { if (!text) return; const dp = "alexa2.0.Echo-Devices.XXXXXXXXXXXXX.Commands.speak"; if (!existsState(dp)) { log("Alexa speak DP nicht gefunden!", "error"); return; } log("ALEXA SPEAK: " + text, "info"); setState(dp, ""); setTimeout(() => { setState(dp, text + " "); }, 1000); } Token und Project ID findet ihr in eurem Todoist Account. Natürlich solltest ihr vorher eine Einkaufsliste angelegt haben (Projekt). Den Echo bzw. die Seriennummer bekommt ihr aus dem Alexa2 Adapter. const dp = "alexa2.0.Echo-Devices.XXXXXXXXXXXXX.Commands.speak" Im Skript selber, ich bin da Laie, steht wohl, dass der DP nachdem er auf true gegangen ist, gleich wieder auf false gesetzt wird. Bei mir hat es nun so, wie ich es hier aufgeschrieben habe funktioniert. Ihr könnt ja ein wenig rumprobieren. Was aktuell nicht so einfach funktioniert, ist, Sachen per Sprache auf die Einkaufsliste zu setzen. Da habe ich mir bis jetzt die Zähne ausgebissen. Edit: kleiner Hinweis zur summary. Das Wort muss ich sich ja ändern in dem DP. Also 2 mal hintereinander einkaufsliste sagen, löst nur 1 mal das Skript aus. Also nach dem Wort einkaufsliste nach der Uhrzeit fragen , damit sich der DP wieder ändert Edit 2: Es funktioniert wohl auch, wenn man beim Trigger aktualisiert nimmt. Da kann man so oft einkaufsliste sagen , wie man will.
  • HowTo: Zusatz-Programme fuer jarvis v3

    javascript
    899
    4 Stimmen
    899 Beiträge
    241k Aufrufe
    D
    @MCU geiler Scheiss. Danke funktioniert! 👍🏻
  • SQL-Abfrage aus Script an MariaDB

    9
    0 Stimmen
    9 Beiträge
    322 Aufrufe
    Uwe-KU
    @Norwegen60 Das hier funktioniert jetzt incl. zurück holen des Wertes in Datapoint let sSQL0 = "SELECT ioBroker.fn_energy('" + Mode + "', " + ID + ", " + Offset + ") AS energy"; sendTo('sql.0', 'query', sSQL0, function (result) { let energy = result.result[0].energy; setState(DataPoint, {val: Number(energy), ack: true}); log('GetEnergy: ' + energy + ' -> ' + DataPoint, 'info'); }); Danke für die Unterstützung Hast du das als reines Java Script realisiert oder es irgendwie in den Send_to Blockly Block integriert ? Ich würde es am liebsten rein im Blockly umsetzen, SQL Basic kann ich, aber Java Script ist nicht mein Metier. Ich habe schon Stunden zugebracht nach einem Blockly Beispiel, aber ich habe nichts gefunden, welches mir Werte zurückliefert die ich dann weiterverarbeiten kann.
  • Rauchmelder Skript

    javascript security
    53
    1 Stimmen
    53 Beiträge
    6k Aufrufe
    Kanzler1959K
    Ich wollte mich nur bedanken - auch wenn die Beiträge alle schon ein wenig alt sind. Das Script am Anfang hat mit geholfen eine Abfrage über meine RM zu machen. Diese sind alle im Gewerk "Sicherheit". Ich habe PushOver durch Telegram ersetzt und und auch eine 'daily' Meldung (um 22:22) eingebaut. Wenn jemand Interesse hat einfach fragen, dann poste ich das hier. Ist aber im Grunde das Script von ganz oben. Nachtrag: Man kann es testen, in dem man den Status 'editiert' (false -> true (Auslöser) -> false)
  • [TypeSkript] Wetter.com Forecast/Vorhersage

    69
    4 Stimmen
    69 Beiträge
    4k Aufrufe
    P
    @Schimi sagte: habe mal ne neue version erstellt, weil ich auch wieder ins Limit gelaufen bin... > Danke fürs fixen. Vom ersten Eindruck passt das so. Ich bin vor 2 Tagen auch ans Limit gelaufen, obwohl der Monatszähler bestimmt unter 50 war. Den Zähler zu reseten hat nichts gebracht. Ging dann nur mit einem neuen API-Key.
  • E3DC Hauskraftwerk steuern

    4k
    1
    3 Stimmen
    4k Beiträge
    2m Aufrufe
    A
    @Dave69-CH Die Fehler kommen vom e3dc-rscp Adapter? Hast du eine E3DC Wallbox ?
  • Tandoor zu Bring

    1
    0 Stimmen
    1 Beiträge
    45 Aufrufe
    Niemand hat geantwortet
  • HTTP PATCH

    5
    1
    0 Stimmen
    5 Beiträge
    141 Aufrufe
    m1k3f15hM
    Super danke @codierknecht für den Tipp mit Axios Haut super hin :) function renameCam() { var temp = getState("alias.0.au.ga.xxxxxxxxx").val axios.patch('https://192.168.xxx.xxx/proxy/protect/integration/v1/cameras/xxxxxxxxxxxxxxxxxx', { name: 'xxxxx' + temp + '°C' }, { httpsAgent: agent, headers: { 'X-API-KEY': 'xxxxxxxxxxxxxxxxxxxxxxxxx', 'Accept': 'application/json' } }) // .then(function(response) { // log("Response: " + JSON.stringify(response.data)) // }) .catch(function(error) { log("Error: " + error, error) }) }; Mike
  • Homepilot Rolladensteuerung per Telegram

    javascript
    1
    0 Stimmen
    1 Beiträge
    51 Aufrufe
    Niemand hat geantwortet
  • JavaScript Exec Problem

    9
    0 Stimmen
    9 Beiträge
    174 Aufrufe
    R
    @Thomas-Braun Super, Danke hat funktioniert !!!!!!!
  • Klipper --> Telegram --> Snapshot

    1
    0 Stimmen
    1 Beiträge
    61 Aufrufe
    Niemand hat geantwortet
  • [Script] Viessmann Heizungs‑Ein/Aus‑Steuerung Viessmann‑API

    1
    0 Stimmen
    1 Beiträge
    43 Aufrufe
    Niemand hat geantwortet
  • Wie lege ich den datenpunkt an?

    15
    0 Stimmen
    15 Beiträge
    350 Aufrufe
    T
    @Chrunchy sagte: @paul53 sagte: @Chrunchy [sagte]: Funktion createState in der JavaScript-Script-Engine (ab js-controller 6/7) als veraltet (deprecated) betrachtet und durch setObjectNotExists oder extendObject ersetzt. Wie kommst du darauf? Hatt das hier (https://forum.iobroker.net/topic/75919/createstate-deprecated) so verstanden. Das eine ist Adapterentwicklung das andere Javascript-Adapter - ich benutze in beiden "extendObject" - für nicht Adapterentwickler ist createStates() aber besser.
  • Steuerung Laden Bosch EBikeAkku via MEROSS Steckdose

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    69 Aufrufe
    Niemand hat geantwortet
  • Omlet Hühnerstall webhook API

    36
    0 Stimmen
    36 Beiträge
    761 Aufrufe
    J
    Hi, aktuell was ich beobachtet habe, ja. Die Rückmeldung wollte ich erst geben, wenn ich den Futterautomat erhalten habe, der aber bisher noch nicht geliefert wurde. Auch diesen kann man mittels API einbinden. Sollte es bei der Einbindung Probleme geben, melde ih mich noch mal, ansonsten aber auch so.
  • Vorschlag zu globalen Scripten

    11
    0 Stimmen
    11 Beiträge
    459 Aufrufe
    OliverIOO
    @legro Das ist eigentlich eine Grundfunktion von Javaskript/node https://developer.mozilla.org/en-US/docs/Glossary/Just_In_Time_Compilation Da jedes Script in einer eigenen VM (nicht zu verwechseln mit einer VM bspw in proxmox) Ausgeführt wird, gibt es zwischen den Skripten keine Optimierung https://nodejs.org/api/vm.html
  • FritzDect - Extended

    5
    0 Stimmen
    5 Beiträge
    170 Aufrufe
    Ro75R
    Ich habe den Code bzgl. axios angepasst. Wie gesagt, unter JS-Adapter 8.x war es nicht nötig, unter 9.x bei mir schon. Ich habe wie gesagt, den Code jetzt etwas angepasst und nun geht es auch ohne das axios als zusätzliches NPM-Paket eingetragen werden muss. Ro75.
  • clearSchedule löscht keine Schedules (mehr)

    3
    0 Stimmen
    3 Beiträge
    155 Aufrufe
    R
    https://github.com/ioBroker/ioBroker.javascript/issues/2164

608

Online

32.8k

Benutzer

82.9k

Themen

1.3m

Beiträge