NEWS
Yahka und Zeitsteuerung ESPeasy
-
Hallo zusammen,
folgendes Problem: Ich steuere eine Pumpe mit einem Relais, welches ich an einen Wemos mini d1 angeschlossen habe. Auf dem Wemos läuft eine Regel, die die Pumpe steuert. Jetzt möchte ich aber die Pumpe gegebenenfalls auch per Smartphone an und ausschalten, was an sich auch super per Yahka funktioniert. Wenn die Pumpe allerdings per Regel an oder aus geht, ändert sich der Status am Smartphone nicht. Wie bekomme ich das hin, dass der Status in dem Fall auch aktualisiert wird?
Hier die Regel am Wemos (einfache Zeitschaltuhr)
//**********Pumpe Vormittag On Clock#Time=All,08:00 do // Pumpe schaltet um 08:00 an gpio,14,0 endon On Clock#Time=All,10:00 do // Pumpe schaltet um 10:00 aus gpio,14,1 endon //********** //**********Pumpe Abend On Clock#Time=All,18:00 do // Pumpe schaltet um 18:00 an gpio,14,0 endon On Clock#Time=All,20:00 do // Pumpe schaltet um 20:00 aus gpio,14,1 endon //********** //**********Beleuchtung On Clock#Time=All,%sunset% do // Beleuchtung schaltet bei Sonnenuntergang an gpio,2,0 endon On Clock#Time=All,23:00 do // Beleuchtung schaltet um 23:00 aus gpio,2,1 endon //**********
Das Skript, im ioBroker für die manuelle Steuerung sieht so aus...
Und die Struktur der Objekte so...
Hat da jemand ne Idee, wie man das realisieren kann?
Danke!
-
@xxx_turbo_xxx
Du steuerst die Pumpe per URL. Lässt sich die Pumpe nicht auch über den Datenpunkt "ESP_Easy_pro_11.Pumpe.State" steuern ? -
@paul53 Ich denke nicht. Zumindest wüsste ich nicht wie! Der Wemos sendet ja nur 0 und 1 und Yahka setzt den Status auf wahr oder falsch...
-
@xxx_turbo_xxx sagte:
Der Wemos sendet ja nur 0 und 1
Wird die Pumpe nicht geschaltet, wenn der Wert im Objekt-Tab geändert wird (0 --> 1 / 1 --> 0) ?
-
@paul53 Nein, ioBroker empfängt den Wert nur, wenn ich das richtig sehe
-
@xxx_turbo_xxx sagte:
ioBroker empfängt den Wert nur
Dann benötigst Du einen Alias-Datenpunkt mit getrenntem Kommando / Status.
- alias.id.write: "0_userdata.0.Pool.Pumpe"
- alias.id.read: "mqtt.0.ESP_Easy_pro_11.Pumpe.State"
- alias.read: "!!val"
-
@paul53 Ok. Kannst du mir das bitte etwas genauer darstellen? Wo trage ich die Werte ein?
-
@xxx_turbo_xxx
Kopiere folgendes Script und starte es kurz einmal:// Original-Datenpunkt const idOrigin = '0_userdata.0.Pool.Pumpe'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = 'mqtt.0.ESP_Easy_pro_11.Pumpe.State'; // Alias-Datenpunkt const idAlias = 'Pool.Pumpe'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Pool Pumpe'; desc = 'per Script erstellt'; typeAlias = 'boolean'; // oder 'number' read = "!!val"; // write = "val ? true : true"; role = 'switch'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein) // custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! // Ab hier nichts ändern !! function createAlias(idDst, idSrc, idRd) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; if(idRd) { obj.common.alias.id = {}; obj.common.alias.id.read = idRd; obj.common.alias.id.write = idSrc; obj.common.read = true; } else obj.common.alias.id = idSrc; if(typeAlias) obj.common.type = typeAlias; if(obj.common.read !== false && read) obj.common.alias.read = read; if(obj.common.write !== false && write) obj.common.alias.write = write; if(nameAlias) obj.common.name = nameAlias; if(role) obj.common.role = role; if(desc) obj.common.desc = desc; if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj); if(raum && existsObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && existsObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias('alias.0.' + idAlias, idOrigin, idRead);
-
@paul53 ok... hab ich
-
@xxx_turbo_xxx sagte:
hab ich
Dann sollte ein Datenpunkt "alias.0.Pool.Pumpe" vorhanden sein, den Du mit Yahka verwenden kannst.
-
@xxx_turbo_xxx Wenn ich das richtig verstehe legt das Script nur den Datenpunkt unter alias an, richtig?
-
@paul53 Läuft! Danke!!! Dann kann ich das Skript theoretisch wieder löschen bzw. deaktivieren? Jetzt muss ich nur noch verstehen, was da im Hintergrund läuft
-
@paul53 eines ist mir allerdings noch aufgefallen. Wenn ich die Pumpe manuell per Browserkommando starte kann ich sie nicht per Homekit deaktivieren...
-
@xxx_turbo_xxx sagte:
Dann kann ich das Skript theoretisch wieder löschen bzw. deaktivieren?
Nein, das Skript wandelt das Kommando (false/true) vom Datenpunkt in eine gesendete URL, wird also weiterhin benötigt.