Shelly 2.5 -> Node-red -> Homee

So besser???
Habe gerade nur mein iPad zur Hand…wüsste nicht wie es gerade anders hinbekomme


[{„id“:„b06432a.87c45d“,„type“:„ioBroker in“,„z“:„493f33e6.704414“,„name“:„PlugS“,„topic“:„shelly.0.SHPLG-S#DE143F#1.Relay0.Energy“,„payloadType“:„value“,„onlyack“:"",„func“:„all“,„gap“:"",„fireOnStart“:„true“,„x“:1130,„y“:600,„wires“:[[„6e64eba7.b64ed4“]]},{„id“:„6e64eba7.b64ed4“,„type“:„function“,„z“:„493f33e6.704414“,„name“:„Filter Energy“,„func“:"/var energy = (msg.payload/100000)\n\nnode.send({payload:{„attribute“:{„id“:704,„value“:parseFloat(energy)}}})\n/\n\nnode.send({payload:{„attribute“:{„id“:82,„value“:(Math.round(msg.payload))/1000}}})",„outputs“:1,„noerr“:0,„initialize“:"",„finalize“:"",„libs“:[],„x“:1330,„y“:600,„wires“:[[„d7b2c7e1.17d398“]]},{„id“:„d7b2c7e1.17d398“,„type“:„homeeDevice“,„z“:„493f33e6.704414“,„virtual-homee“:"",„name“:„PlugS“,„nodeId“:„80“,„showNodeId“:true,„profile“:„13“,„icon“:„default“,„attributes“:[{„type“:1,„state“:1,„instance“:0,„minimum“:0,„maximum“:1,„current_value“:0,„target_value“:0,„last_value“:0,„data“:"",„name“:"",„unit“:"",„step_value“:1,„editable“:1,„last_changed“:1633967954,„changed_by“:1,„changed_by_id“:0,„based_on“:1,„options“:[],„id“:„80“,„node_id“:„80“},{„type“:3,„state“:1,„instance“:0,„minimum“:0,„maximum“:5000,„current_value“:0,„target_value“:0,„last_value“:0,„data“:"",„name“:"",„unit“:„W“,„step_value“:1,„editable“:0,„last_changed“:1633968747,„changed_by“:1,„changed_by_id“:0,„based_on“:1,„options“:[],„id“:„81“,„node_id“:„80“},{„type“:4,„state“:1,„instance“:0,„minimum“:0,„maximum“:10000,„current_value“:0,„target_value“:0,„last_value“:0,„data“:"",„name“:"",„unit“:„kWh“,„step_value“:0.01,„editable“:0,„last_changed“:1633968754,„changed_by“:1,„changed_by_id“:0,„based_on“:1,„options“:[],„id“:„82“,„node_id“:„80“}],„statusTemplate“:"",„x“:1540,„y“:660,„wires“:[[„e4b22388.61fa2“]]},{„id“:„9e344037.57ad6“,„type“:„function“,„z“:„493f33e6.704414“,„name“:„Filter Energy“,„func“:"/var energy = (msg.payload/100000)\n\nnode.send({payload:{„attribute“:{„id“:704,„value“:parseFloat(energy)}}})\n/\n\nnode.send({payload:{„attribute“:{„id“:81,„value“:(Math.round(msg.payload))}}})",„outputs“:1,„noerr“:0,„initialize“:"",„finalize“:"",„libs“:[],„x“:1330,„y“:660,„wires“:[[„d7b2c7e1.17d398“]]},{„id“:„89cb596c.46e7e“,„type“:„change“,„z“:„493f33e6.704414“,„name“:"",„rules“:[{„t“:„change“,„p“:„payload“,„pt“:„msg“,„from“:„true“,„fromt“:„str“,„to“:"{„attribute“:{„id“:80,„value“:1}}",„tot“:„json“},{„t“:„change“,„p“:„payload“,„pt“:„msg“,„from“:„false“,„fromt“:„str“,„to“:"{„attribute“:{„id“:80,„value“:0}}",„tot“:„json“}],„action“:"",„property“:"",„from“:"",„to“:"",„reg“:false,„x“:1370,„y“:720,„wires“:[[„d7b2c7e1.17d398“]]},{„id“:„e4b22388.61fa2“,„type“:„function“,„z“:„493f33e6.704414“,„name“:"",„func“:„if (msg.payload.attributeId === 80 && msg.payload.targetValue === 1){node.send({payload:{\n relay : 0,\n on : true\n}})}\nif (msg.payload.attributeId === 80 && msg.payload.targetValue === 0){node.send({payload:{\n relay : 0,\n on : false\n}})}\n“,„outputs“:1,„noerr“:0,„initialize“:"",„finalize“:"",„libs“:[],„x“:1720,„y“:660,„wires“:[[„b9f4954c.a9a038“]]},{„id“:„2672c9df.e412f6“,„type“:„ioBroker in“,„z“:„493f33e6.704414“,„name“:„PlugS“,„topic“:„shelly.0.SHPLG-S#DE143F#1.Relay0.Power“,„payloadType“:„value“,„onlyack“:"",„func“:„all“,„gap“:"",„fireOnStart“:„true“,„x“:1130,„y“:660,„wires“:[[„9e344037.57ad6“]]},{„id“:„baf8b357.2b33f8“,„type“:„ioBroker in“,„z“:„493f33e6.704414“,„name“:„PlugS“,„topic“:„shelly.0.SHPLG-S#DE143F#1.Relay0.Switch“,„payloadType“:„value“,„onlyack“:"",„func“:„all“,„gap“:"",„fireOnStart“:„true“,„x“:1130,„y“:720,„wires“:[[„89cb596c.46e7e“]]},{„id“:„b9f4954c.a9a038“,„type“:„shelly-switch“,„z“:„493f33e6.704414“,„hostname“:„192.168.1.108“,„description“:„Büro Lampe“,„pollinginterval“:5000,„x“:1730,„y“:720,„wires“:[[]]}]

So muss es aussehen :smiley:

:grinning: jetzt hab ich es auch … :joy:

Das müsste ich doch eigentlich ganz nomal über import in node red importieren, oder? Wenn ich das mache bekomme ich folgenden Fehler:

image

Gruß

Das ist das Problem an Apple, die formatieren die "-Zeichen anders und das wird nicht erkannt. Die müsste man alle ersetzen.

Ah OK die unten müssen nach oben. Probier ich aus und wieder was dazu gelernt. Danke

Also wenn ich die Anführungszeichen ersetze durch normale Windows Shift-2, dann bekomme ich einen Fehler bei Zeichen 412. Notepad++ der JSON Parser kann auch nicht sauber anzeigen. Wobei ich glaube das Problem sitzt ganz sicher zwischen Bildschirm und Stuhllehne.

Gruß

Ich kopiere den Flow morgen früh nochmal an einem Windows PC…vielleicht klappt es dann :wink:

jetzt mal der Export von einem Windows PC:

[{"id":"b06432a.87c45d","type":"ioBroker in","z":"493f33e6.704414","name":"PlugS","topic":"shelly.0.SHPLG-S#DE143F#1.Relay0.Energy","payloadType":"value","onlyack":"","func":"all","gap":"","fireOnStart":"true","x":1130,"y":600,"wires":[["6e64eba7.b64ed4"]]},{"id":"6e64eba7.b64ed4","type":"function","z":"493f33e6.704414","name":"Filter Energy","func":"/*var energy = (msg.payload/100000)\n\nnode.send({payload:{\"attribute\":{\"id\":704,\"value\":parseFloat(energy)}}})\n*/\n\nnode.send({payload:{\"attribute\":{\"id\":82,\"value\":(Math.round(msg.payload))/1000}}})","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1330,"y":600,"wires":[["d7b2c7e1.17d398"]]},{"id":"d7b2c7e1.17d398","type":"homeeDevice","z":"493f33e6.704414","virtual-homee":"","name":"PlugS","nodeId":"80","showNodeId":true,"profile":"13","icon":"default","attributes":[{"type":1,"state":1,"instance":0,"minimum":0,"maximum":1,"current_value":0,"target_value":0,"last_value":0,"data":"","name":"","unit":"","step_value":1,"editable":1,"last_changed":1633967954,"changed_by":1,"changed_by_id":0,"based_on":1,"options":[],"id":"80","node_id":"80"},{"type":3,"state":1,"instance":0,"minimum":0,"maximum":5000,"current_value":0,"target_value":0,"last_value":0,"data":"","name":"","unit":"W","step_value":1,"editable":0,"last_changed":1633968747,"changed_by":1,"changed_by_id":0,"based_on":1,"options":[],"id":"81","node_id":"80"},{"type":4,"state":1,"instance":0,"minimum":0,"maximum":10000,"current_value":0,"target_value":0,"last_value":0,"data":"","name":"","unit":"kWh","step_value":0.01,"editable":0,"last_changed":1633968754,"changed_by":1,"changed_by_id":0,"based_on":1,"options":[],"id":"82","node_id":"80"}],"statusTemplate":"","x":1540,"y":660,"wires":[["e4b22388.61fa2"]]},{"id":"9e344037.57ad6","type":"function","z":"493f33e6.704414","name":"Filter Energy","func":"/*var energy = (msg.payload/100000)\n\nnode.send({payload:{\"attribute\":{\"id\":704,\"value\":parseFloat(energy)}}})\n*/\n\nnode.send({payload:{\"attribute\":{\"id\":81,\"value\":(Math.round(msg.payload))}}})","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1330,"y":660,"wires":[["d7b2c7e1.17d398"]]},{"id":"89cb596c.46e7e","type":"change","z":"493f33e6.704414","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"true","fromt":"str","to":"{\"attribute\":{\"id\":80,\"value\":1}}","tot":"json"},{"t":"change","p":"payload","pt":"msg","from":"false","fromt":"str","to":"{\"attribute\":{\"id\":80,\"value\":0}}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":1370,"y":720,"wires":[["d7b2c7e1.17d398"]]},{"id":"e4b22388.61fa2","type":"function","z":"493f33e6.704414","name":"","func":"if (msg.payload.attributeId === 80 && msg.payload.targetValue === 1){node.send({payload:{\n    relay : 0,\n    on : true\n}})}\nif (msg.payload.attributeId === 80 && msg.payload.targetValue === 0){node.send({payload:{\n    relay : 0,\n    on : false\n}})}\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1720,"y":660,"wires":[["b9f4954c.a9a038"]]},{"id":"2672c9df.e412f6","type":"ioBroker in","z":"493f33e6.704414","name":"PlugS","topic":"shelly.0.SHPLG-S#DE143F#1.Relay0.Power","payloadType":"value","onlyack":"","func":"all","gap":"","fireOnStart":"true","x":1130,"y":660,"wires":[["9e344037.57ad6"]]},{"id":"baf8b357.2b33f8","type":"ioBroker in","z":"493f33e6.704414","name":"PlugS","topic":"shelly.0.SHPLG-S#DE143F#1.Relay0.Switch","payloadType":"value","onlyack":"","func":"all","gap":"","fireOnStart":"true","x":1130,"y":720,"wires":[["89cb596c.46e7e"]]},{"id":"b9f4954c.a9a038","type":"shelly-switch","z":"493f33e6.704414","hostname":"192.168.1.108","description":"Büro Lampe","pollinginterval":5000,"x":1730,"y":720,"wires":[[]]}]
1 Like

Dieses Mal hat es geklappt. Danke.

Generell erst einmal vielen Dank an all die hier gepostet haben. Ich habe in den letzten Tagen viel dazu gelernt. Gerade bin ich dabei den Flow von MichaelW noch umzubauen um das Shelly Modul loszuwerden. Dazu möchte ich das schalten über ioBroker realisieren. Wenn ich den Topic direkt eintrage funktioniert es. Ich habe nur noch nicht verstanden wie ich den Topic und den payload so übergeben dass der Shelly dann auch schaltet.

Bisher sieht der Flow dann so aus für einen Shelly 2.5

/*if (msg.payload.attributeId === 20 && msg.payload.targetValue === 1){
    node.send({payload:{
        relay : 0,
        on : true
    }})
}
if (msg.payload.attributeId === 20 && msg.payload.targetValue === 0){
    node.send({payload:{
        relay : 0,
        on : false
    }})
}
if (msg.payload.attributeId === 25 && msg.payload.targetValue === 1){
    node.send({payload:{
        relay : 0,
        on : true
    }})
}
if (msg.payload.attributeId === 25 && msg.payload.targetValue === 0){
    node.send({payload:{
        relay : 0,
        on : false
    }})
}*/
if (msg.payload.attributeId === 20 && msg.payload.targetValue === 1){
    msg.payload = true
    msg.topic = "shelly.0.SHSW-25#98CDAC2AF3E0#1.Relay0.Switch"
}
if (msg.payload.attributeId === 20 && msg.payload.targetValue === 0){
   msg.payload = false
    msg.topic = "shelly.0.SHSW-25#98CDAC2AF3E0#1.Relay0.Switch"
}
if (msg.payload.attributeId === 25 && msg.payload.targetValue === 1){
    msg.payload = true
    msg.topic = "shelly.0.SHSW-25#98CDAC2AF3E0#1.Relay1.Switch"
}
if (msg.payload.attributeId === 25 && msg.payload.targetValue === 0){
    msg.payload = false
    msg.topic = "shelly.0.SHSW-25#98CDAC2AF3E0#1.Relay1.Switch"
}
return msg

Den oberen Teil vom Code dürfte Michael wieder erkennen. Ich habe nun versucht das umzubauen auf ein iobroker comand. Aber das funktioniert noch nicht so ganz. Ich bekomme da noch warnings:

„Only JSON-Objects are valid payloads. Ignoring message.“

Die Warnings werden vom Homee virtual device geworfen. Kann es sein, dass es daran liegt wie der Werter zu Anzeige übergeben werden?

Gruß

Habe es mal auf die schnelle ausprobiert…aber auch ohne Erfolg. Das true und false sendet er zum Iobroker, was auch in dem Objekt zu sehen ist. Aber tatsächlich schalten tut der Shelly nicht.
Ich muss mal schauen ob ich am Wochenende etwas Zeit finde und mir das mal in Ruhe anschaue.

Ich bin nicht der Crack was Coding angeht, aber versuch doch einmal die Zeilen mit „msg.topic…“ rauszunehmen.
Ich nutze ansonsten den gleichen Code und es geht einwandfrei.

Frage wie bekomme ich die wieder deinstalliert? Ich hatte whatsapp und Signal installiert um mal zu testen wie ich da weiter komme. Dann startet aber NR nicht mehr. Wenn ich die wieder aus der Liste rausnehme sind aber die nodes noch verfügbar. Allerdings tut sich nichts wenn man die nutzt. Nun ist die Frage wie bekomme ich die nodes wieder weg?.

Gruß

Hast du nach dem löschen bzw aus der Liste raus-xen gewartet und dann NR neu gestartet?

NR macht ja auf jeden Fall einen Neustart wenn man die Config ändert. ich habe aber komplett den Raspi neu gebootet.

Die sind noch installiert und in der Anzeige in NR finde ich:

GIbt es eine Möglichkeit auf der Kommandozeilen Ebene zu prüfen was installiert ist und gg eine deinstallation zu machen?

Das habe ich schon probiert
npm list -g --depth=0

Also mit dem Raspi User angemeldet und aufgerufen, zeigt aber rein nichts an.

Guck Mal im Ordner /opt/iobroker/node_modules/iobroker.node-red/node_modules welche Nodes dort installiert sind. Es müsste meine ich der Ordner sein

Hi,

den letzten Ordner gibt es bei mir so nicht. Ich komme bis:
:/opt/iobroker/node_modules/iobroker.node-red

Dort liegen folgende dateien und Ordner:

admin io-package.json main.js package.json README.md
iob_npm.done LICENSE nodes public settings.js

Unter nodes, public und admin habe ich geschaut da ist nichts drunter das ich als npm module identifizieren kann.

Der user unter dem iobroker läuft ist admin, daher habe ich hier mal noch geschaut /opt/iobroker/node_modules/ , da gibt es ein Verzeichnis
/opt/iobroker/node_modules/node-red-admin/node_modules
aber da sehe ich auch nichts was ich irgendwie zuordnen kann.

Guck mal hier /opt/iobroker/iobroker-data/node-red

Das wars da gibt es Verzeichnisse für alle npm Module die ich eingebunden hatte. Kann ich einfach löschen und neu booten? Weil irgendwie habe ich weder Whatsapp noch Signal ans laufen bekommen um einen möglichen Alarm in der Eufy zu signalisieren. Dann würde ich die rauslöschen und dann ggf. neu probieren.

1 Like