Skip to content

JavaScript

2.5k Topics 49.5k Posts

Hilfe für Skripterstellung mit JavaScript

NEWS

  • url decode eines Datenpunktes

    Moved javascript
    11
    0 Votes
    11 Posts
    1k Views
    nik82N
    Hallo, danke für den Threat, dadurch bin ich erstmal auf den coolen Kodi Adapter gekommen. Aber mit welchem Widget kann ich im VIS das Bild über den Datenpunkt anzeigen lassen? Habe jetzt eine Variable mit dem Namen "Kodi_Cover" mit einer Zeichenkette erstellt. Dort lasse ich den decode string reinschreiben, z.B. "http://image.tmdb.org/t/p/original/iiJcXWPfVBJXvRSSGNrMp8JuzQr.jpg" Im Vis habe ich jetzt ein Basic-Image Widget erstellt und dort als Quelle "javascript.0.Kodi_Cover" eingegeben, leider klappt das aber nicht. Vielleicht kann mir da jemand auf die Sprünge helfen. Danke im Voraus. EDIT Gefunden: [image: 1572512834472-1.jpg]
  • [gelöst] Mi Robot Map per Telegram

    Locked Moved Solved
    4
    0 Votes
    4 Posts
    674 Views
    AxelF1977A
    @Meistertr sagte in Mi Robot Map per Telegram: hiermmit gehts :) createState('vis.RockroboMap', ''); var fs = require("fs"); const { createCanvas, Canvas } = require('canvas') const { Image } = require('canvas') const request = require('request'); const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; //________________________________________________________________________________________________________________________________________________ // Farben änder const COLOR_FLOOR = "#23465e"; const COLOR_WALLS = "#2b2e30"; const COLOR_PATH = "white"; //________________________________________________________________________________________________________________________________________________ //Robot Image const rocky = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAMAAAHGjw8oAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADbUExURQAAAICAgICAgICAgICAgICAgHx8fH19fX19fYCAgIGBgX5+foCAgH5+foCAgH9/f39/f35+foCAgH9/f39/f4CAgH5+foGBgYCAgICAgIGBgX9/f39/f35+foCAgH9/f39/f4CAgIODg4eHh4mJiZCQkJycnJ2dnZ6enqCgoKSkpKenp62trbGxsbKysry8vL29vcLCwsXFxcbGxsvLy87OztPT09XV1d/f3+Tk5Ojo6Ozs7O3t7e7u7vHx8fLy8vPz8/X19fb29vf39/j4+Pn5+f39/f7+/v///9yECocAAAAgdFJOUwAGChgcKCkzOT5PVWZnlJmfsLq7wcrS1Nre4OXz+vr7ZhJmqwAAAAlwSFlzAAAXEQAAFxEByibzPwAAAcpJREFUKFNlkolaWkEMhYPggliBFiwWhGOx3AqCsggI4lZt8/5P5ElmuEX5P5hMMjeZJBMRafCvUKnbIqpcioci96owTQWqP0QKC54nImUAyr9k7VD1me4YvibHlJKpVUzQhR+dmdTRSDUvdHh8NK8nhqUVch7cITmXA3rtYDmH+3OL4XI1T+BhJUcXczQxOBXJuve0/daeUr5A6g9muJzo5NI2kPKtyRSGBStKQZ5RC1hENWn6NSRTrDUqLD/lsNKoFTNRETlGMn9dDoGdoDcT1fHPi7EuUDD9dMBw4+6vMQVyInnPXDsdW+8tjWfbYTbzg/OstcagzSlb0+wL/6k+1KPhCrj6YFhzS5eXuHcYNF4bsGtDYhFLTOSMqTsx9e3iyKfynb1SK+RqtEq70RzZPwEGKwv7G0OK1QA42Y+HIgct9P3WWG9ItI/mQTgvoeuWAMdlTRclO/+Km2jwlhDvinGNbyJH6EWV84AJ1wl8JowejqTqTmv+0GqDmVLlg/wLX5Mp2rO3WRs2Zs5fznAVd1EzRh10OONr7hhhM4ctevhiVVxHdYsbq+JzHzaIfdjs5CZ9tGInSfoWEXuL7//fwtn9+Jp7wSryDjBFqnOGeuUxAAAAAElFTkSuQmCC"; const charger = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAdVBMVEUAAAA44Yo44Yo44Yo44Yo44Yo44Yo44Yo44Yp26q844Yr///9767Kv89DG9t2g8Md26q5C44/5/vvz/fjY+ei19NNV5ZtJ45T2/fmY78KP7r1v6atq6Kjs/PPi+u7e+uvM9+Gb8MSS7r+H7bhm6KVh56JZ5p3ZkKITAAAACnRSTlMABTr188xpJ4aepd0A4wAAANZJREFUKM9VklmCgzAMQwkQYCSmLKWl2+zL/Y9YcIUL7wvkJHIUJyKkVcyy+JIGCZILGF//QLEqlTmMdsBEXi56igfH/QVGqvXSu49+1KftCbn+dtxB5LOPfNGQNRaKaQNkTJ46OMGczZg8wJB/9TB+J3nFkyqJMp44vBrnWYhJJmOn/5uVzAotV/zACnbUtTbOpHcQzVx8kxw6mavdpYP90dsNcE5k6xd8RoIb2Xgk6xAbfm5C9NiHtxGiXD/U2P96UJunrS/LOeV2GG4wfBi241P5+NwBnAEUFx9FUdUAAAAASUVORK5CYII="; //last map let last_map; var canvasimg = new Canvas(); var ctximg = canvasimg.getContext('2d'); var res = {}; var img = new Image(); // Create a new Image img.src = rocky const img_charger = new Image(); img_charger.src = charger; const robotIp = "rockrobo"; // IP of the robot const robotState = "mihome-vacuum.0.info.state" // e.g : "mihome-vacuum.0.info.state" httpGetAsync("http://" + robotIp + "/api/map/latest", updateMapPage); // get actuel map data from Valetudo function httpGetAsync(theUrl, callback) { var xmlHttp = new XMLHttpRequest(); var jdata = {}; xmlHttp.onreadystatechange = function () { //console.log(JSON.stringify(xmlHttp)); if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { try { jdata = JSON.parse(xmlHttp.responseText) //console.log(JSON.stringify(jdata)); } catch (err) {} callback(jdata); } } xmlHttp.open("GET", theUrl, true); // true for asynchronous xmlHttp.send(null); } function updateMapPage(res) { var canvas = createCanvas(); var ctx = canvas.getContext('2d'); let mapImageData; var map; canvas.height = 1024 * 4 //res.image.dimensions.height; canvas.width = 1024 * 4 //res.image.dimensions.width; // Male Boden if (res.image.pixels.floor && res.image.pixels.floor.length !== 0) { ctx.fillStyle = COLOR_FLOOR; res.image.pixels.floor.forEach(function (coord) { ctx.fillRect(coord[0] * 4 + res.image.position.left * 4, coord[1] * 4 + res.image.position.top * 4, 4, 4); }); } // Male Wände if (res.image.pixels.obstacle_strong && res.image.pixels.obstacle_strong.length !== 0) { ctx.fillStyle = COLOR_WALLS; res.image.pixels.obstacle_strong.forEach(function (coord) { ctx.fillRect(coord[0] * 4 + res.image.position.left * 4, coord[1] * 4 + res.image.position.top * 4, 4, 4); }); } // Male den Pfad if (res.path.points && res.path.points.length !== 0) { ctx.fillStyle = COLOR_PATH; let first = true; let cold1, cold2; res.path.points.forEach(function (coord) { if (first) { ctx.fillRect(coord[0] / 12.5, coord[1] / 50, 2, 2); cold1 = coord[0] / 12.5; cold2 = coord[1] / 12.5; } else { ctx.beginPath(); ctx.lineWidth = 1; ctx.strokeStyle = "#FFFFFF"; ctx.moveTo(cold1, cold2); ctx.lineTo(coord[0] / 12.5, coord[1] / 12.5); ctx.stroke(); cold1 = coord[0] / 12.5 cold2 = coord[1] / 12.5 } first = false }); } // Zeichne Roboter ctx.beginPath(); if (res.robot){ if (res.path.current_angle && typeof res.robot[0] !== "undefined" && typeof res.robot[1] !== "undefined") { canvasimg = rotateRobo(img, res.path.current_angle); ctx.drawImage(canvasimg, res.robot[0] / 12.5 - 15, res.robot[1] / 12.5 - 15, img.width, img.height); } else { ctx.drawImage(img, res.robot[0] / 12.5 - 15, res.robot[1] / 12.5 - 15, img.width, img.height); } } // Zeichne Ladestation wenn vorhanden if (res.charger){ if (typeof res.charger[0] !== "undefined" && typeof res.charger[1] !== "undefined") { ctx.beginPath(); ctx.drawImage(img_charger, res.charger[0] / 12.5 - 15, res.charger[1] / 12.5 - 15); } } // crop image let canvas_final = createCanvas(); let ctx_final = canvas_final.getContext('2d'); var trimmed = ctx.getImageData(res.image.position.left * 4, res.image.position.top * 4, res.image.dimensions.width * 4, res.image.dimensions.height * 4); canvas_final.height = res.image.dimensions.height * 4; canvas_final.width = res.image.dimensions.width * 4; ctx_final.putImageData(trimmed, 0, 0); map = canvas_final.toDataURL(); last_map= canvas_final; setState("javascript.0.vis.RockroboMap", '<img src="' + canvas_final.toDataURL() + '" /style="width: auto ;height: 100%;">'); //log('<img src="' + canvas_final.toDataURL() + '" />'); } function send(canvas){ var buf = canvas.toBuffer(); fs.writeFile("/opt/iobroker/vac_map.png", buf, (err) => { if (err) throw err; log('The file has been saved!'); }); setTimeout(function(){ // sendTo('telegram.0', '/opt/iobroker/vac_map.png'); sendTo('telegram.0', {text: '/opt/iobroker/vac_map.png', caption: 'Fertig mit saugen!'}); }, 3000); } function rotateRobo(img, angle) { var canvasimg = createCanvas(img.width, img.height); var ctximg = canvasimg.getContext('2d'); const offset = 90; ctximg.clearRect(0, 0, img.width, img.height); ctximg.translate(img.width / 2, img.width / 2); ctximg.rotate((angle + offset) * Math.PI / 180); ctximg.translate(-img.width / 2, -img.width / 2); ctximg.drawImage(img, 0, 0); return canvasimg; } schedule("*/2 * * * * *", function () { var robyState = getState(robotState).val; if (robyState === 5 || robyState === 11 || robyState === 17) httpGetAsync("http://" + robotIp + "/api/map/latest", updateMapPage); }); subscribe({ id: 'mihome-vacuum.0.info.state'/*Vacuum state*/, change: "ne" }, function (obj) { if(obj.newState.val === 8 && obj.oldState.val !== 8){ send(last_map); } }); Guten Morgen, hab´s mal flink eingebaut. Funktioniert! Großartig. Vielen Dank für die schnelle Hilfe!
  • RSS feed formatierung

    Unsolved
    8
    1
    0 Votes
    8 Posts
    879 Views
    S
    @liv-in-sky habe ich ausprobiert, gab mir ne Reihe von "NAN..." aus. Hier wurde die Lösung gepostet: https://forum.iobroker.net/topic/1402/rss-parser/38
  • abfangen von welchem Skript Änderung kommt

    Unsolved javascript
    3
    0 Votes
    3 Posts
    441 Views
    S
    @paul53 Schade, aber danke für die Info 😉
  • Datenpunkte werden nicht geschrieben, warum???

    Locked Solved javascript blockly
    6
    0 Votes
    6 Posts
    867 Views
    Jey CeeJ
    @kleinfritzchen es gibt eine Doku für Entwickler wo das festgehlaten ist, die ist ins Deutsche Übersetzt. Da das Eingangsthema erledigt ist Schließe ich hier.
  • HowTo Frage: Selector.on mit change any

    Moved
    9
    0 Votes
    9 Posts
    2k Views
    andreaskosA
    Da ich auch gerade nach diesem Thema gesucht habe und es ähnlich gemacht hab, hier noch eine Art, wie es noch einfacher geht. Einfach ein Array erstellen und darauf dann das ON lauschen lassen: var IDs=[]; $(selector).each(function(id, i){ IDs.push(id) ; }); on({id: IDs, change: "any"}, function (obj){ // code }); LG, Andreas
  • [gelöst]Problem beim Auslesen von Obejct

    javascript
    3
    0 Votes
    3 Posts
    168 Views
    T
    danke, habe es jetzt mit var LED = getState("javascript.0.Statusboard.LED"+i).val; gelöst
  • Javascript editor - ende script fehlt ?

    javascript
    10
    1
    0 Votes
    10 Posts
    512 Views
    liv-in-skyL
    @HeliosFan also firefox hat ein viel größeres problem, bezogen auf den nachtrag - viele meldungen im log - firefox stoppt ganz - keine reaktion mehr die untere zeile scheint stabil zu sein - zumindest während des tests
  • Pumpenabschaltung läuft nicht - Anfängerfehler?

    Unsolved
    5
    0 Votes
    5 Posts
    323 Views
    paul53P
    @erhard_stgt sagte in Pumpenabschaltung läuft nicht - Anfängerfehler?: ich dachte bisher, ich leg da einfach was an im Ordner vis.0 und fertig ist die Laube. Adapter verwalten ihre Datenpunkte selbst, also sollte man keine eigenen Datenpunkte im Namensraum von Instanzen erstellen. Wie das mit vis.0 ist, kann ich nicht beurteilen, denn das habe ich nie versucht. Problemlos ist die Erstellung eigener Datenpunkte unter javascript.N (N = 0, 1, ...), so wie man sie auch per Skript mit createState() erstellen kann. @erhard_stgt sagte in Pumpenabschaltung läuft nicht - Anfängerfehler?: wenn man mit so ziemlich kaum einer Ahnung startet... Um nicht ahnungslos zu bleiben, gibt es Dokus.
  • [gelöst] Mein erstes Skript in Java

    Locked Solved
    6
    0 Votes
    6 Posts
    528 Views
    Dominik F.D
    Alles klar. Vielen Dank für die ausführliche und verständliche Antwort. Bin sehr begeistert von dem Forum hier
  • Datum im einem JSON String

    Unsolved
    3
    0 Votes
    3 Posts
    326 Views
    MicM
    @fuchs1978 Auf Objekteigenschaften kannst du mit der Punkt-Notation oder der Klammer-Notation zugreifen. Die Punkt-Notation ist limitiert bezüglich der erlaubten Zeichen der Objektnamen. Also im Fall der Fälle, wie bei dir, besser mit der Klammernotation arbeiten. Siehe z.B. hier: https://codeburst.io/javascript-quickie-dot-notation-vs-bracket-notation-333641c0f781 P.S. @paul53 war schneller mit der Antwort :-)
  • Gelöst: Auslösung zwischen 17:00 und 21:00

    Solved javascript
    22
    0 Votes
    22 Posts
    1k Views
    M
    @Paul53: Du hattest geschrieben : [image: 1571677313027-unbenannt2.jpg] Hab noch ein "180" gefunden. [image: 1571677349311-unbenannt1.jpg] Ich bekomme bei den geänderten Script folgende WARN Meldung: [image: 1571676989714-unbenannt.jpg] Gruß Michael
  • Vbus Resol Lan Adapter Fehlermeldungen

    Unsolved
    1
    0 Votes
    1 Posts
    303 Views
    No one has replied
  • Get JSON from exec in Function - Solved!

    Solved
    3
    0 Votes
    3 Posts
    393 Views
    I
    Hi @paul53 danke Dir für das Feedback. Dann kann ich das nicht so bauen wie ich es mir vorgestellt habe. Das Substr kürzt mir den eigentlichen Response des curl ein, da hier auch noch der Header mit zurückgegeben wird. Daher schneide ich den Teil bis der ersten { - also dem Begin des JSONs - ab. Ich habe es in der Zwischenzeit als Workarround so umgebaut, das ich mit einem 60s Trigger die Kamera auslese und dann mit dem Callback in einen State abspeichere. Wenn ich die Werte brauche, kann ich diese als JSON aus dem State lesen und den gewünschten Parameter extrahieren... /* ============================================================================= > Ließt alle Parameter einer Kamera aus und gibt sie als JSON zurück ==============================================================================*/ on({id: 'VIS.82.Ticker_60s', change: "ne"}, function (f) { console.log("Read UniFi Video Cam's"); // Kamera Flur auslesen var fCameraID = myVideoCamFlur; var fCommand = "curl -i --url 'https://" + myVideoServer + "/api/2.0/camera/" + fCameraID + "/?apiKey=" + myVideoAPIKey + "' --header 'Content-Type: application/json' --header 'Accept: application/json' --insecure -X GET"; exec(fCommand, function(err, response, errmsg) { if(err) { console.log("Fehler in der Abfrage: " + errmsg); } else { setState('VIS.82.UniFi-Video.Flur.ParameterSet', response.substr(response.search("{"),response.length-response.search("{"))); } }); // Kamera Garten auslesen fCameraID = myVideoCamGarten; fCommand = "curl -i --url 'https://" + myVideoServer + "/api/2.0/camera/" + fCameraID + "/?apiKey=" + myVideoAPIKey + "' --header 'Content-Type: application/json' --header 'Accept: application/json' --insecure -X GET"; exec(fCommand, function(err, response, errmsg) { if(err) { console.log("Fehler in der Abfrage: " + errmsg); } else { setState('VIS.82.UniFi-Video.Garten.ParameterSet', response.substr(response.search("{"),response.length-response.search("{"))); } }); }); Auslesen kann ich dann zum Beispiel ob die Kamera gerade mit Bewegungserkennung aufnimmt mit: JSON.parse(getState('VIS.82.UniFi-Video.Flur.ParameterSet').val).data[0].recordingSettings.motionRecordEnabled;
  • Timer, Countdown

    Locked Solved javascript
    7
    0 Votes
    7 Posts
    711 Views
    M
    Danke Paul super!!!!!
  • lightify

    Unsolved
    5
    0 Votes
    5 Posts
    423 Views
    Volker123V
    Hallo, es handelt sich hier nur um einen Ausschnitt des Codes. Ich weiß schon, dass den Variablen Werte zu gewiesen werden müssen. Hier das Beispiel für die Zuweisung der grünen Farbe: pole_gruen=getState("lightify.1.7800AE00AA3EB07C.g"/*g*/).val; es werden Zahlen zwischen eins und 255 zugewiesen. Die Zuweisung funktioniert auch, dies kann man im Codefenster durch console.log(pole_gruen); überprüfen. Die Zuweisung timeout= setTimeout(function () { setState("lightify.1.7800AE00AA3EB07C.b"/b/, pole_blau); }, 6000); timeout= setTimeout(function () { setState("lightify.1.7800AE00AA3EB07C.g"/g/, pole_gruen); }, 6000); Habe ich aus dem Objektbaum. Eigentlich sollte es funktionieren. Ich weiß nur leider nicht warum es nicht funktioniert. Volker
  • [Frage]Loglevel info nicht mehr Standard?

    Locked Solved javascript monitoring
    4
    0 Votes
    4 Posts
    558 Views
    P
    Danke! Gruß Pix
  • console etc. unbekannt

    4
    0 Votes
    4 Posts
    601 Views
    BBTownB
    @ErazorVIP schon mal auf GitHub geschaut ob es hierzu bereits ein issue gibt auf das Du vorten könntest, oder ansonsten ein entsprechendes angelegt?
  • VIS Bindung - HTML Escapen?

    javascript
    1
    0 Votes
    1 Posts
    310 Views
    No one has replied
  • Syntax Check im Editor markiert korrekte Syntax

    javascript
    1
    0 Votes
    1 Posts
    145 Views
    No one has replied

383

Online

32.9k

Users

83.2k

Topics

1.3m

Posts