Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 48.8k Posts

NEWS

  • NPM-Modul dgram

    9
    0 Votes
    9 Posts
    596 Views
    paul53P
    @AlCalzone Danke. Es hätte mich auch gewundert, wenn der JS-Adapter ein nicht installiertes Modul anfordert.
  • Script für automatisches Backup funktioniert nicht

    9
    0 Votes
    9 Posts
    320 Views
    simatecS
    @hg6806 Backitup sichert mit dem Standard Backup exakt nach der gleichen Methode wie der Konsolenbefehl „iobroker backup“ Backitup greift auf genau diese Funktion des js-controllers zu.
  • [gelöst] Schleife mit getState / setState

    9
    0 Votes
    9 Posts
    641 Views
    paul53P
    @Johannes-Bauerstatter: dass die {} ausgeführt werden, nur wann? Wenn hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT von 0 auf 1 geht? Was wäre wenn der Wert von False auf True geht? Die Datenpunkte PRESS_SHORT haben immer den Wert true. Bei kurzer Tastenbetätigung wird nur der Zeitstempel aktualisiert, wodurch getriggert wird.
  • [gelöst] split is not a function

    Locked Solved javascript
    10
    0 Votes
    10 Posts
    2k Views
    CKMartensC
    @paul53 Habe es gefunden. Ein Testscript ist noch gelaufen obwohl es im eigentlich deaktiviert gewesen sein sollte. Jetzt läuft es. Danke nochmals!
  • Hilfe bei Script für Heizungsteuerung

    17
    0 Votes
    17 Posts
    1k Views
    H
    @paul53 Hallo, nein läuft leider nicht. Der Unterschied sind die " die sind im Blockly " und im anderen Script ' und da läuft es....kann das sein?
  • [gelöst]Raspberry Shutdown aus Script

    12
    0 Votes
    12 Posts
    1k Views
    AlCalzoneA
    @coffee-junk sagte in [gelöst]Raspberry Shutdown aus Script: denn auch der RPI-Adapter hat mit den Zugriffsrtechten seine liebe Not, kann keinen Takt etc. auslesen... Das liegt aber soweit ich weiß daran, dass der echte Root-Rechte benötigt. Da scheint selbst passwordless sudo nicht zu reichen.
  • Enigma / VU+ Statusabfrage

    15
    0 Votes
    15 Posts
    910 Views
    Matten MattenM
    @2hot4you Habs oben nochmal überarbeitet, damit das nicht kommt er legt jetzt auch ein device an und verdampft es mit dem Status.
  • Namen von Globale Variablen dynamisch zugreifen

    javascript
    2
    0 Votes
    2 Posts
    372 Views
    MarOdeM
    @MarOde Machmal kann das Glück so nahe oder nur eine Nacht Schlaf entfernt sein. Ich habe eine Lösung gefunden, die meine Code übersichtlich und lesbar macht. Wenn ich global ein leeres Objekt definiere var scRaum = new Object(); kann ich genau dieses Objekt anstelle meiner Versuche mit dem globalen Kontext später in einer beliebigen Funktion adressieren und Eigenschaften davon setzen: function setScheduler(strTimer, strSchedule) { var strName = "scTest" + strTimer; scRaum[strName] = schedule(strSchedule, DoThis); } Vieleicht hilft es dem ein oder anderen weiter.
  • Zyklische Ausführung endet nicht

    9
    2
    0 Votes
    9 Posts
    710 Views
    paul53P
    @rolf_iobroker sagte: Scheint zu funktionieren. Um zu verhindern, dass mehrere Intervalle gleichzeitig laufen können, füge vor Ausführen Intervall alle 2 Sek ein: stop zyklische Ausführung Intervall
  • Hilfe bei Timeouts JS im Klingelscript

    javascript
    6
    0 Votes
    6 Posts
    383 Views
    crunchipC
    @dslraser ich weiss was du meinst, in dem Fall schaltet aber nur telegram ein/aus[image: 1572621523474-6578b063-9fe1-44a0-956a-3a4ed2ae300a-image.png]
  • 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
    572 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
    730 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
    349 Views
    S
    @paul53 Schade, aber danke für die Info 😉
  • Datenpunkte werden nicht geschrieben, warum???

    Locked Solved javascript blockly
    6
    0 Votes
    6 Posts
    765 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
    161 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
    428 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
    294 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
    500 Views
    Dominik F.D
    Alles klar. Vielen Dank für die ausführliche und verständliche Antwort. Bin sehr begeistert von dem Forum hier

363

Online

32.6k

Users

82.1k

Topics

1.3m

Posts