Weiter zum Inhalt

JavaScript

2.5k Themen 49.9k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • [gelöst]wie löscht man einen dp richtig

    3
    0 Stimmen
    3 Beiträge
    173 Aufrufe
    liv-in-skyL
    @paul53 sorry - danke - hätte ich selber nachsehen können :-(
  • der batterielose ZigBee Schalter von Jung (PTM216z)

    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    Jey CeeJ
    @guergen ja das ist eigenes Protokoll das die Firma EnOcean Entwickelt hat, daneben Entwickeln sie auch Energy Harvesting technik.. Die Bieten ihre Technik auch für andere an und Entwickeln darauf basierend eben auch für andere. Deswegen gibt es die Zigbee Variante der eigenen Taster.
  • Arbeitszeiten einhalten

    5
    0 Stimmen
    5 Beiträge
    387 Aufrufe
    OliverIOO
    @ldittmar ja genau. wobei du den 2.trigger ja erst starten musst, wenn der erste erreicht ist. dann läuft immer nur ein trigger
  • (gelöst)(Problem) setState gibt warnung aus?!

    5
    0 Stimmen
    5 Beiträge
    519 Aufrufe
    F
    @foxriver76 Danke. Da wars Hab nur im log vom scripteditor geschaut. Problem war, daß die Variable als Number gesendet wurde und string erwartet wurde. Habs nun so angepasst: const id1 = 'hm-rega.0.9172'/*Temperaturfühler Garten (TEMPERATURE)*/; const id2 = 'mqtt.0.shpi.set.set_outtemp'/*shpi/set outtemp*/; var val = getState(id1).val; var v = val.toString(); setState(id2, v); on(id1, function (obj) { if(obj.state.val != val) { val = obj.state.val; v = val.toString(); setState(id2, v); } }); Keine Fehler mehr.
  • insert into mit sendto()

    4
    0 Stimmen
    4 Beiträge
    653 Aufrufe
    M
    @fastfoot aber dennoch Danke, jetzt hab ichs selbst gefunden. ich hatte um denn tabellenname noch ``, welche beim Paste ins Forum verschwunden sind. Diese weggelassen, gings dann.
  • Javascript Programm-Name lesen / Code beim Beenden ausführen

    3
    0 Stimmen
    3 Beiträge
    306 Aufrufe
    T
    @paul53 Vielen Dank für die superschnelle Antwort. Ich hatte schon etwas länger gesucht .....
  • IFan03 Lüftersteuerung im iobroker geht nicht

    53
    0 Stimmen
    53 Beiträge
    7k Aufrufe
    L
    @jan1 hat zwar mit der Sache nichts zu tun aber vielleicht kannst du mir bei einer anderen Sache helfen. Ich lasse über iot Adapter mit Alexa Paar Sachen regeln da habe ich aber das Problem das ich keine ganze Zahlen vor sagen kann sondern % Angaben was müsste ich an den dp ändern das ich ganze Zahlen sagen kann weil bei Thermostaten funktionieren ganze Zahlen habe versucht die zu vergleichen aber bin nicht richtig weiter gekommen obwohl ich sogar die Rolle gleich gemacht habe [image: 1629800670929-img_20210824_121857.jpg]
  • [gelöst]JSON zu HTML und in Datei schreiben/ablegen

    javascript
    10
    1
    0 Stimmen
    10 Beiträge
    3k Aufrufe
    T
    seit der Umstellung auf admin 5.1.23 und js aktuell wirft mir dein Skript Fehler ins LOG. 2021-08-23 08:28:06.911 - warn: javascript.0 (17826) Read-only state "javascript.0.LogParser.LogParser_Warn_JSONzuHTML" has been written without ack-flag with value " Aktuelles Skript von dir: /****************************************************************************************************** * JSON-Datenpunkt in HTML umwandeln * -------------------------------------------------------------- * Zweck: Überwacht einen JSON-Datenpunkt und sobald geändert, wird JSON in HTML umgewandelt und * in einem eigenen Datenpunkt ausgegeben * Publiziert: https://forum.iobroker.net/topic/32540/json-zu-html-und-in-datei-schreiben-ablegen * Autor: Mic-M (Github) | Mic (ioBroker) * -------------------------------------------------------------------------------------- * Change Log: * 0.0.1 Mic-M * Initial release ******************************************************************************************************/ /********************************************************************************************* * Einstellungen *********************************************************************************************/ // JSON-Datenpunkt const g_jsonState = 'logparser.0.filters.Warn.json'; // Neuer Datenpunkt für HTML-Ausgabe const g_htmlState = 'LogParser.LogParser_Warn_JSONzuHTML'; // Spalte entfernen (für Log Parser Adapter 'ts' nehmen, da dieser autmatisch den timestamp hinzufügt), // sonst leer lassen const g_removeColumn = 'ts'; /********************************************************************************************* * Ab hier nichts mehr ändern *********************************************************************************************/ main(); function main() { // Create state for HTML, if not yet existing createState(g_htmlState, {'name':'HTML Table', 'type':'string', 'read':true, 'write':false, 'role':'html', 'def':'' }, () => { // State created, so let's subscribe to the given JSON state on({id: g_jsonState, change:'ne'}, function(obj) { // JSON state changed if(obj.state.val && obj.state.val.length > 10) { // state is not empty const jsonObject = JSON.parse(obj.state.val); if(g_removeColumn) { for (let lpEntry of jsonObject) { delete lpEntry[g_removeColumn]; } } setState(g_htmlState, json2table(jsonObject, '')); } }); }); } /** * Convert JSON to HTML table * Source: https://travishorn.com/building-json2table-turn-json-into-an-html-table-a57cf642b84a * * @param {object} jsonObject The JSON as object. * @param {string} [classes] Optional: You can apply one or multiple classes (space separated) to <table>. * @return {string} The HTML result as string */ function json2table(jsonObject, classes = '') { const cols = Object.keys(jsonObject[0]); let headerRow = ''; let bodyRows = ''; classes = classes || ''; cols.map(function(col) { headerRow += '<th>' + capitalizeFirstLetter(col) + '</th>'; }); jsonObject.map(function(row) { bodyRows += '<tr>'; cols.map(function(colName) { bodyRows += '<td>' + row[colName] + '</td>'; }) bodyRows += '</tr>'; }); const addClasses = (classes && classes.length > 1) ? ' class="' + classes + '"' : ''; return '<table' + addClasses + '><thead><tr>' + headerRow + '</tr></thead><tbody>' + bodyRows + '</tbody></table>'; function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } } @Mic Könntest du dir das vielleicht mal anschauen? Was müsste ich im Skript ändern? Lieben Gruß und vielen Dank
  • (gelöst) $Selector: Zimmer ausgeben

    3
    0 Stimmen
    3 Beiträge
    347 Aufrufe
    ice987I
    @paul53 Wunderbar, Danke!
  • Script auf Ende einer Funktion warten lassen

    5
    0 Stimmen
    5 Beiträge
    722 Aufrufe
    D
    @alcalzone Das habe ich mir schon gedacht. Vielen Dank
  • Gelöst: Neuste Datei (mp4) finden

    javascript
    17
    0 Stimmen
    17 Beiträge
    852 Aufrufe
    M
    @mickym sagte in Neuste Datei (mp4) finden: /Letztes Kamerabild Giethoorn Boot********************************* ** Juli 2021 ** RING, Kamera ** ** Ermittelt das letzte gespeicherte Video MP4 von RING-FlootCam ** geändert:26.07.21, 16.8.21 *******************************************************************************/ var zähler = 0; var old_recent; var old_create; var create; var path = require('path'); var fs = require('fs'); var request = require('request'); on({id: 'ring.0.doorbell_21502358.created_at', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; await wait(100); old_recent = getState('Giethoorn.CAM.Boot.LetztesBild').val; old_create = getState('ring.0.doorbell_21502358.History.created_at').val; create = getState('ring.0.doorbell_21502358.created_at').val; var getMostRecent = function (dir, cb) { var dir = path.resolve(dir); var files = fs.readdir(dir, function (err, files) { var filesFiltered = files.filter(function (v) { var filepath = path.resolve(dir, v); if ( filepath.slice(-4) === '.mp4') return true; }) var sorted = filesFiltered.map(function (v) { var filepath = path.resolve(dir, v); return { name: v, time: fs.statSync(filepath).mtime.getTime() }; }) .sort(function (a, b) { return b.time - a.time; }) .map(function (v) { return v.name; }); if (sorted.length > 0) { cb(null, sorted[0]); } else { cb('Y U NO have files in this dir?'); } }) } getMostRecent('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/', function (err, recent) { if (err) console.error(err); console.log(recent); setState('javascript.3.Giethoorn.CAM.Boot.LetztesBild', recent); setState('javascript.3.Giethoorn.CAM.Boot.SDate', formatDate(new Date(create), "TT.MM.JJ hh:mm")); const boot = fs.readFileSync('/iobroker/SmartHome/iobroker-data/files/ring.0/doorbell_21502358/' + recent); writeFile("vis.0", "/NL/01Boot.mp4", boot); }); }); Herzlichen Dank, das klappt :-)
  • UDPRAW von Hyperion zu IOBroker

    15
    1
    0 Stimmen
    15 Beiträge
    2k Aufrufe
    R
    @1rfsnet Hyperion sendet die Daten ja als hex Werte, die dann in rgb umgewandelt werden, und diese könntest du direkt vergleichen, und dann nach dem Set state eine halbe Sekunde pause einfügen
  • Insert Objects from Folder into Array

    4
    0 Stimmen
    4 Beiträge
    344 Aufrufe
    paul53P
    @zäsch sagte: Gibt es eine andere, elegante Möglichkeit mein Array mit den IDs zu befüllen, wenn man nicht den gesamten Namen hat? Versuch es mal so: const idsSL = $('hue.0.Flur_.SL*'); var set = []; idsSL.each(function(id, i) { let name = getObject(id).common.name; if(name.startsWith('SL.')) set.push(id); }); Die Abfrage des Namensbeginns kann man sich evtl. sparen?
  • Hilfe bei Trigger

    2
    0 Stimmen
    2 Beiträge
    281 Aufrufe
    T
    @pv_mainz Um dir helfen zu können braucht es mehr Infos. Was genau ist 40206_M_AC_Current? EDIT: Und was genau ist 40083_Wechselrichter_Produktion/40084_Wechselrichter_Produktion_Scale und wie oft wird das aktualisiert. Aktuell wäre meine Idee die: }, function () { on('modbus.0.holdingRegisters.40083_Wechselrichter_Produktion', function(obj) { work(obj.state.val); }); on('modbus.0.holdingRegisters.40206_M_AC_Current', function(obj) { work(getState('modbus.0.holdingRegisters.40083_Wechselrichter_Produktion').val); }); function work(value){ var timeout = setTimeout(function () { clearTimeout(timeout); var factorState = getState('modbus.0.holdingRegisters.40084_Wechselrichter_Produktion_Scale'); convertValue(value, factorState ? factorState.val : 0); }, 100); } }
  • [gelöst] Script wird nicht immer ausgeführt

    javascript
    5
    0 Stimmen
    5 Beiträge
    440 Aufrufe
    M
    @ticaki Danke dir, das ist es. Ich hatte gar nicht richtig registriert, dass ich schon fast alles dafür im Script stehen hatte. Manchmal braucht es eben doch noch einen Anstoß von außen :D
  • Timer Objekte bei Script-Neustart

    4
    0 Stimmen
    4 Beiträge
    475 Aufrufe
    L
    @oliverio Vielen Dank für die ausführliche Erklärung. Dann werde ich jetzt mal meine riesen Skripte ein wenig in kleine Skripte aufteilen um einen besseren Überblick über die Speichernutzung zu bekommen.
  • (gelöst) Name des Skriptes auslesen

    5
    1
    0 Stimmen
    5 Beiträge
    498 Aufrufe
    ice987I
    @paul53 @Glasfaser so einfach ist das: log("Name: " + name); Vielen Dank für eure Hilfe!
  • Konstantes Dimmen bei gedrückter Taste

    8
    0 Stimmen
    8 Beiträge
    962 Aufrufe
    KeromidaK
    @asgothian Danke für die sehr ausführliche und verständliche Antwort! Das bringt jetzt auch eindeutig Licht ins Dunkel wieso mein Code nicht geklappt hat.
  • Shelly api als Datenpunkt anlegen

    1
    1
    0 Stimmen
    1 Beiträge
    280 Aufrufe
    Niemand hat geantwortet
  • Eigene Klassen importieren und an mehreren Stellen verwenden

    21
    0 Stimmen
    21 Beiträge
    3k Aufrufe
    AlCalzoneA
    @jlssmt Richtig, alle "echten" Skripte laufen in ihrem eigenen separaten Kontext. Wenn du Daten zwischen diesen austauschen willst, musst du States nutzen oder messages zwischen den Skripten austauschen: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#messageto

429

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge