Enocean Simulation und Einbindung von Eltako Tipp Geräten

Hallo,
danke erst mal für die von euch erarbeitete Lösung! So wie das aktuell für mich aussieht, ist das die Lösung meines Problems, der fehlenden virtuellen Geräte!
Der Stick ist heute bei mir angekommen und ich hab auch gleich einen Sensor eingelernt bekommen. Leider krieg ich es nicht so recht hin, dass die Temperaturwerte von meinen Homematic IP Sensoren an den Homee geschickt werden. Bzw. fehlt mir so komplett die Idee!
Kann mir da bitte kurz jemand unter die Arme greifen?
So sieht es aktuell aus:

Danke schon mal

Der Fehler deutet auf eine Doppel Belegung des Ports hin. Kontrolliere mal in der Konfiguration den Port.
VG Micha

Das ist gar nicht mein Hauptproblem! Bei der Auswahl des Ports wird mir der gleiche Port vier Mal angezeigt. Funzt aber trotzdem, wenn ich die Werte von Hand mit einem Inject setzte.

Mein Problem ist, dass ich blutiger Anfänger in Node Red bin und keinen blassen Schimmer habe, wie ich die Temperatur und Luftfeuchtigkeit so aufbereitete, dass ich sie an den Homee schicken kann.

Was brauch ich, damit sich bei jeder Temperatur- oder Luftfeuchtigkeitsänderung auch der Wert im Homee ändert?

Edit: Falls es einfacher ist, würde es mir auch reichen, wenn sich die Werte einmal pro Minute aktualisieren. Aber wie schicke ich ein JSON mit dem entsprechenden Inhalt überhaupt an den Enocean Output?

Hier ein Function-Node der so bei mir läuft.

[{"id":"780e512.7dfb4b","type":"function","z":"465fa3e6.cece8c","name":"Sonnenstrahlung","func":"var ill = msg.payload;\nvar message = {\"meta\":{\"eep\":\"a5-06-03\",\"channel\":7,\"type\":\"data\"},\"data\":{\"ILL\":ill}};\nmsg.payload = message;\nreturn msg;","outputs":1,"noerr":0,"x":950,"y":80,"wires":[["860e0555.a3a508"]]}]

Der Wert kommt über den Eingang und wird als Variable in die Message übernommen. Du musst für deinen Node die eep, den channel und data anpassen. Der Ausgang geht dann direkt an den Enocean-Output.

1 „Gefällt mir“

wenn du dich ein bisschen an Node red gewohnt hast, kannst du überlegen, ob du den letzten Wert sofort an den simulierten Sensor schickst oder einfach den Wert in einer globalen Variablen speicherst und dort den aktuellen Wert alle x Minuten „abholst“.

Ich hab zB meine Fenstergriffe dort abgelegt.
Wenn ich das Haus verlasse, startet ein homeegram einen node red prüfauftrag, der bei geöffneten Fenstern/Türen eine telegram Nachricht in meinen Chat schreibt.

Die homee Push Nachrichten gehören mE verboten. Schön is anders. :slight_smile:

Meine im Internet ausgelesenen wetterdaten Pumpe ich auch in globale Variablen. Kann ich überall benutzen.

1 „Gefällt mir“

Danke für eure Hilfe! Es funktioniert!

6 „Gefällt mir“

Immer gerne!

Hallo @xzerogx,
könntest du kurz erklären, wie du das gemacht hast ? Also die Werte in globale Variablen anlegen und von dort abholen.

Würde sowas auch gegenüber einem Push vorziehen, um den Traffic zu reduzieren. Überlege gerade, eine Wetterstation (Rainyman) zu simulieren.

@langepil
Welche Sensoren benutzt du?

Moin,

du kannst wahrscheinlich alles toll mit constructor und prototypes basteln. ich habe aber folgende bauern-lösung (da ich von dem ganzen mist keine ahnung habe) gewählt:

Beispielhaft einen leeren Raum erzeugt:

var neuerRaum = {
                soll: 0,
                temperatur: 0,
                feuchte: 0,
                anwesenheit: undefined
 }

mit global.get / set kannst Du Werte holen oder setzen. Nachfolgend “hole” ich die globale variable “wohnung” und wenn es die nicht gibt (-> || ) erzeuge ich eine Wohnung mit Räumen (die noch keine Werte enthalten).

