Skip to content

Skripten / Logik

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

16.5k Topics 213.3k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    haus-automatisierungH
    @bitwicht sagte in Plötzlich ReferenceError: request is not defined: Den Schedule habe ich zum Test gesetzt da ich mir auf die Schnelle nicht zu helfen wusste :-) Wenn Du gar keinen Trigger drumherum baust, wird die gesamte Logik ja bei jedem Script-Start einmalig ausgeführt. Dann musst Du gar nicht warten.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    paul53P
    @Duffy sagte: sobald ein Handy von True auf False oder von False auf True geht auch das Licht abgeschaltet wird. Ja, das Licht wird (bleibt) nur eingeschaltet, wenn beide Handys false melden: es ist dunkel UND zwischen 5:30 und 21:30 Uhr UND kein Handy eingeloggt. @Duffy sagte in Licht über Anwesenheit und Helligkeit schalten [gelöst]: wenn NIEMAND zuhause ist das Licht einschalten
  • Hilfe für Skripterstellung mit Node-RED

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

    Moved
    2
    0 Votes
    2 Posts
    663 Views
    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

    Moved
    5
    0 Votes
    5 Posts
    2k Views
    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
  • 0 Votes
    9 Posts
    3k Views
    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

    Moved
    7
    0 Votes
    7 Posts
    1k Views
    S
    Danke Ralf, mit Scenes gehts wirklich wesentlich schneller und einfacher. Läuft jetzt :D
  • [gelöst] Between Function

    Moved
    3
    0 Votes
    3 Posts
    734 Views
    M
    Danke, das mit dem Kaufmanns UND kannte ich nicht. probiere es gleich mal. Danke
  • JavaScript einem VIS Button zuweisen….

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

    Moved
    5
    0 Votes
    5 Posts
    1k Views
    fischi87F
    Danke für die Ansätze. Mit freundlichen Grüßen
  • Nur etwas einmal auslösen beim Neustart von iobroker

    Moved
    3
    0 Votes
    3 Posts
    805 Views
    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()?

    Moved
    7
    0 Votes
    7 Posts
    1k Views
    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

    Moved
    8
    1
    0 Votes
    8 Posts
    1k Views
    fischi87F
    hat nicht funktioniert, die condes bei dem thread funktionieren nicht :-(
  • [gelöst] Status eines Aktors abfragen per Script

    Moved
    14
    0 Votes
    14 Posts
    3k Views
    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

    Moved
    4
    0 Votes
    4 Posts
    808 Views
    B
    Ihr seid die Besten!! :D Danke!! Off Topic: Geile Software - geiles Projekt!!
  • Wie kann man States übergeben

    Moved
    7
    0 Votes
    7 Posts
    1k Views
    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

    Moved
    3
    0 Votes
    3 Posts
    1k Views
    P
    Hallo ianmoone, lies mal hier: http://forum.iobroker.net/viewtopic.php?t=1115#p8984 Gruß Pix
  • DWD Warnungen ein/ausblenden

    Moved
    4
    0 Votes
    4 Posts
    1k Views
    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

    Moved
    21
    0 Votes
    21 Posts
    4k Views
    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

    Moved
    4
    0 Votes
    4 Posts
    2k Views
    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

    Moved
    1
    0 Votes
    1 Posts
    587 Views
    No one has replied
  • Widget CAM/Video Object Dialog

    Moved
    2
    0 Votes
    2 Posts
    821 Views
    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?

    Moved
    3
    0 Votes
    3 Posts
    951 Views
    M
    Danke funktioniert super.

371

Online

32.6k

Users

82.2k

Topics

1.3m

Posts