Weiter zum Inhalt

Skripten / Logik

16.7k Themen 216.0k 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
    D
    @maxclaudi sagte: @Daniel-8 sagte: Aber beides braucht man ja eigentlich nicht... Richtig, beides benötigt man nicht. @Daniel-8 sagte: ....oder gibt es da einen Vorteil? Vorteile mit Cloud-Ersatz-Broker MQTT: MQTT ist komfortabler und schneller, weil es dann nicht reglementiert ist, wie das offizielle lokale MQTT. Es bietet viel mächtigere Möglichkeiten. (Was auch eine Gefahr birgt, wenn man nicht weiß, welche Topics beschrieben werden, was sie als Antwort erwarten usw.) MQTT ist schneller, weil nicht gepollt werden muss. Wenn Werte sich ändern, wird es automatisch published. Man muss nur Änderungen triggern und nicht alle x Sek. die Werte abfragen. WiFi / HTTP(S) wird entlastet. Man bekommt alle wahren Topics und kann Werte setzen, die sonst nicht gesetzt werden können. (Birgt auch eine Gefahr in sich, wenn man wild experimentiert oder Werte setzt, die normaler Weise für Funktionen bestimmt sind, die die Cloud nur im HEMS setzen würde. Am besten man nutzt nur zum Schreiben "properties" wie mit zenSDK.) Dann sollte ja nichts passieren wenn man nur die properties nutzt. Mehr brauche ich ja sowieso nicht. Eigentlich brauche ich nur die einspeiseleistung und den min soc. Vorteil von zenSDK mit Cloud-Ersatz-Broker: Bei der Umstellung erst mal alles bleiben kann wie es ist und läuft dann wirklich lokal. Schneller wie bisher, weil es keine Cloud gibt, die permanent irgendwas abfragen, senden oder "dazwischen funken" kann. zenSDK prüft immer wieder, ob die Verbindung zur Cloud besteht. Das ist sie ja – in Form eines lokalen Brokers. Kann ich es riskieren mit dem direkten mqtt Adapter vom iobroker den Speicher auf lokal umzustellen? Müsste man erst testen. Ich verwende nur mosquitto. Ausgereift, zuverlässig, schlank, ressourcenarm und schnell.. Das kann ich ja mal machen. Ich kann ja zur Not mit deinem Programm immer wieder auf die cloud umstellen falls es nicht geht. @Daniel-8 sagte: Aber dafür muss ich mir mal Zeit nehmen. Das geht nicht mehr vor dem Urlaub. Schönen Urlaub Deiner Familie und Dir. Danke.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    Murphy 0M
    Nachdem mein Blockly zum Steuern meines Hyper 2000 seit Monaten perfekt läuft habe ich mich mal dem Problem mit meinem Elektroherd angenommen. Wen der Herd eingeschaltet ist und die Vorwärmphase beendet ist fängt er an zu pulsen. Das heist er schaltet alle ca. 30 Sekunden die Last ab und dann wieder nach ca, 30 Skunden die Last aus. Das ist für meinen Hyper suboptimal da der dann wenn die Sonne scheint dauernd zwischen Laden und Einspeisen hin und her schaltet. Auch Abends ohne Sonne schaltet er ständig das Einspeisen ein und aus. Dafür habe ich jetzt mal ein JS erstellt. Wärend dem Pulsen des Herdes hört der Hyper auf zu Laden oder Einzuspeißen. /************************************************************ Elektroherd - Pulserkennung über Hausverbrauch ioBroker JavaScript ************************************************************/ // ============================================================ // EINSTELLUNGEN // ============================================================ const HERD_LEISTUNG_W = 2000; const SCHWELLWERT_W = 1000; // Zeit nach dem letzten Puls bis zum Ende des Pulsens const ZEIT_NACHLAUF_SEKUNDEN = 15; // Anzahl notwendiger Wechsel const MIN_PULSE_WECHSEL = 4; // Zeit ohne Wechsel -> vollständiger Reset const ZEIT_OHNE_WECHSEL_SEKUNDEN = 60; // ============================================================ // OBJEKTE // ============================================================ const HAUSVERBRAUCH = '0_userdata.0.Hausverbrauch'; const AKKU = '0_userdata.0.Laden_Schalter'; const EINSPEISEN = '0_userdata.0.Einspeisen_Schalter'; // ============================================================ // VARIABLEN // ============================================================ let letzterStatus = 'start'; let pulseWechsel = 0; // Pulserkennung aktuell aktiv? let herdPulst = false; // Timer für das Ende des Pulsens let nachlaufTimer = null; // Timer für 60-Sekunden-Reset let wechselResetTimer = null; // Ursprüngliche Schalterzustände let urspruenglicherAkkuZustand = null; let urspruenglicherEinspeisenZustand = null; // ============================================================ // AUSGANGSSTELLUNG WIEDERHERSTELLEN // ============================================================ function ausgangsstellungWiederherstellen() { // Nur wenn vorher tatsächlich ein Pulsbetrieb // aktiviert wurde if (!herdPulst) { return; } // -------------------------------------------------------- // AKKU // -------------------------------------------------------- if (urspruenglicherAkkuZustand !== null) { setState( AKKU, urspruenglicherAkkuZustand ); } // -------------------------------------------------------- // EINSPEISEN // -------------------------------------------------------- if (urspruenglicherEinspeisenZustand !== null) { setState( EINSPEISEN, urspruenglicherEinspeisenZustand ); } log( 'Ausgangsstellung wiederhergestellt: ' + 'Laden=' + urspruenglicherAkkuZustand + ', Einspeisen=' + urspruenglicherEinspeisenZustand, 'warn' ); // Pulserkennung AUS herdPulst = false; // Gespeicherte Zustände löschen urspruenglicherAkkuZustand = null; urspruenglicherEinspeisenZustand = null; } // ============================================================ // VOLLSTÄNDIGER RESET // ============================================================ function vollstaendigerReset() { log( '60 Sekunden kein neuer Wechsel -> ' + 'vollständiger Reset', 'warn' ); // -------------------------------------------------------- // TIMER LÖSCHEN // -------------------------------------------------------- if (nachlaufTimer !== null) { clearTimeout(nachlaufTimer); nachlaufTimer = null; } // -------------------------------------------------------- // AUSGANGSSTELLUNG WIEDERHERSTELLEN // -------------------------------------------------------- if (herdPulst) { ausgangsstellungWiederherstellen(); } // -------------------------------------------------------- // PULSZÄHLER ZURÜCKSETZEN // -------------------------------------------------------- pulseWechsel = 0; // -------------------------------------------------------- // STATUS ZURÜCKSETZEN // -------------------------------------------------------- letzterStatus = 'start'; log( 'Pulserkennung AUS / Wechselzähler = 0', 'warn' ); } // ============================================================ // PULSEN STARTEN // ============================================================ function pulsenStarten() { if (herdPulst) { return; } // -------------------------------------------------------- // AUSGANGSSTELLUNG SPEICHERN // -------------------------------------------------------- urspruenglicherAkkuZustand = getState(AKKU).val; urspruenglicherEinspeisenZustand = getState(EINSPEISEN).val; log( 'Pulsen erkannt -> Ausgangsstellung gespeichert: ' + 'Laden=' + urspruenglicherAkkuZustand + ', Einspeisen=' + urspruenglicherEinspeisenZustand, 'warn' ); // -------------------------------------------------------- // PULSERKENNUNG EIN // -------------------------------------------------------- herdPulst = true; // Während des Pulsens beide AUS setState(AKKU, false); setState(EINSPEISEN, false); log( 'HERD PULST -> Laden_Schalter AUS / Einspeisen AUS', 'warn' ); } // ============================================================ // PULSEN NORMAL BEENDEN // ============================================================ function pulsenBeenden() { if (!herdPulst) { return; } log( 'Herdpulsen beendet', 'warn' ); // Ausgangsstellung wiederherstellen ausgangsstellungWiederherstellen(); // Zähler zurücksetzen pulseWechsel = 0; letzterStatus = 'start'; // Reset-Timer löschen if (wechselResetTimer !== null) { clearTimeout(wechselResetTimer); wechselResetTimer = null; } } // ============================================================ // 60-SEKUNDEN-RESET-TIMER // ============================================================ function wechselResetTimerStarten() { // Alten Timer löschen if (wechselResetTimer !== null) { clearTimeout(wechselResetTimer); } // Neuen Timer starten wechselResetTimer = setTimeout(function () { wechselResetTimer = null; // Nur wenn tatsächlich Wechsel gezählt wurden if (pulseWechsel > 0) { vollstaendigerReset(); } }, ZEIT_OHNE_WECHSEL_SEKUNDEN * 1000); } // ============================================================ // NACHLAUF-TIMER // ============================================================ function nachlaufTimerStarten() { if (nachlaufTimer !== null) { clearTimeout(nachlaufTimer); } nachlaufTimer = setTimeout(function () { nachlaufTimer = null; const aktuell = Number( getState(HAUSVERBRAUCH).val ); if (aktuell <= SCHWELLWERT_W) { pulsenBeenden(); } }, ZEIT_NACHLAUF_SEKUNDEN * 1000); } // ============================================================ // HAUSVERBRAUCH ÜBERWACHEN // ============================================================ on( { id: HAUSVERBRAUCH, change: 'ne' }, function (obj) { const leistung = Number(obj.state.val); if (isNaN(leistung)) { log( 'Ungültiger Hausverbrauch: ' + obj.state.val, 'warn' ); return; } // ==================================================== // HOHER VERBRAUCH // ==================================================== if (leistung >= HERD_LEISTUNG_W) { // Wechsel NIEDRIG -> HOCH if (letzterStatus === 'niedrig') { pulseWechsel++; log( 'Puls HOCH: ' + leistung.toFixed(0) + ' W | Wechsel=' + pulseWechsel, 'warn' ); // 60-Sekunden-Timer neu starten wechselResetTimerStarten(); } letzterStatus = 'hoch'; // Nachlauf abbrechen if (nachlaufTimer !== null) { clearTimeout(nachlaufTimer); nachlaufTimer = null; } // ================================================= // 4 WECHSEL ERREICHT // ================================================= if ( pulseWechsel >= MIN_PULSE_WECHSEL && !herdPulst ) { pulsenStarten(); } return; } // ==================================================== // NIEDRIGER VERBRAUCH // ==================================================== if (leistung <= SCHWELLWERT_W) { // Wechsel HOCH -> NIEDRIG if (letzterStatus === 'hoch') { pulseWechsel++; log( 'Puls NIEDRIG: ' + leistung.toFixed(0) + ' W | Wechsel=' + pulseWechsel, 'warn' ); // 60-Sekunden-Timer neu starten wechselResetTimerStarten(); } letzterStatus = 'niedrig'; // Wenn Herd bereits pulst, // Nachlauf starten if (herdPulst) { nachlaufTimerStarten(); } return; } } ); // ============================================================ // STARTMELDUNG // ============================================================ log( '============================================', 'warn' ); log( 'Elektroherd-Pulserkennung gestartet', 'warn' ); log( 'Herdleistung: ' + HERD_LEISTUNG_W + ' W', 'warn' ); log( 'Schwellwert: ' + SCHWELLWERT_W + ' W', 'warn' ); log( 'Nachlauf: ' + ZEIT_NACHLAUF_SEKUNDEN + ' Sekunden', 'warn' ); log( 'Benötigte Wechsel: ' + MIN_PULSE_WECHSEL, 'warn' ); log( 'Reset nach ' + ZEIT_OHNE_WECHSEL_SEKUNDEN + ' Sekunden ohne Wechsel', 'warn' ); log( '============================================', 'warn' );
  • Hilfe für Skripterstellung mit Node-RED

    964 13k
    964 Themen
    13k Beiträge
    OliverIOO
    @andibr Als erstes muss man rausfinden an welcher Node der Fehler entsteht. Dann in dieser function node etwas debug code einbauen Damit man sieht was für ein datentyp da ankommt und was für Inhaltsangaben ankommt. Dann muss man bewerten wie man damit umgeht. Wenn es sonst funktioniert, dann kann man das einfach durch Code ausfiltern, also keine msg zurückgeben, so das die nachfolgenden nodes nicht getriggert werden. Nur mit einem Bild vom Flow kann niemand was anfangen. Mit mehr, kann ich erst Ende nächster woche weitermachen
  • Liste von Geräte IDs die einen bestimmten Status haben

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    C
    Ich habe jetzt einen anderen Weg eingeschlagen und den Code im Link von pix umgebaut. Jetzt habe ich ein JSON: [{"id":"hm-rpc.1.NEQ0891532.13.STATE","displayName":"Wohnzimmer"},{"id":"hm-rpc.1.NEQ0891532.17.STATE","displayName":"Küche"}] Ich überlege, wie ich das jetzt in Vis darstellen könnte. Im Grunde möchte ich eine Liste bauen welche eine Lampe und den Namen darstellt. Die Objekt ID soll gleich gesetzt sein, damit man diese halt auch schalten kann.
  • [Frage] Batterielevel aus Fully Browser weiterverwenden

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    2k Aufrufe
    PeoplesP
    die Variante mit PAW klingt sehr interessant, jedoch würde ich gerne "Nur" den Akkustand mit Hilfe von fully auslesen. ... console.log( "Battery Level: " + fully.getBatteryLevel() ); setState("javascript.0.Batteriestatus", fully.getBatterylevel()); // falls string: fully.getBatteryLevel().toFloat(); console.log( "Screen Brightness: " + fully.getScreenBrightness() ); ... Mir erschließt sich nur nicht wie ich bzw. wo ich das o.g. einbinden kann. In Vis selbst, oder in einem sep. script? Weil wenn ich einfach ein Script erstelle mit einem bspw. schedule um das ganze zyklisch abzufragen bekomme ich nur eine Fehlermeldung, da Fully.getBatterylevel nicht vorhanden ist. Oder muss ich in Vis ein bspw. html objekt erstellen welches die daten dann an meinen Datenpunkt übergibt? Grüße
  • [gelöst]Suchfunktion im Java Skript Adapter

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    769 Aufrufe
    S
    Danke, das war es. Ich hatte irgendwie den Ficus nicht richtig und es wurde immer nur die google suche geöffnet. Weil ich Strg. F und S probiert hatte. Nachdem ich in das Skript reingeklickt und dann Strg. F gedrückt habe: alles gut. Sorry!
  • Einfaches Script zur Gesamtstromberechung mit Fehler?

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    887 Aufrufe
    G
    Danke Paul. Geht jetzt. > Bitte in Zukunft kein Screenshot vom Skript, sondern eine Kopie aus dem JS-Editor-Fenster in Code tags posten. Ja macht sinn
  • [Hinweis] Blockly - Lösung für Fehler im Trigger mit mehreren Eingängen

    Verschoben
    3
    3
    0 Stimmen
    3 Beiträge
    897 Aufrufe
    rantanplanR
    @lobomau: Wenn man einen Trigger-Eingang Hinzufügt oder Wegnimmt, dann springt der Trigger Block auf "wurde geändert" zurück, wenn man da vorher auf was anderes wie z.B. "wurde aktualisiert" oder "ist wahr" war. Ist das Absicht? Ich denke nicht. Falls sich das einfach ändern lässt, dann wäre es schön. Inzwischen weiß ich es. Aber ich habe mich schon mal totgesucht als nach einer Änderung das Script nicht mehr das tat was es sollte. Das übersieht man zuerst, weil man da ja nichts geändert hat. ` Den Bug habe ich schon bei Trello reingesetzt. Bluefox ist informiert. Grüße
  • (gelöst) Erster Versuch in Blockly

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    rantanplanR
    Prima! Wenn Du weitergekommen bist, setzte bitte ein [Gelöst] in den Betreff Deines ersten Eintrags. Weitere Infos hier http://forum.iobroker.net/viewtopic.php?f=8&t=2451 Grüße
  • KNX Status änderung per Pushover

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    750 Aufrufe
    DutchmanD
    Tip: Fang mit blockly an und mach dir ein paar Schaltungen, Wechsel zur Code Sicht und du siehst was blockly für Skripte gebaut hat. So hab ich auch angefangen und manchmal wenn Mal wieder ne Lücke hab Klaue ich von blockly und danach ergänzen mit eigenes script –----------------------- Send from mobile device
  • [Frage] Hilfe für Script

    Verschoben
    6
    1
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    eric2905E
    @Xxxvale46xxx: Geht es im Vis oder nur als Programm? ` Stimmt, den "ON_TIME" hatte ich vergessen. Mir ist auf Anhieb kein Widget bekannt, welches mehrere Aktionen nacheinander ausführt (Setze "ON_TIME" auf 30 Sekunden und dann den "STATE" auf True). Da müsste aber über eine Szene oder ein Javascript gehen, welches dann per Button gestartet wird. Gruß, Eric
  • [Frage] Wecker Uhrzeit Änderung Shedule funktioniert nicht korrekt

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    692 Aufrufe
    paul53P
    Wo hast Du die Variablen timer, idZeit, h und m deklariert ? var idZeit = '...'; var timer = null; var h; var m; ...
  • Kann Webrequest in Blockly nicht auswerten

    Verschoben
    16
    1
    0 Stimmen
    16 Beiträge
    2k Aufrufe
    DutchmanD
    @pino: Die Leerzeichen waren das Problem. Start: true :Ende Vielen Dank noch mal für Deine Hilfe. ` Gut zu wissen, jedenfalls schöne Hilfe mit debug sollte jemand Mal dasselbe Problem haben [emoji6] Btw: wenn da false steht erwartet man auch damit rechnen zu können [emoji23] Happy coding! Sent from my iPhone using Tapatalk
  • Node Flow schaltet cuxd nicht?!

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    F
    Susi. Danke, das wars. Im iobroker-Node von value auf command gestellt und schon geht es. Mit freundlichen Grüßen Fatfred
  • [Gelöst] Per script bestimmten wert aus object laden

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    DutchmanD
    Danke @Paul53, das war die lösung und ich fühl mich wie ein idioot :mrgreen:
  • [gelöst]Skript soll nur EINMAL auslösen: wie?

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    934 Aufrufe
    DutchmanD
    @skorpil: Daaanke an alle. Läuft! ` Super, schreibe bitte gelöst in den thread Title @Pix, Danke kannte ich noch nicht wieder was gelernt Sent from my iPhone using Tapatalk
  • [Gelöst] Frage zu compareTime

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    4k Aufrufe
    paul53P
    @bahnuhr: Dann in deinem Script: var Zeit1 = isTimeInRange('09:00:00', '20:00:00'); Wenn das Ergebnis dann false, dann bist du in deinem Zeitraum 20-09 Uhr. ` Diese Methode funktioniert auch mit dem nicht korrigierten compareTime() if(getState("javascript.0.Schlafmodus.Schlafmodus_Status").val && !compareTime("09:00", "20:00", "between") && getState("javascript.0.Automation.Automatikfunktioen").val) oder if(getState("javascript.0.Schlafmodus.Schlafmodus_Status").val && compareTime("09:00", "20:00", "not between") && getState("javascript.0.Automation.Automatikfunktioen").val)
  • Skript will sich einfach nicht ausführen lassen

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    S
    Danke für die vielen Antworten, hat jetzt geklappt :) Habe jetzt ne mobile UI über die ich per Button meine Funksteckdose an und ausschalten kann. gruß scooop
  • Werte aus Webseite auslesen

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    5k Aufrufe
    DutchmanD
    @0018: @Dutchman: , eventueel koenntest du noch im http get nur die station abfragen welche du brauchst verbrauch dan bisschen weniger ressourcen anstaat nur diesen wert aus der ganzen liste zu lesen. ` Wie genau muss ich das anstellen? ` durch an deinen link bij station.sj nog id=>UUID<& hinzu zu fuegen. Also z.b.: jetzt (alle daten) https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json?includeTimeseries=true&includeCurrentMeasurement=true nur die daten von Edeltalsperre https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json?ids=EDERTALSPERRE&includeTimeseries=true&includeCurrentMeasurement=true Zie API erklaehrung: https://www.pegelonline.wsv.de/webservice/dokuRestapi Zugriff auf bestimmte Stationen: /stations.json?ids=BONN,2730010 Bestimmte Pegel. Für die IDs kann eine Pegelnummer, ein Pegelname oder eine UUID verwendet werden.
  • Zu blöd für "wenn eins oder mehrere aus mehreren = true dann"… / Fensterskript

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    708 Aufrufe
    T
    Danke dir. Leider hilft es aber nicht, da dieses Skript genau das tut, was ich nicht brauche/will: es iteriert durch alle Kontakte im Gewerk "Fenster" bzw Verschluss aus der CCU2. Ich will ja statt 25 Fensterkontakte abzufragen mit blöden Namen nur 9 Räume abfragen aus Systemvariablen der CCU2. Aber auch ganz grundsätzlich interessiert mich, wie man bei JS eine if Abfrage mit vielen "oder"-Varianten kreiiert. Danke und Grüße
  • [Problem] Nach Systemstart Steuerwerte NaN

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    465 Aufrufe
    apollon77A
    Hey, naja nicht wirklich glaube ich. Du musst nur was einbauen das die Werte auch bei Skriptstart gelesen werden wenn Du Sie lokal brauchst. Das CreateState wird eigentlich nur ein einziges mal am Anfang ausgeführt und damit auch der Default.-Wert nur einmalig gesetzt. Sobald das State da ist passiert da nix mehr
  • Warte bis "true" dann führe Aktion aus.

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    DutchmanD
    @paul53: @Dutchman: Logic mit nem PING und erst wen der PING den onkyo findet schalten Dafür gibt es den ioBroker.ping Adapter. Den ping-Erfolg kann man einfach [http://forum.iobroker.net/viewtopic.php?f=21&amp;t=5914#p60755](http://forum.iobroker.net/viewtopic.php?f=21&amp;t=5914#p60755) auswerten. Danke Paul hab ich total ubersehen in aller eile ! @riconr1: das Angebot nehme ich gerne an. So ein Beispiel würde mir doch sehr helfen. MfG Enrico ` Machen wir dafuer gibt es ja communitys :D Also hier mal ein blockly wobei ich ganz einfach den status eines HM schalters ueberpruefe ober er an oder aus ist. Ist der schalter an = direckt commando auf wert fuer Onkyo receiver Ist der Schalter aus = Delay beim einschalten des onkyo [image: 979_simple_blockly.jpg] Hier der code um diesen block in dein system zu kopieren: ! <block xmlns="http://www.w3.org/1999/xhtml" type="controls_if" id="?5f2Q;%s3J)j`=w+(JJm" x="113" y="112.99999999999994"><mutation elseif="1"></mutation> <value name="IF0"><block type="logic_compare" id="qcKV[)q6u}?V#KQ=%Z9^"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="Q@vB@|0x82t1MV(4_K#D"><field name="ATTR">val</field> <field name="OID">hm-rpc.0.MEQ0165864.2.STATE</field></block></value> <value name="B"><block type="logic_boolean" id="Mt^s4uN(2xfLS{3s,#cC"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="update" id="4a[{alj:Vq2aGq@!|n[~"><mutation delay_input="false"></mutation> <field name="OID">harmony.0.Woonkamer.Onkyo_AV_Receiver.PowerOn</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="gA)m;Nv-1-4JRZCz{)w="><field name="TEXT">1</field></block></value> <next><block type="comment" id="{=BTv2=d]A!Y8yG^:I4]"><field name="COMMENT">Bei kontrolle schalter = AN kein delay schalte</field></block></next></block></statement> <value name="IF1"><block type="logic_compare" id="M]xH9[ITv+6Nc{,Kc1+F"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="6xrYTG:3rg=YzM`u9-_w"><field name="ATTR">val</field> <field name="OID">hm-rpc.0.MEQ0165864.2.STATE</field></block></value> <value name="B"><block type="logic_boolean" id="7Lpn`xX+)/].)XML6/qo"><field name="BOOL">FALSE</field></block></value></block></value> <statement name="DO1"><block type="comment" id="~6?Ql)MAmo);:Y3d!b+5"><field name="COMMENT">Bei kontrolle schalter = AUS schalte mit delay</field> <next><block type="timeouts_settimeout" id="^tFK[S8%S)zp%d5;,r-f"><field name="NAME">timeout</field> <field name="DELAY">1000</field> <statement name="STATEMENT"><block type="update" id="kU~2dFzbn3M5@__qyh4^"><mutation delay_input="false"></mutation> <field name="OID">harmony.0.Woonkamer.Onkyo_AV_Receiver.PowerOn</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="text" id="6!J?[c)l#ii*_{;b}|yf"><field name="TEXT">1</field></block></value></block></statement></block></next></block></statement></block> ! Und als script: var timeout; if (getState("hm-rpc.0.MEQ0165864.2.STATE").val == true) { setState("harmony.0.Woonkamer.Onkyo_AV_Receiver.PowerOn"/*Onkyo_AV_Receiver:PowerOn*/, '1', true); // Bei kontrolle schalter = AN kein delay schalte } else if (getState("hm-rpc.0.MEQ0165864.2.STATE").val == false) { // Bei kontrolle schalter = AUS schalte mit delay timeout = setTimeout(function () { setState("harmony.0.Woonkamer.Onkyo_AV_Receiver.PowerOn"/*Onkyo_AV_Receiver:PowerOn*/, '1', true); }, 1000); } Pass aber bitte auf dies ist nur ein teil der loesung naemlich logik ueberpruefe den statu der steckdose und schalte demnach den verstaerker. Jetzt musst du noch: Bestimmen wie du dieses script startest, z.b. eine variable anlegen welche due mit scene adapter auf true setzt. Javascript reagiert dan z.b. auf diese variabele Wen in deiner scenen logic auch das einschalten der steckdose aufgenommen ist, muss dieses script natuerlich davor laufen :) Da ich deine situation nicht genau kennen etwas schwierig genau die schritten oder ein end-to-end loesung als beispiel zu geben. Ich gehe jetzt mal dumweg davon aus das dus alles mit scenen geschaltet has und nur logic fuer delay einschalen verstaerker hinzufuegen moechtest ? Es waere auch logissch die stekdose in der ElseIf einzubauen. Den trigger/art von script und in welche kombination haengt von deinen wunsch und realisierung ab :) Also: Mach dir einen plan wie deine scenario aussieht und unter welchen bedingungen was gemacht werden soll Ist dir egal op script/blockly oder scene oder hast du da wuensche ? Wen ja macht dir nen plan was wohl und nicht geht z.b. scene und anders geloest werden muss (wie if/then delay) Definieren was dein trigger sein wird, ein script muss auch gestartet werden das geht z.b. per variabelen aenderung, PS: mit scene kannst du auch ein script an oder ausschalten, z.b. die blocke welche ich gepostet haben. Dan verlegtst du das einschalten des receiver auf ein script, diesen script activierst du mit deiner scene und am ende noch block hinzufuegen script wieder aus. habe nochmal nachgedacht ueber den ping, das wird nicht gehen. Bei mir getested und wie befuerchtet is der ping schneller da als das onkyo auf ein IR signal reagiert. Da er aber immer glaich lang zum starten brauch ist ein fester delay schon OK denke ich mal ? Greetz, Dutch
  • Blockly Hilfe 2 Objekte schalten

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    D
    Ja das hängt mit der Trägen reaktionszeit des BM zusammen und soll später ausgeschmücht werden. aber das ist ja eigentlich egal oder nicht ? trotzdem müsste der switch doch geschaltet werden oder nicht ?

421

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge