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
    G
    @gto "SwitchOnOff" startet nicht das Laden sondern kontrolliert den Startwunsch. Es erkennt das Einschalten über den Steckerschalter oder die ShellyApp oder über VIS und geht damit um. Und es setzt die Anfangswerte zurück. Auf das Erkennen kann es dann unterschiedlich reagieren. Derzeit, zum Beispiel, kann ich erzwingen, dass ein Ladestart über den Schalter an der Steckdose unterbunden wird. (Das habe ich gemacht, weil mir schien, dass der Stecker sich "selbstätig" wieder einschaltete. Es kamen Meldungen vom Adapter, die mich irritierten. Aber es ist nur der Adapter gewesen, der den Status völlig unvermittelt nachts updatete. Die Funktion ist jetzt drin, aber eigentlich derzeit sinnfrei. Deshalb habe ich sie über Parameter ein- bzw ausschaltbar gemacht). Es gibt Wünsche, wie ich im Blog von Olafs Pedal&Perspektive lesen konnte, dass das Laden nicht sofort beginnt sondern mit Verzögerung, damit, wenn der Akku nach einer Fahrt angeschlossen wird, er erst abkühlen kann. Das habe ich (noch) nicht berücksichtigt, wäre da aber leicht möglich zu machen. "BatteryMonitor" fragt im Loop, mit einminütiger Pause, immer wieder die Gesamt-Lademenge ab und vergleicht sie mit dem Bedarf an Energie um den Akku von Anfangs-Ladezustand auf End-Ladezustand aufzuladen. Außerdem prüft es die Ladeleistung. Wenn die unter einen Prozentwert (hier 50%) der maximalen gemessenen Leistung abfällt, dann stoppt das Laden auch. Um es nochmal im Detail zu erklären: Der Shelly-Adapter setzt in den Shelly-Daten (...Relay0.Switch) den Schaltzustand auf "true", wenn die Steckdose eingeschaltet ist. Wenn "SwitchOnOff" das erkennt dann setzt des die Anfangswerte zum Laden. Und "BatteryMonitor" beginnt mit der Überwachung. Aber insgesamt möchte ich bitten, nochmal ein paar Tage, bis Mitte nächster Woche, zu warten. Ich bin dabei das Programm nochmal generell zu überarbeiten, um es besser testen zu können und auch mit der Ladekennlinie flexibler umzugehen. Außerdem habe ich die Namen der User-Objekte jetzt systematischer benannt. Das Testen machte ich bisher über ausprobieren, das möchte ich jetzt systematischer angehen. Ich habe noch Fehler gefunden, die man beim bloßen probieren derzeit nur schwer nachvollziehen kann.
  • 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
    P
    Statt des Screenshots am besten den Node-Red-Export hier in Code-Tags posten. Dann kann man sehen, ob man helfen kann.
  • Einführung in JavaScript - Diskussionsthread

    Verschoben
    23
    0 Stimmen
    23 Beiträge
    5k Aufrufe
    M
    Ich bin beeindruckt vom Umfang und der Aufmachung der Einführung. Vielen Dank dafür! Ich komme aus der C\C++\C# Entwicklung und überfliege gerade mal die Doku, da ich mit Javascript bisher nichts zu tun hatte. Mir sind da ein paar Kleinigkeiten aufgefallen: > Wenn es wärmer als 25°C sind sollen sich die Fenster öffnen (1\. Punkt). Erst wenn es 20°C sind, sollen sie sich wieder schließen (2\. Punkt). Im Code schließen die Fenster nicht bei 20°C, sondern wenn es unter 25°C ist. if (temp>25) { setState("hm-rpc.1.IEQ057xxxx.3.State",true); //Fenster öffnen } else if (temp<25) { setState("hm-rpc.1.IEQ057xxxx.3.State",true); //Fenster schließen Weiter unten bei 'Logische Operatoren' ist die Darstellung etwas verunglückt und dadurch haben sich auch zwei Fehler eingeschlichen: ` > A B A && B A || B !A false false true false true false true false true false true false false true false true true true true false ` > In der ersten Zeile wird das Modul util geladen. Was es damit auf sich hat, lassen wir mal offen. Ein kurzer Hinweis, dass util ein Javascript Modul (oder wie auch immer man das nennt) ist und 'Inspect' einen string ausgibt, der das Objekt repräsentiert, wäre schon hilfreich. Ich hatte mich jedenfalls erst mal gewundert, da ich keine Ahnung hatte, ob es etwas ioBroker spezifisches ist oder mit einem Adapter zu tun hat oder was auch immer. Noch eine letzte Sache. Bei der Beschreibung von Funktionen wird in den Code Beispielen an mehreren Stellen '<' statt '<' angezeigt. Bin jetzt damit durch und habe wirklich eine Menge gelernt. Prima Einführung und vielen Dank nochmal! Viele Grüße Michael
  • Wunsch: Favoriten für Blocky

    Verschoben
    5
    1
    0 Stimmen
    5 Beiträge
    865 Aufrufe
    ldittmarL
    @rantanplan: Favoriten Ordner erleiden meißtens das selbe Schicksal. Man packt alles Mögliche darein und sucht dann im Favoriten Ordner. ` Ja gut… kann schon sein, aber das liegt dann an den jeweiligen User. Ich kenne Leute die haben 100te Seiten im Browser als Favorit gespeichert. Dann kann er genau so gut danach googlen. Ich persönlich habe nur Seiten gespeichert, die ich täglich nutze. Es liegt also immer beim User was er aus den Möglichkeiten macht. @rantanplan: Da würde ich mir lieber noch ein paar Bausteine wünschen. ` Da bin ich auch bei dir und da werden bestimmt noch einige dazu kommen. Was wird eigentlich noch gebraucht? Sobald ich mich ein bisschen eingearbeitet habe, könnte ich da Bluefox unter die Arme greifen ;) Grüße, ldittmar
  • ToLocaleTimeString Problem

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    901 Aufrufe
    a200A
    @Bluefox: Kann es sein, dass du die Longitude und Latitude nicht konfiguriert hast? ` ja. genau das war's. jetzt geht es. jetzt gehe ich in die ecke und werde mich schämen… :roll: Danke.
  • Speech2ioBroker

    Verschoben
    28
    0 Stimmen
    28 Beiträge
    6k Aufrufe
    D
    @wendy2702: @derrapf: Mit IOS hab ich leider nix am Hut. Bzgl externem Mikro bin ich grad an einem Raspi am rumexperimentieren…. Gruss Ralf ` Das war/ist auch mein Plan. Allerdings die nächsten Wochen nur selten zu Hause so das ich nicht viel testen kann. ` Dann bin ich dafür du nimmst Urlaub ^^ Habe zur Zeit eine 30Euro beatbox aus der Türkei dran hängen für ton aus und geht super. hatte dann noch ein usb mic dran, das hat mich schlechter verstanden wie mein Pad …
  • Script verursacht Fehlfunktionen

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    664 Aufrufe
    Niemand hat geantwortet
  • Fritzbox Adapter / tr-064 –>> Bilder einlesen

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    wendy2702W
    Danke. Werde ich machen. Schönen Abend
  • DVB Viewer - Stream darstellen

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    619 Aufrufe
    Niemand hat geantwortet
  • Vis-View ändern abhängig vom Wert einer Systemvariablen

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    P
    Hallo, habe noch etwas im Forum zum Thema "View per Widget" gefunden: [{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","gestures-offsetX":0,"gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":"","html":""},"style":{"left":"772px","top":"46px"},"widgetSet":"basic"}] Nun die Frage: wie kann ich hier noch den Status meiner Systemvariable abfragen: Ich hätte gedacht, dass dies mit der Änderung gehen müsste: Hier scheint aber das Coding grundlegend falsch zu sein. Besteht da eventuell gerade kein Zugriff auf die Systemvariable oder muss diese vorher noch definiert werden? Vielen Dank und viele Grüße Matze
  • Gewerk durchsuchen

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    bahnuhrB
    Also ich bekomme es nicht hin. Ausgangslage: Im Gewerk "Batterie betrieben" habe ich alle Aktoren die eine Batterie haben. Lt. iobroker (Lasche Aufzahlungen) sind dies 96 Aktoren. Dies kommt auch hin. Anforderung: Alle Aktoren ermitteln die "lowbat" haben. Versuch1: - durchsuchen alle Geräte (function… -> nicht angegeben) var cacheSelectorLOWBAT = $('channel[state.id=*.LOWB*]'); log (cacheSelectorLOWBAT.length); Als Ergebnis bekomme ich 140. Hierbei sind teilweise Aktoren doppelt: filename="bild1.jpg" index="0">~~ Einmal mit dieser "0" und einmal ohne "0". Weiterhin Warnhinweis im log: "cux … lowbat not found" Versuch2: - durchsuchen Gewerk "Batterie betrieben" (functions="Batterie betrieben") var cacheSelectorLOWBAT = $('channel[state.id=*.LOWB*](functions="Batterie betrieben")'); log (cacheSelectorLOWBAT.length); Als Ergebnis bekomme ich 26. Hier fehlen auf einmal sämtliche Heizung Aktoren. Warum weiß ich nicht. Versuch3: - durchsuchen nur Gewerk "Heizung" (functions="Heizung") var cacheSelectorLOWBAT = $('channel[state.id=*.LOWB*](functions="Heizung")'); log (cacheSelectorLOWBAT.length); Als Ergebnis bekomme ich 0. Warum werden die Aktoren nicht gefunden ??? Fazit: Wie bekomme ich es hin, dass die Aktoren gesucht und gefunden werden die im Gewerk "Batterie betrieben" sind. Alternativ auch alle Aktoren durchsuchen (würde mir aber nicht so gefallen, da dann bei den cux-Geräten ein warn Hinweis im log erscheint "cux … lowbat not found" Irgendwie raff ichs nett. Bitte Hilfe. mfg Dieter
  • [gelöst] From Dusk Till Dawn

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    rantanplanR
    @ldittmar: Hallo Leute, ich würde gerne bei einem Ereignis etwas ausführen, wenn es gerade zeitlich zwischen "dusk" und "dawn" ist, aber irgendwie klappt es nicht. Ich habe versucht Astrozeiten zu holen, die in String-Uhrzeit umzuwandel und dann mit "between" zu veegleichen, aber ohne erfolg. (bin gerade unterwegs und kann ggf später mein code posten). Grüße, ldittmar ` Hallo ldttmar Schau mal hier http://forum.iobroker.net/viewtopic.php … 891#p48209 Vielleicht kannst Du mit diesem Prinzip etwas anfangen. Grüße
  • TV Spielfilm - CSS Einstellungen

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    P
    Hallo, für den Anfang könnt ihr mal den oberen Teil der CSS-Anweisungen weglassen. Also ! Diesen Code rauslöschen .tclass-th { /* Headerzeilen */ background-color: darkgrey; background-color: rgba(100,100,100,0.8); color: white; font-weight: bold; font-family: Arial; } >! .tclass-th1 { /* linker Header */ width: 20px; text-align: center; color: transparent; /* Text ausblenden */ /* display: none; */ /* ganze Spalte ausblenden */ } >! .tclass-th .tclass-th1 { display: none; /* Spaltenüberschrift überm Bild ausblenden*/ } >! .tclass-tr { color: red; } >! .tclass-tr:nth-child(odd) { background-color: darkgreen; background-color: rgba(50,120,80,0.6); } >! .tclass-tr:nth-child(even) { color: yellow; background-color: darkred; background-color: rgba(150,150,150,0.2); } Gruß Pix
  • [gelöst] Dimmer: Auf Leveländerung erst triggern, wenn sich der Wert nicht mehr ändert?

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    T
    Habs rausgefunden :idea: Der on-Trigger wird mit dem Parameter für das Gewerk erweitert: on({id: /^hm-rpc\.[.:\w\d-]+\.DIRECTION$/, change: "any", val: 0, enumName: "triggerDim", logic: "and"}, function(obj) { console.log("Dimmen beendet: " + obj.newState.val); }); Meine nächste Baustelle lautet RegExp :!: Nochmals danke !!!
  • [gelöst] Laderegelung für Tablet

    Verschoben
    27
    0 Stimmen
    27 Beiträge
    6k Aufrufe
    MathiasJM
    Ok danke! Dann hänge ich den Aktor an die Steckdose, an der der PC hängt Danke, Mathias
  • CCU-Historian Import

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    apollon77A
    Kommt drauf an wie Du es schreiben wollen würdest … Am Ende nimmt die "storeState" (sorry Name doch leicht anders) Funktion und bekommt eine oder mehrere States übergeben. State hat immer "id" mit der Id und dann die Daten. Welche das so sind schau es Dir in den History-JSON Files an ... habs grad nicht im Zugriff.
  • [gelöst] Fritzbox - Adapter; unbekannt = "### ? ###" lässt sich nicht verarbeiten

    Verschoben
    20
    0 Stimmen
    20 Beiträge
    3k Aufrufe
    bahnuhrB
    Vom Adapter - hab ich mir schon gedacht. Trotzdem muss man das erst einmal wissen. Man versucht halt mit der normalen Leertaste eine if abfrage zu basteln und ist fast am verzweifeln warum dies nicht klappt. Danke für den Tipp mit dem "alt + Leertaste". Muss ich mal versuchen. Wieder was gelernt. Mit freundlichen Grüßen
  • RS232 unter javascript adapter ansprechen

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    BlackmikeB
    @paul53: Hilft Dir das NPM-Modul https://www.npmjs.com/package/raspi-serial ? ` danke paul, ich denke das ist die lösung, wo ich ansetzen werde.. sobald ich die rs232 geöffnet kriege ist alles ok. thnx, black
  • Erkennung neuer States im JS

    Verschoben
    2
    1
    0 Stimmen
    2 Beiträge
    695 Aufrufe
    P
    Hm, ich habe den Netatmo Adapter entsprechend angepasst, so das dieser nun neue Events in einen eigenen State schreibt … Damit hat sich die Frage erledigt! Generell würde mich aber interessieren, wie man auf komplett neue States subscriben kann
  • Wochenprofile vom Raumthermostat per Script auswählen

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    N
    Ist zwar schon länger her aber trotzdem mal die vorsichtige Frage…. Gibt es für das Umschalten von Wochenprogrammen (Wandthermostat) schon eine funktionierende Möglichkeit? Gruß Thomas
  • Blockly keine Auswahl

    Verschoben
    2
    1
    0 Stimmen
    2 Beiträge
    654 Aufrufe
    juergen2908J
    Hat sich erledigt, lag am Browser (IE) @juergen2908: Grüß Euch, wollte heute Blockly ausprobieren. Leider habe ich keine Auswahl. iobroker läuft auf einer pi 2b. was fehlt mir da? Bitte um Hilfe LG Jürgen `
  • Milight hack per Serialport über ein script ansprechen

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    663 Aufrufe
    Niemand hat geantwortet

356

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge