NEWS
Sonos Lautstärke regeln
-
@mickym es kommt immer 4 beim drücken dann 3 beim los lassen, dann 0 beim drücken und 0 beim los lassen. Dann wieder 4 beim drücken und 3 beim los lassen usw.
-
@saranger sagte in Sonos Lautstärke regeln:
@mickym es kommt immer 4 beim drücken dann 3 beim los lassen, dann = beim drücken und 0 beim los lassen. Dann wieder 4 beim drücken und 3 beim los lassen usw.
Also wenn IMMER 4 und 3 bei loslassen kommt, wann kommen dann die 2 mal 0?
Jetzt verstehe ich es so:
4:3 dann 0:0 dann 4:3 dann 0:0 - sprich 2mal 0 würden man nutzen, um die Richtung zu wechseln?
-
@mickym ja hast du recht sorry. hab es grad noch mal geprüft immer die 4 und beim loslassen die 3
-
@saranger sagte in Sonos Lautstärke regeln:
@mickym ja hast du recht sorry. hab es grad noch mal geprüft immer die 4 und beim loslassen die 3
Also wenn IMMER 4 und 3 bei loslassen kommt, wann kommen dann die 2 mal 0?
Jetzt verstehe ich es so:
4:3 dann 0:0 dann 4:3 dann 0:0 - sprich 2mal 0 würden man nutzen, um die Richtung zu wechseln? Oder ist das 0:4:3:0, um eine Sequenz eines langen Tastendrucks abzuschliessen? Dann kann man die 0 aber ignorieren? Dann hätte der ursprüngliche Flow aber funktionieren müssen. Es ist für mich langsam schwierig zu helfen, wenn ich das nicht sehe.
-
wenn man das auf zwei Taster (Wippe) aufteilen würde und Linke Taste der Wippe für laut und rechte Taste der Wippe für leise sehen würde wäre es so.
Linke Taste für laut: 4 beim drücken und 3 beim los lassen
rechte Taste für leise: 0 beim drücken und 0 beim los lassen
Ich habe diese beiden Funktionen auf einer Taste als Umschalt Funktion, der wechselt quasi nach jedem langen drücken von 4:3 zu 0:0, dann wieder 4:3.
Ist irgendwie schwer zu erklären^^
-
@saranger Mach halt mal einen Screenshot Deiner Debug Ausgabe.
Drücke den Taster jeweils für 10s - dann 10s nichts machen und wieder für 10s halten- dann 10s nichts machen und wieder für 10s halten und dann immer loslassen.
Dann kann ich mir vielleicht selbst ein Bild machen. Sonst wird das nichts. Du hast doch keine 2 Tasten oder schon? Oder willst Du es mit 2 Tasten machen.
Nein das ist Käse - mit Deiner Switch Node. Eine payload = 0 und dann kommt es immer am gleichen Ausgang raus.
Bitte wie gesagt die Debugausgabe von der KNX Node - mit 1 oder 2 Tasten musst Du mir halt sagen. Ich weiß doch nicht mal wie Dein physischer Taster aussieht?
-
-
@saranger s- letzter Post von mir.
-
Ist komisch, hast Du nun 2 Taster einen mit 4:3 und einen mit 0:0 und das kommt aus der gleichen Node raus? Kann man da nicht 2 Nodes verwenden?
Wenn das so ist, dass man bei dem 2. Taster zwischen drücken und loslassen nicht unterscheiden kann, dann ist mir das egal, sondern dann nehme ich einfach größer 0 für einen Taster (lauter) und =0 (leiser). Die erste Nachricht triggert, die zweite Nachricht stoppt.
Das müsste dann ja OK sein. Zur Sicherheit macht man noch einen Timer ggf. dass der Trigger nicht unendlich lange läuft.
-
@mickym
so passiert es jetzt wenn ich so drücke wie du geschrieben hast. Ich habe eine Gira TastSensor 4. dieser hat 4 WIppen oder aber 8 Tasten jenachdem wie man ihn konfiguriert. Ich möchte es aber eigentlich über eine Taste machen mit Umschaltfunktion)Das kommt aus einer Node Aufteilen würde nur funktionieren wenn ich es als Wippe mache. Da ich aber eigentlich die zweite Taste mache um dann die Playlist auszuwählen ist das eher ungünstig.
Ich hau mich erstmal hin, ich schau morgen früh noch mal rein :-). Danke schon mal.
-
So ich hab es mir einfach gemacht. 4 erhöht Lautstärke, 0 die erniedrigt die Lautstärke. Die jeweils 2. Nachricht - also Taste wird losgelassen, stoppt (egal ob da 3 oder 0 geliefert wird).
-
Guten Morgen, habe es gerade getestet, sehr geil das funktioniert
Ein fettes Dankeschön für deine Geduld :-). Mal schauen was mir hier noch einfällt^^.
darüber lass ich mir ja Titel und Artist im Dashboard anzeigen, ich möchte aber wenn die Musik gestoppt ist dass das Feld leer ist. Hab dann den Status abgegriffen und wollte ein "Leerzeichen" setzen wenn Status false ist. Die Iobroker Inject setzt den Status aber sofort wieder auf den Artist der noch hinterlegt ist. Wollte das mit einer Art Wenn funktion machen aber das will nicht so weil die den Text nicht durchlässt.
)
-
@saranger einfach den Status in einer Flow Variable speichern und mit je einer switchnode die Ausgabe der beiden anderen iobroker In Nodes blockieren oder durchlassen
-
@mickym ok muss ich später mal googeln was die flow Variable ist.
-
@saranger einfach den Status als variable im Kontext abspeichern.
Nennen wir die Variable mal „Status“. Dann nimmst Du, wo der Status rauskommt eine Change Node und speicherst die payload der Nachricht.
Also setze flow.status auf msg.payload. Du kannst dafür einfach eine weitere Regel in der bereits vorhandenen Change-Node nutzen.
In den Switch nodes hinter, die beim Status „false“ blockieren sollen, konfigurierst:
Wenn flow.status ist true, dann werden Titel und Interpret nur durchgelassen, wenn der Status true ist.Alternative wäre es die beiden anderen iobroker-in nodes gar nicht triggern zu lassen und nur bei Play aktiv die beiden Datenpunkte mit einer iobroker-get Node auszulesen. In diesem einfachen Fall fände ich das sogar eleganter und sauberer gelöst, da man da nicht warten muss, bis der Datenpunkt aktualisiert wird und der Trigger eindeutig ist. Also einfach an den switch-Node noch einen Ausgang für true, und mit 2 get nodes die text nodes beschreiben.
-
@mickym Die zweite Lösung passt :-). Ich weis nicht wie ich das alles raus finden soll ohne das Forum bzw. dich
-
@saranger mit der Zeit schult sich der logische Verstand. Man muss nur systematisch vorgehen. Am Besten - was triggert meinen Flow - also mit was fange ich links an - und welche Aktion oder Ausgabe erwarte ich - mit was endet der Flow rechts. Dann weißt Du wie die Ausgabe aussehen bzw. welches Format oder Kommando Dein Aktor erwartet. Dazwischen transformierst Du das Nachrichtenobjekt unter Einbeziehung ggf. weiterer logischer Parameter.
Dazu erst mal gar nicht zu technisch denken, sondern wirklich was triggert:
Das kann eine Aktion von jemand sein (du betätigst einen Schalter), die Meldung eines Sensors, eine Uhrzeit, der Sonnenstand, ein Zeitintervall oder auch ein Wetterereignis. Wahrscheinlich gibts nach was, was mir gerade nicht einfällt.
Die Ausgabe ist entweder etwas auf dem Dashboard oder das Steuern eines Gerätes. Und diesen Weg vom Trigger zum Ausgang kannst Du in NodeRed grafisch darstellen. Wenn was nicht funktioniert mit Debug Nodes von links nach rechts (wie Du normalerweise liest) abschnittsweise schauen, ob Dein Nachrichtenobjekt noch dem entspricht, was Du erwartest. -
@mickym einen guten Abend :-). Ich würde noch einmal deine Untersützung bei diesem Thema benötigen. Ich habe jetzt ein Touch KNX Display und versuche gerade da die Lautstärke über den Slider zu regeln, leider krieg ich das nicht umgesetzt. Der Slider hat 1 byte für die Lautstärke, leider fehlt mir die Idee wie ich das an nodered übergebe um die Lautstörke zu erhöhen hast du da eine idee?
Viele Grüße
-
@saranger Nun mit einem Byte solltest Du ja dann Werte zwischen 0 und 255 bekommen. Ggf. installiere Dir mal die Buffer Node um das Byte zu isolieren. Das KNX solltest Du ja selbst über die Nodes reinbekommen.
https://flows.nodered.org/node/node-red-contrib-buffer-parser
ggf. musst halt den Output hier posten, damit man das mittels einer Inject node nachvollziehen kann.
-
@mickym ich nutze ja den von dir erstellten Code. 1 Byte habe ich schon versucht aber ich kann in knx ultimate nicht 1 byte auswählen. Die richtige Position wo ich die KNX Ga einfügen habe ich da leider auch noch nicht gefunden.
{ "id": "3b0bbffb2f1260a1", "type": "tab", "label": "SONOS Küche", "disabled": true, "info": "", "env": [] }, { "id": "eea2cc880eef7afd", "type": "knxUltimate", "z": "3b0bbffb2f1260a1", "server": "6fc013af.98132c", "topic": "9/1/1", "outputtopic": "", "dpt": "5.001", "initialread": 0, "notifyreadrequest": false, "notifyresponse": false, "notifywrite": true, "notifyreadrequestalsorespondtobus": false, "notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "0", "listenallga": false, "name": "E2 - Sonos - Lautstärke", "outputtype": "write", "outputRBE": true, "inputRBE": false, "formatmultiplyvalue": 1, "formatnegativevalue": "leave", "formatdecimalsvalue": 999, "passthrough": "no", "x": 220, "y": 300, "wires": [ [ "6eeb84cae72dc350", "8d821701704626ce" ] ] }, { "id": "721838a9e1face5f", "type": "ioBroker in", "z": "3b0bbffb2f1260a1", "name": "E2 - Sonos - Lautstärke", "topic": "sonos.0.root.192_168_2_163.volume", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 1460, "y": 400, "wires": [ [ "00949f1cd219d931", "7d2bbada5346609e" ] ] }, { "id": "ded6cd44f4941843", "type": "split", "z": "3b0bbffb2f1260a1", "name": "", "splt": "2", "spltType": "len", "arraySplt": 1, "arraySpltType": "len", "stream": true, "addname": "", "x": 690, "y": 400, "wires": [ [ "c5d56b5c7dad46e7" ] ] }, { "id": "8d821701704626ce", "type": "change", "z": "3b0bbffb2f1260a1", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "$string(payload)\t", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 530, "y": 400, "wires": [ [ "ded6cd44f4941843" ] ] }, { "id": "6eeb84cae72dc350", "type": "switch", "z": "3b0bbffb2f1260a1", "name": "lauter/leiser", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "4", "vt": "num" }, { "t": "eq", "v": "0", "vt": "num" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 510, "y": 300, "wires": [ [ "b44e2b0a7f76c424" ], [ "3f86a5b4c6c3f4ab" ] ], "outputLabels": [ "lauter", "leiser" ] }, { "id": "b44e2b0a7f76c424", "type": "change", "z": "3b0bbffb2f1260a1", "name": "", "rules": [ { "t": "set", "p": "lauter", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 700, "y": 280, "wires": [ [ "74edfcad54dbab9b" ] ] }, { "id": "3f86a5b4c6c3f4ab", "type": "change", "z": "3b0bbffb2f1260a1", "name": "", "rules": [ { "t": "set", "p": "lauter", "pt": "msg", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 700, "y": 320, "wires": [ [ "74edfcad54dbab9b" ] ] }, { "id": "00949f1cd219d931", "type": "ui_slider", "z": "3b0bbffb2f1260a1", "name": "", "label": "Lautstärke", "tooltip": "", "group": "50c891e83acc4eec", "order": 0, "width": 0, "height": 0, "passthru": true, "outs": "end", "topic": "topic", "topicType": "msg", "min": "0", "max": "100", "step": 1, "className": "", "x": 1670, "y": 300, "wires": [ [ "0912ceb3f4b48077" ] ] }, { "id": "f80ff9f492d577e2", "type": "change", "z": "3b0bbffb2f1260a1", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "volume", "tot": "flow" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1190, "y": 300, "wires": [ [ "a7403b7aedd71329" ] ] }, { "id": "0912ceb3f4b48077", "type": "change", "z": "3b0bbffb2f1260a1", "name": "", "rules": [ { "t": "set", "p": "volume", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1850, "y": 300, "wires": [ [ "9c4512b0d68be67a" ] ] }, { "id": "338764ad03d254b1", "type": "change", "z": "3b0bbffb2f1260a1", "name": "lauter", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload + 1", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1510, "y": 280, "wires": [ [ "00949f1cd219d931" ] ] }, { "id": "5799da8d3fce0518", "type": "change", "z": "3b0bbffb2f1260a1", "name": "leiser", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload - 1", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1510, "y": 320, "wires": [ [ "00949f1cd219d931" ] ] }, { "id": "a7403b7aedd71329", "type": "switch", "z": "3b0bbffb2f1260a1", "name": "", "property": "lauter", "propertyType": "msg", "rules": [ { "t": "true" }, { "t": "false" } ], "checkall": "true", "repair": false, "outputs": 2, "x": 1370, "y": 300, "wires": [ [ "338764ad03d254b1" ], [ "5799da8d3fce0518" ] ], "outputLabels": [ "lauter", "leiser" ] }, { "id": "74edfcad54dbab9b", "type": "trigger", "z": "3b0bbffb2f1260a1", "name": "", "op1": "", "op2": "0", "op1type": "pay", "op2type": "str", "duration": "-250", "extend": false, "overrideDelay": false, "units": "ms", "reset": "", "bytopic": "all", "topic": "topic", "outputs": 1, "x": 950, "y": 300, "wires": [ [ "f80ff9f492d577e2" ] ] }, { "id": "c5d56b5c7dad46e7", "type": "change", "z": "3b0bbffb2f1260a1", "name": "", "rules": [ { "t": "set", "p": "reset", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 840, "y": 400, "wires": [ [ "74edfcad54dbab9b" ] ] }, { "id": "4372a809cbc07d83", "type": "comment", "z": "3b0bbffb2f1260a1", "name": "E2 - Gästebad - Lautstärke", "info": "", "x": 210, "y": 220, "wires": [] }, { "id": "7d2bbada5346609e", "type": "knxUltimate", "z": "3b0bbffb2f1260a1", "server": "6fc013af.98132c", "topic": "9/1/4", "outputtopic": "", "dpt": "5.001", "initialread": 0, "notifyreadrequest": false, "notifyresponse": false, "notifywrite": true, "notifyreadrequestalsorespondtobus": false, "notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "0", "listenallga": false, "name": "E2 - Sonos - Lautstärke", "outputtype": "write", "outputRBE": false, "inputRBE": false, "formatmultiplyvalue": 1, "formatnegativevalue": "leave", "formatdecimalsvalue": 999, "passthrough": "no", "x": 1770, "y": 400, "wires": [ [] ] }, { "id": "bfb8a256784efcdd", "type": "knxUltimate", "z": "3b0bbffb2f1260a1", "server": "6fc013af.98132c", "topic": "9/1/9", "outputtopic": "", "dpt": "1.007", "initialread": 0, "notifyreadrequest": false, "notifyresponse": false, "notifywrite": true, "notifyreadrequestalsorespondtobus": false, "notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "0", "listenallga": false, "name": "E2 - Sonos - Lautstärke", "outputtype": "write", "outputRBE": false, "inputRBE": false, "formatmultiplyvalue": 1, "formatnegativevalue": "leave", "formatdecimalsvalue": 999, "passthrough": "no", "x": 490, "y": 200, "wires": [ [ "6eeb84cae72dc350" ] ] }, { "id": "d899cfbe9785646c", "type": "buffer-array", "z": "3b0bbffb2f1260a1", "name": "", "bufferLen": 6, "startWhenFilled": false, "x": 850, "y": 200, "wires": [ [] ] }, { "id": "9c4512b0d68be67a", "type": "sonos-universal", "z": "3b0bbffb2f1260a1", "confignode": "7167978c626da90a", "command": "player.set.volume", "state": "", "stateType": "num", "avoidCheckPlayerAvailability": true, "name": "", "x": 2090, "y": 300, "wires": [ [] ] }, { "id": "6fc013af.98132c", "type": "knxUltimate-config", "host": "192.168.2.146", "port": "3671", "physAddr": "15.15.22", "suppressACKRequest": true, "csv": "", "KNXEthInterface": "Auto", "KNXEthInterfaceManuallyInput": "", "statusDisplayLastUpdate": true, "statusDisplayDeviceNameWhenALL": true, "statusDisplayDataPoint": false, "stopETSImportIfNoDatapoint": "stop", "loglevel": "error", "name": "Martins KNX", "localEchoInTunneling": true, "delaybetweentelegrams": "40", "delaybetweentelegramsfurtherdelayREAD": "1", "ignoreTelegramsWithRepeatedFlag": false, "keyringFileXML": "" }, { "id": "50c891e83acc4eec", "type": "ui_group", "name": "Musik", "tab": "416beacd.6a5714", "order": 5, "disp": true, "width": "6", "collapse": false, "className": "" }, { "id": "7167978c626da90a", "type": "sonos-config", "name": "Sonos - Gästebad", "serialnum": "38-42-0B-13-DF-EE:F", "ipaddress": "192.168.2.163" }, { "id": "416beacd.6a5714", "type": "ui_tab", "name": "Gästebad", "icon": "dashboard", "order": 8, "disabled": false, "hidden": false } ] code_text