Skip to content

JavaScript

2.5k Topics 49.7k Posts

Hilfe für Skripterstellung mit JavaScript

NEWS

  • [Gelöst] Externes npm-Modul im Skript einbetten

    3
    0 Votes
    3 Posts
    238 Views
    BananaJoeB
    @oliverio danke, hat funktioniert. jetzt muss ich mal schauen wie ich das Modul dewpoint wieder los werden welches ich nachinstalliert hatte
  • Problem mit FormatDate

    2
    0 Votes
    2 Posts
    146 Views
    ?
    @wolfgangfb So vielleicht: new Date(SECONDS * 1000).toISOString().substr(11, 8);
  • mal wieder benötige ich Hilfe bei einer Umsetzung :-)

    15
    0 Votes
    15 Posts
    1k Views
    paul53P
    @fischi87 sagte: bekomme ich keine Nachricht mehr ?! Es muss auch updateanzahl aktualisiert werden. const id_updateanzahl = "admin.0.info.updatesNumber"/*Number of adapters to update*/; const id_updateadapter = "admin.0.info.updatesList"/*List of adapters to update*/; var updateadapter = getState(id_updateadapter).val function updates() { let updateanzahl = getState(id_updateanzahl).val; if(updateanzahl > 0) { sendTo('telegram.0', { text: '+++ Update Verfügbar +++' + '\n' + '\n' + updateanzahl + " Adapter zum Updaten" + '\n' + updateadapter, reply_markup: { keyboard: [['Update RPI']], resize_keyboard: true, one_time_keyboard: true } }); setState(id_updateanzahl, 0); } } updates(); // Skriptstart on(id_updateadapter, function(dp) { updateadapter = dp.state.val; updates(); });
  • [Script] MessageHandler: Nachrichten protokollieren +VIS

    336
    2
    14 Votes
    336 Posts
    91k Views
    Dominik F.D
    @rehmosch Damit ist gemeint, dass du es unter Root rein packst. Aber Vorsicht, da sollte man eigentlich nur Skripte installieren wenn man sich damit auskennt.
  • array [string] = variable

    javascript
    7
    0 Votes
    7 Posts
    645 Views
    paul53P
    @malaus sagte: hier mal das bisherige Skript: Ich vermisse die Deklaration der Konstanten pfad, pfad2, border, start, work.
  • Sauberer Shutdown bei Stromausfall

    javascript
    2
    0 Votes
    2 Posts
    392 Views
    arteckA
    @langer die qnap kannst du direkt in dessen Einstellungen konfigurieren.. auf der qnap oberfläche
  • Aktuelles Datum größer als eingegebenes Datum

    8
    0 Votes
    8 Posts
    2k Views
    mickymM
    @pat Wenn Du die moments Bibliothek nutzt dann kannst Du mit after und before über einen Boolean einfach prüfen.
  • Alias manuell anlegen

    14
    0 Votes
    14 Posts
    660 Views
    D
    @homoran Ich habe es so verstanden dass es grundsätzlich ja kein Problem ist seine DPs unter javascript.0 zu haben. Aber ich wusste jetzt auch nichts was bei 0_userdata.0 Probleme macht ;)
  • [gelöst]Invalide Date

    javascript
    10
    1
    0 Votes
    10 Posts
    2k Views
    Great SUNG
    @sigi234 Also, entsprechend Deiner Rückmeldung hatte ich wohl Recht. Ich war so frei und hab es Dir mal einfach gemacht. Der Code sollte copy&paste funktionieren, wenn der von Dir gepastete code bei Dir im Einsatz ist. Ich hab auch entsprechend eine mini Versionsdoku dazu gepackt. Freu mich auf Deine Rückmeldung! /* Versionshistorie: * * 1.0.3: * - neu: Fix für moment locale um mit lokalen source Daten arbeiten zu können * * 1.0.2: * - neu: Anzeige der letzten An- und Abmeldung * - neu: Verwendung eigener Bilder möglich * * 1.0.1: * - neu: In dem Mapping der IP-Adressen kann jetzt eine URL vergeben werden ('http' oder direkt eine spezifische URL) * - geändert: Styling der Details * - entfernt: MAC-Adresse * * 1.0.0: * - Initial Release */ const moment = require("moment"); // Skript Einstellungen ************************************************************************************************************************************************* let dpList = '0_userdata.0.vis.NetzwerkStatus.jsonList'; // Datenpunkt für IconList Widget (Typ: Zeichenkette (String)) let dpSortMode = '0_userdata.0.vis.NetzwerkStatus.sortMode'; // Datenpunkt für Sortieren (Typ: Zeichenkette (String)) let dpFilterMode = '0_userdata.0.vis.NetzwerkStatus.filterMode'; // Datenpunkt für Filter (Typ: Zeichenkette (String)) const checkInterval = 10; // Interval wie oft Status der Skripte aktualisiert werden soll (in Sekunden) let sprache = 'de'; // Sprache für formatierung letzte Änderung let formatierungLastChange = "ddd DD.MM - HH:mm"; // Formatierung letzte Änderung -> siehe momentjs library let imagePath = '/vis.0/' // Pfad zu den verwendeten Bildern (bitte über den VIS Dateimanager hochladen) // nach Variable imagePath suchen und die entsprechenden Zeilen aus- bzw. einkommentieren // Das Bild (Dateiformat png) in der Mapping-Liste hinterlegen let defaultImage = 'ip-network-outline'; // Standardbild, falls kein Bild angegeben wurde (Material Design Icons) //let defaultImage = `${imagePath}default.png`; // Standardbild, falls kein Bild angegeben wurde (eigenes Bild) let farbeGeraetOnline = 'lime'; // Status Bar Farbe wenn Geräte online ist let farbeGeraetOffline = 'red'; // Status Bar Farbe wenn Geräte offline ist let sortResetAfter = 120; // Sortierung nach X Sekunden auf sortReset zurücksetzen (0=deaktiviert) let sortReset = 'name' // Sortierung auf die zurückgesetzt werden soll let filterResetAfter = 120; // Filter nach X Sekunden zurücksetzen (0=deaktiviert) const deviceNames = [{ ip: "192.168.178.29", alias: "Echo Dot Bad", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.32", alias: "Echo Dot SZ", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.66", alias: "Echo Dot Büro", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.49", alias: "Echo Dot Küche", image: "/vis.0/Dot_3.png", link: "http" }, { ip: "192.168.178.54", alias: "Show 5 WZ", image: "/vis.0/Echo-Show-5.png", link: "http" }, { ip: "192.168.178.1", alias: "Router Büro", image: "/vis.0/fritzbox_6590_left_de_640x400.png", link: "http" }, { ip: "192.168.178.25", alias: "Yamaha AVR WZ", image: "/vis.0/reeiver1.png", link: "http" }, { ip: "192.168.178.24", alias: "Handy Ilse", image: "/vis.0/Galaxy_S6.jpg", link: "http" }, { ip: "192.168.178.47", alias: "Handy Sigi", image: "/vis.0/huawei.png", link: "http" }, { ip: "192.168.178.44", alias: "Echo Flex Vorraum", image: "/vis.0/echo_flex.png", link: "http" }, { ip: "192.168.178.41", alias: "LG TV Wohnzimmer", image: "/vis.0/LG_TV_2.png", link: "http" }, { ip: "192.168.178.40", alias: "Switch Büro", image: "/vis.0/it_network.svg", link: "http" }, { ip: "192.168.178.33", alias: "BroadLink WiFi Device", image: "/vis.0/broadlink-2-545x410.png", link: "http" }, { ip: "192.168.178.52", alias: "Drucker Wlan Büro", image: "/vis.0/mfc9332cdw_main.png", link: "http" }, { ip: "192.168.178.20", alias: "Medion PC Büro", image: "/vis.0/it_pc.svg", link: "http" }, { ip: "192.168.178.22", alias: "Philips Hue Bridge Büro", image: "/vis.0/PHILIPS-51180000-Hue--Bridge--3-Watt.png", link: "http" }, { ip: "192.168.178.28", alias: "Funksteckdose Drucker Büro", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.56", alias: "Stehlampe Blub Esszimmer", image: "/vis.0/Birne.png", link: "http" }, { ip: "192.168.178.30", alias: "Huawei Sigi alt", image: "/vis.0/huawei.png", link: "http" }, { ip: "192.168.178.99", alias: "CCU3 Büro", image: "/vis.0/ccu3-v_1.png", link: "http://192.168.178.99" }, { ip: "192.168.178.36", alias: "Bosch Geschirrspüler Küche", image: "/vis.0/13271013_SPV4HMX61E_STP_def.png", link: "http" }, { ip: "192.168.178.35", alias: "Steckdosenleiste Bad", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.39", alias: "Fire Tv", image: "/vis.0/fire_tv.png", link: "http" }, { ip: "192.168.178.23", alias: "Funksteckdose Medion PC", image: "/vis.0/TPLINK_HS110_01.png", link: "http" }, { ip: "192.168.178.51", alias: "Samsung TV Büro", image: "/vis.0/LG_TV_2.png", link: "http" }, { ip: "192.168.178.26", alias: "Steckdose Meross WZ", image: "/vis.0/Meross.png", link: "http" }, { ip: "192.168.178.37", alias: "Iphone Sarah", image: "/vis.0/iphone 6.jpg", link: "http" }, { ip: "192.168.178.50", alias: "Samsung Tab", image: "/vis.0/Samsung Tab.png", link: "http" }, { ip: "192.168.178.27", alias: "Meross Blub Esszimmer", image: "/vis.0/Birne.png", link: "http" }, ]; //********************************************************************************************************************************************************************** function getLocaleDateTimeFormatString() { var localeDateStr = new Intl.DateTimeFormat(Intl.DateTimeFormat().resolvedOptions().locale).formatToParts().map( function(e) { switch(e.type) { case 'month': return 'MM'; break; case 'day': return 'DD'; break; case 'year': return 'YYYY'; break; default: return e.value; }; } ).join(''); return localeDateStr + ' HH:mm:ss'; } var localeDateFormatStr = getLocaleDateTimeFormatString(); // auf Änderungen aktiver Skripts hören let activeSelector = `[id=tr-064.*.devices.*.active]`; let deviceActiveList = $(activeSelector); if (deviceActiveList.length === 0) { // Fehlermeldung ausgeben, wenn selector kein result liefert console.error(`no result for selector '${activeSelector}'`) } else { // listener nur für Änderung bei alive deviceActiveList.on(netzwerkStatus); } // auf Änderungen der Sortieung hören on({ id: dpSortMode, change: 'any' }, netzwerkStatus); on({ id: dpSortMode, change: 'any' }, resetSort); // // auf Änderungen der Filter hören on({ id: dpFilterMode, change: 'any' }, netzwerkStatus); on({ id: dpFilterMode, change: 'any' }, resetFilter); // Funktion adapterStatus alle x Sekunden ausführen schedule('*/' + checkInterval + ' * * * * *', netzwerkStatus); function netzwerkStatus() { try { let deviceList = []; for (var i = 0; i <= deviceActiveList.length - 1; i++) { let id = deviceActiveList[i].replace('.active', ''); let obj = getObject(id); let pattern = /(?:\d{1,3}\.){3}\d{1,3}/i; let ipAddress = obj.common.name.match(pattern)[0]; let image = defaultImage; let deviceName = obj.common.name.replace(/ \((?:\d{1,3}\.){3}\d{1,3}\)/g, ''); let device = deviceNames.find(element => element.ip == ipAddress); let listType = 'text'; let buttonLink = ''; if(device) { deviceName = device.alias; image = device.image; //image = `${imagePath}${device.image}.png`; if(device.link) { listType = 'buttonLink'; if(device.link == 'http') { buttonLink = `http://${ipAddress}`; } else { buttonLink = device.link; } } } let macAddress = obj.native.mac; let imageColor = 'white'; let statusBarColor = farbeGeraetOffline; let status = 2; if (getState(deviceActiveList[i]).val) { statusBarColor = farbeGeraetOnline; status = 1; } if(listType === 'buttonLink') { deviceName = `<span style="text-decoration: underline">${deviceName}</span>` } let lastSignIn = 'noch nicht angemeldet'; let lastSignOff = 'noch nicht abgemeldet'; // Letzte Anmeldung auslesen if(existsState(id + '.lastActive')) { lastSignIn = 'angemeldet seit: ' + moment(getState(id + '.lastActive').val, localeDateFormatStr).format("DD.MM.YY HH:mm:ss"); } // Letzte Abmeldung auslesen if(existsState(id + '.lastInactive')) { lastSignOff = 'abgemeldet seit: ' + moment(getState(id + '.lastActive').val, localeDateFormatStr).format("DD.MM.YY HH:mm:ss"); } let subText = `<div style="color: green; font-family: RobotoCondensed-BoldItalic">${ipAddress}</div> <div style="color: black; font-family: RobotoCondensed-Regular">${lastSignIn}</div> <div style="color: black; font-family: RobotoCondensed-Regular">${lastSignOff}</div>` deviceList.push({ text: deviceName, subText: subText, statusBarColor: statusBarColor, image: image, imageColor: imageColor, listType: listType, buttonLink: buttonLink, showValueLabel: false, name: deviceName, ipAddress: ipAddress, status: status }); } let sortMode = myHelper().getStateValueIfExist(dpSortMode, 'name'); if (sortMode === 'name' || sortMode === 'ipAddress') { deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } else if (sortMode === 'status') { deviceList.sort(function (a, b) { return a[sortMode] == b[sortMode] ? 0 : +(a[sortMode] < b[sortMode]) || -1; }); } else { // default: nach name sortieren sortMode = 'name' deviceList.sort(function (a, b) { return a[sortMode].toLowerCase() == b[sortMode].toLowerCase() ? 0 : +(a[sortMode].toLowerCase() > b[sortMode].toLowerCase()) || -1; }); } let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null); if (filterMode && filterMode !== null && filterMode !== '') { if (filterMode === 'offline') { deviceList = deviceList.filter(function (item) { return item.status === 2; }); } else if (filterMode === 'online') { deviceList = deviceList.filter(function (item) { return item.status === 1; }); } } let result = JSON.stringify(deviceList); if (getState(dpList).val !== result) { setState(dpList, result, true); } } catch (err) { console.error(`[netzwerkStatus] error: ${err.message}, stack: ${err.stack}`); } } function resetSort() { let sortMode = myHelper().getStateValueIfExist(dpSortMode, null); if (sortResetAfter > 0) { setTimeout(function () { if (sortMode !== null && sortMode === myHelper().getStateValueIfExist(dpSortMode, null)) { setState(dpSortMode, sortReset); } }, sortResetAfter * 1000); } } function resetFilter() { let filterMode = myHelper().getStateValueIfExist(dpFilterMode, null); if (filterResetAfter > 0) { setTimeout(function () { if (filterMode !== null && filterMode === myHelper().getStateValueIfExist(dpFilterMode, null)) { setState(dpFilterMode, ''); } }, filterResetAfter * 1000); } } // Beim Staren des Skriptes Adapter Status abrufen netzwerkStatus(); function myHelper() { return { getStateValueIfExist: function (id, nullValue = undefined, prepand = '', append = '') { if (existsState(id)) { return prepand + getState(id).val + append; } else { return nullValue; } }, getCommonPropertyIfExist: function (object, prop, nullValue = undefined, prepand = '', append = '') { if (myHelper().checkCommonPropertyExist(object, prop)) { return prepand + object.common[prop] + append; } else { return nullValue; } }, checkCommonPropertyExist: function (object, prop) { if (object && object.common && object.common[prop]) { return true; } else { return false; } } } }
  • (Gelöst) Problem bei createState type "folder"

    javascript
    5
    0 Votes
    5 Posts
    924 Views
    L
    @paul53 Danke! MfG Wastl
  • Alexa's meckern unterbinden (Gerät nicht...)

    3
    0 Votes
    3 Posts
    195 Views
    D3ltoroxpD
    @dr-bakterius Gut mit den Routinen ist halt dann schon recht aufwendig, vor allem am Tablet, wenn man die am PC schreiben könnte wärs noch mal was anderes. NodeRed fällt raus, das hatte ich bis jetzt aber da stimmt irgendwas mit den Alexa Servern nicht. Ich habe 140 + Geräte, eigentlich aber nur 30-40. Ich habe viele doppelt und dreifach, alte Geräte die ich gar nicht mehr habe, alle in der Liste. Dann geht das gespinne ja auch wieder los. Ich habe mehr als ein Gerät..., usw. Daher den Weg den ich gerade versuche. Die Info mit NodeRed ergänze ich mal oben.
  • getAstro date verschieben

    9
    0 Votes
    9 Posts
    445 Views
    Ben1983B
    @paul53 sagte in getAstro date verschieben: 600000 Danke. TOP
  • InfluxDB-Größe in einen Datenpunkt schreiben (Grep)

    3
    0 Votes
    3 Posts
    356 Views
    E
    @glasfaser Danke das wars!! parseFloat(result) So einfach kann es sein ... aber ich denke soooo kompliziert ;)
  • error: javascript.0 (1178) at Object.<anonymous>

    8
    0 Votes
    8 Posts
    681 Views
    Great SUNG
    @wolfgangfb Die methode hat keine Umwandlung zu String und offensichtlich keine saubere Fehlerbehandlung. In eine Datei kannst Du nur Streams schreiben, die normalerweise aus Byte-Arrays generiert werden, deren Grundlage ein String ist. Was Du versuchst zu schreiben ist ein numeric/float/integer, das hat zunächst keine direkte Umwandlungsmöglichkeit in einen Stream / Byte-Array, daher gibt es einen Fehler. Wenn Du es vorher in einen String umwandelst, ist alles grün. Es gibt einige Entwickler, die da Fehler werfen, aber die Umwandlung trotzdem machen, andere implementieren eine Prüfung und brechen dann mit einem sauberen Fehler ab. Hier scheint weder noch der Fall zu sein.
  • Skript zur Bewässerung

    3
    0 Votes
    3 Posts
    409 Views
    S
    @paul53 Genial! Genau damit war es lösbar. Vielen Dank für den Input, das war mir nicht bewusst, dass man es in dieser Form realisieren muss.
  • [gelöst] Next Sunrise herausfinden

    1
    1
    0 Votes
    1 Posts
    154 Views
    No one has replied
  • setTimeout und Skript-Neustart

    7
    0 Votes
    7 Posts
    611 Views
    AlCalzoneA
    @antimon Das ist eine Funktion, die im Skript-Kontext global verfügbar ist.
  • trigger mit regex mit variablen

    javascript
    21
    0 Votes
    21 Posts
    1k Views
    Damrak2022D
    @oli Hallo Oliver, ich nutze lediglich die Schlafmatte von Withings. Andere Withings Produkte gibt es bei mir momentan nicht.
  • [gelöst]Problem mit cacheSelectorState

    7
    3
    0 Votes
    7 Posts
    775 Views
    paul53P
    @khg sagte älteres Backup von der CCU3 eingespielt habe, funktioniert es wieder. Die von mir gezeigte Version funktioniert unabhängig vom Datenpunktnamen.
  • [gelöst] Problem mit simple-ssh zur synology

    16
    0 Votes
    16 Posts
    2k Views
    A
    @glasfaser dickes dankeschön dafür, noch dazu am So! habe es komplett übernommen, meine Variablen eingetragen - leider nix kann aber inzwischen daran liegen, das die Firewall der syno dicht gemacht hat wegen zu vieler Zugriffe, muss mich jetzt um Familie kümmern und setz mich die nächsten Tage noch mal dran Nachtrag: konnte es nicht lassen da nochmal bei zu gehen - es funktioniert! nochmals ein ganz liebes dankeschön dafür!

224

Online

33.0k

Users

83.4k

Topics

1.3m

Posts