NEWS
Adapter "smartmeter"
-
@bongo22@gmx.de:Der zweite ist der Hausstrom und hat die Bezeichung Q3CA1181. Hier ist kein Auslesen möglich.
Es wird eine Fehlermeldung generiert. Ich habe einen Auszug des Logs als Datei angehängt.
Beide Smartmeter lassen sich einwandfrei mit dem Volkszähler auslesen. `
Jupp, da scheint der Zählerhersteller mal wieder entweder eigene Feldtypen zu nutzen die nicht offiziell definiert sind. Ich schaue die Tage mal rein, hab aber noch ein anderes Projekt was ich erst abschliessen will.
Was ich brauche ist bitte das "vollständige Log" aus dem Logfile was unter /opt/iobroker/log/… liegt. Du hast denke aus dem Admin kopiert, da ist es abgeschnitten! Bitte hier posten oder mir als PN schicken. Die Zeilen mit "Error while parsing SML message" sind die interessanten
Melde mich wenn ich was zum testen hab.
-
Vielen Dank schon mal für die schnelle Anwort.
Hier der Log mit dem vollständigen Error.
6129_smartmeter.log -
Grund gefunden … Schaue es mir die Tage genauer an
-
Hallo,
ich muss das Thema "Strom" bei mir nun auch mal angehen.
Folgende Zähler habe ich (2x; für Photovoltaik und der "Normale" für Einspeisung und Verbrauch)
Auf Seite 1 steht von Apollon:
` > du kannst:a) Tastkopf an PI mit zweiten iobroker Instanz im Keller
b) Tastkopf an PI mit Volkszähler Instanz im Keller
b) Tastkopf an PI mit einen Script im Keller
deine iobroker Instanz fragt dann entweder a), b) oder c) ab und speichert die Werte.
Ich ziehe die mehr-instanzen iobroker Variante vor. Dann ist die Ressourcenverteilung besser gelöst. `
Ich beabsichtige einen Raspi einzusetzen; Lan ist vorhanden. iob läuft bei mir auf Windows 7 (auf Laptop)
Folgende Fragen dazu:
- Was ist sinnvoller bzw. einfacher?
io Instanz oder Volkszähler Instanz
- Wo bekommt man diesen Lese/Schreibkopf her ?
Der Ansprechpartner auf der Volkszähler Seite reagiert bisher auf meine Mails noch nicht.
Danke im Voraus.
mfg
Dieter
-
@bongo22@gmx.de:Vielen Dank schon mal für die schnelle Anwort.
Hier der Log mit dem vollständigen Error. `
So, bitte mal Smartmeter vom Github installieren. Bitte vorher sicherstellen das "git" nstalliert ist weil ich testweise eine Library direkt aus dem Github lade. ist aktuell die 1.1.1 …
Diese sollte deinen Zweiten Zähler unterstützen (und den ersten auch noch :.)) )
Wer mit Testen will ist gern eingeladen.
-
Folgende Zähler habe ich (2x; für Photovoltaik und der "Normale" für Einspeisung und Verbrauch) `
Sollte gehen, Hatte glaube schon jemand. Ansonsten kriegen wir das hin
Folgende Fragen dazu:
- Was ist sinnvoller bzw. einfacher?
io Instanz oder Volkszähler Instanz `
ioBroker natürlich ;-))
- Wo bekommt man diesen Lese/Schreibkopf her ?
Der Ansprechpartner auf der Volkszähler Seite reagiert bisher auf meine Mails noch nicht. `
Das ist blöd. Der Kopf ist sehr gut und günstig. ANsonsten gehen faktisch auch andere USB-IR-Leseköpfe
-
Ich hatte mir den hier gekauft:
-
ok, hab mir bei ebay 2 von diesen bei gleichem Versender mal gekauft.
Mal schauen wann die Teile kommen.
mfg
Dieter
-
So, bitte mal Smartmeter vom Github installieren. Bitte vorher sicherstellen das "git" nstalliert ist weil ich testweise eine Library direkt aus dem Github lade. ist aktuell die 1.1.1 …
Diese sollte deinen Zweiten Zähler unterstützen (und den ersten auch noch :.)) )
Wer mit Testen will ist gern eingeladen. `
Sorry wenn ich jetzt als Anfänger da stehe. git habe ich installiert.
Wie installiere ich jetzt die Version 1.1.1 von Github direkt?
sudo npm install https://github.com/Apollon77/ioBroker.smartmeter
installiert erst und bricht dann ab mit:
npm WARN enoent ENOENT: no such file or directory, open '/home/iobroker/package.json'
npm WARN iobroker No description
npm WARN iobroker No repository field.
npm WARN iobroker No README data
npm WARN iobroker No license field.
-
Was kommt bei
node -v npm -v
?!
Ansonsten gehst Du im Admin auf "Custom Install" und wählst dort smartmeter aus der Liste aus. Das ist der einfachste Weg.
-
@bongo22@gmx.de … Any more feedback?
-
@ bahnuhr
> Sollte gehen, Hatte glaube schon jemand. Ansonsten kriegen wir das hin :-)
Das war glaube ich… :lol:
Geht super mit ioBroker, derzeit Abtastrate 20sek...
Werte so einiges an Statistiken an und "live" Anzeige in mediola
Wenn du fragen hast, mach einfach Meldung.
VG Torsten
-
@bongo22@gmx.de … Any more feedback? `
Ja geht jetzt perfekt. Konnte es über admin installieren.
Hat den Smartmeter sofort erkannt. Danke dir!
-
Ok, dann bereite ich das als offizielles Update vor
-
Hallo an alle,
das Projekt "Strom ablesen" ist abgeschlossen.
Klappt wunderbar.
Für alle die dies noch vor sich haben; anbei mal eine kleine Todo.
Danke an apollon und alle die mir Antwort gegeben haben.
1. Kauf Stromzähler
Wie oben geschrieben habe ich nun auch diesen bestellt:
https://www.amazon.de/gp/product/B01B8N … UTF8&psc=1
Gekauft habe ich über Ebay (und das 2 x; für normaler Zähler und Photovoltaik).
Nils von der Seite "volkszähler" hat nun nach 3 Wochen auch auf meine Mail geantwortet. Er will 25,- Euro/Stück + Versand.
Er ist billiger, kam aber leider zu spät (ich hatte die Dinger ja nun jetzt schon).
2. Raspi 3 gekauft.
image von der iobroker Seite drauf.
Raspi als slave eingerichtet.
Smartmeter installiert; Device zugewiesen, fertig.
3. Ein paar Variablen angelegt. Im einzelnen folgende:
// Stromzähler ------------------------------------------------------------------------------------------------------------- createState('javascript.0.Status.Stromzähler.Stunde.Bezogen_in_Wh', 0, {type: 'number',name: 'Stunde',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Stunde.Bezogen_Zähler_alt', 0, {type: 'number',name: 'Stunde',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Stunde.Eingespeist_in_Wh', 0, {type: 'number',name: 'Stunde',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Stunde.Eingespeist_Zähler_alt', 0, {type: 'number',name: 'Stunde',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Stunde.Produziert_in_Wh', 0, {type: 'number',name: 'Stunde',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Stunde.Produziert_Zähler_alt', 0, {type: 'number',name: 'Stunde',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Tag.Bezogen_in_Wh', 0, {type: 'number',name: 'Tag',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Tag.Bezogen_Zähler_alt', 0, {type: 'number',name: 'Tag',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Tag.Eingespeist_in_Wh', 0, {type: 'number',name: 'Tag',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Tag.Eingespeist_Zähler_alt', 0, {type: 'number',name: 'Tag',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Tag.Produziert_in_Wh', 0, {type: 'number',name: 'Tag',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Tag.Produziert_Zähler_alt', 0, {type: 'number',name: 'Tag',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Monat.Bezogen_in_Wh', 0, {type: 'number',name: 'Monat',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Monat.Bezogen_Zähler_alt', 0, {type: 'number',name: 'Monat',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Monat.Eingespeist_in_Wh', 0, {type: 'number',name: 'Monat',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Monat.Eingespeist_Zähler_alt', 0, {type: 'number',name: 'Monat',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Monat.Produziert_in_Wh', 0, {type: 'number',name: 'Monat',min: 0,unit: 'Wh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Monat.Produziert_Zähler_alt', 0, {type: 'number',name: 'Monat',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Aktuell.Bezogen_in_W', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'W',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Aktuell.Eingespeist_in_W', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'W',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Aktuell.Produziert_in_W', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'W',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Bezogen_in_W', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'W',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Bezogen_Stand_Jahresanfang', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Eingespeist_in_W', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'W',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Eingespeist_Stand_Jahresanfang', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Produziert_in_W', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'W',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Produziert_Stand_Jahresanfang', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Bezogen_Hochrechnung', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Eingespeist_Hochrechnung', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'}); createState('javascript.0.Status.Stromzähler.Jahr.Produziert_Hochrechnung', 0, {type: 'number',name: 'Aktuell',min: 0,unit: 'kWh',read: true,write: true,role: 'per Script'});
Sieht dann bei den Objekten so aus:
Dann noch ein kleines Script geschrieben:
// Werte aus smartmeter auslesen und in Variablen schreiben var java = 'javascript.0.Status.Stromzähler'; var Stand_bezogen = "smartmeter.1.1-0:1_8_0*255.value"; // Zähler links 180 var Stand_eingespeist = "smartmeter.1.1-0:2_8_0*255.value"; // Zähler links 280 var Stand_produziert = "smartmeter.0.1-0:2_8_0*255.value"; // Zähler rechts 280 var Gesamtwirkleistung = "smartmeter.1.1-0:16_7_0*255.value"; // Zähler links Wirkleistung aktuell var Tag = "hm-rega.0.29681"; var Monat = "hm-rega.0.29682"; schedule("59 * * * *", function () { // jede Stunde Werte schreiben var akt_bezogen = parseInt(getState(Stand_bezogen).val * 1000); // dann in Wh var alt_bezogen = parseInt(getState(java + '.Stunde.Bezogen_Zähler_alt').val * 1000); setState(java + '.Stunde.Bezogen_in_Wh', akt_bezogen - alt_bezogen); setState(java + '.Stunde.Bezogen_Zähler_alt', akt_bezogen / 1000); var akt_eingespeist = parseInt(getState(Stand_eingespeist).val * 1000); var alt_eingespeist = parseInt(getState(java + '.Stunde.Eingespeist_Zähler_alt').val * 1000); setState(java + '.Stunde.Eingespeist_in_Wh', akt_eingespeist - alt_eingespeist); setState(java + '.Stunde.Eingespeist_Zähler_alt', akt_eingespeist / 1000); var akt_prod = parseInt(getState(Stand_produziert).val * 1000); var alt_prod = parseInt(getState(java + '.Stunde.Produziert_Zähler_alt').val * 1000); setState(java + '.Stunde.Produziert_in_Wh', akt_prod - alt_prod); setState(java + '.Stunde.Produziert_Zähler_alt', akt_prod / 1000); }); schedule("59 23 * * *", function () { // jeden Tag Werte schreiben var akt_bezogen = parseInt(getState(Stand_bezogen).val * 1000); var alt_bezogen = parseInt(getState(java + '.Tag.Bezogen_Zähler_alt').val * 1000); setState(java + '.Tag.Bezogen_in_Wh', akt_bezogen - alt_bezogen); setState(java + '.Tag.Bezogen_Zähler_alt', akt_bezogen / 1000); var akt_eingespeist = parseInt(getState(Stand_eingespeist).val * 1000); var alt_eingespeist = parseInt(getState(java + '.Tag.Eingespeist_Zähler_alt').val * 1000); setState(java + '.Tag.Eingespeist_in_Wh', akt_eingespeist - alt_eingespeist); setState(java + '.Tag.Eingespeist_Zähler_alt', akt_eingespeist / 1000); var akt_prod = parseInt(getState(Stand_produziert).val * 1000); var alt_prod = parseInt(getState(java + '.Tag.Produziert_Zähler_alt').val * 1000); setState(java + '.Tag.Produziert_in_Wh', akt_prod - alt_prod); setState(java + '.Tag.Produziert_Zähler_alt', akt_prod / 1000); }); schedule("0 0 1 * *", function () { // jeden Monat Werte schreiben var akt_bezogen = parseInt(getState(Stand_bezogen).val* 1000); var alt_bezogen = parseInt(getState(java + '.Monat.Bezogen_Zähler_alt').val * 1000); setState(java + '.Monat.Bezogen_in_Wh', akt_bezogen - alt_bezogen); setState(java + '.Monat.Bezogen_Zähler_alt', akt_bezogen / 1000); var akt_eingespeist = parseInt(getState(Stand_eingespeist).val * 1000); var alt_eingespeist = parseInt(getState(java + '.Monat.Eingespeist_Zähler_alt').val * 1000); setState(java + '.Monat.Eingespeist_in_Wh', akt_eingespeist - alt_eingespeist); setState(java + '.Monat.Eingespeist_Zähler_alt', akt_eingespeist / 1000); var akt_prod = parseInt(getState(Stand_produziert).val * 1000); var alt_prod = parseInt(getState(java + '.Monat.Produziert_Zähler_alt').val * 1000); setState(java + '.Monat.Produziert_in_Wh', akt_prod - alt_prod); setState(java + '.Monat.Produziert_Zähler_alt', akt_prod / 1000); }); // aktuelle Werte ----------------------------------------------------------------------------------------------------------------------------------------------- on({id: Stand_bezogen, change: "ne"}, function(obj) { // Wert hat sich geändert. setState('javascript.0.Status.Stromzähler.Aktuell.Bezogen_in_W', parseInt(obj.newState.val * 1000) - parseInt(obj.oldState.val * 1000)); setState('javascript.0.Status.Stromzähler.Jahr.Bezogen_in_W', parseInt(obj.newState.val * 1000) - parseInt(getState('javascript.0.Status.Stromzähler.Jahr.Bezogen_Stand_Jahresanfang').val * 1000)); }); on({id: Stand_eingespeist, change: "ne"}, function(obj) { // Wert hat sich geändert. setState('javascript.0.Status.Stromzähler.Aktuell.Eingespeist_in_W', parseInt(obj.newState.val * 1000) - parseInt(obj.oldState.val * 1000)); setState('javascript.0.Status.Stromzähler.Jahr.Eingespeist_in_W', parseInt(obj.newState.val * 1000) - parseInt(getState('javascript.0.Status.Stromzähler.Jahr.Eingespeist_Stand_Jahresanfang').val * 1000)); }); on({id: Stand_produziert, change: "ne"}, function(obj) { // Wert hat sich geändert. setState('javascript.0.Status.Stromzähler.Aktuell.Produziert_in_W', parseInt(obj.newState.val * 1000) - parseInt(obj.oldState.val * 1000)); setState('javascript.0.Status.Stromzähler.Jahr.Produziert_in_W', parseInt(obj.newState.val * 1000) - parseInt(getState('javascript.0.Status.Stromzähler.Jahr.Produziert_Stand_Jahresanfang').val * 1000)); }); // Hochrechnung auf Jahr ----------------------------------------------------------------------------------------------------------------------------------------- schedule("*/5 * * * *", function () { var Tage = getState(Tag).val + (getState(Monat).val-1) * 30; setState('javascript.0.Status.Stromzähler.Jahr.Bezogen_Hochrechnung', parseInt(getState('javascript.0.Status.Stromzähler.Jahr.Bezogen_in_W').val / Tage * 365 / 100) / 10); setState('javascript.0.Status.Stromzähler.Jahr.Eingespeist_Hochrechnung', parseInt(getState('javascript.0.Status.Stromzähler.Jahr.Eingespeist_in_W').val / Tage * 365 / 100) / 10); setState('javascript.0.Status.Stromzähler.Jahr.Produziert_Hochrechnung', parseInt(getState('javascript.0.Status.Stromzähler.Jahr.Produziert_in_W').val / Tage * 365 / 100) / 10); }); // am 31.12\. um 23:59 jeden Jahres Werte setzen ----------------------------------------------------------------------------------------------------------------------------------------- schedule("59 23 31 12 *", function () { // jeden Monat Werte schreiben setState('javascript.0.Status.Stromzähler.Jahr.Bezogen_Stand_Jahresanfang', parseInt(getState(Stand_bezogen).val)); setState('javascript.0.Status.Stromzähler.Jahr.Eingespeist_Stand_Jahresanfang', parseInt(getState(Stand_eingespeist).val)); setState('javascript.0.Status.Stromzähler.Jahr.Produziert_Stand_Jahresanfang', parseInt(getState(Stand_produziert).val)); });
Und eine VIS zusammengebastelt:
Nochmals Danke für die Hilfe; insbesondere apollon für den Adapter.
mfg
Dieter
-> nächstes Projekt - Wasserzähler
Mal schauen.
-
Hallo Dieter,
warum wertest du denn bei der Spülmaschine und Waschmaschine mA aus und nicht auch Watt, dann wäre das Ganze doch mehr konsistent.
bei mir sieht das so aus:
Mistwetter hierGruß
Rainer
-
Mistwetter hier `
Bei uns wars heute schöner!
Aber richtig perfekt waren die letzten Tage mit -10°C und ohne Wolken!
Enrico
-
weiß ich auch nicht so genau.
Habe schon immer bei Spülmaschine und Waschmaschine mA; muss mal überlegen vielleicht ändere ich das noch.
Kannst du mal deine view zur Verfügung stellen; deine widgets sehen super aus.
Kann man bestimmt davon was brauchen.
mfg
Dieter
-
Aber richtig perfekt waren die letzten Tage mit -10°C und ohne Wolken! `
korrekt! etwa so:
Aber ausgerechnet am kältesten Tag musste der Solarteur mit dem Dachdecker ran, weil die Kabel abgesoffen waren
und hier der View:
! ````
Hier ist nix - der war zu groß
kommt gleich als AnhangGruß Rainer
-
Bei uns waren die Nächte ja auch schön kalt, so bis zu -15°C, dass kann man an der Grafik erkennen, da geht die elektrische Fußbodenheizung (ca.1000W) immer wieder an. Dank Smartmeter-Adapter kann man alles schön auslesen!
Die Sollkurve des Sonnenstandes ist nicht so genau abgeglichen.
Enrico