var wohnung = global.get('wohnung') || {

                kueche: neuerRaum,
                wohnzimmer: neuerRaum,
                bad: neuerRaum,
                abstellraum: neuerRaum,
                schlafzimmer: neuerRaum,
                balkon: neuerRaum
}

Werte setzen kannst Du dann z.B. so:

wohnung['wohnzimmer'].soll =  "Wert aus welcher quelle auch immer"
wohnung['wohnzimmer'].temperatur = "Wert aus welcher quelle auch immer"

Um die dann wieder zu übergeben musst du sagen welche globale variable du setzen willst und womit du sie belegen möchtest:

global.set('wohnung', wohnung)

was zum nachlesen:
http://www.steves-internet-guide.com/node-red-variables/

1 „Gefällt mir“

Danke dir für die schnelle Antwort.

Werde mich heute Abend mal daran versuchen.

Sorry, war ein paar Tage nicht hier, …
Es handelt sich um verschiedenste Homematic IP Sensoren an nem Raspberry Pi mit RaspberryMatic.

HMiP-STH
HMiP-WTH-2
HMiP-BWTH
HMiP-STHD
HMiP-STHO

Hallo Micha,
kannst du uns die Flowdaten zur Verfügung stellen?
Die Rollershutter sind mein nächstes Projekt!
Danke

Du meinst die vom Roller Shutter?
Hatte ich wohl vergessen :see_no_evil: mache ich nachher mal :woozy_face:

1 „Gefällt mir“

Hier ist der Flow für den Rollershutter

  [
{
    "id": "4a96be9f.91d98",
    "type": "enocean-out",
    "z": "901363c1.e3c7b",
    "serialport": "8b0fa525.9251c8",
    "name": "",
    "logOutput": true,
    "x": 570,
    "y": 100,
    "wires": [
        []
    ]
},
{
    "id": "94753a96.7ba2c8",
    "type": "enocean-in",
    "z": "901363c1.e3c7b",
    "serialport": "8b0fa525.9251c8",
    "name": "in",
    "x": 70,
    "y": 100,
    "wires": [
        [
            "4c33ef26.53d5"
        ]
    ]
},
{
    "id": "4c33ef26.53d5",
    "type": "enocean-actor",
    "z": "901363c1.e3c7b",
    "name": "",
    "channel": "52",
    "adt": true,
    "x": 210,
    "y": 100,
    "wires": [
        [
            "a86d6ce0.af3d5"
        ],
        []
    ]
},
{
    "id": "a86d6ce0.af3d5",
    "type": "function",
    "z": "901363c1.e3c7b",
    "name": "LRN und Status",
    "func": "const Enocean = global.get('Enocean');\nvar channel = 52;\nvar homeeID = \" \";\nvar pay = msg.payload;\nif(pay === \"LRN\"){\nvar tel = Enocean.RadioERP1.from(\"55000a0701eba5441833800504f9780001ffffffff460024\")\ntel.senderId = global.get(\"enocean-base-id\") + channel\nnode.status({fill:\"blue\",shape:\"dot\",text:\"Channel:\"+channel}) \nreturn [{payload: tel.toString()},{payload: {\n    \"type\": \"LRN\",\n    \"eep\": \"a5-38-08\",\n    \"senderId\": homeeID,\n    \"name\": \"homee\",\n    \"channel\": channel\n}}]\n} \nif (pay.FUNC.rawValue === 1 ){\n    node.status({fill:\"green\",shape:\"dot\",text:\"Ch:\"+channel+ \" Rollo gestoppt \"});}// \nif (pay.FUNC.rawValue === 2 || (pay.P1.rawValue <= 80 && pay.FUNC.rawValue ===4)){\n    node.status({fill:\"green\",shape:\"dot\",text:\"Ch:\"+channel+ \" Rollo offen \"+pay.P1.rawValue+\"%\"});\n    return [{payload:{\n    \"data\": {\n        \"LRNB\": 1,\n        \"BSP\": pay.P1.rawValue,\n        \"AS\": 0,\n        \"AN\": 1,\n        \"PVF\": 0,\n        \"AVF\": 0,\n        \"ES\": 0,\n        \"EP\": 2,\n        \"ST\": 0,\n        \"SM\": 0,\n        \"MOTP\": 0\n    },\n    \"meta\": {\n        \"eep\": \"a5-11-03\",\n        \"channel\": channel,\n        \"data\": 7\n    }\n}\n},null]\n}\nelse if(pay.FUNC.rawValue === 3 || (pay.P1.rawValue >= 80 && pay.FUNC.rawValue ===4)){\n    if(pay.P1.rawValue === 0){BSP = 100;} else BSP =pay.P1.rawValue;\n     node.status({fill:\"red\",shape:\"dot\",text:\"Ch:\"+channel+ \" Rollo geschlossen \"+BSP+\"%\"})\n    return[{payload:{\n    \"data\": {\n        \"LRNB\": 1,\n        \"BSP\": BSP,\n        \"AS\": 0,\n        \"AN\": 1,\n        \"PVF\": 0,\n        \"AVF\": 0,\n        \"ES\": 0,\n        \"EP\": 3,\n        \"ST\": 0,\n        \"SM\": 0,\n        \"MOTP\": 0\n    },\n    \"meta\": {\n        \"eep\": \"a5-11-03\",\n        \"channel\": channel,\n        \"data\": 7\n    }\n}\n},null]\n}\nreturn ",
    "outputs": 2,
    "noerr": 0,
    "x": 380,
    "y": 100,
    "wires": [
        [
            "4a96be9f.91d98"
        ],
        [
            "4c33ef26.53d5"
        ]
    ]
},
{
    "id": "558b3d64.560e04",
    "type": "inject",
    "z": "901363c1.e3c7b",
    "name": "",
    "topic": "",
    "payload": "LRN",
    "payloadType": "str",
    "repeat": "",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "x": 210,
    "y": 60,
    "wires": [
        [
            "a86d6ce0.af3d5"
        ]
    ]
},
{
    "id": "8b0fa525.9251c8",
    "type": "enocean-config-node",
    "z": "",
    "serialport": "/dev/ttyUSB0"
}]
2 „Gefällt mir“

