Skip to content

Skripten / Logik

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

16.5k Themen 213.3k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    A
    @azzkikrboy Hattest du zum Monatswechsel eine Störung? Die Daten werden in der Nacht am 01. des jeweiligen Monats gelöscht, wenn das Skript läuft und nicht gerade gestoppt wurde.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    I
    @peterfido Danke! Das wäre eine weitere Alternative, wenn ich mit dem TadoAdapter am Ende scheitere. Dann würde ich den Weg gehen wollen, das ganze via Matter zu lösen. Hab oben ja schonmal kurz erwähnt, dass ich schon einen Sonoff MG25 Thread Dongle hier liegen habe. Den habe ich allerdings noch nicht geflasht und im PI eingerichtet. Wenn es nur der Batteriestatus ist der fehlt, damit könnte ich leben. Den könnte ich mir ja dann immernoch aus dem TadoAdapter nehmen, wenn ich das möchte
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • Iobroker, Wert von mysensors an CCU übergeben

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    663 Aufrufe
    paul53P
    Das Datenpunktobjekt hat eine falschen "type": "string"; es sollte "type": "number" sein. Außerdem fehlt "unit": "°C". { "common": { "name": "192_168_1_103.0.0_TEMP.V_TEMP", "type": "number", "role": "value.temperature", "min": 0, "def": 0, "read": true, "write": false, "unit": "°C" }, "native": { "ip": "192.168.1.103", "id": "0", "childId": "0", "subType": "S_TEMP", "varType": "V_TEMP", "subTypeNum": 6, "varTypeNum": 0 }, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "mysensors.0.192_168_1_103.0.0_TEMP.V_TEMP", "type": "state" } Wenn die Werte vom Typ "number" sind: setState('hm-rega.0.5237', getState('mysensors.0.192_168_1_103.0.0_TEMP.V_TEMP').val); Wenn die Werte aber vom Typ "string" sind, dann: setState('hm-rega.0.5237', parseFloat(getState('mysensors.0.192_168_1_103.0.0_TEMP.V_TEMP').val)); Den Typ kann man testen: log('Typ: ' + typeof getState('mysensors.0.192_168_1_103.0.0_TEMP.V_TEMP').val);
  • [gelöst] Briefkastenscript: Umzug von der CCU auf ioBroker

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    P
    Hi Pix! Jetzt klappt es! Hab den Arduino so umkonfiguriert das er direkt mit ioBroker spricht! Das Script hab ich auch noch etwas eingekürzt! ! ```` /* ##### Programm zum Erfassen der Briefkasteneinwürfe ########/ / #### Verfasst durch Schneider Johann (PrinzEisenherz1) #######*/ var logging = false; var instanz = 'javascript.0'; instanz = instanz + '.'; var pfad = 'Briefkasten.'; var idSayIt = 'sayit.0.tts.text'; var lautstaerke = 100; var ansagetext = "Post ist da."; var betreff = 'Briefkastenmeldung'; var von = "eMail-Adresse"; // Absender var an = "eMail-Adresse"; // Empfänger /* Erzeugen der nötigen Datenpunkte */ createState(pfad + 'Briefkasten_gefuellt', true, {read: true, write: true, type: 'boolean', name: 'Briefkasten voll in VIS Widget anzeigen', desc: 'Steuervariable für VIS Widget Sichtbarkeit'}); createState(pfad + 'Briefwürfe_zaehlen', 0, {read: true, write: true, type: 'number', name: 'Briefwürfe zählen', desc: 'Counter für Briefwürfe'}); createState(pfad + 'Briefkastensperre', false, {read: true, write: true, type: 'boolean', name: 'Briefkastensperre', desc: 'Sperrt die Zählung der Einwürfe für eine festgelegte Zeit'}); ! /* Abfragen eingestellten Nachrichten-Dienst / / aus=0 ; alle=1 ; Pushover=2 ; Telegram=3 ; eMail=4 */ var pushdienst = 'hm-rega.0.32673'; var pushprio = 0; var idSound = 'bugle'; var idDevice = ''; var TelegramID = 'ChatID'; /* ############## Variablen deklarieren ############################# / var idBriefkasteneinwurf = 'javascript.0.Technikraum.Homeduino.homeduino_001_D27'; var idBriefentnahme = 'javascript.0.Technikraum.Homeduino.homeduino_001_D26'; var idCountEinwurf = instanz + pfad + 'Briefwürfe_zaehlen'; var idSperre = instanz + pfad + 'Briefkastensperre'; var idShowPostIcon = instanz + pfad + 'Briefkasten_gefuellt'; / ######################################################### */ ! /* Deklarieren der Benachrichtigungsdienste / function meldung_push (text, titel, prio, sound, device) { sendTo("pushover", { message: text, title: titel, priority: prio, sound: sound, device: device }); } function meldung_email (from, to, subject, html) { sendTo("email", { from: from, to: to, subject: subject, html: html }); } function meldung_telegram (text, chatID ) { sendTo('telegram.0', { text: text, chatID: chatID }); } ! on({id: idBriefkasteneinwurf, val: 0}, function (obj) { var counter = getState(idCountEinwurf).val; // bisherige Zahl aus Variable einlesen var sperre = getState(idSperre).val; // Zustand Briefkastensperre einlesen setState(idShowPostIcon, true); // Icon für Briefkasteneinwürfe setzen setState('hm-rpc.0.JEQ0087074.15.LED_STATUS', 3); // LED16-Status Orange if(sperre === false){ setState(idCountEinwurf, ++counter); // eins hochzählen if(counter === 1){ Briefkastenmeldung(counter); } else if(counter > 1){ Briefkastenmeldung(counter); } setState(idSperre, true); // Briefkastensperre aktivieren setStateDelayed(idSperre, false, 30000); // Briefkastensperre nach 30.000 ms wieder deaktivieren } }); ! on({id: idBriefentnahme, val: 0}, function (obj) { var clearpost = instanz + pfad + 'Briefwürfe_zaehlen'; // bisherige Zahl aus Variable einlesen setState(clearpost, 0); // Briefkasteneinwürfe löschen setState('hm-rpc.0.JEQ0087074.15.LED_STATUS', 2); // LED16-Status grün setState(idShowPostIcon, false); // Icon für Briefkasteneinwürfe löschen Briefkastenentleerung(); }); ! / ################## Funktion für Meldung bei einem Einwurf ########################## / function Briefkastenmeldung(anzahl) { / Variablen befüllen / var Einwurfanzahl = ((getState(idCountEinwurf).val) +1); / ###### Ausgabe über SayIt und auf der Dreambox PVR600 ####### / setState(idSayIt, lautstaerke + ";" + ansagetext); // Ansagetext über Tablet require('request')("http://192.168.178.90/cgi-bin/xmessage?caption=Postkasten&timeout=0&body=Post&=1"); / ##################################################################### */ var meldung = 'Briefkasten: '; var meldunghtml = ' ! <u>Briefkastenmeldung</u> ! ' + 'Briefkasten: '; if (anzahl === 1){ meldung = meldung + Einwurfanzahl + ' Einwurf! \n\n' + 'ioBroker'; meldunghtml = meldunghtml + Einwurfanzahl + ' Einwurf!' + ' ' + ' ' + ' ' + 'ioBroker' + ' ' + ' ' + ' ' + 'ioBroker' + ''; } /* Nachrichteninhalt für Pushover*/ if ( (getState(pushdienst).val === 2) || (getState(pushdienst).val === 1) ) { meldung_push(meldung, betreff, pushprio, idSound, idDevice); } if ( (getState(pushdienst).val === 2) || (getState(pushdienst).val === 3) || (getState(pushdienst).val === 1) ) { meldung_telegram(meldung, TelegramID); } /* Nachrichteninhalt an email übertragen */ if ( (getState(pushdienst).val === 1) || (getState(pushdienst).val === 4) ) { meldung_email(von, an, betreff, meldunghtml); } if (logging) log('Anzahl Briefkasteneinwürfe an Pushover und eMail übertragen'); } /* ############### Funktion für Meldung bei Entleerung ###################### */ function Briefkastenentleerung() { /* Variablen befüllen */ var meldung2 = 'Briefkasten wurde entleert! \n\n' + 'ioBroker'; var meldunghtml2 = ' >! <u>Briefkastenmeldung</u> >! ' + 'Briefkasten wurde entleert!' + ' ' + ' ' + ' ' + 'ioBroker' + ''; /* Nachrichteninhalt für Pushover*/ if ((getState(pushdienst).val === 2) || (getState(pushdienst).val === 1) ) { meldung_push(meldung2, betreff, pushprio, idSound, idDevice); } if ((getState(pushdienst).val === 2) || (getState(pushdienst).val === 3) || (getState(pushdienst).val === 1) ) { meldung_telegram(meldung2, TelegramID); } /* Nachrichteninhalt an email übertragen */ if ((getState(pushdienst).val === 1) || (getState(pushdienst).val === 4) ) { meldung_email(von, an, betreff, meldunghtml2); } if (logging) log('Briefkastenentleerung an Pushover und eMail übertragen'); }` Sieht hoffentlich jetzt besser aus? *fg* Nochmal vielen Dank! Johnny
  • [gelöst] Nodes einbinden, welche nur Ausgänge haben - astro / suncalc node

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    3k Aufrufe
    BluefoxB
    @RS_Tobi: Kann mir jemand sagen, wie ich den Beitrag als gelöst markiere? gibts einen Button oder muss ich es im Betreff hinein schreiben? Tobi ` Einfach auf editieren beim ersten post drücken und Betreff editieren.
  • Neuling braucht Hilfe: Heizkörperthermostate steuern

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    S
    Danke Ralf, mit Scenes gehts wirklich wesentlich schneller und einfacher. Läuft jetzt :D
  • [gelöst] Between Function

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    734 Aufrufe
    M
    Danke, das mit dem Kaufmanns UND kannte ich nicht. probiere es gleich mal. Danke
  • JavaScript einem VIS Button zuweisen….

    Verschoben
    16
    0 Stimmen
    16 Beiträge
    13k Aufrufe
    N
    Es funktioniert. Habe nichts geändert, aber auf einmal gehts! Vielen Dank für die Hilfe! Gruß Nanouk
  • [gelöst]Pushover und sayit

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    fischi87F
    Danke für die Ansätze. Mit freundlichen Grüßen
  • Nur etwas einmal auslösen beim Neustart von iobroker

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    805 Aufrufe
    S
    Aaah, perfekt, vielen Dank! Klappt! Habe jetzt im Skript nach dem Abschnitt der Variablendeklaration folgendes eingebaut: //############################################################# // Bewässerung zunächst ausschalten beim erstmaligen Skriptstart // um im Falle eines Reboots den zuvor laufenden Bewässerungstimer auszuschalten (Not-Aus), // da er nach Reboot den zuvor gesetzten Ausschalttrigger nicht mehr ausführen kann setState(idHaupthahn, false); setState(idHeckehatti, false); //#############################################################
  • [erledigt]Objekt-Struktur on/subscribe()?

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    S
    Vielen Dank für eure Hilfe. So wie von Paul beschrieben , habe ich es jetzt gemacht und es funktioniert wunderbar!
  • Alle scripte sind verschwunden

    Verschoben
    8
    1
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    fischi87F
    hat nicht funktioniert, die condes bei dem thread funktionieren nicht :-(
  • [gelöst] Status eines Aktors abfragen per Script

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    3k Aufrufe
    HomoranH
    Hallo Alchy @Alchy: Wenn ich mal irgendwann helfen kann, werde ich das natürlich auch hier tun, wenn ich darf. ` Ich freue mich schon drauf. @Alchy: Außerdem schadet es nie, sich mit weiteren Scriptsprachen usw. zu beschäftigen. Man lernt ja nie aus ` Dauernd unterwegs und immer noch nicht ausgelastet. Wenn wir dir hier etwas helfen können, sag Bescheid. Gruß Rainer
  • [gelöst] View-Wechsel über CCU klappt nur ein Mal

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    807 Aufrufe
    B
    Ihr seid die Besten!! :D Danke!! Off Topic: Geile Software - geiles Projekt!!
  • Wie kann man States übergeben

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    A
    Das ist für mich eine völlig neue Art zu programmieren, da muss ich mich wirklich erst einarbeiten. Bin eher ein "traditioneller" Coder;). Aber ist schon klasse was ihr da so entwickelt. Gesendet von meinem GT-N8000 mit Tapatalk
  • URL mit Tastendruck aufrufen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    P
    Hallo ianmoone, lies mal hier: http://forum.iobroker.net/viewtopic.php?t=1115#p8984 Gruß Pix
  • DWD Warnungen ein/ausblenden

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    andreA
    Also hier gleich mal vorweg meine Widgets: ! [{"tpl":"tplDwdAdapter","data":{"visibility-cond":"==","visibility-val":"false","oid-begin":"dwd.0.warning.begin","oid-end":"dwd.0.warning.end","oid-headline":"dwd.0.warning.headline","oid":"dwd.0.warning.description","oid-severity":"dwd.0.warning.severity","visibility-oid":"javascript.0.vis.wetterwarnung.bestaetigung1","name":"Popup - Wetterwarnung 1","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"235px","top":"635px","color":"","width":"895px","height":"128px","background-color":"","padding":"","margin-top":"","font-size":"medium","z-index":"10","border-radius":"25px","border-style":"none","padding-top":""},"widgetSet":"dwd"},{"tpl":"tplMetroTileToggle","data":{"oid":"javascript.0.vis.wetterwarnung.bestaetigung1","visibility-cond":"==","visibility-val":"false","hover":false,"transform":false,"bg_class_false":"","bg_class_true":"","icon_class_false":"","icon_class_true":"","icon_badge_false":"","icon_badge_true":"","badge_bg_class_false":"","badge_bg_class_true":"","brand_bg_class_false":"","brand_bg_class_true":"","badge_top":"0","badge_left":"0","gestures-offsetX":0,"gestures-offsetY":0,"visibility-oid":"javascript.0.vis.wetterwarnung.bestaetigung1","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"name":"Popup - Bestätigung Wetterwarnung 1"},"style":{"left":"235px","top":"635px","padding":"0px","width":"895px","height":"128px","z-index":"11","opacity":"0"},"widgetSet":"metro"}] ! Zwei Widgets. Das DWD Widget für die Warnung selbst, das Tile Toggle Widget zum manuellen bestätigen der Warnung oben drüber. Mit dem Script wird es jetzt ein bisschen komplizierter. :( Da ich mir bis zu drei Wetterwarnungen anzeigen lasse, ebenso wie eine Meldung "Keine Wetterwarnungen vorhanden", ist in dem Script auch noch eine Variable enthalten, die mir Sagt ob überhaupt eine Wetterwarnung vorhanden ist. Hier mal das Script mit kurzen Kommentaren: ! // Datenpunkte anlegen createState('vis.wetterwarnung.vorhanden', false, {name: 'Liegt mindestens eine Wetterwarnung vor?'}); // Variable für "Ist eine Wetterwarnung vorhanden?" createState('vis.wetterwarnung.bestaetigung1', false, {name: 'Bestätigung der Wetterwarnung1'}); // Variablen für die Bestätigung und damit die Sichtbarkeit der einzelnen Warnungen createState('vis.wetterwarnung.bestaetigung2', false, {name: 'Bestätigung der Wetterwarnung2'}); createState('vis.wetterwarnung.bestaetigung3', false, {name: 'Bestätigung der Wetterwarnung3'}); ! // Datenpunkt-IDs var idVorhanden = "vis.wetterwarnung.vorhanden"; var idBestaetigung1 = "vis.wetterwarnung.bestaetigung1"; var idWarnung1 = "dwd.0.warning.severity"; var idBestaetigung2 = "vis.wetterwarnung.bestaetigung2"; var idWarnung2 = "dwd.0.warning2.severity"; var idBestaetigung3 = "vis.wetterwarnung.bestaetigung3"; var idWarnung3 = "dwd.0.warning3.severity"; ! // Variablendeklaration und Initialisierung bei Scriptstart var stateVorhanden = getState(idVorhanden).val; var stateBestaetigung1 = getState(idBestaetigung1).val; var stateWarnung1 = getState(idWarnung1).val; var stateBestaetigung2 = getState(idBestaetigung2).val; var stateWarnung2 = getState(idWarnung1).val; var stateBestaetigung3 = getState(idBestaetigung3).val; var stateWarnung3 = getState(idWarnung1).val; ! // Funktion zum Ermitteln ob Wetterwarnungen vorliegen function setvorhanden() { if (stateWarnung1 !== 0 || stateWarnung2 !== 0 || stateWarnung3 !== 0) { // Wenn severity bei einer Warnung ungleich 0, dann liegt mindestens eine Warnung vor. setState(idVorhanden, true); } else { setState(idVorhanden, false); } } ! // Funktionsaufruf bei Scriptstart setvorhanden(); ! // Funktionsaufruf bei Änderung der Stati on(idWarnung1, function(dp) { // Wenn severity sich ändert... stateWarnung1 = dp.newState.val; // Neuen severity Wert in den state schreiben... setState(idBestaetigung1, false); // Bestätigung auf "nicht bestätigt setzten" setvorhanden(); // Funktion zum Vorhandensein aufrufen um auch den Status für das Vorhandensein einer Warnung zu aktualisieren }); on(idWarnung2, function(dp) { stateWarnung2 = dp.newState.val; setState(idBestaetigung2, false); setvorhanden(); }); on(idWarnung3, function(dp) { stateWarnung3 = dp.newState.val; setState(idBestaetigung3, false); setvorhanden(); }); ! Wo ich das hier aber gerade so nochmal durchdenke und teste fällt mir auf, dass in meinem Script noch ein Denkfehler ist. So wird aktuell der Status für die Bestätigung auch auf false gesetzt wenn eine Warnung aufgehoben wird (also z.B. severity von 1 auf 0 gesetzt wird). Das fällt bei mir in vis aber nicht auf, da in diesem Fall meine Widgets sowieso durchsichtig sind… :) Werde das nochmal ein bisschen umkonfigurieren müssen... MfG, André
  • Zugriff auf Objektstruktur / Ermitteln ob History aktiviert

    Verschoben
    21
    0 Stimmen
    21 Beiträge
    4k Aufrufe
    ThisoftT
    Danke, Bluefox, für die Erklärung. Jetzt hab ich's :) Aber in der Tat - da muss man erstmal drauf kommen ;)
  • Thermostate HM-CC-RT-DM in Party/Urlaubsmode setzen

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    D
    Hi ehome, gegen das Problem mit dem zu schnell senden habe ich folgende Lösung mit setStateDelayed irgendwann mal hier im Forum gefunden. Ich benutze es zum Beispiel um alle Lichter auszuschalten … var idx = 0; /* Index-Zähler */ var interval = 300; /* 300ms Abstand */ $('channel[state.id=*.STATE](functions=Beleuchtung)').each(function (id, i) { var obj = getObject(id); if (getState(id).val){ setStateDelayed(id, false, (idx++) * interval); /* Zähler erhöhen, mit Interval multipliziert */ log('switch off: ' + obj.common.name); } }); Habe noch etwas gefunden wegen dem Party-Mode im https://forum.homegear.eu/viewtopic.php?t=115#p736 ` > Es macht gegenüber den einzelnen Party-Mode-Variablen auf jeden Fall Sinn, PARTY_MODE_SUBMIT zu verwenden, weil dann nur ein einziges Paket an den Stellantrieb gesendet werden muss. An PARTY_MODE_SUBMIT übergibst du einen String mit folgenden kommagetrennten Elementen: Partytemperatur (z. B. 21.5 - nicht mit Komma schreiben) Start-Uhrzeit in Minuten seit 0 Uhr mit einer Auflösung von 30 Minuten (also zum Beispiel 1020 für 17 Uhr) Starttag (z. B. 21) Startmonat (z. B. 5) Letzte zwei Ziffern des Startjahres (z. B. 14 für 2014) End-Uhrzeit in Minuten seit 0 Uhr wieder mit einer Auflösung von 30 Minuten (z. B. 1380 für 23 Uhr) Endtag Endmonat Letzte zwei Ziffern des Endjahres ` Gruß Philippe
  • Push mit WindowsPhone + Toasty

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    587 Aufrufe
    Niemand hat geantwortet
  • Widget CAM/Video Object Dialog

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    820 Aufrufe
    andreA
    Da schließe ich mich mal an… Habe es derzeit anders gelöst. Nutze für meinen Livestream das HTML Widget welches über meinen anderen Wigets liegt und steuere das mit der Sichtbarkeit. Funktioniert soweit ganz gut. Nur im Editor muss ich es halt immer verschieben wenn ich an die Widgets darunter möchte. Hier greift ja logischer Weise die Sichtbarkeit nicht. :) MfG, Andre PS: Das gleiche Verfahren nutze ich auch beim Callmonitor und bei den Wetterwarnungen :) Geschrieben mit Tapatalk
  • [gelöst] Rollo Script / Wie kann ich das Script kürzen?

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    951 Aufrufe
    M
    Danke funktioniert super.

585

Online

32.6k

Benutzer

82.2k

Themen

1.3m

Beiträge