Geht am WD wohl nur über HomeAsisstant.
Beiträge von pepo83
VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.
-
-
Danke, habs noch optimiert:
Code
Alles anzeigen// Virtual buttons IDs let total_consumption = Virtual.getHandle("number:202"); let total_excess = Virtual.getHandle("number:203"); let consumption = Virtual.getHandle("number:200"); let excess = Virtual.getHandle("number:201"); let current_L1 = Virtual.getHandle("number:204"); let current_L2 = Virtual.getHandle("number:205"); let current_L3 = Virtual.getHandle("number:206"); // URL for the API request let url = "http://192.168.1.150/getLastData?user=1234&password=1234"; // Function to fetch data from Smartmeter function fetchSmartmeterData() { //print("Starting fetch SmartmeterData function"); Shelly.call( "HTTP.GET", {"url": url}, function (response) { if (response && response.code && response.code === 200) { try{ //print(JSON.stringify(response.body)); let parse_res = JSON.parse(response.body) total_consumption.setValue(Math.round((parse_res['1.8.0'])/1000)); total_excess.setValue(Math.round((parse_res['2.8.0'])/1000)); consumption.setValue(parse_res['1.7.0']); excess.setValue(parse_res['2.7.0']); current_L1.setValue(parse_res['31.7.0']); current_L2.setValue(parse_res['51.7.0']); current_L3.setValue(parse_res['71.7.0']); } catch (e) { print("Error parsing smartmeter data: " + e.message); } } else { print("Error: HTTP request failed."); } } ); } // Fetch smartmeter data every 10s Timer.set(10000, true, function () { print("Timer triggered. Fetching smartmeter data..."); fetchSmartmeterData(); }); // Initial fetch to verify script is working print("Initial fetch to verify script is working..."); fetchSmartmeterData();
Das Ganze ist jetzt einen Tag ohne Fehler gelaufen, also denke die Virtual.getHandle Funktion ist sehr stabil bzw. wesentlich staibler als die Shelly calls.
-
Funktioniert sehr gut!
Kann alle 7 Komponenten gleichzeitig updaten und das script ist jetzt auch viel umkomplizierter:
Code
Alles anzeigen// Virtual buttons IDs let total_consumption = Virtual.getHandle("number:202"); let total_excess = Virtual.getHandle("number:203"); let consumption = Virtual.getHandle("number:200"); let excess = Virtual.getHandle("number:201"); let current_L1 = Virtual.getHandle("number:204"); let current_L2 = Virtual.getHandle("number:205"); let current_L3 = Virtual.getHandle("number:206"); // URL for the API request let url = "http://192.168.1.150/getLastData?user=1234&password=1234"; // Function to fetch data from Smartmeter function fetchSmartmeterData() { //print("Starting fetch SmartmeterData function"); Shelly.call( "HTTP.GET", {"url": url}, function (response) { if (response && response.code && response.code === 200) { try{ //print(JSON.stringify(response.body)); total_consumption.setValue(Math.round((JSON.parse(response.body)['1.8.0'])/1000)); total_excess.setValue(Math.round((JSON.parse(response.body)['2.8.0'])/1000)); consumption.setValue(JSON.parse(response.body)['1.7.0']); excess.setValue(JSON.parse(response.body)['2.7.0']); current_L1.setValue(JSON.parse(response.body)['31.7.0']); current_L2.setValue(JSON.parse(response.body)['51.7.0']); current_L3.setValue(JSON.parse(response.body)['71.7.0']); //print("test " + JSON.parse(response.body)['1.7.0']); } catch (e) { print("Error parsing smartmeter data: " + e.message); } } else { print("Error: HTTP request failed."); } } ); } // Fetch smartmeter data every 10s Timer.set(10000, true, function () { print("Timer triggered. Fetching smartmeter data..."); fetchSmartmeterData(); }); // Initial fetch to verify script is working print("Initial fetch to verify script is working..."); fetchSmartmeterData();
Werde es jetzt einmal über Nacht laufen lassen.
-
towiat Danke für den Hinweis!
Ich werde das am Abend testen und berichten ob ich so alle 7 Komponenten gleichzeitig updaten kann.
Das Script mit den versetzten Timern ist übrigens über Nacht durch gelaufen, es kommen jedoch (trotz mittlerweile 3s Timer Abstand) manchmal errors (abgefangen durch try/catch, also das hat zumindest über Nacht funktioniert).
Ich vermute das die Timer auch nicht wirklich synchron laufen und sich dann trotzdem sporadisch überschneiden (sieht zumindest anhand der log Zeitstempel so aus)...
-
Der Einsatzzweck ist die Smartmeter-Daten in der Shelly App zu sehen.
Also nicht zeitkritisch (es laufen auch sonst keine anderen Scripts am Shelly), aber die Daten solle ca. im 10s Intervall aktualisiert werden.
Ich lasse das Script jetzt mal einen Tag laufen und schau wies läuft.
Hin und wieder hab ich noch errors gesehen (abgefangen durchs try/catch), hab die timer werte jetzt mit 1s abstand geändert.
-
Hi, hab das Script jetzt noch ein bißchen erweitert und zeige jetzt mehr Werte an.
Das Problem ist wenn ich mehr als 4 Shelly.call() hintereinander aufrufe (zum Updaten der virtuellen Komponenten) kommt immer:
Uncaught Error: Too many calls in progress
Also so gehts nicht:
Code// Update virtual components updateVirtualComponent(total_consumption_id, total_consumption); updateVirtualComponent(total_excess_id, total_excess); updateVirtualComponent(consumption_id, consumption); updateVirtualComponent(excess_id, excess); updateVirtualComponent(current_L1_id, current_L1); updateVirtualComponent(current_L2_id, current_L2); updateVirtualComponent(current_L3_id, current_L3);
Hab gelesen das nicht mehr als 4-5 calls gehen?
Habs jetzt umschifft indem ich mehrere Timer zeitversetzt laufen lassen und nie mehr als 2-3 Shelly Calls gleichzeitig ausführe:
Code
Alles anzeigen// Virtual buttons IDs let total_consumption_id= 202; let total_excess_id= 203; let consumption_id = 200; let excess_id = 201; let current_L1_id = 204; let current_L2_id = 205; let current_L3_id = 206; //smartmeter values let total_consumption; let total_excess; let consumption; let excess; let current_L1; let current_L2; let current_L3; // URL for the API request let url = "http://192.168.1.150/getLastData?user=1234&password=1234"; // Function to fetch data from Smartmeter function fetchSmartmeterData() { //print("Starting fetch SmartmeterData function"); Shelly.call( "HTTP.GET", {"url": url}, function (response) { if (response && response.code && response.code === 200) { try{ //print(JSON.stringify(response.body)); total_consumption = Math.round((JSON.parse(response.body)['1.8.0'])/1000); total_excess = Math.round((JSON.parse(response.body)['2.8.0'])/1000); consumption = JSON.parse(response.body)['1.7.0']; excess = JSON.parse(response.body)['2.7.0']; current_L1 = JSON.parse(response.body)['31.7.0']; current_L2 = JSON.parse(response.body)['51.7.0']; current_L3 = JSON.parse(response.body)['71.7.0']; //print("test " + JSON.parse(response.body)['1.7.0']); // Update virtual components //updateVirtualComponent(total_consumption_id, total_consumption); //updateVirtualComponent(total_excess_id, total_excess); //updateVirtualComponent(consumption_id, consumption); //updateVirtualComponent(excess_id, excess); //updateVirtualComponent(current_L1_id, current_L1); //updateVirtualComponent(current_L2_id, current_L2); //updateVirtualComponent(current_L3_id, current_L3); } catch (e) { print("Error parsing smartmeter data: " + e.message); //print("Received data: " + response.body); // Print the actual data received for debugging } } else { print("Error: HTTP request failed."); } } ); } // Function to update virtual components function updateVirtualComponent(component_id, value) { Shelly.call( "Number.Set", { "id": component_id, "value": value }, function(result, error_code, error_message) { if (error_code !== 0) { print("An error occurred when updating the virtual component: " + error_message); } else { print("Virtual component successfully updated. ID: " + component_id + ", Value: " + value); } } ); } // Fetch smartmeter data every 10s Timer.set(10000, true, function () { print("Timer triggered. Fetching smartmeter data..."); fetchSmartmeterData(); // Update virtual components 1 try{ updateVirtualComponent(total_consumption_id, total_consumption); updateVirtualComponent(total_excess_id, total_excess); } catch (e) { print("Error updating components 1: " + e.message); } }); // Update virtual components 2 Timer.set(10500, true, function () { print("Timer triggered. Updating component 2..."); // Update virtual components 2 try{ updateVirtualComponent(consumption_id, consumption); updateVirtualComponent(excess_id, excess); } catch (e) { print("Error updating components 2: " + e.message); } }); // Update virtual components 3 Timer.set(11000, true, function () { print("Timer triggered. Updating component 3..."); // Update virtual components 3 try{ updateVirtualComponent(current_L1_id, current_L1); updateVirtualComponent(current_L2_id, current_L2); updateVirtualComponent(current_L3_id, current_L3); } catch (e) { print("Error updating components 3: " + e.message); } }); // Initial fetch to verify script is working print("Initial fetch to verify script is working..."); fetchSmartmeterData();
Gibts da eine elegantere Lösung mit den Shelly Calls?
-
Ja das Script läuft auf meinem Gen3.
zu 1: Vermutlich gar nicht wenn die Rückmeldungen hier stimmen (hab derzeit kein WD, das X2 kommt erst), mir würde es im ersten Schritt aber einmal reichen wenn man die virtuelle Komponenten zumindest in der Shelly App/Cloud sieht.
zu 2: Ist wohl beim Copy/Paste passiert
Ich seh dann übrigens alle Werte die ich will am WD indem ich einfach dort das HomeAssistant Plugin aktiviere.
-
So, habs jetzt mal geschafft:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Script zwar jetzt noch sehr "quick and dirty" aber kann man ja noch schöner machen:
Code
Alles anzeigen// Virtual buttons IDs let consumption_id = 200; // New ID for consumption // Function to fetch data function fetchInverterData() { print("Starting fetchInverterData function test"); // URL for the API request let url = "http://192.168.1.150/getLastData?user=1234&password=1234"; Shelly.call( "HTTP.GET", {"url": url}, function (response) { if (response && response.code && response.code === 200) { print(JSON.stringify(response.body)); Shelly.emitEvent("HTTP-result", response.body); print("test " + JSON.parse(response.body)['1.7.0']); let consumption = JSON.parse(response.body)['1.7.0']; // Current consumption in W // Update virtual components updateVirtualComponent(consumption_id, consumption); } else { print("Error: HTTP request failed."); } } ); } // Function to update virtual components function updateVirtualComponent(component_id, value) { Shelly.call( "Number.Set", { "id": component_id, "value": value }, function(result, error_code, error_message) { if (error_code !== 0) { print("An error occurred when updating the virtual component: " + error_message); } else { print("Virtual component successfully updated. ID: " + component_id + ", Value: " + value); } } ); } // Fetch inverter data every 10s Timer.set(10000, true, function () { print("Timer triggered. Fetching inverter data..."); fetchInverterData(); }); // Initial fetch to verify script is working print("Initial fetch to verify script is working..."); fetchInverterData();
Würde man diese Komponente jetzt auch in der Cloud/App sehen?
(Ich selbst verwende wie gesagt die Cloud und App nicht, sehs nur im webinterface)
-
Ich hab mir jetzt mal das script von hier geklaut bzw. modifiziert:
https://community.shelly.cloud/topic/1728-add…irtual-buttons/
so sieht es jetzt mal bei mir aus:
Code
Alles anzeigen// Virtual buttons IDs let consumption_id = 200; // New ID for consumption // Function to fetch data from Fronius inverter function fetchInverterData() { print("Starting fetchInverterData function"); // URL for the API request let url = "http://192.168.1.150/getLastData?user=1234&password=1234"; Shelly.call("HTTP.GET", { url: url }, function (result, error_code, error_message) { if (error_code !== 0) { print("Error fetching inverter data: " + error_message); print("Error code: " + error_code); } else { print("HTTP GET request successful. Parsing result..."); try { let inverterData = JSON.parse(result.body); print("Received data: " + JSON.stringify(inverterData,null,2)); // Specific data extraction let consumption = inverterData.Body.1.7.0; // Current consumption // Print extracted data print("Consumption: " + consumption + " W"); // Update virtual components updateVirtualComponent(consumption_id, consumption); } catch (e) { print("Error parsing inverter data: " + e.message); print("Received data: " + result.body); // Print the actual data received for debugging } } }); } // Function to update virtual components function updateVirtualComponent(component_id, value) { Shelly.call( "Number.Set", { "id": component_id, "value": value }, function(result, error_code, error_message) { if (error_code !== 0) { print("An error occurred when updating the virtual component: " + error_message); } else { print("Virtual component successfully updated. ID: " + component_id + ", Value: " + value); } } ); } // Fetch inverter data every 10s Timer.set(10000, true, function () { print("Timer triggered. Fetching inverter data..."); fetchInverterData(); }); // Initial fetch to verify script is working print("Initial fetch to verify script is working..."); fetchInverterData();
Ich schätze es passt beim parsen was nicht, in der console siehts so aus:
Code
Alles anzeigenshelly_notification:162 Status change of cover:0: {"id":0,"aenergy":{"by_minute":[0.000,0.000,0.000],"minute_ts":1751405100,"total":20.054}} 23:25:00 Timer triggered. Fetching inverter data... 23:25:05 Starting fetchInverterData function 23:25:05 shelly_ejs_rpc.cpp:41 Shelly.call HTTP.GET {"url":"http://192.168.1.150/getLastData?user=1234&password=1234"} 23:25:05 shos_rpc_inst.c:242 HTTP.GET via loopback 23:25:05 shelly_http_client.:304 0x3fcc238c: HTTP GET http://192.168.1.150/getLastData?user=1234&password=1234 23:25:05 shelly_http_client.:607 0x3fcc238c: Finished; bytes 389, code 200, redir 0/3, auth 0, status OK 23:25:06 "71.7.0": "1.38", 23:25:06 "13.7.0": "6.00", 23:25:06 "16.7.0": "14", 23:25:06 "uptime": "0013:15:10:45", 23:25:06 "UTC": "2025-07-01T21:25:01" 23:25:06 } 23:25:06 Consumption: undefined W 23:25:06 shelly_ejs_rpc.cpp:41 Shelly.call Number.Set {"id":200} 23:25:06
Im Browser sieht das Abfrageresultat so aus (1.7.0 wäre aktueller Verbrauch in Watt):
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. -
Virtuelle Komponenten benötigen die Cloud nicht. Das WD läuft aber nicht ohne Cloud (bzw. ist dann lediglich ein sehr übertriebener Schalter).
Ich nutze bzw. nutzte (steige gerade aufs X2 um, das kommt aber erst in 1-2 Wochen) mein WD ausschließlich als HomeAssistant Anzeige, das funktioniert tadellos auch ohne Cloud. Auch meine anderen Shellys reden nur mit HA.
Der Freund hat aber nur ein paar Shellys ohne HA und eben die App/Cloud.
Wenn man die virtuellen Komponenten dann auch in der App/Cloud sieht, würds ihm vermtl. auch schon reichen, WD wäre nur ein Zusatzfeature.
-
Danke für die Infos!
Das ganze ist für einen Freund, ich nutze die Cloud nicht, hab HomeAsisstant.
Weitere Shellys sind bei ihm aber auch vorhanden.
Ich schau mir das mit den virtuellen Komponenten aber mal bei einem Shelly von mir an. Mal sehen ob ich das Scipt schaffe
-
Hallo,
habe ein Modul (shrdzm) um die Verbrauchswerte vom smartmeter auszulesen.
Das ganze funktioniert per MQTT oder REST abfrage, z.B. so:
http://192.168.1.150/getLastData?user=1234&password=1234und Antwort:
Code
Alles anzeigentimestamp "2025-06-30T23:04:05" 1.8.0 "10979275" 2.8.0 "2576465" 1.7.0 "7" 2.7.0 "0" 32.7.0 "230.90" 52.7.0 "233.40" 72.7.0 "232.60" 31.7.0 "1.59" 51.7.0 "0.57" 71.7.0 "1.23" 13.7.0 "3.20" 16.7.0 "7" uptime "0012:14:49:55" UTC "2025-06-30T21:04:08"
1.7.0 ist aktueller Bezug (Watt) und 2.7.0 aktuelle Einspeisung.
Diese beiden Werte würde ich gerne am Wall Display anzeigen. Würde das über Script funktionieren (oder alternativ auch MQTT)?
Und sieht man die abgefragten Werte dann auch in der Cloud bzw. Shelly App?
-
War bei mir genau das gleiche Prozedere.
Einschicken bringt gar nix, hab es nach 2 Tagen retour bekommen, mit dem Hinweis das ich ein neues Netzteil bekomme. Auf das USB Surren wollten sie aber gar nicht eingehen. Hab es dann auch auf meine Kosten retourniert.
Die Frage ist ob sie das Problem mittlerweile gefixt haben. Im Shelly Shop gibt es ja mittlerweile auch die weißen WD2 zu bestellen (also vllt. schon von einer neuen Produktionscharge?).
Trau mich aber auch nicht mehr über Shelly bestellen, auf Amazon gibt es die WD2 leider noch nicht.
Hat vllt. hier schon jemand Erfahrungen dazu bzw. erst kürzlich bestellt (und kann berichten ob noch was surrt)?
-
So, Display jetzt nochmal getestet. Ich glaube ich habe jedoch ein anderes Display retour bekommen (hab nämlich den Quality Control Sticker markiert und die Markierung war jetzt weg). Also glaube das neue Display ist leiser.
USB C Tests:
Habe 4 verschiedenen Netzteile (von 1-3 A probiert), kein großartiger Unterschied zu hören. Allerdings ist das Surren (mit dem neuen Display?) bei allen Netzteilen kaum zu hören. Sehr hochfrequent und nur wenn man das Ohr nahe dem Display hat.
Mit 230V Einsatz/Netzteil:
Nach wie vor ein deutliches Surren zu hören (auch mit Abstand), jedoch auch gefühlt leiser als mit dem alten Display.
Also ich glaube es ist schon ein Problem mit dem Netzteil (+ eventuelle Bauteil/Fertigungstoleranzen im Display). Also wenn sie das Netzteil tauschen wird der Geräuschpegel vermutlich für die meisten akzeptabel sein.
Ich bin jetzt natürlich schon darauf sensibilisiert und deswegen würde mich dann vermutlich auch ein sehr leises/hochfrequentes Surren stören.
Auf FB schreibt der CEO auch von Fertigungsproblemen:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Nachdem mir der Support nicht sagen konnte wann das neue Netzteil verfügbar ist (und auch nicht versichern wollte, dass ich das Display, bei negativer Fehlebehebung durch das Netzteil, auch später zurück schicken kann), hat mir der Support eine Rückgabe innerhalb der 14 Tage angeboten. Versand muss ich jedoch selbst bezahlen.
Ich glaube ich werde es zurück schicken und dann ev. zu einer späteren Produktionscharge nochmal probieren (wenn die Kinderkrankheiten behoben sind).
-
Ich weiß nicht wieviel A das Netzteil hatte, aber nachdem ich das WD ja heute ohnehin retour bekomme, kann ich das gerne am Abend testen (mit 2A Netzteil).
-
USB Versorgung : 5V ?A . Muß min. 2A haben .
Bei den Spezifikationen vom X2 steht 5V, 1A
-
Anscheinend macht der Support Nachtschicht. Nach meiner erneuten Rückfrage wg. dem Netzteil bzw. Hinweis das es über USB C Netzteil auch surrt (und meiner Bitte um Rücktritt vom Kauf nach Fernabsatzgesetz) kam das:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Was würdet ihr jetzt machen?
Wenn die Spannungsversorgung nicht reicht, wird es über USB aber auch nie ohne Surren funktionieren.
Ist mir irgendwie zu unsicher das Ganze...
-
Nein, das Powermodul war nicht angesteckt.
Über USB war das Surren auch etwas leiser, aber trotzdem noch inakzeptabel.
Im anderen Thread schreibt ja pontifex das es bei ihm auch war (und er hat es nur mit USB C Versorgung getestet):
ZitatNachdem ich mir mit dem endgültigen Platz, wo das Teil montiert werden soll, noch nicht ganz sicher bin, habe ich das WD im Moment per USB-C betrieben. Sobald das Gerät von dort Strom bekommt, höre ich eine Art Spulenfiepen. Ich habe dazu ein Soundfile mit meinem Handy gemacht. Nachdem hier keine *.mp3 Dateianhänge erlaubt sind, hier der Link, ich hoffe das ist so in Ordnung: Walldisplay.mp3 - Google Drive
Es ist nicht besonders laut, aber eben hörbar wenn man das Teil direkt vor sich in der Hand hat. Das macht mich wahnsinnig. Ich konnte jetzt noch nicht testen, ob das "nur" beim USB Betrieb auftritt oder auch. wenn das WD mit 220V versorgt wird. Wenn letzteres der Fall ist, werde ich es wohl zurück geben.
-
Mein Shelly WD X2 ist jetzt wieder am Weg retour zu mir. Folgende Info habe ich dazu vom Support bekommen:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. und dann noch ein mail mit Trackingnummer und:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Auf meine Rückfrage ob sie mit "Netzteil" den Einsatz für die Installationsdose meinen und den Hinweis das das wohl das Problem nicht löst (weil es ja per USB Versorgung auch surrt), kam dann das:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Also meinen Einwand im Prinzip ignoriert....
Hat jemand Erfahrungen mit Kauf rückgängig machen beim Kauf über die shelly Seite bzw. deren Shop? Muss man da auch wieder ein Ticket auf machen....?
-
Bei Display off war es bei mir auch am stärksten zu hören, aber trotzdem nicht ganz weg. Auch per USB versorgt, war es etwas leiser. Aber selbst wenn es jetzt nur halb so laut wäre, ist das für ein Home consumer Gerät das sich ja üblicherweise im Wohbereich befindet unakzeptabel.
Wird vermutlich der Schaltregler von der Display Hintergrundbeleuchtung sein, der im Teillastbereich dann surrt.
Ich befürchte ohne Hardware Änderungen wird man das Problem nicht ganz in den Griff kriegen. Ob sie das jetzt für die aktuelle Charge händisch nacharbeiten ist fraglich (keine Ahnung wieviel Geräte da jetzt im Umlauf sind, im Shop sind die X2 ja jetzt seit einiger Zeit nicht mehr verfügbar, also dürften nicht all zu viele sein).
Wundert mich nur das das keinen bei Shelly aufgefallen ist. Oder sie haben mal als Test die Vorserie raus gehaut und wir waren jetzt unfreiwillig Beta Tester.