Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 48.7k Posts

NEWS

  • JScript führt keine CMD-exe aus (W10P)

    10
    0 Votes
    10 Posts
    596 Views
    P
    Eieiei, das klingt natürlich logisch:blush: Vielen Dank!
  • Snips / MQTT - Session beenden

    1
    0 Votes
    1 Posts
    169 Views
    No one has replied
  • JS-Interface Fully Browser

    javascript
    8
    0 Votes
    8 Posts
    946 Views
    arteckA
    @sveni_lee <script> function reportKioskMotion() { window.open("http://ip:port/set/javascript.2.Anzeigen.fullyMotion?value=true", '_blank'); self.close(); } fully.bind('onMotion', 'reportKioskMotion();'); </script> so damit gehts in einem HTML widget gefällt mir aber nich nicht... es gab auch was mit XMLHttpRequest... muss ich mal schauen
  • Hilfe zum Alexa Hue Wecker

    25
    1
    0 Votes
    25 Posts
    2k Views
    HilwiH
    Hi! Sorry, ich war eine ganze Zeit lang hier im Forum nicht tätig und habe den Thread auch erst jetzt gesehen. Das mit der Endlosschleife ist ein Fehler im Script. Das muss ich mir einmal anschauen.
  • [gelöst]-JS-hilfe beim sortieren eines JSONs

    javascript
    9
    1
    0 Votes
    9 Posts
    979 Views
    liv-in-skyL
    hat sich erledigt
  • JS Script Engine stoppt immer wieder

    4
    2
    0 Votes
    4 Posts
    398 Views
    arteckA
    @TS das ist quack.. nicht in der 8.xx
  • Scripte debuggen

    3
    0 Votes
    3 Posts
    418 Views
    P
    Sonst keine hilfreichen Hinweise, ausser wo ich in Zukunft meine Bilder hochladen soll ?
  • [Gelöst] Logicwert nach State ändern

    7
    0 Votes
    7 Posts
    393 Views
    L
    So, hab den Fehler gefunden. Es waren natürlich mal wieder Klammern und Sonstiges. Jetzt Funktioniert es: on( { id:"sonoff.0.Sonoff_Bridge.RfReceived_Data", change: 'ne'}, function() { if(getState("sonoff.0.Sonoff_Bridge.RfReceived_Data").val == "9B766E") setState("Tüeren.0.Balkontüere.Status", true); else if(getState("sonoff.0.Sonoff_Bridge.RfReceived_Data").val == "9B7667") setState("Tüeren.0.Balkontüere.Status", false); }); Danke an alle für die Hilfe.
  • Daikin per Alexa steuern

    1
    0 Votes
    1 Posts
    1k Views
    No one has replied
  • Bei scharfschalten der Alarmanlage

    4
    0 Votes
    4 Posts
    239 Views
    ?
    Ich danke dir @paul53 :heart_eyes: :heart_eyes: Das hat geholfen. habe es jetzt folgend so gelöst. var Offene_Fenster; on({id: "Alarmanlage_.Alarm_code_an", change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("Alarmanlage_.Alarm_code_an").val == true) { Offene_Fenster = []; if (getState("mihome.0.devices.magnet_15ZTT000236fd23.state").val == true) { Offene_Fenster.push('Das große Schlafzimmerfenster'); log("value: " + obj.state.val) } if (getState("mihome.0.devices.magnet_158d236fd23.state").val == true) { Offene_Fenster.push('Das kleine Schlafzimmerfenster'); log("value: " + obj.state.val+ Offene_Fenster) } if (getState("mihome.0.devices.magnet_158d000236fe97.state").val == true) { Offene_Fenster.push('Das Küchenfenster'); } if (getState("hm-rpc.0.OEQ0423676.1.STATE").val == true) { Offene_Fenster.push('Die Balkontür'); } if (getState("hm-rpc.0.OEQ0425806.1.STATE").val == true) { Offene_Fenster.push('Die Wohnungstür'); } if (getState("mihome.0.devices.magnet_158d000236fd23.state").val == true) { Offene_Fenster.push('Die Kellertür'); } if (getState("mihome.0.devices.magnet_158d0002048400.state").val == true) { Offene_Fenster.push('Das Gefrierfach'); } if (getState("hm-rpc.0.NEQ1510598.1.STATE").val == true) { Offene_Fenster.push('die Haustür ist nicht abgeschlossen'); } if (getState("Alarmanlage_an").val == false) { Offene_Fenster.push('und Die Alarmanlage ist ausgeschalten'); } if (!Offene_Fenster.length) { setState("snips.0.devices.default.send.text", ('Es ist alles gesichert')); setState("Alarmanlage_.Alarm_code_aus", true); setState("Alarmanlage_.Alarm_code_an", false); setState("Alarmanlage_.Check_sensor", false); setState("Alarmanlage_.Tur1", true); } else { setState("snips.0.devices.default.send.text", (['Die folgenden Türen und Fenster sind offen und zwar',Offene_Fenster,'.'].join(''))); setState("Alarmanlage_.Check_sensor", false); } } });
  • Script Adapter neu Starten lassen

    6
    0 Votes
    6 Posts
    877 Views
    MicM
    @kasperfunsurfer Unten ein Beispiel. Musst halt mit den Zeiten spielen. Wird jede Minute ausgeführt, und prüft, ob State länger als 5 Minuten nicht geändert wurde. Empfehle Dir trotzdem, ein Github-Issue zu öffnen oder hier noch mal im Forum genau das Problem mit dem Adapter zu schildern (neuer Thread mit aussagekräftigem Betreff). const STATE_PATH = 'HIER PFAD ZU STATE EINTRAGEN'; let mSchedule; let wieOft = '* * * * *'; // Jede Minute clearSchedule(mSchedule); mSchedule = schedule(wieOft, function(){checkStateTs(STATE_PATH)}); function checkStateTs(statePath) { // Prüfe, ob sich innerhalb der letzten 5 Minuten der State geändert hat. let timestampState = new Date(getState(statePath).ts); let timestampStatePlusFiveMin = new Date(timestampState.getTime() + (5 * 60000)); // 5 Minuten Differenz let timeCurrent = new Date(); if(timestampStatePlusFiveMin > timeCurrent) { log('State hat sich innerhalb der letzten 5 Minuten geändert.') } else { log('State hat sich innerhalb der letzten 5 Minuten NICHT geändert.') } }
  • Andere ioBroker instanz ansteuern

    10
    0 Votes
    10 Posts
    575 Views
    M
    habe es jetzt folgend gelöst - da es sich eigentlich nur um ein Kodi-Mute switch handelt lese ich die werte jetzt nicht mehr aus sondern benutze den Toogle den simpleAPI bereitstellt : var DASHBUTTON = 'amazon-dash.0.mac-adresse-99.pressed'; var COMMAND = 'http://192.168.178.3:8087/toggle/kodi.0.mute?&prettyPrint'; on({id: DASHBUTTON, val: true}, function (obj) { request(COMMAND , function() { ; }); }); MOD Edit Jey Cee: Code/Log in Code Tags gepackt. Bitte benutzt die Code Tags Funktion -> </>
  • [Vorlage]Wechselschaltung mit Javascript

    16
    0 Votes
    16 Posts
    891 Views
    Tim LeuschnerT
    Nach einigen Änderungen nun umgestellt auf eine Javascript-Klasse, dadurch deutlich leichter zu verwenden und als Vorlage tauglich: Script für Wechselschaltung mit beliebig vielen Schaltern, Tastern, & Aktoren: // Ich benutze virtuelle Schalter (Datenpunkte) um z.B. VIS-Seiten aufzubauen, weil ich so // bei einem Austausch physischer Komponenten (Anderer Hersteller/Name etc.) nicht die // VIS-Visualisierung und Scripte anpassen muß // // Die sonoff-Touch-Schalter schalten die LED's der Touch-Schaltflächen ein, wenn das zugehörige Relais an ist. // Ich invertiere den Schaltzustand der sonoff-Touch-Schalter, damit die LED der jew. Touch-Schaltfläche // leuchtet, wenn die zu schaltende Lampe aus ist (so findet man sie im Dunkeln). // Abspeichern der Javascript-Instanz in Konstante, um in den // Event-Scubscriptions zu prüfen, woher der Aufruf kommt und // so Ping/Pong zu vermeiden ( CreditsTo: @paul53 ) const js = 'system.adapter.javascript.' + instance; class VirtualMultiSwitch { constructor (idVirtualSwitch='',msDelay=100) { this.aPowr = new Array(); // zu schaltende Aktoren this.aNorm = new Array(); // normale Schalter this.aInvt = new Array(); // zu invertierende Schalter this.aBttn = new Array(); // auslösende Tatser this.VirtS = idVirtualSwitch; this.Counter = 0; this.Delay = msDelay; } incS() { this.Counter +=1; } decS() { this.Counter -=1; } addP(Name){ this.aPowr = this.aPowr.concat(Name); } addN(Name){ this.aNorm = this.aNorm.concat(Name); } addI(Name){ this.aInvt = this.aInvt.concat(Name); } addB(Name){ this.aBttn = this.aBttn.concat(Name); } doSwitchPhysical(obj){ if (this.Counter <= 1){ this.Counter +=1; setState(this.VirtS,(this.aBttn.indexOf(obj.id )>=0 ? !getState(this.VirtS).val : this.aNorm.indexOf(obj.id)>=0 ? obj.state.val : !obj.state.val)); setTimeout(()=>this.decS(), this.Delay); } } doSwitchVirtual(obj){ if (this.Counter <= 1){ this.Counter +=1; this.aNorm.forEach(function (TargetId,idx) {setState(TargetId, obj.state.val);}); this.aInvt.forEach(function (TargetId,idx) {setState(TargetId, !obj.state.val);}); this.aPowr.forEach(function (TargetId,idx) {setState(TargetId, obj.state.val);}); setTimeout(()=>this.decS(), this.Delay); } } Start() { on ({id:this.aNorm, change:"ne", ack: true , fromNe: js}, (obj) =>this.doSwitchPhysical(obj)); on ({id:this.aInvt, change:"ne", ack: true , fromNe: js}, (obj) =>this.doSwitchPhysical(obj)); on ({id:this.aBttn, change:"ne", ack: true , fromNe: js}, (obj) =>this.doSwitchPhysical(obj)); on ({id:this.VirtS, change:"ne" }, (obj) =>this.doSwitchVirtual(obj)); } Stop() { unsubscribe(this.aNorm); unsubscribe(this.aInvt); unsubscribe(this.aBttn); unsubscribe(this.VirtS); } } // WechselSchalter01: var WS01 = new VirtualMultiSwitch('javascript.0.virtualDevice.Schalter.Eins.POWER'); WS01.addP('sonoff.0.Shelly01.Switch.Power' ); // z.B. ein Shelly 1, der die eigentliche Lampe schaltet WS01.addN('hm-rega.0.1111' ); // HomeMatic, realisiert mit CCU-Systemvariable, // die in CCU durch Funkschalter getoggelt wird // und in ioBroker als "hmRega.0.XYZ" auftaucht WS01.addI('sonoff.0.T1_Touch_01.POWER1' ); // die zu invertierenden Schalter hinzufügen WS01.addB('hm-rpc.0.ABCDEFGH.1.PRESS_SHORT' ); // ein Hommatic-Funkstaster WS01.Start(); // WechselSchalter02 (ohne Kommentare viel kürzer) var WS02 = new VirtualMultiSwitch('javascript.0.virtualDevice.Schalter.Zwei.POWER'); WS02.addP('sonoff.0.Lampe02.POWER' ); WS02.addN('hm-rega.0.2222' ); WS02.addI('sonoff.0.T1_Touch_03.POWER2' ); WS02.Start(); // WechselSchalter03 - schaltet eine ganze Reihe von Aktoren (=Szene) var WS03 = new VirtualMultiSwitch('javascript.0.virtualDevice.Schalter.Drei.POWER'); WS03.addP('sonoff.0.S4Pro_01.POWER1' ); WS03.addP('sonoff.0.S4Pro_01.POWER2' ); WS03.addP('sonoff.0.S4Pro_01.POWER3' ); WS03.addP('sonoff.0.S4Pro_02.POWER1' ); WS03.addP('sonoff.0.XYZ.POWER' ); WS03.addP('javascript.0.virtualDevice.Schalter.Eins.POWER'); // ja, auch der 1. Virtuelle Schalter wird mitgeschaltet WS03.addN('hm-rega.0.3333' ); // dafür nur ein auslösender Schalter ... WS03.Start(); Danke allen Inspirateuren ( insbesondere @Asgothian & @paul53 )!
  • Gelöst: Datenpunkte kopieren

    3
    0 Votes
    3 Posts
    579 Views
    B
    Hey Danke! Das hat geholfen. Falls es jemand mal benötigt (ja es ist sicherlich nicht das Optimum, aber es hat mir gereicht :grin: ) : // Alle Beleuchtungsvariablen aus MODBUS-ADAPTER für Javascript erstellen //copyObjects('modbus.0.coils','javascript.0.variablen.beleuchtung'); // kopiert alle Datenpunktnamen eines Quellordners in einen Zielordner (mit Änderung des Types usw.) function copyObjects(source, destination){ var cacheSelector = $('state[id=' + source + '.*]'); cacheSelector.each(function(obj, i) { createState(destination + '.' + obj.replace(source + '.', ''), { name: getObject(obj).common.name, desc: '', type: 'boolean', role: 'switch', read: true, write: true, def: false } ); }); } Grüße Stephan
  • [gelöst] Online Zeit per TR-064 berechnen und anzeigen

    blockly
    23
    0 Votes
    23 Posts
    4k Views
    NegaleinN
    @paul53 sagte in [gelöst] Online Zeit per TR-064 berechnen und anzeigen: @Negalein sagte: DP wird nicht angelegt. Ist im Skript auch nicht vorgesehen. Lege ihn manuell im Reiter "Objekte" an: javascript.0 selektieren und Datenpunkt hinzufügen, Name: uptime.online-router, Typ: Zeichenkette Danke, funktioniert! Ich seh zwar nur wielange die Fritz mit dem Postrouter verbunden ist, aber das sind die Nachteile wenn mann vom Anbieter keinen vernünftigen Router bekommt und man was gescheites dahinter hängen muss.
  • [gelöst]js-typeof-befehl - was ist falsch daran?

    javascript
    5
    1
    0 Votes
    5 Posts
    270 Views
    liv-in-skyL
    @AlCalzone habe es mal so versucht - jetzt scheint es zu gehen - habe abfragen getrennt var cacheSelectorState = $('state[state.id=controll-own.0.*]'); cacheSelectorState.each(function (id, i) { var val1 = getState(id).val; if (val1 == null ) {log(id + " hat keinen state");} else {var zk = "setState('"+id+"', "+val1 +");\n"; /* if(typeof val1 === "string" ) {*/ /*if( val1.indexOf('bespiel') == -1 && val1.indexOf('class') == -1) { && ! val1.includes('beispiel') && ! val1.includes('class') */ if( typeof val1 === "string") { zk = "setState('"+id+"', '"+val1+"');\n"; log(id + " -- " + val1 + " ----------- " + val1.includes('span')); if (val1.includes('span') || val1.includes('class')) {log("------------------------------------------------------------- span oder classn enthalten "+ id);} else { fs.appendFileSync(datei + "-controll-own0-" + logdate + "-"+ logtime + ".txt", zk);}} else { log("KEIN STRING " +id + " -- " + val1); fs.appendFileSync(datei + "-controll-own0-" + logdate + "-"+ logtime + ".txt", zk);} }; }); irgendwie habe ich da was falsches gemacht? f(typeof val1 === "string" && !val1.includes('span') && !val1.includes('class')
  • Best practise für Javascript

    5
    0 Votes
    5 Posts
    576 Views
    I
    Hi @paul53 said in Best practise für Javascript: RegExp für val: im Trigger funktioniert ? Leider nicht. Sehr schade eigentlich. Aber zumindest sind meine Skripte jetzt viel übersichtlicher. Gruß Arne
  • [gelöst] You are assigning a undefined to the

    javascript
    11
    2
    0 Votes
    11 Posts
    595 Views
    S
    @paul53 Hallo Paul, meine Frau fragt gerade ob Du eigentlich manchmal denkst was für Vollpfosten hier fragen ....:joy: Ich war eben noch am schreiben als Deine Antwort kam, und wollte Dich fragen ob es sowas wie Untervariablen in Javascript gibt. Ich hatte mir die Daten nochmal mit der http Adresse angesehen und da ist mir auch aufgefallen das Volume in der "root" ist, artist oder stationName aber nicht... Geht. Vielen lieben Dank.
  • [gelöst] mehrere Bedingungen

    Solved
    13
    0 Votes
    13 Posts
    442 Views
    S
    @paul53 on(/^javascript\.0\.sonos\.(stlauter|stleiser|wlauter|wleiser)$/, function(obj) { funktioniert perfekt. Vielen lieben Dank. Frag mich immer wieder wer sich so Schreibweisen ausgedacht hat, und wer sich das alles merken soll. :grimacing:
  • Frage zu Telegram Buttons

    Solved javascript
    6
    0 Votes
    6 Posts
    990 Views
    M
    danke für eure hilfe. habs nun doch mit blockly gelöst. infos dazu habe ich auch hier gefunden: https://www.youtube.com/watch?v=oPOxA8sTCxU

557

Online

32.6k

Users

81.9k

Topics

1.3m

Posts