Skip to content

Skripten / Logik

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

16.4k Themen 211.9k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Themen
    48k Beiträge
    P
    @ArnoD sagte in E3DC Hauskraftwerk steuern: @psrelax sagte in E3DC Hauskraftwerk steuern: Hier sollte nicht geladen werden, da kurz darauf der Preis fällt. Bin ja gespannt, ob da wirklich geladen wird. Jetzt wurde es geändert auf 01:30 Uhr, warum auch immer das so ist, dass vorher ein anderer Zeitraum geplant wird. :-)
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Themen
    78k Beiträge
    AsgothianA
    @docadams sagte in verschiedene Datenpunkte sammeln und als CSV verschicken: Naja, dagegen spricht meine Unwissenheit :-/ Unwissenheit schützt for str.. Lösung nicht. Für heute ist es etwas spät, aber morgen sollte Zeit sein mal ein Blockly Beispiel zu bauen welches die Datei erzeugt. Du kannst ja in Vorbereitung mal das Blockly posten welches die Daten via Telegram versendet :) Der weg vom ioBroker zu Dir ist dann der hier: [image: 1765233919378-screenshot-2025-12-08-at-23.45.13.png] Einfach mit nem Web-Browser herunter laden :) A.
  • 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
  • Zigbee Response aus JS oder Blockly schicken?

    15
    0 Stimmen
    15 Beiträge
    2k Aufrufe
    M
    @newpaint2 Hallo. Dürfte ich eine Frage stellen. Habe auch das Alarmpaneel. Also die Anmeldung bei Bewegung funktiniert. Wenn ich einen Modus ändere bekomme ich immer einen Timout und die LED Leuchtet rot. Funktniert bei dir die Eingabe. Vielen Dank 15:40:18.207 info javascript.0 (31092) script.js.Sicherheit.Alarm: Tastatur Wert :{"type":"commandGetPanelStatus","data":{},"linkquality":83,"groupID":0,"cluster":"ssIasAce","meta":{"zclTransactionSequenceNumber":49,"manufacturerCode":null,"frameControl":{"frameType":1,"manufacturerSpecific":false,"direction":0,"disableDefaultResponse":false,"reservedBits":0}},"endpoint_id":1} 15:40:18.207 info javascript.0 (31092) script.js.Sicherheit.Alarm: Tastatur Kanal ID: zigbee.0.ec1bbdfffe715503 15:40:18.208 info javascript.0 (31092) script.js.Sicherheit.Alarm: Tastatur Seqenz: 49 15:40:18.208 info javascript.0 (31092) script.js.Sicherheit.Alarm: CommadnGetPaneelStatus 15:40:18.209 info javascript.0 (31092) script.js.Sicherheit.Alarm: sendTo(adapter=zigbee.0, cmd=sendToZigbee, msg={"id":"ec1bbdfffe715503","ep":"1","cid":"ssIasAce","cmd":"getPanelStatusRsp","cmdType":"functionalResp","zclSeqNum":49,"zclData":{"panelstatus":"1","secondsremain":"30","audiblenotif":"1","alarmstatus":"1"}})
  • Shuttercontrol - Regenschutz bei offenem Fenster

    1
    0 Stimmen
    1 Beiträge
    176 Aufrufe
    Niemand hat geantwortet
  • (gelöst) Blockly konvertiert boolean nicht nach Zahl ??

    5
    2
    0 Stimmen
    5 Beiträge
    465 Aufrufe
    M
    @paul53 ok.. das erklärt es...
  • Blockly langsam und speichert oft nicht

    9
    0 Stimmen
    9 Beiträge
    337 Aufrufe
    HomoranH
    @djmarc75 geht doch um die Bearbeitung im Editor
  • Abfrage der Erreichbarkeit der Sensoren

    blockly
    25
    0 Stimmen
    25 Beiträge
    3k Aufrufe
    H
    @htrecksler ich habe das mal ein bisschen überarbeitet. Der createState war nicht korrekte und das Log hat Fehler geworfen. Das Objekt was angelegt wurde war nur Read Only. Hier die angepasste Version: //Das Script überprüft regelmässig die Datenpunkte auf Aktualisierung //Angabe des Datenpunkts= Datenpunkt der Überwacht werden soll //StateBezeichnung= Unter pfad_javascript.StateBezeichung wird ein State angelegt; True = Daten sind aktuell / False = Daten veraltet //Zeit in Sekunden = Zeit die vergangen sein darf seit der letzen Aktualisierung des Datenpunkts (0 = default Zeit wird genommen). schedule("*/3 * * * *" , function () { // Angabe des Datenpunkts;StateBezeichnung;Zeit in Sekunden var ueberwachung = ['mqtt.0.Wetterstation.Batterie;Wetterstation;440']; var default_zeit = 400; var pfad_userdata ='0_userdata.0.watchdog.'; // !Punkt nicht vergessen am Ende! //------------------------------------------------------------------ //Ab hier nichts mehr Ändern //------------------------------------------------------------------ var zeit= Math.floor(Date.now() / 1000); var differenz, lchange; var daten, tchange; ueberwachung.forEach(function(item, index, array) { // Array Splitten daten = item.split(";"); //Datenpunkt erstellen wenn nicht vorhanden createState(pfad_userdata + daten[1], { read: true, write: true, name: "Watchdog " + daten[1], type: "boolean", def: false } ) //Differenz Zeit default oder manuell? differenz = parseInt(daten[2]); if (differenz == 0) differenz=default_zeit; //Zeitstempel abfragen in Sekunden tchange=parseInt(getState(daten[0]).ts / 1000); //Vergleichen der Zeitstempel if ((zeit-tchange)>differenz) { setState(pfad_userdata + daten[1], false); //setState("telegram.0.communicate.response", daten[1] + ' - ' + "Info: Sensor nicht erreichbar"); //console.log(daten[1] + " ist älter als " + differenz + " Sekunden", 'warn'); } else { setState(pfad_userdata + daten[1], true); //console.log(daten[1] + " ist jünger als " + differenz + " Sekunden"); } }); });
  • Shuttercontrol Sonnenschutz funktioniert nicht (Homematic)

    5
    6
    0 Stimmen
    5 Beiträge
    468 Aufrufe
    E
    Ok, danke. Das scheint das Problem gelöst zu haben. Ich danke euch für eure Tipps.
  • Vorstellung meines Bewohnerstatus

    blockly javascript
    5
    1
    2 Stimmen
    5 Beiträge
    2k Aufrufe
    EisteeE
    @rtwl Ich verwende Bewegungsmelder. Und ja wir leben zu zweit mit Hund und ja der Bewegungsmelder im Schlafzimmer sieht auch wenn man sich im Bett bewegt. Aber ich habe den Bewegungsmelder halt so mit Bedingungen verknüpft das er nur das schlafen gehen anstößt (gotosleep) und damit Lichtscene dunkles zu Bett geh Licht. Das Schlafend (asleep) steuert dann Licht aus und kommt automatisch nach 10 Minuten oder durch einen Schalter am Bett mit dem man bei bedarf das Licht auch wieder an schalten kann. Der Bewegungsmelder Schaltet bei Dämmerung das Licht für eine Dauer an wenn der Status home gesetzt ist. Wenn gotosleep oder asleep gesetzt sind macht der Bewegungsmelder kein Licht an. Da steuert das gotosleep und asleep dann direkt das Licht. Bedingung zum schlafen gehen (gotosleep) bei mir: Uhrzeit 22:00-04:00Uhr und beide Harmony Hubs (Beamer / Fernsehr in verschiedenen Räumen) melden Aus. Getriggert durch Bewegungsmelder Schlafzimmer oder Bewegungsmelder Bad Im Bild die Bedingungen und ich stehe immer zuerst auf deshalb setzt mich der Bad Bewegungsmelder wieder wach.[image: 1659084363562-screenshot-2022-07-29-104455.png]
  • Zähle Datenpunkte innerhalb eines Verzeichnis

    3
    0 Stimmen
    3 Beiträge
    338 Aufrufe
    C
    @paul53 sagte in Zähle Datenpunkte innerhalb eines Verzeichnis: $('Verzeichnis-ID.*').length Danke schonmal. length gibt mir dann die Länge der Zeichen von der Verzeichnis-ID aus. Edit: Vergiss es. Hab das Dollar-Zeichen vergessen. Passt. Danke dir :)
  • RGB Lampe mit XY Wert füttern

    9
    0 Stimmen
    9 Beiträge
    244 Aufrufe
    mickymM
    @gluecksmann du könntest ja mal versuchen, ob die von @DJMarc75 erwähnten r,g,b Datenpunkte funktionieren oder bissi googeln. Hier mal Farben in dem von Dir gewünschten Format: https://www.enigmaticdevices.com/philips-hue-lights-popular-xy-color-values/ Außerdem kann man vielleicht in dem colormode, der auf xy steht, diesen auf rgb oder hsl umstellen.. EDIT: So wie ich verstanden habe, kann die HUE Bridge nur xy Color Werte, aber das sollte nach meinem Verständnis automatisch umrechnen, da der die entsprechende API zur Konvertierung eingebaut hat. So habe ich diesen Thread hier verstanden: https://forum.iobroker.net/topic/1510/iobroker-hue-mit-hue-bridge-2
  • Blockly warten mit Bedingung

    27
    1
    0 Stimmen
    27 Beiträge
    2k Aufrufe
    rtwlR
    @cainam sagte in Blockly warten mit Bedingung: Meine Idee war mal zB den Wert Stromverbrauch zu überwachen. Dh beim Runtergehen ist dieser auf >50W. sobald dieser wieder auf 0ist würde dann der Befehl auf 66% ausgelöst. doch schaff ich das nicht Ich zitiere mal deine Idee aus Beitrag #1. Selbe Idee hatte ich auch und konnte es so lösen. Keine Ahnung ob du es mittlerweile geschafft hast, aber vielleicht hilfts dennoch: [image: 1658868743136-523ec876-bf0c-45a3-9a15-c7a99266ff2b-image.png] Raff_Position bzw Raff_Power sind die jeweiligen Datenpunkte der Shellys. Sobald Position 0 angefahren wird, wird eine Minute lang (60 Wiederholungen) jede Sekunde (Pause 1000ms) geprüft ob der Stromverbrauch kleiner als 5W ist. Falls ja, wird auf Position 2 gefahren und die Schleife abgebrochen.
  • Shelly Bulbs gruppieren und RGBW per Alexa steuern

    10
    1
    0 Stimmen
    10 Beiträge
    596 Aufrufe
    da_WoodyD
    @reutli hehe, gerne doch! die farbtemperatur in weiß hab ich nicht geschafft. da muss ich noch text üben... ;) effekte konnte ich auch nicht schalten. wie gesagt, hufe in horizontallage für heute. wurde heute um 06:12 von einem blitzeinschlag ganz nahe geweckt... :dizzy_face:
  • IOBroker Anfänger-Problem Aquara Cube & Philips Hue

    4
    4
    0 Stimmen
    4 Beiträge
    201 Aufrufe
    HomoranH
    @planetcom sagte in IOBroker Anfänger-Problem Aquara Cube & Philips Hue: Der Trigger wird ausgelöst. du bist ja sogar schon im falls! also ist auch das korrekt
  • Rolläden zusammen fahren oder getrennt

    7
    0 Stimmen
    7 Beiträge
    556 Aufrufe
    D
    Okay, versuch ich es mal. Ich habe zuerst einen extra Datenpunkt unter den Objekten im user.data angelegt. Eine Zahl. [image: 1658756274059-objekt.png] Dieser Datenpunkt wird einfach durch den Schiebregler "Wohn-Esszimmer" mit einer Zahl zwischen 1-100 beschrieben. [image: 1658756408155-screen.png] So und dies kleine Blockly Script steuert jetzt bei einer Änderung dieses Datenpunktes die beiden Positionseinträge der Shellys mit dem Wert. Folge: die beiden Shellys lassen die Rolläden auf die Position fahren. [image: 1658756626710-position.png] Wenn ich jetzt mit den einzelnen Regler andere Werte für die Rolläden einstelle bleiben sie trotzdem unabhängig von einander. Erst wenn ich den gemeinsamen Regler wieder verstelle laufen sie wieder die gleiche Position an. Ich finde typische Fall von "wenn man weiß wie, ganz einfach" Kein Gemeckere wegen dem Design des Views, ist noch in Arbeit ;-)
  • GPIO Status Wemos d1 mini an iobroker senden

    193
    0 Stimmen
    193 Beiträge
    25k Aufrufe
    B
    @tt-tom Hat schon. #include <ESP8266WiFi.h> #include <ArduinoOTA.h> #include <PubSubClient.h> #include <AccelStepper.h> #include <Adafruit_NeoPixel.h> #ifndef STASSID #define STASSID "msg2" #define STAPSK "1629969423743097" #endif #define MotorStatus D2 // Steppermotor aktivieren/deaktivieren #define LEDpin D7 // Umgesteuerter GPIO für die NEO-Led #define NUMPIXELS 1 // Anzal der LEDs const char* ssid = STASSID; const char* password = STAPSK; char* mqtt_client_id = "Essig_Innen"; const char* mqtt_server = "192.168.49.38"; const int mqtt_port = 1886; const char* mqtt_user = "mqttuser"; const char* mqtt_password = "Beowolf503588"; const byte Pegelschalter = D6; // Pegelschalter für Essigvorrat const byte RelaisVentil = D5; // Relais für Wasserzufuhrventil // const long SchritteUmdrehung = 200; // Schritte des Schrittmotors für 360 Grad der Tür const unsigned int Essigdosis = 20000; int lebenszeichen_zaehler = 0; // Zähler um Lebenzeichen an MQTT Broker zusenden int lebenszeichen_interval = 10; // interval für MQTT Broker in sek int messung_interval = 10; // interval für Pegelmessung in sek long led_takt = 500; // Zeittakt (ms) für die LED ##takt## long led_zeit; // Letzter Durchlauf (ms) für die LED ##takt## long lebenszeichen_takt = lebenszeichen_interval * 1000; // Zeittakt (ms) ##takt## long lebenszeichen_zeit; // Letzter Durchlauf (ms) ##takt## long lebenszeichen_ein_aus = 0; // ##takt## long messung_takt = messung_interval *1000; // Zeittakt (ms) long messung_zeit; //Letzter Durchlauf (ms) WiFiClient espClient; PubSubClient mqttClient(espClient); AccelStepper stepper(1, D3, D4); //Pins für den Steppermotor STEP , DIR Adafruit_NeoPixel pixels = Adafruit_NeoPixel(2, LEDpin, NEO_GRB + NEO_KHZ800); void setup() { pinMode(LEDpin, OUTPUT); // NEO-LED pinMode(Pegelschalter, INPUT_PULLUP); // Pegelschalter für Essigtank pinMode(RelaisVentil, OUTPUT); // Relais für Wasserzufuhrventil pinMode(MotorStatus, OUTPUT); // Enable Motor 1 pinMode(LED_BUILTIN, OUTPUT); // Board-LED nutzen stepper.setMaxSpeed(1000); stepper.setAcceleration(1500); digitalWrite(MotorStatus, HIGH); //Motor deaktiviert Serial.begin(9600); // while(!Serial){ // ; // wartet bis die serielle Schnittstelle eine Verbindung hergestellt hat. Wird für natives USB benötigt // } // Per WLAN mit dem Netzwerk verbinden Serial.print("Verbinden mit "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } /////////////////////////////////////////// // Anfang Update über Wlan /////////////////////////////////////////// ArduinoOTA.onStart([]() { String type; if (ArduinoOTA.getCommand() == U_FLASH) { type = "sketch"; } else { // U_FS type = "filesystem"; } // NOTE: if updating FS this would be the place to unmount FS using FS.end() Serial.println("Start updating " + type); }); ArduinoOTA.onEnd([]() { Serial.println("\nEnd"); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { Serial.printf("Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { Serial.printf("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) { Serial.println("Auth Failed"); } else if (error == OTA_BEGIN_ERROR) { Serial.println("Begin Failed"); } else if (error == OTA_CONNECT_ERROR) { Serial.println("Connect Failed"); } else if (error == OTA_RECEIVE_ERROR) { Serial.println("Receive Failed"); } else if (error == OTA_END_ERROR) { Serial.println("End Failed"); } }); ArduinoOTA.begin(); /////////////////////////////////////////// // Ende Update über Wlan /////////////////////////////////////////// // Die IP vom Webserver auf dem seriellen Monitor ausgeben Serial.println(""); Serial.println("WLAN verbunden."); Serial.println("IP Adresse: "); Serial.println(WiFi.localIP()); // MQTT Brocker // Mit ioBroker Mqtt verbinden mqttClient.setServer(mqtt_server, mqtt_port);//MQTT Server, - Port mqttClient.setCallback(callback); // NEO_Pixel Start pixels.begin(); // This initializes the NeoPixel library. lebenszeichen_zeit = millis(); // ##takt## led_zeit = millis(); // ##takt## messung_zeit = millis(); Serial.println("Programmanfang"); } //ende Setup ////////////////////////////////////////////////////////////////////////////////// void loop() { ArduinoOTA.handle(); ArduinoOTA.setHostname("Essig_Innen"); Pegelstand_lesen(); Essigdosierer_deaktivieren(); lebenszeichen(); stepper.run(); // MQTT Broker mqttClient.loop(); if (!mqttClient.connected()) { reconnectToMQTT(); } } //ende loop ///////////////////////////////////////////////////////////////////////////////// void Pegelstand_lesen() { long current_time = millis(); if (messung_zeit <= current_time) { if (digitalRead(Pegelschalter)) { mqttClient.publish("HH_Frischwasser/Innen/Essigpegel", "1"); } else { mqttClient.publish("HH_Frischwasser/Innen/Essigpegel", "0"); } while (messung_zeit <= current_time) messung_zeit += messung_takt; } } // MQTT Funktion // ************* void reconnectToMQTT() { if (mqttClient.connect(mqtt_client_id , mqtt_user, mqtt_password)) { Serial.println("Per MQTT mit ioBroker verbunden"); mqttClient.publish("HH_Frischwasser/Innen/alive", "0"); mqttClient.subscribe("HH_Frischwasser/Innen/Frischwasserventil"); mqttClient.subscribe("HH_Frischwasser/Innen/Essigdosierer"); } else { Serial.print("mqtt-Verbindung fehlgeschlagen "); Serial.print(mqttClient.state()); Serial.println(" versuchen es in 5 Sekunden erneut"); // Wait 5 seconds before retrying delay(5000); } } // MQTT Callback void callback(char* topic, byte* payload, unsigned int length) { payload[length] = '\0'; String strTopic = String(topic); String strPayload = String((char * ) payload); Serial.print("Nachricht angekommen ["); Serial.print(strTopic); Serial.print("----"); Serial.print(strPayload); Serial.print("] "); Serial.println(); if (strTopic == "HH_Frischwasser/Innen/Frischwasserventil") { // Pumpe Start if (strPayload == "false") { Serial.println("Frischwasserventil geöffnet über IoBroker"); digitalWrite(RelaisVentil, HIGH); pixels.setPixelColor(0, pixels.Color(0, 0, 255)); //LED Farbe blau pixels.show(); } // Pumpe Stop if (strPayload == "true") { Serial.println("Frischwasserventil geschlossen über IoBroker"); digitalWrite(RelaisVentil, LOW); pixels.setPixelColor(0, pixels.Color(0, 255, 0)); //LED Farbe grün pixels.show(); } } if (strTopic == "HH_Frischwasser/Innen/Essigdosierer") { // Essigdosierer Start if (strPayload == "true") { Serial.println("Start Essigdosierer über IoBroker"); digitalWrite(MotorStatus, LOW); //Motor aktiviert stepper.move(Essigdosis); pixels.setPixelColor(1, pixels.Color(255, 127, 0)); //LED Farbe gelb pixels.show(); } } } void Essigdosierer_deaktivieren() { // Essigdosierer Stopp if (stepper.currentPosition() == Essigdosis) { Serial.println(stepper.currentPosition()); mqttClient.publish("HH_Frischwasser/Innen/Essigdosierer", "false"); Serial.println("Essigdosierer gestoppt"); pixels.setPixelColor(1, pixels.Color(0, 255, 0)); //LED Farbe grün pixels.show(); stopp(); } } void stopp() { stepper.setCurrentPosition(0); stepper.stop(); digitalWrite(MotorStatus, HIGH); //Motor deaktiviert } void lebenszeichen() { // ##takt## --> long current_time = millis(); // LED auf dem Board blinken lassen if (led_zeit <= current_time) { if (digitalRead(LED_BUILTIN) == HIGH) digitalWrite(LED_BUILTIN, LOW); else digitalWrite(LED_BUILTIN, HIGH); while (led_zeit <= current_time) led_zeit += led_takt; } if (lebenszeichen_zeit <= current_time) { if (lebenszeichen_ein_aus == 0) { mqttClient.publish("HH_Frischwasser/Innen/alive", "1"); lebenszeichen_ein_aus = 1; } else { mqttClient.publish("HH_Frischwasser/Innen/alive", "0"); lebenszeichen_ein_aus = 0; } while (lebenszeichen_zeit <= current_time) lebenszeichen_zeit += lebenszeichen_takt; } // ##takt## <-- }
  • Wled per Blocklyscript für Garagentorzustände steuern

    20
    2
    0 Stimmen
    20 Beiträge
    861 Aufrufe
    paul53P
    @spidermike sagte: wenn ich mit 2 Timeout arbeiten will [image: 1658684546909-bild_2022-07-24_194226382.png]
  • Umlaut im Javascript Namen - wie ändern?

    13
    1
    0 Stimmen
    13 Beiträge
    324 Aufrufe
    hg6806H
    So, habe es hinbekommen. Nach der Spiegelung habe ich es dort gelöscht und noch einmal in den Objekten. Jetzt geht wieder alles . Danke euch allen!
  • [gelöst] Webseite anlassbezogen auslesen

    5
    0 Stimmen
    5 Beiträge
    318 Aufrufe
    T
    @paul53 Spitze! Ich habe fürs nachbauen sicher länger gebraucht wie du fürs erstellen. Wenn mans dann sieht, klingt alles ganz logisch. Selbst draufgekommen wäre ich niemals. Besten Dank für die schnelle Hilfe. Schöne Grüße Tom
  • mit Verzögerung, löschen falls läuft deaktivieren

    9
    1
    0 Stimmen
    9 Beiträge
    302 Aufrufe
    paul53P
    @venturex sagte: Wo ist mein Fehler? Selektiere Wert anstelle von Objekt ID. Was hast Du gegen die Vereinfachung mit nur einem Timeout und der ODER-Verknüpfung der Uhrzeiten?
  • Datenpunkt auf "keine Änderung" überwachen

    3
    0 Stimmen
    3 Beiträge
    115 Aufrufe
    paul53P
    @androiddev sagte: Das Pythonscript sendet über Simple-Api jede Minute eine '0' an einen Datenpunkt. Das kann man mittels var timer = null; on({id: 'meineID'}, function() { // triggert bei jeder Zeitstempelaktualisierung clearTimeout(timer); timer = setTimeout(function() { // Aktion, wenn Trigger ausbleibt }, 150000); // 2,5 Minuten }); überwachen. Mehr muss nicht gemacht werden.
  • Idee Ausführung Skripte analog einer Siemens-SPS

    12
    3
    0 Stimmen
    12 Beiträge
    747 Aufrufe
    paul53P
    @flyer99 sagte: Der gibt dem JS Controller bescheid zum Starten des Skripts ? ... zum Auslösen des Ereignisses (Trigger, Ablauf eines Timers, ...) innerhalb des Skriptes.

558

Online

32.5k

Benutzer

81.6k

Themen

1.3m

Beiträge