Skip to content

JavaScript

2.5k Topics 49.6k Posts

Hilfe für Skripterstellung mit JavaScript

NEWS

  • ioBroker Forum Widget – Forum-Daten direkt in Visu

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

    11
    1
    1 Votes
    11 Posts
    409 Views
    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 Votes
    48 Posts
    1k Views
    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 Votes
    899 Posts
    275k Views
    D
    @MCU geiler Scheiss. Danke funktioniert! 👍🏻
  • SQL-Abfrage aus Script an MariaDB

    9
    0 Votes
    9 Posts
    468 Views
    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 Votes
    53 Posts
    8k Views
    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 Votes
    1 Posts
    78 Views
    No one has replied
  • [Vorlage] Script: JSON-->Datenpunkte mit sync

    Moved javascript monitoring
    11
    2 Votes
    11 Posts
    2k Views
    C
    @Ahnungsbefreit Kein Problem, ich habe das Thema für mich lösen können.
  • HTTP PATCH

    5
    1
    0 Votes
    5 Posts
    215 Views
    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 Votes
    1 Posts
    80 Views
    No one has replied
  • JavaScript Exec Problem

    9
    0 Votes
    9 Posts
    292 Views
    R
    @Thomas-Braun Super, Danke hat funktioniert !!!!!!!
  • Klipper --> Telegram --> Snapshot

    1
    0 Votes
    1 Posts
    88 Views
    No one has replied
  • [Script] Viessmann Heizungs‑Ein/Aus‑Steuerung Viessmann‑API

    1
    0 Votes
    1 Posts
    77 Views
    No one has replied
  • Wie lege ich den Datenpunkt an?

    15
    0 Votes
    15 Posts
    498 Views
    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

    Moved
    1
    0 Votes
    1 Posts
    91 Views
    No one has replied
  • Vorschlag zu globalen Scripten

    11
    0 Votes
    11 Posts
    548 Views
    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 Votes
    5 Posts
    269 Views
    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 Votes
    3 Posts
    205 Views
    R
    https://github.com/ioBroker/ioBroker.javascript/issues/2164
  • wo sind Scripte gespeichert?

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

    7
    0 Votes
    7 Posts
    278 Views
    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]

545

Online

33.0k

Users

83.3k

Topics

1.3m

Posts