Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.8k Beiträge

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    M
    @maxclaudi Hey, danke für Deine schnelle Antwort trotz Zeitmangels. Gerne etwas ausführlicher wenn mehr Zeit ist. Das 30min Intervall bestätigt sich. Wenn ich es richtig verstehe vermutest Du einen Temp-Schutzmechansimus? Dafür ist die Temp doch eigentlich nicht hoch genug. Bei den Batterien ist diese unter 30°. Die Spannung ist bei mir auch bei 3,3xV [image: 1786034104836-58dd895f-c947-45d3-86e8-101e117a87aa-image.jpeg] Zum Zeitpunkt des Screenshots zeigt er einen SoC von 85% an
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    W
    @paul53 Bombe! Vielen Dank! Gleich die erste Version passt perfekt. Möchte nur um 11 Uhr entscheiden ob es sinnvoll ist die Klima einzuschalten. Brauch das nur im Sommer, drum interessiert Winterzeit nicht. Vielen Dank Dir
  • Hilfe für Skripterstellung mit Node-RED

    963 13k
    963 Themen
    13k Beiträge
    A
    @Marc-Berg sagte: @ak68 sagte: Wie kann ich den Adapter manuell updaten ? Gar nicht, du müsstest warten, bis der Adapter hochgezogen wird. Alternativ den sun-position Node downgraden, oder benötigst du das Update fachlich? Danke, habe jetzt down-gegraded :(
  • Rolladen Script für Javascript Adapter

    Verschoben
    17
    0 Stimmen
    17 Beiträge
    4k Aufrufe
    smartboartS
    so hier nun das fertige Script mit allen Schnick Schnack und den verschiedensten Fahrprogrammen und Bedingungen.. Etwas aufgeräumt und optimiert.. //Rolladen Script //States für Manuell und Automatik Vorwahl in Vis createState('javascript.0.Rolladen.Gesamt.EGAutomatik', {def: 'false', type: 'boolean', name: 'Rolladen Gesamt EG Automatik aktivieren'}); createState('javascript.0.Rolladen.Couch.Automatik', {def: 'false', type: 'boolean', name: 'Rolladen Couch Automatik aktivieren'}); const id1 = 'wiffi-wz.0.root.192_168_xx_XX.w_windstaerke'; //Sturm const id2 = 'hm-rpc.0.PEQ03xxxxxx.1.BRIGHTNESS'; //Helligkeit const id3 = 'wiffi-wz.0.root.192_168_xx_xx.w_sonne_scheint'; //Sonne const id4 = 'javascript.0.Status.Brandmelder.Anzahl_melden_Brand'; //Brand const id5 = 'javascript.0.alarm.out.alarm_intern'; //Alarmanlage const id6 = 'wiffi-wz.0.root.192_168_xx_xx.w_rain_status'; //Regen const id7 = 'javascript.0.Anwesenheitssteuerung.BewohnerAnwesend'; //Anwesend const idRolloCouch = 'hm-rpc.0.OEQ12xxxxxx.1.LEVEL'; //Rolladen Couch function Rolladen() { console.log('Rolladen Couch trigger aktiv '); var Sturm = getState ('wiffi-wz.0.root.192_168_xx_xxx.w_windstaerke').val; var Alarm = getState('javascript.0.alarm.out.alarm_intern').val; var Brand = getState ('javascript.0.Status.Brandmelder.Anzahl_melden_Brand').val; var ZeitfensterMorgen = getState ('javascript.0.Rolladen.ZeitfensterMorgen').val; var ZeitfensterAbend = getState ('javascript.0.Rolladen.ZeitfensterAbend').val; var Helligkeit = getState ('hm-rpc.0.PEQ039xxxxx.1.BRIGHTNESS').val; var AussenTemp = getState ('wiffi-wz.0.root.192_168_xx_xx.w_temperature').val; var Regen = getState ('wiffi-wz.0.root.192_168_xx_xx.w_rain_status').val; var BehanghoeheCouch = getState('hm-rpc.0.OEQ129xxxxx.1.LEVEL').val; var AutomatikEG = getState('javascript.0.Rolladen.Gesamt.EGAutomatik').val; var AutomatikCouch = getState('javascript.0.Rolladen.Couch.Automatik').val; var Sonne = getState('wiffi-wz.0.root.192_168_xxx_xx.w_sonne_scheint').val; var FensterCouchRechts = getState('hm-rpc.0.OEQ1434xxxx.1.STATE').val; var FensterCouchMitte = getState('hm-rpc.0.OEQ143xxxx.1.STATE').val; var FensterCouchLinks = getState('hm-rpc.0.OEQ1197xxxx.1.STATE').val; var Anwesend = getState('javascript.0.Anwesenheitssteuerung.BewohnerAnwesend').val; // Rollos hoch if (( Brand >= 1 || Alarm === true) || (ZeitfensterMorgen === true && Helligkeit >= 40 && BehanghoeheCouch <= 95 && AutomatikEG === true && AutomatikCouch === true)) { setStateDelayed(idRolloCouch, 100, 1800);//zeitverzögerung Addition pro Rolladen um 600ms if(idRolloCouch, 100); console.log('Rolladen Couch offen'); }else{ //Rollo runter if ((ZeitfensterAbend === true && FensterCouchRechts === false && FensterCouchMitte === false && FensterCouchLinks === false && Helligkeit <= 10 && BehanghoeheCouch >= 20 && AutomatikEG === true && AutomatikCouch === true && Brand === 0 && Alarm === false) || ( Sturm >= 6 && BehanghoeheCouch >=0 && Brand === 0 && Alarm === false) || ((Regen === true || Anwesend ===false ) && (FensterCouchRechts === true || FensterCouchLinks === true || FensterCouchMitte === true ) && BehanghoeheCouch >= 0 && Brand === 0 && Alarm === false )) { setStateDelayed(idRolloCouch, 0, 1800); if(idRolloCouch, 0); console.log('Rolladen Couch geschlossen'); }else{ // Rollor runter auf 50 % Sicht wegen Sonne und Temp if (isTimeInRange('13:00:00', '19:30:00') && Sonne === true && BehanghoeheCouch >= 55 && AutomatikEG === true && AutomatikCouch === true && Brand === 0 && Alarm === false && Aussentemp >= 26) { setStateDelayed(idRolloCouch, 50, 1800); if(idRolloCouch, 50); console.log('Rolladen Couch wegen Sonne und hoher Temp. auf 50% Sicht gefahren '); } } } } Rolladen(); // Skriptstart on(id1, function(dp) { Sturm = dp.state.val; Rolladen(); }); on(id2, function(dp) { Helligkeit = dp.state.val; Rolladen(); }); on(id3, function(dp) { Sonne = dp.state.val; Rolladen(); }); on(id4, function(dp) { Brand = dp.state.val; Rolladen(); }); on(id5, function(dp) { Alarm = dp.state.val; Rolladen(); }); on(id6, function(dp) { Regen = dp.state.val; Rolladen(); }); on(id7, function(dp) { Anwesend = dp.state.val; Rolladen(); });
  • Aktor per URL schalten - ioBroker

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    981 Aufrufe
    M
    Hallo! ich habe da gerade in einem Projekt die WebIO Anbindung gebaut. Die aktuelle Version kann auch alle Eingänge nebst Counter. Schalten via Datenpunkt, IOB Standard. Vielleicht interessant für dich: viewtopic.php?f=35&t=16580&p=173977&hilit=webio#p173977 Bei Bedarf aktualisiere ich das Script, im Moment kann das im Thread nur Ausgänge. Malc
  • Button Press CUXD Device(CCU2)

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    911 Aufrufe
    J
    Das Gerät (28) kann man nicht als Schalter erstellen. Dieses Gerät ist als "exec", "timer", "multi-dim-exec" und "ping" möglich. Wenn das Gerät als "exec" konfiguriert wurde ist es im Prinzip ein 16-fach-Taster. Der Datenpunkt "State" ist zwar vorhanden, aber kann nicht wie von Dir gewünscht einfach über die WebUI oder App gesetzt werden. Dazu wäre dann wiederum ein Skriptbefehl nötig. Was Du benötigst ist ein Schalter, also ein Gerät das den Status ein/aus annehmen kann und auch so bedient wird. Dazu benötigst Du das Gerät (40) konfiguriert als Schalter (NICHT als Taster). Hiermit kann dann über die WebUI/App der Status ein/aus gesetzt werden. Abgefragt werden muss dann aber der Datenpunkt "state" true/ein und false/aus. Du lagst also von Anfang an richtig mit der Auswahl des Gerätes und hast nur den falschen Datenpunkt abgefragt. Hättest Du gleich genau beschrieben worum es geht und was genau für ein Gerät/Zustand benötigt wird wäre bereits in der ersten Antwort die Lösung enthalten gewesen. Hier mal der Code "wenn Schalter ein, dann Meldung": on({id: "hm-rpc.2.CUX4000002.1.STATE"/*HM-RC-19 CUX4000002:1.STATE*/, change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; console.log('Der Schalter ist eingeschaltet'); });
  • Sql.0 abfrage

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    703 Aufrufe
    apollon77A
    Nimm ein Array oder Objekt und füge alle antworten rein. Also mit nem Array ein werte.push(result.result); Und werte ist eine globale Variable. Und am besten hierhin ein check wenn die Länge des werte Arrays so lang wie die Anzahl der datenpunkte ist dann gleichbedeutend „Nachbearbeitung“ machen Gesendet vom Handy …
  • [Erledigt] Datum Monat in ausgeschriebener Form

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    576 Aufrufe
    Z
    Danke für den Tipp, habe noch nie mit Arrays gearbeitet, aber es funktioniert. Habe es so gelöst //VorMonat als Namen Date.prototype.getFullMonth = function () { return (["Dezember", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November"])[this.getMonth()]; }; var d = new Date() , vorMonatName = d.getFullMonth(); console.log(vorMonatName); Gruß Zippolighter
  • Wand- und Heizungsthermostat - komme nicht weiter

    Verschoben
    21
    0 Stimmen
    21 Beiträge
    3k Aufrufe
    A
    lieben Dank für die Mühe, welche du dir für mich gemacht hast! sind fast exakt meine Settings was habe ich jetzt versucht: script abgeschaltet um als Fehlerquelle auszuschließen webUI, Gruppe -> bedienen -> Temp geändert -> alle drei bekommen Temperatur gesetzt webUI, Raum -> Wandthermostat Temp geändert -> die anderen zwei reagieren nicht irgendwas tut hier quer, da aber die Settings bei dir gleich sind bin ich langsam am verzweifeln
  • Anbindung eines Devices mittels Polling

    Verschoben
    1
    1
    0 Stimmen
    1 Beiträge
    277 Aufrufe
    Niemand hat geantwortet
  • [Erledigt] Hilfe IF zum Zahlen Vergleich

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    617 Aufrufe
    Z
    Nachdem ich dann endlich auf Euch gehört habe, funktioniert es natürlich auch. Danke für die Hilfe
  • 0 Stimmen
    2 Beiträge
    1k Aufrufe
    BuZZyB
    Im Abschnitt "Listen" wirst du fündig. :) [image: 3092_screenshot_-_31.08.2018___13_05_40.png] Gruß
  • Problem mit CRONJOB

    Verschoben
    3
    3
    0 Stimmen
    3 Beiträge
    573 Aufrufe
    M
    Hallo, vielen dank. Ich habe herausgefunden was diesen Port belegt. Ich habe eine Instanz vom Homematic Manager laufen. Ich habe den jetzt mal gestoppt und die Skripte für die Zeitschaltuhren neu gestartet. Mal schauen, ob sich die Skripte jetzt wieder aufhängen. Grüße Markus
  • Skript Fehler Unterstüzung

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    212 Aufrufe
    Niemand hat geantwortet
  • Boolean Verknüpfung

    Verschoben
    20
    1
    0 Stimmen
    20 Beiträge
    4k Aufrufe
    R
    Nicht schön, aber auf die Schnelle fällt mir auch nur eine eigene Funktion ein. //splitte string in int-Array let aI = msg.payload.match(/.{1,2}(?=(.{2})+(?!.))|.{1,2}$/g) //split in 2stellige strings .map(x => parseInt(x,16)); //konvertiere HEX strings nach Integer //xor vom inputArray let mustXor = aI[aI.length-1]; //xor aus inputArry entfernen aI.splice(-1, 1); //xor aus inputaary bilden let ifXor = aI.reduce((v, vnext) => v ^ vnext); let fix2 = (x) => ('0'+x).slice(-2); // einstelligen String mit führender Null if (ifXor == mustXor) { //no error node.status({fill:"green",shape:"dot",text:'no error'}) node.send([{payload: fix2(aI[0].toString(16))}, {payload: fix2(aI[1].toString(16))}, {payload: fix2(aI[2].toString(16))}, {payload: fix2(aI[3].toString(16))}, {payload: fix2(aI[4].toString(16))}, {payload: fix2(aI[5].toString(16))}, {payload: fix2(aI[6].toString(16))}, {payload: fix2(mustXor.toString(16))}]); } else { //xor error node.status({fill:"red",shape:"dot",text:'XOR error'}) node.send([null,null,null,null,null,null,null,{payload: 'XOR error'}]); } Jetzt wird an allen Ausgängen ein 2stelliger String ausgegeben. Edit: geht auch etwas kürzer s.o. und diesmal ohne Copy/Paste Fehler –hoffe ich ;-)
  • Script - mihome vacuum - reset all comsumables - hilfe benötigt

    Verschoben
    2
    4
    0 Stimmen
    2 Beiträge
    271 Aufrufe
    L
    @ltsalvatore: Hallo zusammen, Ich habe mir ein Script zusammengestellt, welches dafür gedacht ist, in meinem VIS beim drücken des entsprechenden buttons alle consumables des mihome vaccum auf einmal zu resetten. damit das ganze über ein button gesteuert werden kann, habe ich extra ein objekt im iobroker angelegt. vielleicht geht das ganze ja auch mit nem passenden widget, habe ich aber nicht gefunden. wie dem auch sein, das hat mit dem script soweit auch funktioniert gehabt. jedoch habe ich gestern per zufall festgestellt, dass ich dieses script ohne trigger erstellt habe, und somit das script dauerhaft ausgeführt wurde. entsprechend sind die consumable werte permanent auf 100% gesetzt. mit dem davor gesetzten trigger ist es jetzt so, dass die werte einfach nicht auf 100% zurückgesetzt werden und ich einfach nicht verstehe, woran das liegen könnte… habe alles schon 1000 mal durchgeschaut. auf dem bild seht ihr, welche werte gemeint sind: Screenshot_2018.08.17_15_34_34_001.jpg hier ist das script dazu: Screenshot_2018.08.17_15_34_07_001.jpg hier das extra dafür angelegte objekt Screenshot_2018.08.17_15_31_00_001.jpg und im vis sieht das ganze dann so aus: Screenshot_2018.08.17_15_57_10_001.jpg ich hoffe ihr könnt mir da weiter helfen. danke und gruß ` hallo zusammen.. ich habe mich heute nochmal dem thema gewidmet und per zufall festgestellt, dass es scheinbar einen unterschied macht, ob man im widget (jqui Radiobuttons ValueList) den wert auf "true" oder "1" setzt. steuere ich objekte, welche bereits existieren/vom adapter erstellt wurden an, dann muss der wert "true" lauten. bei selbst erstellten objekten über den javascript adapter, muss man scheinbar anstatt "true" den wert "1" im widget setzen. nachdem ich im widget den wert auf "1" gesetzt hatte, funktioniert mein button im vis einwandfrei und es werden alle vier status über den extra dafür erstellten script resettet.
  • [gelöst]Probleme mit Skript

    Verschoben
    14
    1
    0 Stimmen
    14 Beiträge
    1k Aufrufe
    paul53P
    @woehrer: Es funktioniert so wie es soll. ` Dann markiere bitte das Thema im Betreff des ersten Beitrags als [gelöst].
  • Mediatasten mit rpi-keyboard node

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    790 Aufrufe
    T
    so hab es jetzt selbst hin bekommen mit node-red-contrib-usbhid. Hier für alle die es interessiert noch den Flow [ { "id": "b64f12a4.82f57", "type": "ioBroker out", "z": "b9b83901.0efa78", "name": "Tasten druck", "topic": "Tasten_druck", "ack": "true", "autoCreate": "true", "x": 1210, "y": 600, "wires": [] }, { "id": "65258308.49279c", "type": "rpi-keyboard", "z": "b9b83901.0efa78", "name": "", "x": 790, "y": 580, "wires": [ [ "c8a0770f.28c178" ] ] }, { "id": "5ab4c722.7dbe88", "type": "HIDdevice", "z": "b9b83901.0efa78", "connection": "4fbd6b73.15efb4", "name": "Fernbedienung", "x": 240, "y": 640, "wires": [ [ "a92ab222.942b5" ], [] ] }, { "id": "a92ab222.942b5", "type": "function", "z": "b9b83901.0efa78", "name": "Select ip Part 1", "func": "msg.payload = msg.payload[1];\nreturn msg;", "outputs": 1, "noerr": 0, "x": 420, "y": 640, "wires": [ [ "73cff708.3d01a8" ] ] }, { "id": "73cff708.3d01a8", "type": "switch", "z": "b9b83901.0efa78", "name": "Alles über 0", "property": "payload", "propertyType": "msg", "rules": [ { "t": "gt", "v": "0", "vt": "num" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 590, "y": 640, "wires": [ [ "3ace679a.a3a588" ] ] }, { "id": "3ace679a.a3a588", "type": "function", "z": "b9b83901.0efa78", "name": " + 1000", "func": "msg.payload = (msg.payload + 1000);\nreturn msg;", "outputs": 1, "noerr": 0, "x": 750, "y": 640, "wires": [ [ "c8a0770f.28c178" ] ] }, { "id": "c8a0770f.28c178", "type": "deduplicate", "z": "b9b83901.0efa78", "name": "nur einmal", "keyproperty": "", "expiry": "1", "x": 990, "y": 600, "wires": [ [ "b64f12a4.82f57" ], [] ] }, { "id": "4fbd6b73.15efb4", "type": "HIDConfig", "z": "", "vid": "8985", "pid": "16", "name": "Mx3" } ] [image: 2538_flow.jpg]
  • Vorlage zur Steuerung einer Bewässerungsanlage und Abfrage Wetterdienst (Blockly)

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    2k Aufrufe
    T
    So ich hab noch mal geschaut. Es sollten diese sein http://www.gevax.com/urun.php?id=686&re … -250-220AC
  • Alarmanlage + Sprachausgabe mit Alexa2-Adapter führt zu Freeze

    Verschoben
    5
    1
    0 Stimmen
    5 Beiträge
    943 Aufrufe
    L
    Ich habe gerade mal ein ähnliches Blockly kreiert - Anruferansage. Meins läuft so weit - da absoluter Anfänger, arbeite ich mich immer langsam hoch in Blockly, bzw. baue auch Debug Bausteine fürs Log zum Testen mit ein… gibt Einem dann im Falle des Falles auch eine Übersicht wo es vielleicht hängt... [image: 2257_alexa_anruferansage.jpg] javascript.0 2018-08-29 22:52:34.156 info script.js.common.Alexa_Anruferansage: Stop zyklische Anruferansage javascript.0 2018-08-29 22:52:34.156 info script.js.common.Alexa_Anruferansage: Alexa "Ansage: hat aufgelegt, oder spricht nun auf Band" javascript.0 2018-08-29 22:52:34.155 info script.js.common.Alexa_Anruferansage: Anruferansage Alexa javascript.0 2018-08-29 22:52:31.152 info script.js.common.Alexa_Anruferansage: Anruferansage Alexa javascript.0 2018-08-29 22:52:28.151 info script.js.common.Alexa_Anruferansage: Anruferansage Alexa javascript.0 2018-08-29 22:52:25.149 info script.js.common.Alexa_Anruferansage: Anruferansage Alexa javascript.0 2018-08-29 22:52:22.147 info script.js.common.Alexa_Anruferansage: Anruferansage Alexa javascript.0 2018-08-29 22:52:19.146 info script.js.common.Alexa_Anruferansage: Steuerung Lautstärke auf 100% javascript.0 2018-08-29 22:52:19.145 info script.js.common.Alexa_Anruferansage: Anruf Eingangsuhrzeit
  • Lampe (z.B. Hue) über Zeitraum dimmen - Blockly

    Verschoben
    17
    1
    0 Stimmen
    17 Beiträge
    10k Aufrufe
    A
    Super. Danke! Ich habe meinen o.g. Command getestet und als Reaktion auf einen trigger an die Lampe gesendet. Sie hat aber nicht reagiert. Muss ich zusätzlich noch den "put" Befehl geben? Wie? Gesendet von iPhone mit Tapatalk
  • [Gelöst] obj.newState.ts -> suche den "generellen" TimeStamp

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    302 Aufrufe
    M
    Ich war blind, hatte doch schon die Lösung. Nur im Source nen Tippfehler.
  • Blocky neuen Datenpunkt setzen

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    529 Aufrufe
    A
    8-) :idea:

375

Online

33.0k

Benutzer

83.5k

Themen

1.3m

Beiträge