Skip to content

Skripten / Logik

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

16.4k Themen 211.7k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Themen
    48k Beiträge
    P
    @ArnoD Ich habs mir noch mal geladen, muss aber warten, bis der Fehler wieder auftritt. Oder genügt dir die Logausgabe ohne den Fehler? Wahrscheinlich eher nicht.
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Themen
    78k Beiträge
    nik82N
    Hi, hab downgrade gemacht, kommt aber immer noch leider :-)
  • Hilfe für Skripterstellung mit Node-RED

    952 13k
    952 Themen
    13k Beiträge
    HomoranH
    @fiddle sagte in [Gelöst]: Adapter per {Node Red | JS} (de)aktivieren: Ok, nicht als "Wert" schreiben, sondern als "Befehl". Dann scheint ihn das zu beeindrucken. du zeigst ja nichts, aber es geht mit true/false [image: 1763416200051-screenshot_20251117-224854_firefox.jpg] gesteuert über eigenen DP vom typ Bool
  • Widget Bars Filter

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    M
    Ich habe es wie PIX es bereits beschrieben hat mit 5 Views übereinander realisiert. Ich habe eine Standard View "3". Sollte eine Kamera eine Bewegung fest stellen ändert sich der Wert einer Variablen und das einsprechende View wird sichtbar. Nach zwei Minuten wird dann wieder auf die Standardview umgeschaltet. Läuft sehr gut. Ein Tip vielleicht noch: Im Vis unter Setup habe die Einstellung "Löschen aus RAM nicht aktive Views: nie" gesetzt. Sonst passiert es das auf eine View geschaltet wird und du hast zuerst ein "leeres Bild". Gruß Michael [image: 326_unbenannt.jpg]
  • Anzahl eingeschaltet Lichter (inkl. Dimmer)

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    P
    Hier ein aktueller Link: http://forum.iobroker.net/viewtopic.php … 673#p41673 Pix
  • [GELÖST] Synchronisation zwischen 2 Heizkörper-Thermostaten

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    DutchmanD
    @GerdSo: Nachtrag: Ich habe jetzt in der CCU2 eine Gruppe für die Thermostate angelegt und damit funktioniert es einwandfrei, d.h. es wird nicht mehr per Skript synchronisiert sondern direkt in der Zentrale per direkter Verknüpfung ` Wäre auch mein Vorschlag gewesen dafür sind ja die Gruppen da, Frage gelöst?." (Bitte im Topic erwähnen) Sent from my iPhone using Tapatalk
  • Kopierte Scripts von der Webseite enthalten HTML Kodierung

    Verschoben
    15
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    paul53P
    Jetzt funktieren alle Links :mrgreen:
  • [erledigt]States aus JS Instanz "auslesen"

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    451 Aufrufe
    BluefoxB
    $("[id=javascript.0.*]").each(function (id) { console.log(id); }) https://github.com/ioBroker/ioBroker.ja ... --selector
  • SendTo Ausführung

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    a200A
    @Bluefox: for (i=0;i<5;i++) { (function (dp) { getHistoryGet(<datum>, dp); })("mein.data.point_"+i); }</datum> ```` ` Funktioniert bei mir top! Danke!
  • Mittelwert erstellen aus 9 Sensoren

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    apollon77A
    Wobei der Mittelwert ggf nicht wirklich sinnvoll ist, vor allem wenn Du Räume mit größeren Abweichungen hast. percentile(50%) wäre sinnvoller. z.B. so: http://stackoverflow.com/questions/2404 … les-in-php :-) Also vorher trotzdem die 9 Werte sammeln und in ein Array packen. Dann das nehmen. So als "Hintergrundwissen" dazu ist der Artiekl hier recht gut: http://apmblog.dynatrace.com/2012/11/14 ... are-great/ Ich bin inzwischen weg von Mittelwerten
  • Geofency 2\. Teilnehmer oder mehrere

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    842 Aufrufe
    apollon77A
    einfach über die URL!! siehe http://forum.iobroker.net/viewtopic.php?f=20&t=2076
  • JavaScript zum Widget

    Verschoben
    15
    0 Stimmen
    15 Beiträge
    3k Aufrufe
    Alex1808A
    kann man das nicht einfach mit variablen realisieren? Für jede taste eine variable, und eine "Clear" für reset. Dann im script bei erfolgreiche Eingabe bzw. Zusammenstellung von variablen, was machen und variablen zurücksetzen auf 0. und so w. nur ab zwei gleiche zahlen wird komplizierter :)
  • [GELÖST]on({time…..}) Aufruf

    Verschoben
    54
    0 Stimmen
    54 Beiträge
    12k Aufrufe
    P
    Hallo, ich hatte weiter oben im Thread die Steuerung der Rollläden erwähnt. Sie werden zu einer festen Zeit geöffnet. Diese Zeit wird in paul53's Skript ja wunderbar in Stunde und Minute zerlegt und dann per on(time)-Funktion gestartet. Frage: Lässt sich das auch bis auf die Sekunde genau machen? Die Doku sagt nix dazu ~~@[url=https://github.com/ioBroker/ioBroker.javascript#astro--function:~~ ~~astro Funktion in ioBroker Javascript Github"]~~on({time: {hour: 12, minute: 30}}, function () { log((new Date()).toString() + " - Will be triggered at 12:30!"); }); ` Ich starte die Schließung der Rollläden per Astrofunktion (Sonnenuntergang). Diese lässt sich nicht ohne weiteres mit der on(time)-Funktion aufrufen. Diese on(time)-Funktion brauche ich aber, damit die clearSchedule-Funktion verwendet werden kann. Als lasse ich mir mit getAstroDate die Sonnenuntergangszeit ausrechnen und addiere/subtrahiere den in VIS eingegeben Shift dazu. Diese Zeit ist nun die Basis für die on(time)-Funktion. [image: 261_bildschirmfoto_2016-11-15_um_18.32.53.jpg] Die errechnete Zeit ist sekundengenau. Momentan nutze ich aber nur die Stunde und die Minute. ! ```` // Schließen <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // per Astrofunktion abhängig vom Fensterstatus (Daten von Variable, nicht vom Gerät RHS) createState('Homepilot.Rollladen.Wohnzimmer.zu.Shift', 10, { type: 'number', unit: 'min', name: 'Wohnzimmer Rollläden Schließung Astrosteuerung - Shift in Minuten' }); createState('Homepilot.Rollladen.Wohnzimmer.zu.Shift.Zeit', 10, { type: 'string', unit: 'Uhr', name: 'Wohnzimmer Rollläden tatsächliche Uhrzeit nächste Schließung per Astrosteuerung und Shift' }); createState('Homepilot.Rollladen.Wohnzimmer.zu.Level', 95, { type: 'number', min: 0, max: 100, unit: '%', name: 'Wohnzimmer Rollläden Schließung Astrosteuerung - Level' }); var idSchliessung_Shift = "javascript.0.Homepilot.Rollladen.Wohnzimmer.zu.Shift", idSchliessung_Zeit = "javascript.0.Homepilot.Rollladen.Wohnzimmer.zu.Shift.Zeit", idSchliessung_Level = "javascript.0.Homepilot.Rollladen.Wohnzimmer.zu.Level"; ! // Variablen Definition für Schliessentimer per on()-Funktion var schliessen_timer = null; var schliessen_h; var schliessen_m; var schliessen_s; ! // wenn Shift in VIS verändert wurde, wird die neue Schließenzeit ausgerechnet function astro_shift_berechnen () { var astrotag = isAstroDay(), //sonnenaufgang, // spielt beim Schließen keine Rolle sonnenuntergang, astro_shift_zeit_zu, shift_minuten = parseFloat(getState(idSchliessung_Shift).val); // kann negativ sein var today = new Date(); var tomorrow = today.setDate(today.getDate()+1); if (astrotag) { // Wenn Tag (Aufgang vorbei (erst wieder morgen, Untergang kommt noch heute) sonnenuntergang = getAstroDate('sunset', today); //sonnenaufgang = getAstroDate('sunrise', tomorrow); } else { // nach Nacht (Untergang vorbei (erst wieder morgen, Aufgang kommt heute oder morgen) sonnenuntergang = getAstroDate('sunset', tomorrow); //sonnenaufgang = (today.getHours() > 12 && today.getHours() <= 23) ? getAstroDate('sunrise', tomorrow) : getAstroDate('sunrise', today); // es ist vor Mitternacht (bzw. vor 23:XXUhr), dann morgen, sonst heute } astro_shift_zeit_zu = sonnenuntergang.setMinutes(sonnenuntergang.getMinutes() + shift_minuten); var neue_zeit = new Date(astro_shift_zeit_zu); //log(astro_shift_zeit_zu); //log(shift_minuten); //log(neue_zeit.toLocaleTimeString()); setState(idSchliessung_Zeit, neue_zeit.toLocaleTimeString()); // neue Schliessungszeit für Steuerung per on()-Funktion vorbereiten (vom 16.11.2016) setTimeout( function() { var time_array = getState(idSchliessung_Zeit).val.split(":"); schliessen_h = parseInt(time_array[0], 10); // Stunden schliessen_m = parseInt(time_array[1], 10); // Minuten schliessen_s = parseInt(time_array[2], 10); // Sekunden log('Wohnzimmer Rollläden: Neue Schließenzeit gesetzt: ' + getState(idSchliessung_Zeit).val + ' Uhr'); setSchliessenTimer(); }, 2000); } ! function setSchliessenTimer() { if (schliessen_timer) clearSchedule(schliessen_timer); schliessen_timer = on({time: { hour: schliessen_h, minute: schliessen_m/, // <<<<<<< Sekunden möglich??? second: schliessen_s/} }, function () { var level_rechts = getState(idRolloWZrechts_position).val, level_links = getState(idRolloWZlinks_position).val, level_soll = parseInt(getState(idSchliessung_Level).val, 10); if (level_rechts > level_soll) { //var fenster_rechts = getState(idStatusWZFensterrechts).val; //if (fenster_rechts != 2) { setTimeout(function () { setState(idRolloWZrechts_position, level_soll); // id rechts, 95% log('Rollladen WZ rechts wird herabgefahren - Astrosteuerung'); }, 1000); //} else log('Rollladen Wohnzimmer Fenster rechts nicht herabgefahren, da Fenster offen'); } else log('Rollladen Wohnzimmer rechts war bereits weiter als ' + level_soll + '% geschlossen, deshalb keine Bewegung'); if (level_links > level_soll) { var fenster_links = getState(idStatusWZFensterlinks).val; if (fenster_links != 2) { setState(idRolloWZlinks_position, level_soll); // id links, 95% log('Rollladen WZ links wird herabgefahren - Astrosteuerung'); } else log('Rollladen Wohnzimmer Fenster rechts nicht herabgefahren, da Fenster offen'); } else log('Rollladen Wohnzimmer rechts war bereits weiter als ' + level_soll + '% geschlossen, deshalb keine Bewegung'); //log('Rollladen WZ Fenster links wird derzeit noch nicht automatisch geschlossen'); }); } ! // Berechnung der Uhrzeit, wann Astrosunset und Shift // jede Stunde schedule('9 * * * *', astro_shift_berechnen); // oder bei Änderung der Eingabe von Shift on(idSchliessung_Shift, astro_shift_berechnen); Gruß Pix
  • Was bedeutet die Fehlermeldung?

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    991 Aufrufe
    HomoranH
    @skorpil: Rainer, Ich habe dazu doch noch einmal eine Frage: hast Du eine Idee, WARUM das Gerät immer wieder die Verbindung zu cuxd verliert? ` Habe halt auch keine Ahnung mehr. Das WLAN fiel mir auch sofort auf, da ich aber davon ausging, dass der rpc.0 auch über das selbe WLAN läuft und zwar ohne Probleme war das für mich auch raus. Irgendetwas muss mit der Konfiguration des rpc.1 oder gar des cuxD in der CCU Probleme machen. Ich habe diese Meldungen nicht, kann es leider auch nicht reproduziern :( BIN-RPC ist in Ordnung - CuxD verstehet IMHO kein XML-RPC. Gruß Rainer
  • Hilfe für den Einstieg in Javascript mit Sayit

    Verschoben
    18
    0 Stimmen
    18 Beiträge
    3k Aufrufe
    N
    @Jeeper.at: hallo, ja, sollte man so auch nicht machen. Wenn du eine bestimmte Zeit hast, dann reicht es auch wenn das Script viel weniger oft läuft. Damit wird zwar die Zeit der Auslösung ungenauer, aber da kommt es halt drauf an was du mit dem Script erreichen willst. Die Variante, das du in der CCU2 eine Variable setzt und im Script darauf reagierst besteht ja immer noch. Dann wird das Programm einmal in der CCU2 gestartet und einmal in IoBroker. Also so wie ich es mit der Waschmaschine mache. ` Ich habe nun auf die Variante "Waschmaschine" umgestellt. Leider spricht weder Ivona (mit Keys) noch Google mit mir. Sayit hat was gegen mich 8-) . [image: 1641_wm.jpg] Thomas
  • Blocky Astrozeit in Variable

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    882 Aufrufe
    rantanplanR
    Hallo Die Abfrage Falls "Aktuelle Zeit von 'Sonnenaufgang'…" gibt Wahr/True zurück, wenn die Bedingung erfüllt ist. Da muss man keinen Wert vergleichen. Ich würde die Abfragen ohne "sonst falls" machen. Zumal sich wohl einige Zeiten überschneiden können. Bei "Sonnenaufgang-Ende" ist eventuell auch noch "Sonnenaufgang" gültig. Also einfach mehrere "Falls mache" chronologisch untereinander. Falls Sonnenaufgang mache Falls Sonnenaufgang-Ende mache usw. Dann wird in "Tagesabschnitt" immer das Richtige stehen. Grüße
  • Astro plus zufallszeit

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    P
    Hallo, var min = 0; // Minimum Minuten var max = 100; // Maximum Minuten // Zufallszahl ermitteln function rand (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } var zufall = rand(min,max); schedule({astro: "sunrise", shift: zufall}, function () { log(zufall + " Minuten nach Sonnenaufgang"); }); ````damit bekommst du einen zufälligen Shift zwischen 0 und 100 Minuten nach Sonnenaufgang. Allerdings berechnet sich der Shift nur einmal beim Skriptstart. Wenn er zB täglich neu berechnet werden soll, musst du um Mitternacht noch einen __clearSchedule__ Scheinbar ist aber die Nutzung von __clearSchedule__ in Verbindung mit Astrofunktionen nicht möglich ~~@[url=https://github.com/ioBroker/ioBroker.javascript/blob/master/README.md#clearschedule:~~ > ~~Javascript Github von ioBroker"]~~If no "astro" function used you can cancel the schedule later. To allow this the schedule object must be saved: ` Falls das wirklich nicht geht, kannst du etwas umständlich die Sonnenaufgangszeit mit getAstroDate("sunrise", … abfragen und die Stunden und Minuten in eine Cron-Schreibweise portieren. Daraus kann man dann einen Schedule machen, der sich auch wieder löschen lässt :roll: :o :? :lol: Falls der Schedule beim Beenden des Skriptes gelöscht wird, kann man auch das Skript nach dem Skriptstart um Mitternacht sofort nach dem erreichten Schedule wieder deaktivieren. Das geht mit __ScriptEnabled__. Pix
  • Sonos Lautstärke ändern

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    R
    Hallo Pix, vielen Dank für deine schnelle Antwort und Danke, dass du dich um eine Lösung für die Fehlermeldung bemühst hast. Dass es bei dir läuft und bei mir nicht lief, lag dann doch an was anderem. Seit einem zurückliegenden Update liefen ein paar Sonosinstanzen nicht mehr bei aktiviertem Webserver. Küche lief noch über den Lichttaster, aber eben nicht über den 6-fach-Taster, was ich jetzt erst bemerkt habe. Mit deaktivertem Webserver läuft es wieder. Grüße, Rob
  • Json String extrahieren

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    3k Aufrufe
    C
    Super. Vielen Dank. damit funktioniert es.. Gruss Silvio
  • Script oder Blockly um Daten in die MySQL Datenbank zu schreiben

    Verschoben
    21
    0 Stimmen
    21 Beiträge
    6k Aufrufe
    apollon77A
    Aaaalso UPDATE!! Neue Version von SQL-Adapter zum Testen verfügbar. Fügt das regelmäßige schreiben auch ohne Änderung hinzu: siehe http://forum.iobroker.net/viewtopic.php … 190#p39190 Und zum Thema "Converter History -> SQL" gibt es auch Neuigkeiten: History-Adapter und SQL-Adapter vom Github nehmen und dann gibt unter https://github.com/ioBroker/ioBroker.history in der Readme unter "Data converter" auch Infos und den aktuellen Stand. Ich habe es rudimentär mit SQLite getestet und klappte soweit ... jetzt wären freiwillige gefragt :-) siehe http://forum.iobroker.net/viewtopic.php?f=36&t=3965
  • [gelöst]Howto createState als Bool?

    Verschoben
    4
    2
    0 Stimmen
    4 Beiträge
    11k Aufrufe
    P
    Hallo, ich glaube, mit forceCreation wird der Datenpunkt neu angelegt, egal, ob schon vorhanden oder nicht. Bin im Zug und kann es nicht ausprobieren. ` > createState createState(name, initialValue, forceCreation, common, native, callback) Create state and object in javascript space if does not exist, e.g. "javascript.0.mystate". ####Parameters: name: name of the state without namespace, e.g. "mystate" initialValue: variable can be initialized after created. Value "undefined" means do not initialize value. forceCreation: create state independent of if state yet exists or not. common: common description of object see description here native: native description of object. Any specific information. callback: called after state is created and initialized. It is possible short type of createState: createState('myVariable') - simply create variable if does not exist createState('myVariable', 1) - create variable if does not exist and initialize it with value 1 createState('myVariable', {name: 'My own variable', unit: '°C'}, function () {log('created');}); createState('myVariable', 1, {name: 'My own variable', unit: '°C'}) - create variable if does not exist with specific name and units ` Hier kann man noch tiefer eintauchen: https://github.com/ioBroker/ioBroker/bl … A.md#state Pix
  • Script -> exec funktioniert nicht

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    F
    Hmm, ich hätte fast gedacht, dass man ein Bild auch so holen kann. Ich zeige Dir mal wie es bei mir funktioniert (jedoch mit einer Instar). Letztendlich ist bei vielen aber der gleiche Chinakracher drinnen. Ich habe Dir mal ein Beispielskript beigefügt, welches auch gleich das Bild per Telegram versendet. Ich unterstell einfach mal, dass Du vielleicht sowas auch noch vor hast? So, also hier das Script mit meiner Kamera: var request = require('request'); var fs = require('fs'); request.get({url: 'http://192.168.1.22/tmpfs/auto.jpg?usr=gast&pwd=gast', encoding: 'binary'}, function (err, response, body) { fs.writeFile("/tmp/snap.jpg", body, 'binary', function(err) { if (err) { console.error(err); } else { console.log('Snapshot sent'); sendTo('telegram.0', {text: '/tmp/snap.jpg', chatId: 0190666666, caption: 'Achtung Snappschuss'}); } }); }); Ansonsten, wenn es bei Dir gar nicht passt, versuche mal mit dieser Schreibweise: exec('wget -O - http://admin:xxxxxxxxxxxx@192.168.178.63/videostream.flv?usr=admin\&pwd=xxxxxxxxxxxxx | dd count=300 of=/mnt/NAS/Bilder/Haustuer.flv && mplayer -nosound -vo jpeg:outdir=/mnt/NAS/Bilder/ -frames 2 /mnt/NAS/Bilder/Haustuer.flv', function (error, stdout, stderr) { console.log('stdout: ' + stdout); }); Hoffe es passt so. So long, Fitti
  • Zwischenschalter Dauer errechnen

    Verschoben
    18
    0 Stimmen
    18 Beiträge
    2k Aufrufe
    ThisoftT
    Das war der entscheidende Hinweis von @paul53 dass der Zeitstempel jetzt in Millisekunden ist. Hatte ich nicht mehr dran gedacht, ist ja nun wirklich auch schon seeeeehr, sehr lange her von Version 0.9.0 auf 3.1.0 ;)

856

Online

32.4k

Benutzer

81.5k

Themen

1.3m

Beiträge