Weiter zum Inhalt

JavaScript

2.5k Themen 49.6k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • ioBroker Forum Widget – Forum-Daten direkt in Visu

    18
    2
    0 Stimmen
    18 Beiträge
    519 Aufrufe
    M
    Es gibt eine Möglichkeit im Profil [image: 1778956764291-1565b73c-02ac-4b1c-aa71-82d8311947d5-image.jpeg]
  • Todoist Script Lösung

    11
    1
    1 Stimmen
    11 Beiträge
    409 Aufrufe
    haselchenH
    Update: Mit diesem Befehl in einer Konsole kann man seine Projekte auflisten lassen (aus der App). Das ist wichtig für die Projekt ID im Skript. curl -i https://api.todoist.com/api/v1/projects -H "Authorization: Bearer XXXXXXXX" (für die XXXX muss euer Token eingesetzt werden) Die Ausgabe sähe als Beispiel so aus: { "results": [ { "id": "XXXXXX", "can_assign_tasks": false, "can_comment": true, "child_order": 0, "is_collapsed": false, "color": "grey", "creator_uid": "", "created_at": "", "is_archived": false, "is_deleted": false, "is_favorite": false, "is_frozen": false, "name": "Inbox", "is_shared": false, "updated_at": "", "view_style": "list", "default_order": 0, "description": "", "public_access": false, "public_key": "", "access": { "visibility": "restricted", "configuration": {} }, "role": "CREATOR", "goal_ids": [], "parent_id": null, "inbox_project": true }, { "id": "XXXXXX", "can_assign_tasks": false, "can_comment": true, "child_order": 1, "is_collapsed": false, "color": "sky_blue", "creator_uid": "", "created_at": "", "is_archived": false, "is_deleted": false, "is_favorite": false, "is_frozen": false, "name": "Alexa-Einkaufsliste", "is_shared": false, "updated_at": "", "view_style": "list", "default_order": 0, "description": "", "public_access": false, "public_key": "", "access": { "visibility": "restricted", "configuration": {} }, "role": "CREATOR", "goal_ids": [], "parent_id": null, "inbox_project": false }, { "id": "XXXXXX", "can_assign_tasks": false, "can_comment": true, "child_order": 2, "is_collapsed": false, "color": "orange", "creator_uid": "", "created_at": "", "is_archived": false, "is_deleted": false, "is_favorite": false, "is_frozen": false, "name": "Alexa To-Do Liste", "is_shared": false, "updated_at": "", "view_style": "list", "default_order": 0, "description": "", "public_access": false, "public_key": "", "access": { "visibility": "restricted", "configuration": {} }, "role": "CREATOR", "goal_ids": [], "parent_id": null, "inbox_project": false } ], "next_cursor": null Nehmen wir den Block , wo Alexa-Einkaufsliste steht. Darüber gibt es das Feld "id". Diese ID nehmt ihr für euer Skript. Das könnt ihr für jedes Projekt , was ihr in der App angelegt habt, machen. Ich habe ne ToDo Liste noch mit Aufgaben, die ich mir zukünftig so vorgenommen habe. Ein HTML Widget und sie werden mir in der VIS angezeigt. Immer wenns mir in den Kopp kommt, trage ich ne Aufgabe oder was für den Einkauf in der ToDoIst App ein und je nach Update Intervall im Skript, erscheint es dann in der VIS. [image: 1778806962575-4af9418b-b376-4f21-8e11-192aec03c340-image.jpeg] Token und Project ID vervollständigen und die beiden Datenpunkte anlegen 0_userdata.0.todoist.aufgaben.html 0_userdata.0.todoist.aufgaben.count const TOKEN = "XXXXXX"; // 🔴 Kann numerisch sein (muss nicht) const PROJECT_ID = "XXXXXX"; const DP_HTML = "0_userdata.0.todoist.aufgaben.html"; const DP_COUNT = "0_userdata.0.todoist.aufgaben.count"; // Cache let lastHTML = "Keine Daten"; let lastCount = 0; // ===================== // LOG INFO TEIL (SEPARAT & CLEAN) // ===================== function logInfo(msg) { log("[TODOIST] " + msg, "info"); } function logError(msg) { log("[TODOIST ERROR] " + msg, "info"); // kein warn/error → keine Stacktraces } // ===================== // START // ===================== schedule("*/5 * * * *", loadTasks); loadTasks(); // ===================== // MAIN // ===================== function loadTasks() { logInfo("Lade Tasks..."); 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) { logError("HTTP Fehler"); setState(DP_HTML, lastHTML, true); setState(DP_COUNT, lastCount, true); return; } let data; try { data = JSON.parse(res.data); } catch (e) { logError("JSON Fehler"); return; } const items = data.items || []; if (!Array.isArray(items)) return; const filtered = items.filter(t => t.project_id == PROJECT_ID ); const html = filtered.length ? filtered.map(t => { let text = escapeHtml(t.content || ""); // entfernt führende "-" oder "•" falls sie im Task stehen text = text.replace(/^(\s*[-•]\s*)+/, ""); return "&#8226; " + text; }).join("<br>") : "Keine Einträge vorhanden"; setState(DP_HTML, html, true); setState(DP_COUNT, filtered.length, true); lastHTML = html; lastCount = filtered.length; logInfo("OK: " + filtered.length + " Items"); } ); } // ===================== // HTML SAFE // ===================== function escapeHtml(str) { return (str || "") .replace(/&/g, "&amp;") .replace(/</g, "&lt;") .replace(/>/g, "&gt;"); }
  • Werte in ein Register Schreiben

    48
    0 Stimmen
    48 Beiträge
    1k Aufrufe
    T
    Oha, das es so einfach ist hätte ich jetzt nicht gedacht. Da habe ich ja diese Woche eine Menge gelernt
  • HowTo: Zusatz-Programme fuer jarvis v3

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

    9
    0 Stimmen
    9 Beiträge
    468 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
    8k 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)
  • Tandoor zu Bring

    1
    0 Stimmen
    1 Beiträge
    78 Aufrufe
    Niemand hat geantwortet
  • [Vorlage] Script: JSON-->Datenpunkte mit sync

    Verschoben javascript monitoring
    11
    2 Stimmen
    11 Beiträge
    2k Aufrufe
    C
    @Ahnungsbefreit Kein Problem, ich habe das Thema für mich lösen können.
  • HTTP PATCH

    5
    1
    0 Stimmen
    5 Beiträge
    215 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
    80 Aufrufe
    Niemand hat geantwortet
  • JavaScript Exec Problem

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

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

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

    15
    0 Stimmen
    15 Beiträge
    498 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
    91 Aufrufe
    Niemand hat geantwortet
  • Vorschlag zu globalen Scripten

    11
    0 Stimmen
    11 Beiträge
    548 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
    269 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
    205 Aufrufe
    R
    https://github.com/ioBroker/ioBroker.javascript/issues/2164
  • wo sind Scripte gespeichert?

    javascript
    7
    0 Stimmen
    7 Beiträge
    265 Aufrufe
    etvE
    klar - passiert am ioBroker Raspi täglich, aber OC holt nur und schreibt nicht 😉
  • [Gelöst] setState in "Binding"

    7
    0 Stimmen
    7 Beiträge
    278 Aufrufe
    P
    @bahnuhr zur Erläuterung meines Vorgehens: Ausgehend von einer Navigation über ein ein Widget "Universal (Schalter, Taster, Nav & mehr)" aus inventwo design... [image: 1775024353201-navigation.png] ...wähle ich eine PDF-Datei eines Kalenders, dessen Dateiname mit Pfad dann in einen Datenpunkt geschrieben wird. [image: 1775024467571-objekt.png] Dieser Datenpunkt wird dann verwendet um die ausgewählte Datei in einem iFrame anzuzeigen. [image: 1775024571909-kalender24.png]

577

Online

33.0k

Benutzer

83.3k

Themen

1.3m

Beiträge