Hallo Micha,

danke für den Flow, … nur leider bin ich als Einsteiger, der bis jetzt ausschließlich Sensoren eingebunden hat etwas überfordert.
Kannst du kurz zwei, drei Sätze über die Funktionsweise erzählen? Welcher Node macht aus welchem Grund was?

Würde mir und sicher einigen anderen sehr helfen!

Danke schon mal

Hallo @langepil,
du kannst dir den Flow laden und schon geht es fast los.
Dieser Flow ist wichtig um die Status Rückgabe der Enoceansimulation sauber darzustellen.
Wenn also der Angelernte Shutter im homekit geschaltet wird dann erfolgt im node Red die richtige Status Zuweisung für homee.
Als erstes gehst du in die Funktion und stellst den Channel ein den du für den Aktor wählst. Der Usb stick kann bis zu 124 Channel belegen.
Jetzt versetzt du den homee in den Anlernmodus und drückst dann den Inject ( LRN).
Nun erscheint der Aktor in homee.
Jetzt kannst du am Input einen Debug hängen und die homee id auslesen.
Dieses erfolgt in dem du den enocean Funk mithörst.
Den Debug stellst du auf volles Debug.
Wenn du den Aktor jetzt in homee betätigst empfängt der Pi das Signal. Hier gehst du in die Metadaten und unter Sender ID sollte deine homeeID stehen.
Diese kommt nun in die Funktion.
Jetzt gehst du noch in den Aktor node und gibst die Channel ID ein und setzt noch das Häkchen.
Nun musst du nochmal das LRN auslösen und der Aktor Node reagiert nun nur noch auf den einen Aktor.

Die Rollostellung kannst du nun auch in Node Red benutzen um andere Geräte anzusteuern.

Hoffe ich habe mich einigermaßen verständlich ausgedrückt.

VG Micha

3 „Gefällt mir“

25 Beiträge wurden in ein neues Thema verschoben: Wetterstation (Wunderground) über Node-RED auslesen

Hallo, hat eigentlich schon jemand einen Enocean Schalter (EEP: D2-0x-0x) oder ähnlich eingebunden, damit man diesen im Homee und auch extern schalten kann und den Status immer im Homee sieht? Oder gibt es da mittlerweile eine bessere Alternative um einen Taster von iobroker zu Homee und zurück anzubinden?

Du hast eine Taster in iobroker und möchtest diesen in homee benutzen ?
Dazu gibt es doch das vhih von @stfnhmplr.
Die enocean Simulation wird glaube ich nicht mehr genutzt. Aber das waren noch Zeiten wo man das nutzen musste um homee zu erweitern.