Skip to content

Skripten / Logik

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

16.5k Themen 213.4k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    S
    ich habe es selber in einem unterordner von common Versuch mal vielleicht die Koordinaten selbst einzutragen (ich meine auf 4 stellen nach dem Punkt/Komma) Sonst bin ich gerade überfragt... [image: 1770917845379-ddb5d35f-b93f-434c-866f-2bdec03e0fbb-image.png]
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    S
    @MCU Vielen Dank für diesen wichtigen Tip. Ich bin dann zusätzlich noch von RGB auf xy umgestiegen, weil Hue damit nativ arbeitet. Durch deinen Hinweis konnte ich das Blitzen vermeiden, die jetzt überflüssige Szene löschen und vor allen Dingen meine sonstigen Skripte massiv ausdünnen. Top !
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    Marc BergM
    Es gibt in der Verson 1.3.0 einen neuen Node: iob-setObject (Stand 10.02.26 noch beta) Mit dem neuen Node kann man ioBroker-Objektdefinitionen (Metadaten) direkt schreiben und ändern. Hauptfunktionen: Instanz-Konfigurationen ändern - z.B. MQTT publish-Pattern, Intervalle, etc. Objekt-Eigenschaften aktualisieren - Namen, Rollen, Einheiten, Min/Max-Werte ändern es gibt zwei Modi: Merge-Modus : Ändert nur die angegebenen Eigenschaften, alle anderen bleiben erhalten Replace-Modus: Überschreibt das komplette Objekt Typischer Workflow: Objekt mit iob-getobject holen Mit Change-Node gewünschte Properties ändern Mit iob-setobject zurückschreiben
  • Blockly langsam und speichert oft nicht

    9
    0 Stimmen
    9 Beiträge
    338 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
    485 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
    367 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
    245 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
    601 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
    203 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
    598 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
    26k 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
    907 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
    326 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
    344 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
    306 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
    116 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
    831 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.
  • Zahlvariable erhöhen

    15
    1
    0 Stimmen
    15 Beiträge
    964 Aufrufe
    L
    @homoran richtig deshalb schon bei mir geändert
  • Wort in Wert von Objekt suchen

    3
    1
    0 Stimmen
    3 Beiträge
    237 Aufrufe
    rtwlR
    @ionar kannst du 10 Tage später bestätigen, dass der Wert (Symbol) 1 reicht für die Beschattung? Ist es bei "2 - teils bewölkt" nicht auch zu sonnig wo eine Beschattung Sinn machen würde?
  • Thermostat steuern in Iqontrol

    3
    0 Stimmen
    3 Beiträge
    260 Aufrufe
    E
    @paul53 Wegen dem 2-Punkt-Regler muss ich schauen, wenn ich von Dienstreise zurück bin. Soll-/Istwert zur Steuerung der Heizung, dass diese wirklich nur dann heizt, wenn bei den kritischen Stellen im Haus Frostgefahr aufkommt. Ist ein Altbau, den wir übernommen und zu 90% saniert haben. Leider ist die Heizung noch nicht ganz sauber, so dass wir im sanierten Teil Fussbodenheizung haben, im HWR, da wo auch die Frostgefahr am grössten ist, hängt aber ein Wandradiator, im gleichen Kreislauf mit der FBH. Die FBH hat zwar Raumregler, aber dennoch gibt das jedes Jahr unnötige Heizkosten, nur um auf Verdacht den HWR "schön warm" zu halten.

679

Online

32.6k

Benutzer

82.3k

Themen

1.3m

Beiträge