Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.9k 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
    O
    Ich hatte mit der 2.0.1 weiterhin Probleme mit der Verbindung zwischen meinem Raspi und meiner 2400AC+ (ca. alle 2 Tage Verbindungsabbrüche und dann musste der Speicher resettet werden). Nach dem Einspielen der neuen Version 2.0.2 auf der 2400AC+ läuft es nun seit 4 Tagen stabil. Sehr schön, Daumen drücken, dass es so bleibt!
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    D
    Nochmals herzlichen Dank!!!
  • Hilfe für Skripterstellung mit Node-RED

    964 13k
    964 Themen
    13k Beiträge
    A
    @OliverIO Für mich als ex. Elektroninstallateur ist es eben vielfach einfacher in einer Maske zu sehen was der Code eigentlich machen sollte, als in einem strukturierten Text. Wir verwenden bei uns im Job auch sehr viel strukturierte Text für Steuerungsfunktionen, aber das ist in der Regel eine andere Abteilung, ich bin nur zuständig, dass die Elektropläne korrekt und vollständig für alle sind. Klar, dass interesse an den Möglichkeiten ist schon lange geweckt, aber wie bei allem, wenn man das nicht oft macht, vergisst man sehr vieles wieder. Bei mir ist entstehen solche Dinge eben manchmal aus "dummen" Ideen, oder eben aus "herausforderungen" die man nicht direkt sucht. Ich arbeite mich jetzt mal rund um und schaue was da raus kommt. Nochmals herzlichen Dank Gruss Andi (aus der überhitzten Schweiz)
  • [ VORLAGE ] Zeitschaltung von Aktoren / Lampen usw

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet
  • [Gelöst] [Frage] Skript zählen_Fenster

    Verschoben
    19
    0 Stimmen
    19 Beiträge
    3k Aufrufe
    dslraserD
    Hallo Frank, > vielen Dank für dein Script, funktioniert prima mit den "normalen" Fensterkontakten Ich möchte nur kurz richtig stellen das dieses Script nicht von mir ist, sondern hier im Forum "zusammen gesucht" und für mich abgewandelt ist. Zu Deinen Fragen, das sollte eigentlich alles machbar sein. Ich habe aber auch noch eine Frage, da ich (noch) keine Drehgriffe habe. Welche Datenpunkte haben die Griffe bei geschlossen/gekippt/ und offen ? (also geschlossen = 0 / gekippt = 1 / und offen = 2, oder ist das anders ?) Das mit dem extra Blockly Trigger habe ich bei mir übrigens bewußt so gemacht, da man den dann auch mal eben schnell abschalten kann, aber trotzdem in Telegram das Script abfragen kann. (habe ich bei mir über Text2command gelöst, abfragen könnte ich dann über das Wort Fenster, siehe Anhang) PS: ich habe bei mir gerade das original Script nochmal eingebaut und nachgesehen was da passiert. Ich habe nur die "normalen IP Fensterkontakte, die haben als Datenpunkt 0 = geschlossen und 1 = offen.(siehe Anhang) Es scheint aber so zu sein, das der Drehgriff auch 0 = geschlossen und bei gekippt = 1 und bei offen = 2 hat ? Wenn das so ist, dann wäre es blöd, weil dann 1= gekippt(Drehgriff) und 1=offen(TFK) bedeuten würde. Es sei denn der Griff hat 1 als offen und zwei für gekippt, dann würde das Script ja gehen. Die TFK Abfrage scheint für die "nicht IP Fensterkontakte" gedacht zu sein, weil die auf true regieren soll ? PPS: vielleicht sollten wir einen eigenen Thread eröffnen, da dieser hier als gelöst gekennzeichnet ist ? LG Heiko 3822_fenster.jpg 3822_t2cfenster.jpg 3822_fkontakt.jpg
  • [Gelöst] Mehrere tägliche Zeitschaltungen mit 433mhz Steckdosen über Broadlink

    Verschoben
    9
    1
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    N
    Habe das mal zu zusammengewürfelt und werde das mal testen. Einen Kurztest gab es schon. Von 9:30 bis 9:31 und 9:33 bis 9:35. Hat auch funktioniert :) Liebe Grüße Nashi 4304_iobroker_zeitplan.png
  • Hilfe bei - Vis Zeitsteuerung ( JS o. Blocky )

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    T
    Schau mal hier ( topic ist wirklich nicht eingängig, hat sich aber glsube ich zu dem entwickelt, was du suchst): http://forum.iobroker.net/viewtopic.php … 4&start=20 Da gibts eine Zeitschaltung von pix und eine von mir. Hier eins der Skripte ! ```` // ########## // Skript für Ace-K zum Schalten einer Steckdose zwischen zu zwei definierten Zeitpunkten. Steuerbar über Vis // Dank an paul53 für das Schedule Skript // v 0.2, stable, tempestas, 28.11.2017 ! var force = true; // erzwingt bei Neustart des Skript Anlegen der States mti den nachfolgend definierten Werten ! // States anlegen ! createState('Zeitschaltung.Steckdose1.Aktiv', false); ! createState('Zeitschaltung.Steckdose1.Start.Stunde',12, force, { name: 'Startstunde ', type: 'number', min: '0', max: '23', }); ! createState('Zeitschaltung.Steckdose1.Start.Minute',0, force, { name: 'Startminute ', type: 'number', min: '0', max: '59', }); ! createState('Zeitschaltung.Steckdose1.Start.MinuteString',"00", force, { // String für Anzeige in VIS; wird via function an numerischen Wert angeglichen name: 'Startminute ', type: 'string', ! }); ! createState('Zeitschaltung.Steckdose1.Start.Zeit',"12:00", force, { // String der Startzeit name: 'Startzeit ', type: 'string', ! }); ! createState('Zeitschaltung.Steckdose1.Ende.Stunde',13, force, { name: 'Endstunde ', type: 'number', min: '0', max: '23', }); ! createState('Zeitschaltung.Steckdose1.Ende.Minute',0, force, { name: 'Endminute ', type: 'number', min: '00', max: '59', }); ! createState('Zeitschaltung.Steckdose1.Ende.MinuteString','00', force, { // String für Anzeige in VIS; wird via function an numerischen Wert angeglichen name: 'Endminute ', type: 'string', min: '00', max: '59', }); ! createState('Zeitschaltung.Steckdose1.Ende.Zeit',"13:00", force, { // String der Endzeit name: 'Endzeit ', type: 'string', ! }); ! // ############################################################################################################## // ### Functions zur Anpassung der Minuten Strings an die numerischen Werte sowie Anpassung Gesamtzeit Strings ## // ############################################################################################################## ! var idAktiv = 'javascript.1.Zeitschaltung.Steckdose1.Aktiv'; ! var idMinStart = 'javascript.1.Zeitschaltung.Steckdose1.Start.Minute' ; var idStdStart = 'javascript.1.Zeitschaltung.Steckdose1.Start.Stunde' ; var idMinStartString = 'javascript.1.Zeitschaltung.Steckdose1.Start.MinuteString'; var idStartzeit = 'javascript.1.Zeitschaltung.Steckdose1.Start.Zeit'; ! var idMinEnd = 'javascript.1.Zeitschaltung.Steckdose1.Ende.Minute'; var idStdEnd = 'javascript.1.Zeitschaltung.Steckdose1.Ende.Stunde'; var idMinEndString = 'javascript.1.Zeitschaltung.Steckdose1.Ende.MinuteString'; var idEndzeit = 'javascript.1.Zeitschaltung.Steckdose1.Ende.Zeit'; ! // Bei Änderung Minuten Startzeit on(idMinStart, function() { var minuten = getState(idMinStart).val; var minutenString = ""; if(minuten < 10) { minutenString = '0' +minuten; } else minutenString = minuten.toString(); ! setState(idMinStartString, minutenString); // Anpassen der Minuten var stunde = getState(idStdStart).val; // Auslesen Stunde setState(idStartzeit, stunde + ':' + minutenString); // Einsetzen Stunde und Minute in Startzeit-String ! }); ! // Bei Änderung Minuten Endzeit on(idMinEnd, function() { var minuten = getState(idMinEnd).val; var minutenString = ""; if(minuten < 10) { minutenString = '0' +minuten; } else minutenString = minuten.toString(); setState(idMinEndString, minutenString); ! var stunde = getState(idStdEnd).val; // Auslesen Stunde setState(idEndzeit, stunde + ':' + minutenString); // Einsetzen Stunde und Minute in Endzeit-String ! }); ! // Bei Änderung Stunde Startzeit on(idStdStart, function() { var minutenString = getState(idMinStartString).val; var stunde = getState(idStdStart).val; setState(idStartzeit, stunde + ':' + minutenString); ! }); ! // Bei Änderung Stunde Endzeit on(idStdEnd, function() { var minutenString = getState(idMinEndString).val; var stunde = getState(idStdEnd).val; // Auslesen Stunde setState(idEndzeit, stunde + ':' + minutenString); // Einsetzen Stunde und Minute in Endzeit-String ! }); ! // ################################################################################################## // VARIABLEN UND IDS DEFINIEREN // ################################################################################################## ! // STARTZEIT TRIGGER (SCHEDULE) ! var einschalten = getState(idStartzeit).val.split(':'); // erstmaliges einlesen der Startzeit, aufteilen in Stunden und Minuten ! var timerEinschalten = schedule(einschalten[1] + ' ' + einschalten[0] + ' * * 0-6', fEinschalten); // initiales Festlegen des Start-Zeitpunkts ! on(idStartzeit, function(dp) { // Triggern bei Änderung des Startzeit-Strings einschalten= dp.state.val.split(':'); clearSchedule(timerEinschalten); // altes Schedule löschen timerEinschalten = schedule(einschalten[1] + ' ' + einschalten[0] + ' * * 0-6', fEinschalten); }); ! // ENDZEIT TRIGGER ( SCHEDULE) ! var ausschalten= getState(idEndzeit).val.split(':'); // erstmaliges einlesen der Endzeit, aufteilen in Stunden und Minuten ! var timerAusschalten= schedule(ausschalten[1] + ' ' + ausschalten[0] + ' * * 0-6', fAusschalten); // initiales Festlegen des Endzeitpunkts ! on(idEndzeit, function(dp) { // Triggern bei Änderung des Endzeit-Strings ausschalten= dp.state.val.split(':'); clearSchedule(timerAusschalten); // altes Schedule löschen timerAusschalten = schedule(ausschalten[1] + ' ' + ausschalten[0] + ' * * 0-6', fAusschalten); log(ausschalten[1] + " " + ausschalten[0]); ! }); ! // Functions ! function fAusschalten(){ // setState("hm-rpc.1.00021569960FFB.3.STATE"/Kamera_Wohnzimmer_Steckdose:3.STATE/, false); // nur, wenn die Automatik eingeschaltet ist wird die Steckdose geschaltet log("Steckdose wurde ausgeschaltet"); } function fEinschalten(){ // setState( "hm-rpc.1.00021569960FFB.3.STATE"/Kamera_Wohnzimmer_Steckdose:3.STATE/, true); // nur, wenn die Automatik eingeschaltet ist wird die Steckdose geschaltet log("Steckdose wurde eingeschaltet"); } ! ````
  • [Blockly Script] Geht das überhaupt ? Status HM Sensoren abfragen und dann reagieren

    Verschoben
    9
    2
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    R
    @HAL: Ja, das mein 1.Versuch des Script "Käse" ist wurde mir auch klar. ` Versuch macht meistens klug! ;) Die Sache mit den Schleifen haben schon viele hier erfolglos probiert, bzw. damit ihre Javascript-Instanz abschmieren lassen. Die Sache mit den Statusmeldungen, die bleiben doch erhalten, sowohl in der CCU als auch in ioBroker. Dein Ansatz war ja schon nicht schlecht, nur eben ohne diese wiederholen-Blöcke. Die Logik aus den CCU-Programmen würde ich gleich mit in das Skript einarbeiten, dann hast du schon mal einen Anfang. Versuchs mal. Du könntest ja auch mal deinen ersten Versuch exportieren und hier einstellen, dann haben wir schonmal ein paar Datenpunkte aus deinen Objekten. Enrico
  • Blocky - was mache ich falsch?

    Verschoben
    19
    1
    0 Stimmen
    19 Beiträge
    3k Aufrufe
    Holger76H
    Also ohne näher zu schauen, muss das erste steuere oben in die zange geschoben werden, nicht darunter Gesendet von meinem F5121 mit Tapatalk
  • Shell Script ausführen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    agreenA
    danke für den Tipp, habe aber das Problem gefunden. in meinem Bash Script wird eine SSH Verbindung gemacht und ich habe die Keys nur für den agreen User hinterlegt. Habe die jetzt für den root kopiert und sie da … es geht :-)
  • [Frage] zu Scripte anderer JavaScript-Instanz zuordnen.

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    rantanplanR
    @AlCalzone: Dann steig doch um :twisted: So schwer ist es auch nicht ;) ` Keine Zeit und keine Lust. ;) Irgendwann "juckt" es nicht mehr was Neues anzufangen. Als ich angefangen habe, musste ich Programme noch "fädeln" :o Im Laufe der Jahre ist da einiges an Sprachen zusammengekommen. Ich bleibe erstmal auf der dunklen Seite der Macht :D Grüße
  • Skript mit Alexa starten

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    5k Aufrufe
    AlCalzoneA
    @FunFactory: Ich weiss das es einen VU+ Adapter gibt aber den kann ich ja nicht in meine Alexa Routine einbinden oder? ` Ich kenne den Adapter nicht, aber üblicherweise gibt es Datenpunkte für diverse Aktionen. Diese bindest du als Smart-Geräte in Alexa ein. Dann musst du in die Routine nur einbauen, dass er den Datenpunkt (Gerät) für Power auf an stellt (oder den für AN, oder welchen es auch immer gibt). @FunFactory: Dank der Artikel hier habe ich es auch geschafft die VU+ mit einem Java script einzuschalten. Aber wie unterscheide ich ob von Alexa ein Fernseh einschalten oder ein Fernseh ausschalten kommt. ` Du brauchst einen Datenpunkt "Fernseh" der true/false kennt und bindest diesen als Smart-Gerät ein. Alexa setzt diesen per Sprache auf true (an)/false (aus). Im Javascript reagierst du dann auf Aktualisierung des Datenpunkts. Wenn er true ist => "http request an", wenn er false ist => "http request aus". Hierzu gab es in letzter Zeit einige Threads, bemühe einfach mal die Suche.
  • [SCRIPT] Grafana-Dashboards in VIS

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    5k Aufrufe
    P
    Hallo, dann muss ich es doch über diesen Weg probieren: http://forum.iobroker.net/viewtopic.php … 762#p38762 (gezeigten iFrame Ausschnitt bestimmen) Ausprobiert: [image: 261_bildschirmfoto_2017-11-29_um_12.08.34.png] ! HTML-Widget: [image: 261_bildschirmfoto_2017-11-29_um_12.11.02.jpg] ```` ! <iframe src="{javascript.2.Grafana.DashboardURL}" id="my-iframe" scrolling="no"></iframe> ! Dieses Widget: [{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"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,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"\n<iframe src="&quot;{javascript.2.Grafana.DashboardURL}&quot;" id="&quot;my-iframe&quot;" scrolling="&quot;no&quot;"></iframe>\n\n\n\n"},"style":{"left":"89px","top":"1306px","z-index":"25","width":"916px","height":"270px"},"widgetSet":"basic"}] Gruß Pix
  • Blockly + pushbullet = sendet alles 5 mal (gelöst)

    Verschoben
    11
    1
    0 Stimmen
    11 Beiträge
    2k Aufrufe
    painkillerdeP
    Warum auch immer, es geht jetzt. Hatte wirklich nur den Debug zum Trigger verschoben. Hab den Debug nun raus genommen - geht immer noch - manchmal muss man es nicht verstehen… Vielen Dank für eure Hilfe!!!
  • Fenster Meldung blockly [gelöst]

    Verschoben
    5
    1
    0 Stimmen
    5 Beiträge
    995 Aufrufe
    totocotonioT
    Hi, genau das war es. :D Ich habe das Blockly umgestellt und es funktioniert genauso wie ich es möchte. Danke :lol:
  • Täglich den Kalender auf einen bestimmten Eintrag durchsuchen

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    1k Aufrufe
    P
    OK Habs jetzt hinbekommen. Der fehler war Falscher Code var tagdienst; var debug = true; // zum debuggen) /** Täglich um 2 Uhr früh den Kalendereintrag auslesen **/ schedule("*/1 * * * *", function() { if( getState("ical.0.events.TD").val === true) { tagdienst = 1 ; else tagdienst = 0; } }); if(debug) log("Tagdienst: "+ tagdienst); Richtiger Code var tagdienst; var debug = true; // zum debuggen) /** Täglich um 2 Uhr früh den Kalendereintrag auslesen **/ schedule("*/1 * * * *", function() { if( getState("ical.0.events.TD").val === true) { tagdienst = 1 ; } else { tagdienst = 0; } if(debug) log("Tagdienst: "+ tagdienst); }); Ich hab die Variable ausserhalb der funktion debuggt und dann war sie immer leer.
  • Piface Digital 2 Ausgänge OUT testen

    Verschoben
    1
    1
    0 Stimmen
    1 Beiträge
    511 Aufrufe
    Niemand hat geantwortet
  • Duty Cycle auch bei Geräten mit Rückmeldung beachten

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    apollon77A
    Ich fürchte das es nicht so einfach so zu verallgemeinern ist. Ein Check auf ioBroker-Seite ob der Status anders ist ist alles andere als einfach, weil es auch immer wieder "Features" der Geräte gibt. Bei HM als Beispeil kann man bei vielen Aktoren "ON_TIME" setzen mit einer zeit und dann schaltet man. Wenn es läuft und man will das verlängern macht man glaube ich das gleiche, ON_TIME setzen und nochmal "einschalten" (auch wenn es schon an ist). Dann läuft die neue Zeit. Und das ist nur ein Beispiel. bedeutet: ioBroker müsste sehr groses Wissen über die geräte haben die es schaltet. Das weiss der User besser, weil der weiss was er will.
  • Variable aktualiesiert sich zuspät

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    689 Aufrufe
    R
    Danke paul53 wenn ich dich nicht hätte :D Es funktioniert. Und wenn ich es richtig verstanden habe muss ich den wert der variable gar nicht auslesen sondern nur setzen? vorher: var wert = getState(setHeizungsTemp).val; nachher: var wert;
  • Javascript include

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    3k Aufrufe
    DutchmanD
    @michi: Oh, das war mir zu einfach ;-) Dankeschön!!! ` siehe docu : https://github.com/ioBroker/ioBroker.ja … -functions <size size="200">Global functions</size> You can define the global scripts in the "global" folder. All global scripts are available on all instances. If global script is disabled, it will not be used. Global script will be just prepend to the normal script and compiled, so you cannot share data between scripts via global scrips. Use states for it.
  • [Blockly] Programm soll nur bei Dunkelheit…..

    Verschoben
    32
    1
    0 Stimmen
    32 Beiträge
    4k Aufrufe
    rantanplanR
    Nun dann fange ich mal an ;) Ich versuche mal die Punkte aus den Beiträgen zusammenzufassen. –------ 1. Abends nach Hause kommen. 1.1 wenn KEIN Urlaub 1.2 wenn Licht im Wohnzimmer AUS 1.3 wenn Haus.Hue....Lampe-1 AUS 1.4 wenn Haus.Hue....Lampe-2 AUS 1.5 wenn in bestimmten Zeitraum 1.6 wenn Fernseher AUS 1.7 wenn es DUNKEL ist 1.8 dann soll Esszimmerlampe AN gehen und nach 60 Minuten wieder aus. 1.9 getriggert wird ein Haustür-Schalter 2. Morgens beim Verlassen soll NICHTS passieren. Ist das erstmal richtig so? Fragen über Fragen. A) gibt es einen Helligkeitssensor? Ohne und nur nach Zeiten ist das ein Glücksspiel. B) was ist das für ein Tür-Schalter? was macht der? wird der auch Morgens betätigt? C) soll das Licht nach 60 Min. ausgehen? Auch wenn man im Esszimmer ist? D) Nur Urlaub? Was ist mit WE und Feiertagen? Diese "Monster"-UND-Abfrage sollte auf jeden Fall vereinfacht werden. Zumal dort einige Sachen doppelt und unlogisch verglichen werden. Z.B. Zwischen 05:00 morgens bis 18:00 Nachmittags UND Zwischen Sonnenuntergang-Anfang bis Sonnenaufgang-Ende Wie soll das BEIDES gleichzeitig WAHR sein? Grüße
  • Raumtemperaturregelung mit Blockly

    Verschoben
    22
    0 Stimmen
    22 Beiträge
    6k Aufrufe
    S
    Hallo, Vielen Dank. Grüße, Andy
  • Script läuft nicht

    Verschoben
    9
    1
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    R
    Du hast für "falls" die Trigger-Blöcke genommen, du musst aber die "falls"-Blöcke aus dem Logic-Teil (blau,türkis) nehmen! Enrico

387

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge