Weiter zum Inhalt

JavaScript

2.5k Themen 49.2k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • Datenpunktlisten zusammenfassen

    4
    0 Stimmen
    4 Beiträge
    144 Aufrufe
    paul53P
    @wolfgangfb sagte: Ist Sensors quasi ein Array von Objekten während ids "nur" ein Array von Objektnamen ist? Sensors ist ein Objekt mit den Attributen 0, 1, ... , die IDs enthalten und dann am Ende length. ids ist ein Array von Datenpunkt-IDs und kann die IDs von Sensors und Switches enthalten.
  • Telegram Skript Anfängerproblem

    1
    0 Stimmen
    1 Beiträge
    195 Aufrufe
    Niemand hat geantwortet
  • Skript - Error Handling

    42
    0 Stimmen
    42 Beiträge
    3k Aufrufe
    HomoranH
    @andreas-5 sagte in Skript - Error Handling: ich war immer davon ausgegangen, dass das bei Bedarf von den anderen Scripten aufgerufen wird globale Skripte werden vor jedem Skript ausgeführt, nich bei "Bedarf" aufgerufen
  • SetTimeout Restlaufzeit anzeigen?

    5
    0 Stimmen
    5 Beiträge
    465 Aufrufe
    paul53P
    @oliverio sagte: könnten sich da mit der Zeit Differenzen aufsummieren. So lang sollte auch ein setTimeout() nicht dauern, dass die Abweichungen ins Gewicht fallen.
  • Licht vergessen funktioniert nicht mehr korrekt

    11
    0 Stimmen
    11 Beiträge
    788 Aufrufe
    F
    @paul53 said in Licht vergessen funktioniert nicht mehr korrekt: @fuchs1978 sagte: Mache ich das nicht? Ich habe ja die Trigger mit Val unterschieden. Nein. Wenn ein zweiter Trigger mit val: false kommt ohne vorherige Wertänderung? Also dort noch eine Abfrage rein If Timer und damit nicht auf zwei reagieren
  • Datenpunkt kürzen - einzeilige Lösung gesucht

    5
    0 Stimmen
    5 Beiträge
    393 Aufrufe
    haus-automatisierungH
    @wolfgangfb sagte in Datenpunkt kürzen - einzeilige Lösung gesucht: Hast Du vielleicht auch für diese Funktion einen Einzeiler für mich? Wenn Du selbst besser werden möchtest, schau Dir mal https://www.codewars.com/ an. Finde ich ein ziemlich cooles Projekt um etwas dazu zu lernen.
  • Wie bekommt man Änderung mit on function und Array mit?

    9
    0 Stimmen
    9 Beiträge
    407 Aufrufe
    M
    @paul53 Dann war bei mir irgendetwas nicht ok. Nach Neustart funktioniert es. Danke.
  • Wie in Vis einbinden?

    3
    0 Stimmen
    3 Beiträge
    474 Aufrufe
    M
    @chrunchy Danke dir, hat sofort geklappt!
  • Javascript Werte addieren

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    726 Aufrufe
    AndreiosA
    @hagst sagte in Javascript Werte addieren: Danke für Deine Antwort. @andreas-5 sagte in Javascript Werte addieren: Ergebnis = shelly.0.SHEM-3#C45BBE6BD432#1.Total.ConsumedPower - 9036,2 + 1000100 Das Problem dabei ist jetzt, dass ich zwar als Ergebnis 1009036,20 raus habe. Ist aber sehr unübersichtlich in VIS. Kann man das nicht mit javascript umrechnen lassen, dass als Ergebnis 1009,0362 rauskommt, also das Komma verschieben? Na, dsas Ergebnis durch 1000 teilen oder gleich den anderen Weg nehmen, solltest Du aber eigentlich selber können! Ergebnis = shelly.0.SHEM-3#C45BBE6BD432#1.Total.ConsumedPower / 1000 - 9,0362 + 1000,100
  • Array mit Namen als Index

    16
    0 Stimmen
    16 Beiträge
    717 Aufrufe
    SKBS
    @oliverio Danke, aber das Map mag' ich nicht so :)
  • mqtt Payload von TNN zu IOBroker decoden

    8
    1
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    mickymM
    @flehmann1234 sagte in mqtt Payload von TNN zu IOBroker decoden: @mickym danke für den Hinweis, schaue ich mir mal in Ruhe an. Kein Problem - kam durch Dich auf die Idee - meine Node noch zu erweitern, damit ist sie noch universeller nutzbar und man kann damit automatisiert ganze Objektbäume erstellen. ;) Und wenn Du mit Deiner Lösung zufrieden bist, dann ist ja alles gut. :)
  • [gelöst] TR-064 Telefonbuch auslesen

    javascript
    18
    0 Stimmen
    18 Beiträge
    2k Aufrufe
    J
    @d3ltoroxp Hi zusammen, sorry, ich lese hier nicht regelmäßig mit. Hier nochmal das aktuelle Script für den JavaScript-Adapter. Wichtig ist, das der TR-064-Adapter installiert ist. Dann sollte direkt über tr-064.0.states.command das GetPhonebookList abgerufen werden: var xml2js = require('xml2js'); /*var vCardsJS = require('vcards-js');*/ var options = { explicitArray: false, mergeAttrs: true }; var xml2jsParser = new xml2js.Parser(options); var phonebook = JSON.parse("[]"); var phonebookVCard = ""; var phonebookListDetail = JSON.parse("[]"); createState('javascript.0.FritzBox.phonebook' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' }, function() { setState ('javascript.0.FritzBox.phonebook', ''); }); createState('javascript.0.FritzBox.phonebookList' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state'}, function() { setState ('javascript.0.FritzBox.phonebookList', ''); }); createState('javascript.0.FritzBox.phonebookListDetail' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state'}, function() { setState ('javascript.0.FritzBox.phonebookListDetail', ''); }); createState('javascript.0.FritzBox.phonebookSelected' , {'name':'Status', 'type':'number', 'read':true, 'write':true, 'role':'state', 'def':0 }, function() { setState ('javascript.0.FritzBox.phonebookSelected', 0); }); createState('javascript.0.FritzBox.phonebookVCard' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' }, function() { setState ('javascript.0.FritzBox.phonebookVCard', ''); }); on({ id: "javascript.0.FritzBox.phonebookList" } , function (obj) { //console.log(obj.state.val); if (obj.state.val){ JSON.parse(obj.state.val).NewPhonebookList.split(/\s*,\s*/).forEach(function(myString) { setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebook","params": {"NewPhonebookID":'+Number(myString)+'}}'); }); } }); on({ id: "javascript.0.FritzBox.phonebookSelected" } , function (obj) { phonebook = JSON.parse("[]"); phonebookVCard = ""; for (let i = 0; i < 1000; i++) { setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookEntry","params": {"NewPhonebookID":'+obj.state.val+', "NewPhonebookEntryID" : '+ i +' }}'); //console.log('{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookEntry","params": {"NewPhonebookID":'+obj.state.val+', "NewPhonebookEntryID" : '+ i +' }}'); } //console.log("getPhonebook ID "+obj.state.val+" completed"); }); on({ id: "tr-064.0.states.commandResult" } , function (obj) { var commRes = JSON.parse(getState('tr-064.0.states.commandResult').val); switch (true){ case commRes.hasOwnProperty('NewPhonebookEntryData'): { //console.log(JSON.stringify(commRes)); var res = commRes.NewPhonebookEntryData; xml2jsParser.parseString(res, function (err, result) { let foundIt = phonebook.find(el => el.contact.uniqueid === result.contact.uniqueid); if (foundIt ){ //console.log(foundIt); }else{ phonebook.push(result); /*fill vcard var vCard = vCardsJS(); vCard.firstName = result.contact.person.realName; for (let j=0; j < result.contact.telephony.number.length;j++){ result.contact.telephony.number[j]._ switch (result.contact.telephony.number[j].type){ case 'work': if( vCard.workPhone.length >0 ){ }else{ vCard.workPhone = result.contact.telephony.number[j]._; } break; case 'home': if( vCard.homePhone.length >0 ){ }else{ vCard.homePhone = result.contact.telephony.number[j]._; } break; case 'mobile': if( vCard.cellPhone.length >0 ){ }else{ vCard.cellPhone = result.contact.telephony.number[j]._; } break; } } phonebookVCard += '\n'+vCard.getFormattedString(); setState ('javascript.0.FritzBox.phonebookVCard', JSON.stringify(phonebookVCard)); */ } }); // sort by name phonebook.sort(function(a, b) { var nameA = a.contact.person.realName.toUpperCase(); // ignore upper and lowercase var nameB = b.contact.person.realName.toUpperCase(); // ignore upper and lowercase if (nameA < nameB) { return -1; } if (nameA > nameB) { return 1; } // names must be equal return 0; }); setState ('javascript.0.FritzBox.phonebook', JSON.stringify(phonebook)); break; } case commRes.hasOwnProperty('NewPhonebookList'): { setState ('javascript.0.FritzBox.phonebookList', JSON.stringify(commRes)); break; } case commRes.hasOwnProperty('NewPhonebookURL'): { commRes.NewPhonebookExtraID=commRes.NewPhonebookURL.substr(commRes.NewPhonebookURL.length-1); phonebookListDetail.push(commRes); setState ('javascript.0.FritzBox.phonebookListDetail', JSON.stringify(phonebookListDetail)); //console.log(JSON.stringify(commRes)); break; } } }); setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookList","params": {}}'); Die Anzeige habe ich auch etwas verändert: <style> body { background-color: #ababab; } table { border: 1px solid black; border-collapse: collapse; } th, td { border: 1px solid black; } </style> <div id="prev2"></div> <div id="prev1"></div> <script> function updateStat (btn){ var objID1 = "javascript.0.FritzBox.phonebookSelected"; this.servConn._socket.emit('setState', objID1, btn.value ); } vis.conn._socket.emit('getState', "javascript.0.FritzBox.phonebookListDetail", function (err, state) { let phonebookListDetail =JSON.parse(state.val); var phonebookID = 1; var text =""; for (var i = 0; i < phonebookListDetail.length; i+=1){ text += '<button style="width: 100%; height: 100%; text-align: left;" value=\"'+ phonebookListDetail[i].NewPhonebookExtraID +'\" onclick=updateStat(this)>'+ phonebookListDetail[i].NewPhonebookName +'</button>'; } document.getElementById("prev2").innerHTML = text; }); vis.conn._socket.emit('getState', "javascript.0.FritzBox.phonebook", function (err, state) { let phonebook =JSON.parse(state.val); var text =""; text += "<table width=100% style=\"border:1px solid black;border-collapse: collapse;\"><tr><td>Name</td><td>TelNr 1</td><td>TelNr 2</td><td>TelNr 3</td></tr>"; for (let i = 0; i < phonebook.length; i+=1) { text += "<tr>"; text += "<td>"+phonebook[i].contact.person.realName+"</td>"; //text += "</tr><tr><td>&nbsp;</td>"; var j = 0; if (phonebook[i].contact.telephony.number.length){ for (j=0;j < phonebook[i].contact.telephony.number.length;j+=1) { text += "<td>"+phonebook[i].contact.telephony.number[j]._+"</td>"; } }else { text += "<td>"+phonebook[i].contact.telephony.number._+"</td>"; j+=1; } for(j; j<3; j+=1){ text += "<td>&nbsp;</td>"; } text += "</tr>"; } text += "</table>"; document.getElementById("prev1").innerHTML = text; document.getElementById("prev").innerHTML += "<pre>"+ JSON.stringify(phonebook, null, 3) + "</pre>"; }); </script> <!-- <div style="display:none">{javascript.0.FritzBox.phonebook}</div> <div style="display:none">{javascript.0.FritzBox.phonebookListDetail}</div> --> Allerdings habe ich da seit längerem nicht viel weiter gebaut.
  • Verlorene Anzeige von Dateien im JavaScript Adapter

    13
    1
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    AndreiosA
    @herbiek sagte in Verlorene Anzeige von Dateien im JavaScript Adapter: @glasfaser Leider habe ich vergessen, den Text ins Deutsche zu übersetzen, bevor ich meinen Beitrag abschicke. Deepl.com ist mein bester Freund, lesen Deutsch funktioniert gut für mich, aber das Schreiben ist zu schwierig :-) :-) Ik kom uit de grensdriehoek (NL, B, D) en andersom voel ik dat ook zo, lezen is prima, maar spreken en schrijven zijn alleen geschikt om koffie te bestellen!
  • Hilfe bei string Formatierung

    3
    1
    0 Stimmen
    3 Beiträge
    313 Aufrufe
    fischi87F
    @mcu sagte in Hilfe bei string Formatierung: var devicename = name.substr(6, name.length-6); läuft, danke dir für die schnelle Hilfe!
  • [gelöst] Hilfe für Javascript in Blockly

    4
    0 Stimmen
    4 Beiträge
    188 Aufrufe
    Ronny GerndtR
    @kuddel 👍 Kein Problem
  • Notion Integration in ioBroker Javascript

    1
    4
    1 Stimmen
    1 Beiträge
    360 Aufrufe
    Niemand hat geantwortet
  • Somfy Tahoma kein Register "Commands"

    1
    0 Stimmen
    1 Beiträge
    168 Aufrufe
    Niemand hat geantwortet
  • CPU Auslastung des JavaScript Adapters steigt kontinuierlich

    8
    1
    0 Stimmen
    8 Beiträge
    750 Aufrufe
    OliverIOO
    @wildbill hm mir würde da schon was einfallen. du hast einen ein und Ausschalter und nur wenn der an ist, dann willst du auf bestimmte datenpunkte horchen? klar kann man das auch anders lösen, dann müsste man auf jedes Ereignis der betroffenen datenpunkte horchen und prüfen ob der ein und Ausschalter gesetzt ist. wenn da aber sehr viele Ereignisse auftreten ist es ressourcenschonender wenn man den/die trigger erst mit EIN setzt. Wenn man sorgsam ist, dann geht das schon. viele node bibliotheken sind so programmiert bspw siehe beispiel bei https://nodejs.org/api/http.html#httprequesturl-options-callback dort wird async der request eröffnet (1.trigger) und danach hörst du optional auf weitere trigger/events (data,error,end,etc) daher musst du am ende auch noch end aufrufen um das alles wieder aufzuräumen. wie oben schon gesagt, weiß ich nicht wie sich das in blockly auswirkt bzw. wie man in blockly einen trigger wieder deaktiviert bzw. sorge dafür trägt, das man sich die trigger signatur merkt um sie wieder abzustellen.
  • ClearSchedule funktioniert nicht

    4
    0 Stimmen
    4 Beiträge
    205 Aufrufe
    paul53P
    @roland sagte: Hat jemand eine Idee für mich. Es können mit dem Trigger val: true mehrere Scheduler laufen. Ändere den Trigger in change: 'gt'. Besser nur einen Trigger auf Wertänderung verwenden und innerhalb des Callbacks den Wert prüfen: //Vorgarten var TimerVorgarten=null; on('hm-rpc.1.000D1D89A09811.10.STATE'/*Bewaesserung Kanal:1:10 STATE*/, function(obj) { if(obj.state.val) { // Operationen bei true } else { clearSchedule(TimerVorgarten); setStateDelayed('Bewaesserung.LaufzeitVorgarten','00:00',5000); } });
  • Octoprint-script für thumbnail des aktuellen Drucks

    javascript
    100
    2 Stimmen
    100 Beiträge
    11k Aufrufe
    NegaleinN
    @frana120500 sagte in Octoprint-script für thumbnail des aktuellen Drucks: BlocklyPlus das ist schon installiert :) da es voll auf mein System abgestimmt ist ok, kann man nix machen. Muss ich mal die Blocklys von @dslraser durchschaun.

526

Online

32.8k

Benutzer

82.7k

Themen

1.3m

Beiträge