Mittelwertbildung aus nur einem Aktor

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
tloeffel
Beiträge: 447
Registriert: 13.09.2017, 05:11
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal

Mittelwertbildung aus nur einem Aktor

Beitrag von tloeffel » 12.07.2019, 15:04

Hallo Zusammen,

ich habe eine Wetterstation HMIP-SWO-PR. Nun möchte ich gerne 6 Werte der Lichtstärke sammeln und dann den Mittelwert bilden.
Es soll der älteste Wert immer herausfallen und der neueste immer hinzukommen. Somit sind es immer 6 Werte. Ich habe das Beispiel gefunden, aber dieses geht nur wenn das RPC Event verschieden Aktoren auf einmal einliest. Ich möchte dieses aber über die Zeit von nur einem Aktor sammeln.

Habt Ihr eine Idee?

Gruß Thomas


Gefundenes Beispiel aus Redmatic:
199712 Durchschnitt1.PNG
199712 Durchschnitt1.PNG (7.78 KiB) 3544 mal betrachtet
972 Kanäle in 165 Geräten: Davon 16 HM, 145 HMIP, 2 Gruppen und 2 CUXD Geräte

Sineos
Beiträge: 14
Registriert: 11.04.2019, 11:27
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Mittelwertbildung aus nur einem Aktor

Beitrag von Sineos » 13.07.2019, 11:56

Eine Möglichkeit:

Code: Alles auswählen

[{"id":"995f13b4.a3ee58","type":"debug","z":"8d2b7475.b6aaf8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":630,"y":1060,"wires":[]},{"id":"9a4c0cf9.02b538","type":"function","z":"8d2b7475.b6aaf8","name":"","func":"// Topic der gewünschten Werte\nconst myTopic = 'test';\n\n// Vorhandene Werte aus einem Context Array holen\nconst myValues = context.get('myValues')|| [];\n\n// Mittelwertbildung über x Werte\nconst maxValues = 6;\n\n// Nur Werte mit dem entsprechenden Topic einsammeln\nif (msg.topic === myTopic) {\n  myValues.push(parseFloat(msg.payload));\n}\n\n// Nur maximal \"maxValues\" vorhalten\n// Den Ältesten rauswerfen\nif (myValues.length > maxValues) {\n  myValues.shift();\n}\n\n// Die neue Wertesammlung wieder in den Context schreiben\ncontext.set('myValues', myValues);\n\n// Mittelwert berechnen, aber erst wenn \"maxValues\"\n// vorhanden sind\nif (myValues.length === maxValues) {\n  const arrAvg = myValues.reduce((a, b) => a + b, 0) / maxValues;\n  // Mittelwert senden\n  msg.payload = arrAvg;\n  return msg;\n}\n","outputs":1,"noerr":0,"x":460,"y":1060,"wires":[["995f13b4.a3ee58"]]},{"id":"8036b30d.1ed3d","type":"inject","z":"8d2b7475.b6aaf8","name":"","topic":"test","payload":"1","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":980,"wires":[["9a4c0cf9.02b538"]]},{"id":"dab1850d.1f5de8","type":"inject","z":"8d2b7475.b6aaf8","name":"","topic":"test","payload":"2","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":1020,"wires":[["9a4c0cf9.02b538"]]},{"id":"50ae9f8c.fc8a18","type":"inject","z":"8d2b7475.b6aaf8","name":"","topic":"test","payload":"3","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":1060,"wires":[["9a4c0cf9.02b538"]]},{"id":"a3a961d7.d82718","type":"inject","z":"8d2b7475.b6aaf8","name":"","topic":"test","payload":"4","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":1100,"wires":[["9a4c0cf9.02b538"]]},{"id":"c1d5f111.6fb758","type":"inject","z":"8d2b7475.b6aaf8","name":"","topic":"test","payload":"5","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":1140,"wires":[["9a4c0cf9.02b538"]]},{"id":"ac06e0b9.1f0db8","type":"inject","z":"8d2b7475.b6aaf8","name":"","topic":"test","payload":"6","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":1180,"wires":[["9a4c0cf9.02b538"]]}]

Hypnos
Beiträge: 460
Registriert: 06.01.2018, 12:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 57 Mal
Danksagung erhalten: 39 Mal

Re: Mittelwertbildung aus nur einem Aktor

Beitrag von Hypnos » 13.07.2019, 19:45

Hallo,

ich nutze genau für den Anwendungsfall den smooth node aus dem Paket node-red-node-smooth.

Gruß

Sineos
Beiträge: 14
Registriert: 11.04.2019, 11:27
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Mittelwertbildung aus nur einem Aktor

Beitrag von Sineos » 13.07.2019, 21:47

Hypnos hat geschrieben:
13.07.2019, 19:45
ich nutze genau für den Anwendungsfall den smooth node aus dem Paket node-red-node-smooth.
Nette Node. Mein Favorit ist eigentlich die aggregator node (https://www.npmjs.com/package/node-red- ... aggregator). Die ist allerdings zeitbasiert, während smooth auf die Anzahl der Werte geht. Auswahl ist immer gut.

Garf
Beiträge: 63
Registriert: 29.03.2019, 07:45
Hat sich bedankt: 2 Mal
Danksagung erhalten: 7 Mal

Re: Mittelwertbildung aus nur einem Aktor

Beitrag von Garf » 13.07.2019, 22:48

Echt cool eure Tipps. Danke dafür.

Den node smooth habe ich schon mal getestet. Allerdings die Begrenzung über die Anzahl konnte ich nicht so direkt erkennen.

Hypnos
Beiträge: 460
Registriert: 06.01.2018, 12:48
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 57 Mal
Danksagung erhalten: 39 Mal

Re: Mittelwertbildung aus nur einem Aktor

Beitrag von Hypnos » 13.07.2019, 23:06

Garf hat geschrieben:
13.07.2019, 22:48
Allerdings die Begrenzung über die Anzahl konnte ich nicht so direkt erkennen.
da: :wink:
2019-07-13_23h05 001.png

tloeffel
Beiträge: 447
Registriert: 13.09.2017, 05:11
Hat sich bedankt: 1 Mal
Danksagung erhalten: 12 Mal

Re: Mittelwertbildung aus nur einem Aktor

Beitrag von tloeffel » 14.07.2019, 00:32

Hallo Zusammen,

danke für die Tipps :-).
Ich habe mich für den Vorschlag von hypnos entschieden. Klappt super in der Simulation.

Gruß Thomas
972 Kanäle in 165 Geräten: Davon 16 HM, 145 HMIP, 2 Gruppen und 2 CUXD Geräte

Garf
Beiträge: 63
Registriert: 29.03.2019, 07:45
Hat sich bedankt: 2 Mal
Danksagung erhalten: 7 Mal

Re: Mittelwertbildung aus nur einem Aktor

Beitrag von Garf » 14.07.2019, 04:06

Hypnos hat geschrieben:
13.07.2019, 23:06
da: :wink:
Jepp, hatte ich schon gesehen und auch eingestellt, aber wahrscheinlich ein anderes Ausgabeverhalten erwartet.
Da gilt es wohl noch ein wenig mit herumzuprobieren. :wink:

Antworten

Zurück zu „RedMatic“