Weiter zum Inhalt

JavaScript

2.5k Themen 49.6k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • Skript piHole

    6
    3
    3 Stimmen
    6 Beiträge
    1k Aufrufe
    Ro75R
    @theexpert bei den ersten 4 musst du halt die Daten mit Influx historisieren und dann in Grafana verarbeiten. Das letzte geht über Infinity-Plugin und Simple-API. [image: 1730025477940-2413eba8-dc8c-4bb5-b3c9-695d571b4963-image.png] Ro75.
  • [Telegram] Nachricht bearbeiten

    Ungelöst javascript
    7
    2
    0 Stimmen
    7 Beiträge
    767 Aufrufe
    B
    @mcu das macht tatsächlich keinen Unterschied, aber im absoluten Minimalaufbau von innerhalb desselben Skriptes funktioniert es bei mir auch 🤔 Jetzt ruft zwar das Familienleben, aber so habe ich morgen zumindest einen Anhaltspunkt. Ich werde den Minimalaufbau nach und nach in das Althergebrachte umwandeln und mal schauen, ab welchem Punkt die Funktion aussteigt. Vielen Dank nochmal! Wenn ich eine Ursache ermitteln kann, werde ich sie hier posten.
  • Shelly Verbrauchsdaten direkt aus der Ecoflow Cloud holen

    17
    5
    0 Stimmen
    17 Beiträge
    5k Aufrufe
    B
    @dpleiss Hallo, in meiner ECOFLOW App ist die Serienummer von dem Shelly zu lang. Es wird mir eine Nummer angezeigt und irgendwo mittig wir die Nummer mit Punkten ... aufgefüllt. Wie bekommt man hier jetzt die komplette Seriennummer angezeigt? [image: 1729148611413-img_4150.jpg]
  • Starten eines anderen Script

    3
    0 Stimmen
    3 Beiträge
    487 Aufrufe
    I
    Hi @codierknecht sagte in Starten eines anderen Script: Das aufgerufene Script könnte sich am Ende mit stopScript() selbst beenden. Genau das mache ich ja. Siehe Zeile 4 in "dev3". jedoch müsste ich ja Blockierend warten auf "dev3" und ich suche dafür eine Möglichkeit. @codierknecht sagte in Starten eines anderen Script: Oder Du könntest Dir mit einem Hilfs-DP helfen: Daran hatte auch auch gedacht. Hatte gehofft das es eine bessere Möglichkeit gibt. @codierknecht sagte in Starten eines anderen Script: Aber wozu soll das Ganze gut sein? Das klingt alles sehr nach klassischer prozeduraler Programmierung. Womöglich bist Du da völlig auf dem Holzweg. In diesem Falle ist es auch so (nicht das mit dem Holzweg). Ich würde das an genau zwei Stellen benötigen. Bei meinen _Init Scripten die mir meinem Object Baum erstellen (Wird nur 1 mal aufgerufen wenn neue Hardware z.b. Fenster sensor eingebunden wird). Bei meinen TestScripte ich baue sehr universell einsetzbare Scripte um dieses zu Testen habe ich TestScripte gebaut die Datenpunkte setzten und schauen ob meine Scripte sich richtig verhalten. Diese Rufe ich nur auf wenn ich was in der Programmierung ändere habe und sicher gehen will das alles sich noch so verhält wie gewollt. Um es übersichtliche zu haben sind die Test in einzelnen Dateien Gruppiert. Und da auch die Zeit eine rolle spielt daueren manche Test bis zu 3 Minuten und davon gibt es unterschiedliche viele in den einzelnen Szenarios. Aber ich werde mir dann wohl was mit dem Datenpunkt bauen müssen.
  • Ich kann nichts in Javascript bearbeiten. Was fehlt mir?

    Verschoben
    10
    1
    0 Stimmen
    10 Beiträge
    899 Aufrufe
    crunchipC
    @breyger sagte in Ich kann nichts in Javascript bearbeiten. Was fehlt mir?: taki mam zamiar [image: 1728915274985-1b42b6fb-b664-4714-990f-2ab19ac61bf3-image.png]
  • SSH bzw. simple-ssh ist verschwunden

    5
    0 Stimmen
    5 Beiträge
    262 Aufrufe
    H
    @codierknecht Danke für den Hinweis! Das "Enter drücken" hab ich übersehen! Ich schäme mich über diese Kleinigkeit!
  • [gelöst] Compilerfehler über nicht mehr vorhandene Scripts

    2
    1
    0 Stimmen
    2 Beiträge
    175 Aufrufe
    D
    @delphinis Nach Neustart des Scriptadapters hat sich das Problem gelöst
  • Wechselschaltung in software realisieren -> Endlosscshleife

    15
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    jmeister79J
    @paul53 ja natürlich läuft er seit jahren supersrabil etc. Bis er es dann nicht tut und dann steht man ohne Licht da. Seines ein schiefes Update oder ne kaputte ssd oder n defekter CPU ider ne kaputte Fritzbox oder k kaputter shelly, das system ist einfach zu komplex um sichb100% darauf zu verlassen. Darum ist es bei mir ein nice to have und das haus sollte auch funktionieren wenn der iobroker map husten hat und ich grad im Hansapark sitze. ;-). Ich werf den ZigBee raus und ersetze ihn gegen nen Shelly, nichtsdestoweniger ist auch bei den Shellys sowas möglich. Also sollte ich diesbezüglich entweder diese Möglichkeit ausschließen oder auf diese Schaltung verzichten. Ich hatte nur gedacht, dass ich einfach grad aufm Schlauch stehe, ist ja bei mir öfters der fall ne.
  • [gelöst] Umstellung Proxmox lxc auf vm - Hohe load average

    23
    2
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    BananaJoeB
    @meister-mopper sagte in [gelöst] Umstellung Proxmox lxc auf vm - Hohe load average: uc i3 jupp passt
  • The state contains the forbidden properties notExist!

    16
    0 Stimmen
    16 Beiträge
    1k Aufrufe
    A
    Guten Morgen. Als ich heute Morgen die Sache nochmals getestet habe, musste ich feststellen, dass es doch nicht bei allen Geräten den Namen auslesen kann (weshalb auch immer). Zum Test habe ich jeden Schritt um eine Sekunde verzögert ausführen lassen -> ohne Erfolg. Auch die Verzögerung auf 10 Sekunden zu setzen brachte nicht den gewünschten Effekt. Falls von euch niemand weitere Ideen hat, werde ich das Script wohl so belassen, obwohl ich dies wirklich gerne angezeigt bekommen hätte...
  • [gelöst] Werte aus einer JSON-Datei

    Verschoben
    27
    0 Stimmen
    27 Beiträge
    3k Aufrufe
    OliverIOO
    @marcio ok, dann passt es
  • (gelöst) Javascript Fehler

    6
    0 Stimmen
    6 Beiträge
    757 Aufrufe
    ostseereiterO
    Danke an alle kurz und schmerzlos.
  • [gelöst] on Funktion u.Daten Array nimmt immer letzten Wert

    javascript
    14
    0 Stimmen
    14 Beiträge
    1k Aufrufe
    etvE
    Ich hab es!! Hab nun in meinen alten Backups ein Script gefunden, welches ich vor Jahren für das automatische EIN/AUS diverse Geräte in Abhängigkeit von Anwesenheit und Helligkeit draußen geschrieben hab (oder von irgendwo hier im Forum zusammen gebastelt...) und in diesem Script mache ich es "richtig rum"... Anbei nun das gesamte Script falls es noch wer "studieren" möchte. // Kleinverbraucher Logging - V1.0 - 07.10.2024 // Kopie vom ersten Scrit dieser Art, IONIQ5 Logging... // Teil der neuen Logging Scripte - klein, leicht und auf meine Bedürfnisse zugeschnitten // 2do::::::::::::::::::::::::::::::::::::::::: // createState in der History automatisieren... var debug = true; var root = '0_userdata.0.Logging.Kleinverbraucher.'; var was, neuer_Wert, alter_Wert, diff, helper, tag, monat, jahr, wochentag; // WAS soll geloggt werden? const datenpunkt={ 'ScooterCharger':{ id_wert : 'shelly.1.SHPLG-S#C38D1F#1.Relay0.Energy'/*Energy*/ }, 'editPC':{ id_wert : 'shelly.1.SHPLG-S#B529B7#1.Relay0.Energy'/*Energy*/ } }; // Init fn_init(); // Funktion initialize für die Subscribes function fn_init() {for (was in datenpunkt) {fn_on_Schleifen(was)}}; // Hauptteil function fn_on_Schleifen(was){ on({id: datenpunkt[was].id_wert, change:'ne'}, function (obj) { // abfangen von Änderungen kurz nach Mitternacht - da erfolgen ja die ganzen Transfers if (compareTime("00:00", "00:01", "between")){ if (debug){log('========== Update ausgelöst von '+ was +' aber es ist Mitternacht, daher Abbruch')} return; } if (debug){log('========== Update ausgelöst von '+ was +'...')} neuer_Wert = obj.state.val; alter_Wert = getState(root+was+'.internal_counter').val; if (debug){log('========== alter Wert: '+ alter_Wert)} if (debug){log('========== neuer Wert: '+ neuer_Wert)} diff = neuer_Wert - alter_Wert; // ist diff gleuch Null, dann Abbruch... if (diff === 0) { if (debug){log('========== Objekt Update ohne Änderung ... exit!')} return; } // wenn diff negativ ist, dann hat ein reset des Counter stattgefunden // ist es positiv, wird der Wert dazu gezählt if (diff < 0) { if (debug){log('========== RESET erkannt - Differenz ist negativ: '+ diff)} // check auf neuer Wert = 0, dann wird 0,00000001 addiert um den INIT abzufangen if (neuer_Wert === 0){neuer_Wert = 0.0000000001} setState(root+was+'.internal_counter', neuer_Wert, true); } else { // check auf alter Wert genau 0 - dann wird dieser Wert gerade zum ersten Mal gelesen.... if (alter_Wert === 0){ if (debug){log('========== INIT erkannt - alter Wert genau 0, daher wurde noch nie ein Wert gelesen/geschrieben.')} // nun wird ohne Addition der neue Wert im Counter gespeichert setState(root+was+'.internal_counter', neuer_Wert, true); return; // und Abbruch, weil wir sind fertig...denke ich... } if (debug){log('========== Differenz '+ diff +' wird addiert...')} helper = getState(root+was+'.1-DAY').val; setState(root+was+'.1-DAY', (helper + diff), true); helper = getState(root+was+'.2-WEEK').val; setState(root+was+'.2-WEEK', (helper + diff), true); helper = getState(root+was+'.3-MONTH').val; setState(root+was+'.3-MONTH', (helper + diff), true); helper = getState(root+was+'.4-YEAR').val; setState(root+was+'.4-YEAR', (helper + diff), true); setState(root+was+'.internal_counter', neuer_Wert, true); } }); // Ende on }; // Ende Hauptteil // Tages-/Wochen-/Monats-/Jahreswechsel // läuft jeden Tag um Punkt 00:00:01 clearSchedule(sh_Tageswechel); var sh_Tageswechel = schedule('1 0 0 * * *', fn_Tageswechsel); //fn_Tageswechsel(); function fn_Tageswechsel(){ // erst mal das neue Datum holen UND zwar in eizelnen Variablen tag = formatDate(new Date(), 'TT'); monat = formatDate(new Date(), 'MM'); jahr = parseInt(formatDate(new Date(), 'YYYY')); wochentag = formatDate(new Date(), 'W'); // Start der Schleife für ALLE Datenpunkte in dieser Kategorie for (was in datenpunkt) { log('Schleife START'); // nun check auf die ganzen Wechsel, wobei Jahr vor Monat vor Tag // Check auf JAHRESWECHSEL if ((monat == '01') && (tag == '01')){ jahr = jahr - 1; log('========== JAHRESWECHSEL erkannt: '+datenpunkt[was].id_wert +' =========='); // 1. Jahresverbrauch in HISTORY schreiben setState(root+was+'.HISTORY.'+ jahr, getState(root+was+'.4-YEAR').val, true); // 2. Jahresverbrauch in .BEFORE schreiben setState(root+was+'.4-YEAR.BEFORE', getState(root+was+'.4-YEAR').val, true); setState(root+was+'.4-YEAR', 0, true); } // Ende Jahreswechsel // Check auf MONATSWECHSEL if (tag == '01'){ // if (monat == '01'){jahr = jahr - 1} helper = parseInt(monat); helper = helper - 1; // wir brauchen ja den Vormonat if (helper === 0){helper = 12} if (helper < 10) {monat = '0' + helper.toFixed(0)} else {monat = helper.toFixed(0)} log('========== MONATSWECHSEL erkannt: '+datenpunkt[was].id_wert +' =========='); // 1. Monatsverbrauch in HISTORY schreiben setState(root+was+'.HISTORY.'+ jahr +'.' + monat, getState(root+was+'.3-MONTH').val, true); // 2. Monatsverbrauch in .BEFORE schreiben setState(root+was+'.3-MONTH.BEFORE', getState(root+was+'.3-MONTH').val, true); setState(root+was+'.3-MONTH', 0, true); } // Ende Monatswechsel // Check auf Wochenwechsel if (wochentag == 'Mo'){ log('========== WOCHENWECHSEL erkannt: '+datenpunkt[was].id_wert +' =========='); // 1. Wochenverbrauch in .BEFORE schreiben setState(root+was+'.2-WEEK.BEFORE', getState(root+was+'.2-WEEK').val, true); setState(root+was+'.2-WEEK', 0, true); } // Ende Wochenwechsel // Tageswechsel - der kommt - no na - IMMER dran... setState(root+was+'.1-DAY.BEFORE', getState(root+was+'.1-DAY').val, true); setState(root+was+'.1-DAY', 0, true); } // Ende for-Schleife } // Ende Tages-/Wochen-/Monats-/Jahreswechsel // ENDE Script Im Prinzip das Ersatz Script für den guten alten Betriebsstundenzähler von @looxer01 . Ich hab das Programm geliebt und bis heute in Betrieb, aber es macht mir Sorge, dass immer mehr Fehler im Prorammcode angezeigt werden (rote Wellenlinien) und es irgendwann nicht mehr geht. Viele der Funktionen hab ich in seinem Script nie verwendet - eigentlich hauptsächlich das aufsummieren von Verbräuchen - und so hab ich mir nun das eigene kleine und schlanke Script geschrieben, bevor das alte "absemmelt" 😎 Liebe Grüße Tom PS: @Ro75 : für deine Methode hab ich schon einen Anwendungsfall! Danke für diese Idee...
  • json Object wird unter Objekte nicht richtig angezeigt

    3
    1
    0 Stimmen
    3 Beiträge
    298 Aufrufe
    ofri2607O
    @jok3r würde ich so lösen: const l_tibberlink = "tibberlink.0.Homes.cf930f37-ceea-4c0c-a941-b395fb865fc3.PricesToday."; const l_pvforecast = "pvforecast.0.summary.energy.hoursToday."; const l_Strompreise = "0_userdata.0.Strompreise"; let arr = {}; for (let i = 0; i < 24; i++) { arr[i] = { level: getState(l_tibberlink + i + ".level").val, price: getState(l_tibberlink + i + ".total").val, pvSolcast: (i < 5 || i > 21) ? 0 : getState(l_pvforecast + (i < 10 ? ("0" + i) : i) + ":00:00").val }; } setState(l_Strompreise, JSON.stringify(arr), true); log(JSON.parse(getState(l_Strompreise).val)[18]); //z.b. für Stunde 18
  • Selektor sourceanalytix

    javascript
    4
    0 Stimmen
    4 Beiträge
    355 Aufrufe
    bahnuhrB
    @bananajoe anbei ein kleines Script (für alle die es gebrauchen wollen). var cacheSelectorSA = $('channel[state.id=sourceanalytix.0.*cumulativeReading]'); cacheSelectorSA.each(function (id, i) { id = id.replace(/__/g,"."); id = id.replace(/sourceanalytix.0./g,""); id = id.replace(/.cumulativeReading/g,"") auswahl.push(id); }) Danke @BananaJoe für die Anregung.
  • Script von SQL auf Influx umstellen

    9
    0 Stimmen
    9 Beiträge
    703 Aufrufe
    OliverIOO
    @enrico-hesse im influx adapter readme sind aber beispiele, in der gleichen notation https://github.com/ioBroker/ioBroker.influxdb?tab=readme-ov-file#influx-2x sorry, ich selbst habe aktuell kein influx. hab über sendto früher selbst nicht abgerufen. warum denkst du das das so nicht funktioniert bzw. gibt es eine fehlermeldung?
  • Relais-Karte scheint immer mal Befehle nicht zu Registrieren

    5
    0 Stimmen
    5 Beiträge
    418 Aufrufe
    Z
    @codierknecht ja eigentlich ohne Probleme. Bis auf das eben. Aber ich habe da noch eine Frage, welche E/A würde ihr vom RPI eigentlich nehmen ? Also welche PINS. Es gibt ja auch einige, die haben dann noch andere Funktionen. Aber welche sind "NUR" E/A ?!?!? Ich habe z.B. den GPIO 10, der irgendwie nicht immer richtig schaltet.....
  • getState(xxx).val liefert "Null". Warnung unterdrücken, wie?

    2
    0 Stimmen
    2 Beiträge
    245 Aufrufe
    paul53P
    @wolfgangfb sagte: Wie kann ich das verhindern? if(existsState(id)) x = getState(id).val;
  • Skript Hardwareinformationen via SNMP

    4
    5
    1 Stimmen
    4 Beiträge
    874 Aufrufe
    Ro75R
    Skript in Version 1.0.1 im ersten Post aktualisiert. Jetzt können auch Drucker und Scanner angefragt werden. Bitte dazu im ersten Post ganz unten "NACHTRAG 28.09.2024: Version 1.0.1" schauen. Ro75.
  • Shelly 1 via JavaScript Ansteuern

    6
    0 Stimmen
    6 Beiträge
    670 Aufrufe
    N
    @neueklasse zu diesem Post, nun ist request.post veraltet und wurde durch httpPost ersetzt... das sieht dann im Script so aus: httpPost('http://admin:passwort@ip/settings/ext_temperature/0', { "overtemp_threshold_tC": nOvertemp , "undertemp_threshold_tC": nUndertemp }, (error, response) => { if (!error) { console.log(response.statusCode); console.log(response.data); console.log(response.headers); } else { console.error(error); } }); leider klappt es mit der Übertragung nicht mehr, ich habe ein paar verschiedene Varianten getestet, ohne Erfolg.. folgendes zeigt die Konsole: script.js.User_Scripts.ShellyFBHControl: httpPost(config={"method":"post","url":"http://ip/settings/ext_temperature/0","responseType":"text","responseEncoding":"utf8","timeout":2000,"auth":{"username":"admin","password":"passwort"},"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"},"data":{"overtemp_threshold_tC":22,"undertemp_threshold_tC":21}}, data=[object Object]) vorher waren die Variablen unter form: , laut der Konsole ist es nun unter data:

351

Online

33.0k

Benutzer

83.3k

Themen

1.3m

Beiträge