Weiter zum Inhalt

Skripten / Logik

16.6k Themen 214.5k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 49k
    3k Themen
    49k Beiträge
    maxclaudiM
    @Daniel-8 sagte: Ich habe heute mal angefangen mein ganzes Steuerungsscript umzuschreiben mit deinem Script zur Abfrage. Da ist mir aufgefallen, das im pass Modus der wert nicht 1 sondern 2 ist. [image: 1776934145376-screenshot-2026-04-23-104848.jpg] Ok, laut Dokumentation sollte es eigentlich nur 0 und 1 geben. Das Skript schreibt exakt den Wert in den Datenpunkt, der im JSON-Stream unter dem Key pass geliefert wird. Warum dort eine 2 ankommt, obwohl das SDK nur 0 und 1 vorsieht, ist mir rätselhaft. Es gibt auch über die Cloud für pass nur 0 (Bypass aus) oder 1 (Bypass aktiv). Zur Steuerung wird eigentlich ein separater, interner Key verwendet (passMode). Dieser hat die Werte 0 (Automatik), 1 (immer ausgeschaltet) und 2 (immer eingeschaltet). pass selbst informiert normalerweise nur darüber, ob der Bypass aktiv ist oder nicht. Bleibt abzuwarten, ob Zendure hier etwas an der API-Struktur ändert oder ob es ein temporärer Fehler im zenSDK-Output ist/war.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    hg6806H
    Danke für die Antworten. Der Adapter ist dafür etwas überdosiert, ist aber interessant, dass es sowas gibt. Das mit dem Zeitplan hatte ich mir auch schon überlegt, dachte es gibt was anderes oder besseres. Ich denke stündlich reicht in dem Fall.
  • Hilfe für Skripterstellung mit Node-RED

    955 13k
    955 Themen
    13k Beiträge
    mickymM
    @Tontechniker Man kann solche Filter aber auch OHNE neue Nodes zu installieren mit einfachen Standard-Switch Nodes realisieren: [image: 1776865319208-af3cab3c-2716-43f4-b7df-7f74e8bf051b-image.jpeg] ggf. einfach nochmal meinen alten Thread anschauen: https://forum.iobroker.net/topic/50086/datum-und-zeitverarbeitung-mit-nodered
  • Node Red Flow schaltet Lampe nicht aus.

    6
    1
    0 Stimmen
    6 Beiträge
    884 Aufrufe
    mickymM
    @falconsbg Auch in Deinem Switch überprüfst Du auf Text/Zeichenkette und nicht auf Boolean. [image: 1634147145590-b26b0280-0bf6-456f-b214-58c130b8554d-image.png] [image: 1634147177876-1215a453-2784-41e4-bf3f-f36215f08cc5-image.png] In beiden Switch Nodes!!!
  • Javascript-Adapter Script-Mirror

    javascript
    19
    0 Stimmen
    19 Beiträge
    3k Aufrufe
    A
    @thomas-braun sagte in Javascript-Adapter Script-Mirror: /home/iobroker/backup_skripte Vielen dank !!! jetzt gehts
  • [Script] Fully Kiosk Browser steuern und Informationen in Datenpunkten

    Verschoben
    22
    4
    1 Stimmen
    22 Beiträge
    7k Aufrufe
    A
    Hallo mit dem neuesten Update von JS müsste glaub ich das ACK flack gesetzt werden... ich bekomme nun immer diese Fehlermeldungen: Read-only state "javascript.0.mic.FullyBrowser.Info.appFreeMemory" has been written without ack-flag with value "90088816" javascript.0 2021-10-12 18:06:00.466 warn Read-only state "javascript.0.mic.FullyBrowser.Info.kioskLocked" has been written without ack-flag with value "false" javascript.0 2021-10-12 18:06:00.465 warn Read-only state "javascript.0.mic.FullyBrowser.Info.SSID" has been written without ack-flag with value ""FRITZ!Box 7362 SL"" javascript.0 2021-10-12 18:06:00.463 warn Read-only state "javascript.0.mic.FullyBrowser.Info.screenBrightness" has been written without ack-flag with value "25" javascript.0 2021-10-12 18:06:00.462 warn Read-only state "javascript.0.mic.FullyBrowser.Info.locationProvide" has been written without ack-flag with value "network" javascript.0 2021-10-12 18:06:00.461 warn Read-only state "javascript.0.mic.FullyBrowser.Info.currentTabIndex" has been written without ack-flag with value "0" javascript.0 2021-10-12 18:06:00.460 warn Read-only state "javascript.0.mic.FullyBrowser.Info.displayWidthPixels" has been written without ack-flag with value "1280" javascript.0 2021-10-12 18:06:00.459 warn Read-only state "javascript.0.mic.FullyBrowser.Info.androidSdk" has been written without ack-flag with value "19" javascript.0 2021-10-12 18:06:00.458 warn Read-only state "javascript.0.mic.FullyBrowser.Info.lastAppStart" has been written without ack-flag with value "12.10.2021 02:00:39" javascript.0 2021-10-12 18:06:00.457 warn Read-only state "javascript.0.mic.FullyBrowser.Info.isDeviceAdmin" has been written without ack-flag with value "true" javascript.0 2021-10-12 18:06:00.456 warn Read-only state "javascript.0.mic.FullyBrowser.Info.screenOrientation" has been written without ack-flag with value "90" javascript.0 2021-10-12 18:06:00.454 warn Read-only state "javascript.0.mic.FullyBrowser.Info.isInForcedSleep" has been written without ack-flag with value "false" javascript.0 2021-10-12 18:06:00.453 warn Read-only state "javascript.0.mic.FullyBrowser.Info.isPlugged" has been written without ack-flag with value "true" könnte man das vielleicht anpassen ? Ansonsten ein Super Script viele Grüße Andreas
  • Fehlermeldung: Object.<anonymous>

    2
    2
    0 Stimmen
    2 Beiträge
    286 Aufrufe
    paul53P
    @chrisbie sagte: kleines Script Weshalb gibt es zwei Datenpunkte mit der maximalen Temperatur? Man sollte nie einen Datenpunkt (Vis_Var_MaxTemp) abfragen, der gerade schrieben wird, da setState() asynchron ausgeführt wird. Vorschlag: [image: 1633959949574-bild_2021-10-11_154548.png]
  • Scriptabfrage mit Minuswerte bekomme ich nicht hin

    4
    0 Stimmen
    4 Beiträge
    276 Aufrufe
    R
    @fastfoot natürlich nicht, sorry dachte hier eher an ein Flüchtigkeitsfehler den ein dritter rel. einfach sieht. Deshalb hab ich es nicht mit erwähnt. @paul53 Danke, genau das war es. Mit dem suchen hab ich gefühlte Stunden verbracht und es nicht gesehen...
  • iCal Kalender HTML Description anzeige

    4
    0 Stimmen
    4 Beiträge
    501 Aufrufe
    liv-in-skyL
    @killroy2 Kannst du sowas gebrauchen Anstatt Event. Müsste man halt die description anzeigen https://forum.iobroker.net/topic/40691/html-tabelle-für-ical-adapter-mehrere-instanzen
  • Sprachausgabe Alexa / Blockly

    Verschoben
    20
    1
    0 Stimmen
    20 Beiträge
    12k Aufrufe
    P
    @dslraser ich habe den Adapter aktualisiert auf 3.9.2 war noch die ältere Version drauf. Unter Status am Adaptor sehe ich, dass Verbunden mit Host: falsch , Lebenszeichen: falsch, Verbunden mit alexa2: wahr. Habe den Adaptor mehrmals neu gestartet. Kurz nach dem Start geht alles auf grün dann wieder die beiden oberen Indikatoren auf rot. Hmmm. Vielen Dank für Unterstützung. Ich habe den Adapter gelöscht und neu installiert. Adapter funktioniert wieder und die Sprauchausgabe ebenfalls.
  • skript problem mit BWM und lampen

    12
    4
    0 Stimmen
    12 Beiträge
    432 Aufrufe
    paul53P
    @wurzeldoktor sagte: wie mache ich es dann beim ersten am besten? Genauso mit "wurde geändert". Man kann sich den Umweg über den zusätzlichen Datenpunkt "Bewegung erkannt" sparen: [image: 1633802304267-bild_2021-10-09_195823.png]
  • Datenpunkte für Alexa erstellen

    3
    4
    0 Stimmen
    3 Beiträge
    485 Aufrufe
    C
    @cinimod Danke Funktioniert
  • Tesla Adapter - aufwecken

    1
    0 Stimmen
    1 Beiträge
    134 Aufrufe
    Niemand hat geantwortet
  • Thread-Geräte in ioBroker integrieren

    Gesperrt
    7
    0 Stimmen
    7 Beiträge
    542 Aufrufe
    I
    @homoran Stimmt, da war was, sorry! Leider hat sich allerdings nicht wirklich viel getan. Ich will nicht „meckern“, kann programmiertechnisch leider nichts beisteuern, aber eine Integration von Thread-fähigen Geräten (z.B. von „Eve“) wäre als erster Schritt im „Matter-Thema“ doch nicht verkehrt?
  • Farbwechsel: Script für verschiedene LED Lampen erstellen?

    2
    0 Stimmen
    2 Beiträge
    261 Aufrufe
    CinimodC
    @vocaris klar machbar ist das. erstell dir einen Datenpunkt den du mit Alexa ansprechen kannst, und nimmst den als trigger in wie fern du die farben wechseln willst weiß ich nicht, kenne die Standart Szenen nicht
  • Einschalt-Grund Lampe

    blockly
    3
    0 Stimmen
    3 Beiträge
    307 Aufrufe
    MrDJSageM
    Du könntest dir auch per InfluxDB / Grafana etc. die Uhrzeit und oder das Einschaltverhalten deiner anderen Geräte loggen / visualisieren. Damit kannst du ggf. eine Korrelation feststellen. Zum Beispiel die Terrasse geht immer an, wenn du das Bad Licht an machst etc.
  • Fehlermeldung Javascript in Verbindung mit Wallpanel / MQTT

    3
    1
    0 Stimmen
    3 Beiträge
    298 Aufrufe
    Thomas JansenT
    @paul53 Oh Sorry, betrifft diesen Post: https://forum.iobroker.net/topic/37134/script-wallpanel-mqtt-daten-interpretieren ganz unten ist das Script /* *** MduiUpdateWallpanelMQTT Die Android-App "Wallpanel" bietet, ähnlich wie Fully Kiosk Browser, die Möglichkeit Web-Seiten als Vollbild darstellen zu lassen. Weiterhin kann sie Sensorwerte des Android-Devices via MQTT Client an einen MQTT Broker übertragen. Wenn unter iobroker der Adapter "MQTT Broker/Client" installiert und als Broker (Server) konfiguriert wurde, kann dieser die MQTT Medlungen empfangen und speichert sie z.B. unter mqtt.0.wallpanel.<devicename> ab. Bsp: mqtt.0.wallpanel.<devicename>.sensor.batterie = {"value":51,"unit":"%","charging":false,"acPlugged":false,"usbPlugged":false} mqtt.0.wallpanel.<devicename>.sensor.light = {"value":80,"unit":"lx","id":"EPL_SENSOR ALS\/PS EPL_SENSOR"} . Diese Daten kann man in derForm in der vis nicht direkt weiter verwenden, sondern die JSON Angaben müssen erst in eigene States überführt werden. Diesen Zweck erfüllt dieses Script. Es erzeugt aus dem obigen Beispiel die Struktur/States: . 0_userdata.0.mdui.wallpanel.<devicename>.sensor.batterie.value = 51 0_userdata.0.mdui.wallpanel.<devicename>.sensor.batterie.unit = "%" 0_userdata.0.mdui.wallpanel.<devicename>.sensor.batterie.charging = false 0_userdata.0.mdui.wallpanel.<devicename>.sensor.batterie.acPlugged = false usw. . Diese können in der vis direkt verwendet werden. Weiterhin richtet es einen subscriber auf die MQTT States ein und hält die selbst erzeugten States aktuell. . . **** Voraussetzungen (a) Android Device mit installierter App "Wallpanel" und dort konfiguriertem MQTT Client. (b) Installierter Adapter "MQTT Broker/Client" in IOBroker . **** Installation Einfach als serverseitiges Script installieren und starten. Beim 1.Start werden die notwendigen States erzeugt und es findet automatisch ein erneuter Start nach 10 Sek statt. Erst nach diesem 2.Start instanziiert das Script die Event-Handler und läuft dann. . **** Konfiguration Eigentlich ist keine notwendig. Optional im Absatz KONFIGURATION vornehmen . **** Tipps zur Wallpanel-App * Zum Steuern der Wallpanel-App: iobroker Adapter "Wallpanel" (https://forum.iobroker.net/topic/36438/test-adapter-wallpanel/10) * "Camera on" nur, wenn das Android Device eine Stromversorgung hat * die "Bildschirm-Ausschaltzeit" kann nicht kürzer als die unter Android eingestellte sein; also die auch verringern; wirkt sich auch auf "screenOff" aus * . . **** Lizenz (c) 2020 by UH, MIT License, no warranty, use on your own risc . *** Changelog 2020.09.26 UH * Geburt */ // ------------------------------------------------------------------------------------- // KONFIGURATION // ------------------------------------------------------------------------------------- // state-Pfad unter dem die States angelegt werden sollen const CONFIG_STATE_PATH = '0_userdata.0.mdui.wallpanel'; // zu überwachender MQTT Pfad const CONFIG_MQTT_PATH = 'mqtt.0.wallpanel'; // ------------------------------------------------------------------------------------- // MduiBase // ------------------------------------------------------------------------------------- class MduiBase { constructor() { this.init(); } // init() { // const this.DEBUG = false; this.VERSION = '1.0/2020-01-01'; this.NAME = 'mduiBase'; this.STATE_PATH = '0_userdata.0.mdui.base.'; this.STATE_UNKNOWN = 0; this.STATE_INSTALLING = 10; this.STATE_INSTALLED = 11; this.STATE_STARTING = 20; this.STATE_STARTED = 21; this.STATE_STOPPING = 30; this.STATE_STOPPED = 31; // var this.installed = false; this.states = []; this.state = this.STATE_UNKNOWN; this.subscribers = []; this.schedulers = []; this.doInit(); // init der states this.states.push( { id:'version', common:{name:'installed script-version', write:false, def:this.VERSION} } ); } // // start the script/class // start() { // beim 1.Start nur die States erzeugen if ( !this.existsState("version") || (this.getState('version').val!=this.VERSION) ) { for (let s=0; s<this.states.length; s++) { this.createState( this.states[s].id ); } this.logWarn('first script start, creating states for version '+this.VERSION+', automatic restarting script again in 10 sec ...'); setStateDelayed(this.STATE_PATH + 'version', this.VERSION, 3000); setTimeout( this.start.bind(this), 10000 ); this.state = this.STATE_INSTALLED; return; } switch (this.state) { case this.STATE_UNKNOWN : ; case this.STATE_INSTALLING : ; case this.STATE_INSTALLED : ; case this.STATE_STOPPED : { this.state = this.STATE_STARTING; if (this.doStart()) { this.log('script started'); this.state = this.STATE_STARTED; } break; } case this.STATE_STARTING : ; case this.STATE_STARTED : { this.logWarn('script already starting/started'); break; } case this.STATE_STOPPING : { this.logWarn('script is stopping, pls start later again'); break; } } } // // stop the script/class // stop() { switch (this.state) { case this.STATE_STARTED : { this.state = this.STATE_STOPPING; if (this.doStop()) { for (let i=0; i<this.subscribers.length; i++) if (this.subscribers[i] !== undefined) unsubscribe( this.subscribers[i] ); this.subscribers = []; for (let i=0; i<this.schedulers.length; i++) if (this.schedulers[i] !== undefined) clearSchedule( this.schedulers[i] ); this.schedulers = []; this.state = this.STATE_STOPPED; this.log('script stopped'); } break; } default : { this.log('cant stopp script, because not startet'); } } } // --------------------- virtual functions, overwrite it doInit() { return true; } doStart() { return true; } doStop() { return true; } // --------------------- helper functions logDebug(msg,func='') { if (this.DEBUG) console.log(`[${this.NAME}.${func}] ${msg}`); } log(msg,func='') { console.log(`[${this.NAME}.${func}] ${msg}`); } logWarn(msg,func='') { console.warn(`[${this.NAME}.${func}] ${msg}`); } logError(msg,func='') { console.error(`[${this.NAME}.${func}] ${msg}`); } // einen on-Handler registrieren subscribe( handler ) { this.subscribers.push( handler ); } // einen timer registrieren schedule( handler ) { this.schedulers.push( handler ); } // über den $-Operator nachsehen, ob der state bereits vorhanden ist // getState().notExists geht auch, erzeugt aber Warnmeldungen! existsState(id) { return existsState(this.STATE_PATH + id); // return ( $(this.STATE_PATH+id).length==0?false:true); } // wrapper, adds statepath to state-ID getState(id) { return getState(this.STATE_PATH + id); } // like setState(), but adds statepath to state_ID and checks if state exists, when not, creates it setState(id,value) { if ( !this.existsState(id) ) this.createState(id,value,undefined); else setState( this.STATE_PATH + id, value); } // like cresteState(), but adds statepath to state_ID and checks if state exists, when not, creates it createState(id,value,common) { if ( !this.existsState(id) ) { if (common===undefined) { // id im states-Array suchen for (var i=0; i<this.states.length; i++) { if (this.states[i].id==id) { if (this.states[i].hasOwnProperty('common')) common = this.states[i].common; break; } } } if ( (typeof value === 'undefined') && (typeof common !== 'undefined') && (common.hasOwnProperty('def'))) value = common.def; // unter "0_userdata.0" let obj = {}; obj.type = 'state'; obj.native = {}; obj.common = common; setObject(this.STATE_PATH + id, obj, (err) => { if (err) { this.log(`cant write object for state "${this.STATE_PATH}${id}": ${err}`); } else { this.log(`state "${this.STATE_PATH}${id}" created`); } }); setTimeout( setState, 3000, this.STATE_PATH + id, value ); } } // true, if str contains filter string or regexp fitsFilter(str, filter) { if ( (filter===undefined) || !filter || (filter=='') ) return true; if ( filter instanceof RegExp ) { if (str.match( filter ) != null) return true; } else if (typeof filter == 'string') { if(str.includes(filter)) return true; } return false; } // escapeRegExp(str) { return str.replace(/[.*+?^${}()|[]\]/g, '\\$&'); } } // ------------------------------------------------------------------------------------- // MduiUpdateWallpanelMQTT // ------------------------------------------------------------------------------------- class MduiUpdateWallpanelMQTT extends MduiBase { constructor() { super(); } // init doInit() { super.doInit(); // const this.DEBUG = false; this.VERSION = '1.0/2020-09-26'; this.NAME = 'mduiUpdateWallpanelMQTT'; this.STATE_PATH = CONFIG_STATE_PATH; this.MQTT_PATH = CONFIG_MQTT_PATH; if (this.STATE_PATH.slice(-1)!='.') this.STATE_PATH += '.'; if (this.MQTT_PATH.slice(-1)!='.') this.MQTT_PATH += '.'; return true; } // start the script/class doStart() { super.doStart(); // subscriber erzeugen this.subscribe( on( new RegExp( `${this.MQTT_PATH}*` ), obj => { this.onChangeMQTT(obj.id) } )); this.initMQTT(); return true; } // stop the script/class doStop() { super.doStop(); return true; } onChangeMQTT( id ) { // this.log(id,'onChangeMQTT'); if (id.indexOf(".command")!=-1) return; if ( existsState(id) ) { let state = getState(id); let o = JSON.parse(state.val); for (var prop in o) { let name = id.slice(this.MQTT_PATH.length,1000); name += '.' + prop; // this.log(`${name} = ${o[prop]}`,'onChangeMQTT'); if (this.existsState(name) ) this.setState(name,o[prop]); else this.createState(name, o[prop]); } } } initMQTT() { $(`channel[state.id=${this.MQTT_PATH}*]`).each( (id, i) => { // this.log(id,'initMQTT'); this.onChangeMQTT( id ); }); } } // create instance and start var mduiUpdateWallpanelMQTT = new MduiUpdateWallpanelMQTT( ); mduiUpdateWallpanelMQTT.start(); // on script stop, stop instance too onStop(function () { mduiUpdateWallpanelMQTT.stop(); }, 1000 );
  • Script für USV Wartung

    2
    1
    0 Stimmen
    2 Beiträge
    257 Aufrufe
    G
    @drake Zuerst muss der Trigger im Trigger geändert werden! Pack den 2.Teil einfach darunter. Wird denn die Ladung als String oder als Zahl ausgegeben, da solltest Du auch nochmal gucken! Wenn Du weisst, wie lange Deine Batterie normalerweise braucht bis sie 40 % erreicht hat, kannst Du ja eine Zeit zum wiedereinschalten mit einem "oder" zur battery-charge 40% machen
  • Cronjob auf Slave um VPN Verbindung wieder herzustellen

    security
    5
    0 Stimmen
    5 Beiträge
    322 Aufrufe
    SBorgS
    @myzerat Jepp, fast schon gut. Shell-Skripte müssen aber auch ausführbar sein, nur "lesen" genügt da nicht ;) sudo chmod +x /etc/openvpn/startopenvpn.sh Dannn sollte es "rwxr--r-- root root ..." sein.
  • [gelöst] NodeRed Dashoard mehrere Tabs oder Pages

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    5k Aufrufe
    F
    @garf said in [gelöst] NodeRed Dashoard mehrere Tabs oder Pages: Die Dashboardseiten kann man dann natürlich einzeln im Tab eines Browsers aufrufen. Ich würde das unter Apple mit Floato machen. sieht dann so aus.! Screenshot at Oct 01 23-02-42.png
  • Skript für Bluetooth-Heizkörperthermostat unter IoBroker

    Verschoben
    21
    0 Stimmen
    21 Beiträge
    4k Aufrufe
    A
    @kr4mb3 Hallo Freunde, vielen Dank für den Skript. Funktioniert ganz gut. Meine Frage: hat ihn jemand weiter verbessert? ToDo: Mehrere Thermostate gleichzeitig Sicherheit Zum Punkt "Sicherheit": Es ist ja jedem klar, dass die Thermostate nicht durch Verschlüsselung geschützt sind. Wünschenswert wäre eine Funktion im Skript, die eine Fremdeinwirkung erkennt und gegensteuert. Umsetzbar wäre dies z.B. durch das Speichern des Status und regelmäßigen Vergleich der Strings. Hat da jemand eine Idee?
  • [Gelöst] Javascript.0 "spinnt" - Fehlermeldungen

    javascript
    6
    0 Stimmen
    6 Beiträge
    361 Aufrufe
    qqolliQ
    @guergen Danke für den Tipp, das war es tatsächlich. Hatte ein Skript mit Request() und einem Abfrageintervall von 5s (Danke auch an @paul53 ). Somit, Problem gelöst. Ich liebe dieses Forum! :-)
  • Rolladen script - bitte um Hilfe :)

    7
    3
    0 Stimmen
    7 Beiträge
    603 Aufrufe
    W
    Danke euch, solange ich das teil ned "kalibriert" bekomme, brauch ich auch kein script machen :( Die automatische calibration fahrt macht irwie nix...🤷‍♂️

567

Online

32.8k

Benutzer

82.8k

Themen

1.3m

Beiträge