Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 49.1k Beiträge

NEWS

  • Gültigkeitsbereiche von Variablen

    4
    0 Stimmen
    4 Beiträge
    401 Aufrufe
    arteckA
    ich habs mir angeschaut... und wusste nicht wo ich anfangen soll... Empfehlung an @ehome setzt dich nochmal mit der Syntax/Semantik von Javascript zusammen (und ich rede nicht von CleanCode) @BananaJoe eigentlich ist es ganz einfach let var1 = true; if (var1) { let var2 = false; } var1 ist allgemein gültig (globale Variable) für den ganzen Programm/Script lauf auch innerhalb der if Abfrage var2 ist nur in der if Abfrage gültig ... (lokale Variable) ..das kann man jetzt weiter treiben auf Schleifen oder Trigger früher war das Problem von globalen Variablen dass diese (wie jede andere auch) speicher Platz im RAM verbraucht haben.. und dieser sehr knapp war.. man musste genaustens überlegen wie viel Byte man braucht.. und ob die Variable nur einmal oder mehrere male oder für den ganzen Programmlauf benötigt war Devs die vor 40 Jahren Programmiert haben wissen wovon ich rede
  • import Syntax

    24
    0 Stimmen
    24 Beiträge
    923 Aufrufe
    W
    @paul53 Das funktioniert taatsächlich, ist aber ziemlich blöd wenn man etwas entwickeln möchte. Bei jedem Fehler oder jeder Änderung die JS Instanz neu starten. Das muss auch irgendwie aders gehen.
  • Lüftungssteuerung

    8
    0 Stimmen
    8 Beiträge
    617 Aufrufe
    HomoranH
    @phil_discount sagte in Lüftungssteuerung: aber wenn ich dich richtig verstehe, trotzden lüften Natürlich! Der @phil_discount sagte in Lüftungssteuerung: tau auf dem feld ist ja nur wegen der niedrigen Temperatur vorhanden. Die Feuchtekapazität der Luft verdoppelt sich in etwa je 10 Grad. Ein Luftentfeuchter funktioniert ja auch nach dem Kondensationsprinzip. Temperatur runter und schon fällt das Wasser aus der Luft aus und tropft in den Behälter. Trockene Luft bleibt übrig. Deswegen vergleicht man ja nur den Wassergehalt der Luft innen und außen. Um das Ganze noch verwirrender zu machen :grin: Das Wohlfühl "klima" hängt allerdings von der relativen Feuchte ab.
  • Über Mqtt empfangenes Bild in Datei speichern

    5
    0 Stimmen
    5 Beiträge
    557 Aufrufe
    V
    @haus-automatisierung Danke nochmal. Scheint tatsächlich kein jpg oder anderes Bildformat zu sein. Als ausgabe kommt lediglich "data". Ich glaube ich versuche mal auf einem anderen weg die Bilder zu holen. Eventuell kann ich mir vom Server den Pfad schicken lassen und das Bld dann per SFTP holen. Trotzdem noch einmal vielen lieben Dank für die Unterstützung.
  • schedule, welche syntax

    3
    0 Stimmen
    3 Beiträge
    320 Aufrufe
    A
    @homoran Danke, genau daran hat es gelegen.
  • settimeout - leider wird nicht gewartet

    7
    0 Stimmen
    7 Beiträge
    242 Aufrufe
    N
    @paul53 erst mal Danke für den andere Denkansatz.
  • (erledigt)Hilfe bei Bit operation and / or

    5
    0 Stimmen
    5 Beiträge
    383 Aufrufe
    ubeckerU
    @haus-automatisierung da hast du ja Recht, im Prinzip ist da alles. Mein Problem ist das ich die Syntax von JS noch nicht drin habe und mich damit schwer tue. Manchmal aber auch in Umwegen denke. Ich habe erst im November letztn Jahr mit IOBroker angefangen und da dann erste mal mit JS zu tun gehabt habe. Mein Schwerpunkt ist Hardware und nicht Software. Dafür läuft bei mir mittlerweile MQTT, Modbus, HM, HMIP, Z-Wave. Ich werde mich wohl noch mehrmals melden müssen. danke für die noch kommende Unterstützung.
  • Google API OAuth2 - Wie?

    5
    0 Stimmen
    5 Beiträge
    522 Aufrufe
    M
    Okay, herausgefunden, dass die Datei in den JavaScript Ordner gehört. Dort hab ich es auf oberster Ebene mal getestet. Der Fehler bleibt der gleiche.
  • Adapter-Update führt zu Neukompilieren des NPM-Moduls

    Ungelöst
    11
    0 Stimmen
    11 Beiträge
    751 Aufrufe
    foxriver76F
    Lkonnte ich in letzter Zeit auch wieder bei jedem Update beobachten dass die von mir im JavaScript Adapter hinzugefügten Module nach jedem Update durch npm gelöscht wurden. Wir haben ein Ticket wird allerdings was größeres vermute ich. https://github.com/ioBroker/ioBroker.js-controller/issues/2006
  • Wie kann man einem Scheduler Callback einen Wert übergeben?

    2
    0 Stimmen
    2 Beiträge
    99 Aufrufe
    B
    @burningfrog neuer Scope für item, damit scheint es zu gehen: var list = [ {time:"22:33", dp_execute:"a"}, {time:"22:34", dp_execute:"b"}, {time:"22:35", dp_execute:"c"}, ]; for (var i=0; i<list.length;i++) { var item = list[i]; (function(item) { schedule('{"time":{"exactTime":true,"start":"'+item.time+'"},"period":{"days":1}}', function () { console.log(item.dp_execute); } ); })(item); }
  • JSON Liste sortieren (Funktion)

    62
    4
    0 Stimmen
    62 Beiträge
    9k Aufrufe
    M
    @djmarc75 ja es landet auch alles sortiert im Datenpunkt. vielen dank noch mal.
  • [gelöst]Enum während Laufzeit ändern

    2
    0 Stimmen
    2 Beiträge
    126 Aufrufe
    paul53P
    @ben1983 sagte: Id aus „Weihnachtsbeleuchtung“ heraus zu nehmen und wo anders mit rein? Versuche es mal so: const idEnum1 = 'enum.functions.weihnachtsbeleuchtng'; const idEnum2 = 'enum.functions.anderes_Gewerk'; const idDP = 'xyz'; // Steckdose const obj1 = getObject(idEnum1); const obj2 = getObject(idEnum2); var idx = obj1.common.members.indexOf(idDP); if(idx > -1) { obj1.common.members.splice(idx, 1); // entfernen obj2.common.members.push(idDP); // hinzufügen } else { idx = obj2.common.members.indexOf(idDP); if(idx > -1) { obj2.common.members.splice(idx, 1); // entfernen obj1.common.members.push(idDP); // hinzufügen } } if(idx > -1) { setObject(idEnum1, obj1); setObject(idEnum2, obj2); }
  • Logging ohne Scripname in der Nachricht

    javascript
    6
    0 Stimmen
    6 Beiträge
    551 Aufrufe
    F
    @bourton88 sagte in Logging ohne Scripname in der Nachricht: Kann das jemand erklären? richtige Fehler sind nur die welche im Log zur Laufzeit auftauchen. Die roten Kringel sind 'nur' Hinweise und oft fehlerhaft.
  • "Gesunde" Anzahl von registrierten Triggern

    20
    0 Stimmen
    20 Beiträge
    565 Aufrufe
    haus-automatisierungH
    @paul53 Ja, aber nicht alle. Rolle geht z.B. nicht.
  • sourcesanalytix per JS aktivieren

    7
    0 Stimmen
    7 Beiträge
    207 Aufrufe
    bahnuhrB
    Hat sich erledigt. Hab mir ein Script geschrieben.
  • Abruf von JSON vom Truckstick

    4
    0 Stimmen
    4 Beiträge
    569 Aufrufe
    CodierknechtC
    @robbsen Deine lokalen IP's musst Du nicht X'en. Die sehen bei allen gleich aus. @robbsen sagte in Abruf von JSON vom Truckstick: Leider habe ich sonst immer Blockly genutzt und das ist hier vermutlich fehl am Platz. Geht mit Blockly genau so gut. Wie sieht denn das JSON aus?
  • getState - außerhalb einer Funktion

    3
    3
    0 Stimmen
    3 Beiträge
    172 Aufrufe
    N
    @paul53 DANKE, für diesen schei... Haken habe ich einen Tag am Kopf gekratzt. Danke für den Hinweis, dass bei späteren Problemen eher der Text als Bilder helfen.
  • (gelöst) SQL Abfrage als Function in einem javascript

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    332 Aufrufe
    Norwegen60N
    OK, ich habe es selbst herausbekommen. Die Hürden waren nicht genau zu wissen, wie bei JavaScript function und deren Parameter funktionieren die Erkenntnis, dass bei SQL die Ergebnisse zeitverzögert zurück kommen. Wenn man in der Function das Ergebnis als result zurück gegeben hat, hat der Wert im Log nie gestimmt. Die Suche warum die Werte nie gestimmt haben, hat einiges an Zeit verschlungen Ich habe es deshalb wie folgt realisiert. Der Einfacheit halber verwende ich die Funktion um Jahresergebnisse zu liefern. Da muss nicht Jahr/Monat verschlüsselt werden (Monatsabfrage steht ja schon im vorigen Post) function GetEnergyYear(ID, Year, DataPoint, DataPointCurrent = '') { let ValueCurrent = 0; let sSQL1 = 'use ioBroker DECLARE @ID int = ' +String(ID) +', @Year int ='+String(Year); let sSQL2 = 'select max(val) from ts_number where ((id = @ID) and (year(DATEADD(s, ts/1000, \'1970-01-01\')) = year(getdate())-@Year-1)) or (id = 0)'; let sSQL =sSQL1 + ' select max(val) -(' + sSQL2 +') from ts_number where ((id = @ID) and (year(DATEADD(s, ts/1000, \'1970-01-01\')) = year(getdate())-@Year)) or (id = 0)'; sendTo('sql.0', 'query', sSQL, async (result) =>{ setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); // Wenn Korrekturwert (aktueller Tages-Wert) mit übergeben wurde, diesen zum Wert addieren // Hier muss man wissen, dass immer nur der Endwert eines jeden Tages abliegt. // Der Stand des aktuellen Tages fehlt also. Der kann per DataPointCurrent übergeben und hinzuaddiert werden if (String(DataPointCurrent) != '') { ValueCurrent = getState(DataPointCurrent).val; if (Logging) {console.log('###2: ValueCurrent = ' + String(ValueCurrent))}; setState(DataPoint /* rEnergyRateDay */, (getState(DataPoint).val + ValueCurrent), true); }; if (Logging) {console.log('###2: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))}; } // ############################################################################################################################# // alle 2 Minute aktuelle Monatsverbräuche berechnen schedule('{"time":{"start":"00:00","end":"24:00","interval":2,"mode":"minutes"},"period":{"days":1}}', async () => { console.log(('### Verbrauch aktueller Monat ###')); // Und so erfolgt die Abfrage. 88 und 100 sind die Datapoint ID des Tagesendwertes GetEnergyYear(88,0,'0_userdata.0.PV.rPV_Energy_RateYear','0_userdata.0.PV.rPV_Energy_Day'); GetEnergyYear(88,1,'0_userdata.0.PV.rPV_Energy_RateYearBefore'); // der benötigt keine Korrektur da ja alle Tage abgelegt sind GetEnergyYear(100,0,'0_userdata.0.PV.rUsed_Energy_RateYear','0_userdata.0.PV.rUsed_Energy_Day'); GetEnergyYear(100,1,'0_userdata.0.PV.rUsed_Energy_RateYearBefore'); }); Kann sein, dass es einfacher geht, aber so funktioniert es Grüße Gerd
  • HTML-Tabelle für Time-Switch Adapter

    javascript
    49
    2
    5 Stimmen
    49 Beiträge
    7k Aufrufe
    liv-in-skyL
    @buchner51 sorry - muss ich sehen - mir fällt im moment nix ein
  • Typescript setObejct kompelier fehler

    13
    1
    0 Stimmen
    13 Beiträge
    936 Aufrufe
    I
    Ich muss das Thema leider noch mal hochholen. Meine Test Version funktioniert ja. const testPath = "0_userdata.0.dev.color_mode" const obj= getObject(testPath) as iobJS.StateObject; Als ich das ganze aber dynamisch machen wollte z.b. async function updateEnum(path:string, states, statesLength){ const obj= getObject(path) as iobJS.StateObject; hatte ich wieder den Fehler. Wenn ich aus dem const ein var machen geht es auch nicht mehr var testPath = "0_userdata.0.dev.color_mode" const obj= getObject(testPath) as iobJS.StateObject; und es reicht nicht aus den string in ein const zu packen async function updateEnum(path:string, states, statesLength){ const testPath = path const obj= getObject(testPath) as iobJS.StateObject; immer bekommen ich script.js.common.dev: TypeScript compilation failed: const obj = getObject(path) as iobJS.StateObject; ^ERROR: Conversion of type '{ type: "meta" | "config" | "user" | "state" | "instance" | "adapter" | "channel" | "folder" | "device" | "script" | "enum" | "group" | "host" | "chart"; ts: number; from: string; common: { ...; }; ... 8 more ...; encryptedNative: string[]; }' to type 'StateObject' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first. Types of property 'common' are incompatible. Type '{ [x: string]: any; [x: number]: any; }' is missing the following properties from type 'StateCommon': read, write, role, name Leider fehlt mir da echt tiefergehendes Javascript/typescript wissen um das zu verstehen. Würde mir noch mal jemand auf die Sprünge helfen?

592

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge