Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 49.1k Beiträge

NEWS

  • Wechselschaltung in software realisieren -> Endlosscshleife

    15
    0 Stimmen
    15 Beiträge
    945 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
    992 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... :slightly_frowning_face:
  • [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
    599 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
    269 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
    319 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
    584 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
    335 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
    219 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
    725 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
    615 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:
  • [gelöst] Js-Skript Trigger bei Veränderungen in MySQL

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    228 Aufrufe
    haus-automatisierungH
    @marcio Such mal nach mySQL Trigger. Da könnte man ein Programm aufrufen (wie z.B. das ioBroker CLI) um dann die Daten abrufen zu lassen: http://crazytechthoughts.blogspot.com/2011/12/call-external-program-from-mysql.html https://github.com/mysqludf/lib_mysqludf_sys Das ist alles sehr sehr alt, aber eventuell gibt's ja neuere Plugins CREATE TRIGGER: https://dev.mysql.com/doc/refman/8.4/en/trigger-syntax.html
  • Skript: More than x schedules registered. Check your script!

    11
    3
    0 Stimmen
    11 Beiträge
    1k Aufrufe
    Hartmut MellerowitzH
    @codierknecht deinen Vorschlag kenne ich, werde das Skript entsprechend umschreiben! Der "Erfinder" hat sich wohl um die Warnungen nicht gekümmert oder das Skript nicht lange genug laufen gelassen. Erstmal Danke für den Hinweis
  • Skript Luftdaten

    13
    10
    4 Stimmen
    13 Beiträge
    2k Aufrufe
    S
    @stenmic Das habe ich auch schon festgestellt, aber man muss auch mal prüfen wo genau die Messstationen der jeweiligen Anbieter sind ;)
  • [Aufruf] Welche guten JavaScripts setzt ihr ein?

    91
    1
    18 Stimmen
    91 Beiträge
    33k Aufrufe
    MartinPM
    @negalein Danke im Voraus für die Mühe
  • Skript Pollenflug

    12
    1
    3 Stimmen
    12 Beiträge
    1k Aufrufe
    NashraN
    @ro75 sagte in Skript Pollenflug: @nashra in dem Fall habe ich Grafana benutzt. Man kann ja einzelne DP historisieren und dann mit Flot, ECharts oder Material Design anzeigen lassen. Alternativ gibt es noch ein JSON für ein JSON-Widget. Ro75 Ah, alles klar. Sah so aus als wenn das Widgets sind aber Grafana habe ich ja auch und versuchs mal damit, danke.
  • ACME - Letsencrypt Zertifikate extrahieren

    1
    1
    1 Stimmen
    1 Beiträge
    469 Aufrufe
    Niemand hat geantwortet
  • Javascript Fehler nach Umstellung auf Bookworm

    6
    0 Stimmen
    6 Beiträge
    443 Aufrufe
    OliverIOO
    @werner2000x für kurzlebige dateien käme noch das /tmp Verzeichnis in Frage. wobei der Dateiname eher schon nach was dauerhaftem klingt. für generelles interess kann man hier mal reinlesen https://www.grund-wissen.de/linux/linux-dateisystem.html

650

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge