Autor Thema: Microwechselrichter Bosswerk MI 300 und Huayu HY-800 an Fhem anbinden  (Gelesen 3544 mal)

Offline MrLarodos

  • New Member
  • *
  • Beiträge: 14
  • «Underground werden mit Stil»
    • MrLarodos auf YouTube
Du hast sicherlich recht damit, dass es wahrscheinlich unkritisch ist. Aber für mich ist das einfach eine Prinzipsache, dass ich die Option habe will, alles lokal zu machen. Vor allem, wenn es nicht nötig ist, das über das Internet zu betreiben. Sowas müsste bei der Einrichtung abgefragt werden. Da das nicht passiert, erzwinge ich diese Option. Alleine schon ziemlich frech, dass in der Cloud mehr Werte als lokal zu sehen sind. Künstliche Erzeugung von Cloud-Mehrwerten, die keine sind. Echt krank  >:(
Mein SmartHome: https://youtu.be/RIro54MMyN4

Raspberry 3B+, RFXtrx433XL, VELUX KLF200, ALLNET Touch Display Tablet, Deye SUN600G3-EU-230 und so weiter :-)
Zustimmung Zustimmung x 1 Liste anzeigen

Offline FHEMbeta

  • Jr. Member
  • **
  • Beiträge: 73
Mir ist es wichtiger, dass solche Geräte sich nicht in meinem Haupt-LAN befinden, sondern über ein separates VLAN ohne Zugriff separiert sind. Und selbstverständlich ist ein Gerät ohne Cloud-Zwang besser als eins mit. Wenn ich an die weiteren Werte lokal herankäme (u.a. wäre so eine Degredation der einzelnen Module analysierbar), würde ich die Cloud definitiv abschalten.

Ich denke bei den meisten 08/15 Usern kommt die Einfachheit der Konfiguration mit ausreichender Auswertung gut an. Die wollen und können nichts selber machen. Die meisten haben nicht Mal einen (virtuellen) Server zu Hause.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Hauswart

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 874
Läuft nun auch bei mir. Wie wertet ihr Netzbezug/Eigenverbrauch/etc. aus?

Habe einen Tasmota Stromzähler in FHEM und eben den Bosswerk angebunden.


Nachtrag: Habe nur einen Einphasenzähler verbaut... :(
« Letzte Änderung: 04 August 2022, 13:46:09 von Hauswart »
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

Offline snx

  • Jr. Member
  • **
  • Beiträge: 56
Ich habe meine Devices (Wechselrichter und Stromzähler) in FHEM mit eigenen Readings erweitert. Diese befüllen ich per UserReading oder DOIFs. Inhaltlich bilde ich damit die Zählerstände zu Tagesbeginn (als Rechengrundlage) und Tagesende (fürs Tageswerte im Log), sowie die aktuellen Verbrauchswerte (Produktion + Konsum - Einspeisung) ab. Zudem noch 2-3 Readings um die Daten auch bei der instabilen Erreichbarkeit des MI600 trotzdem immer im Blick zu haben.

Damit ich nicht all zu viel Datenmüll erzeuge und trotzdem was zum Auswerten habe, lese ich beide Devices alle 5 Minuten aus. Wenn du etwas genauer wissen möchtest geb einfach Bescheid ;)

Offline Hauswart

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 874
Ich habe meine Devices (Wechselrichter und Stromzähler) in FHEM mit eigenen Readings erweitert. Diese befüllen ich per UserReading oder DOIFs. Inhaltlich bilde ich damit die Zählerstände zu Tagesbeginn (als Rechengrundlage) und Tagesende (fürs Tageswerte im Log), sowie die aktuellen Verbrauchswerte (Produktion + Konsum - Einspeisung) ab. Zudem noch 2-3 Readings um die Daten auch bei der instabilen Erreichbarkeit des MI600 trotzdem immer im Blick zu haben.

Damit ich nicht all zu viel Datenmüll erzeuge und trotzdem was zum Auswerten habe, lese ich beide Devices alle 5 Minuten aus. Wenn du etwas genauer wissen möchtest geb einfach Bescheid ;)

Da möchte ich (viel) mehr Wissen :)


Ich habe nun aber auch noch ein anderes Problem: Ich habe Benutzer + Passwort geändert, da ich den AP nicht abschalten konnte. Nur komme ich nun weder mit den neuen noch mit admin/admin auf die Seite drauf, jemand eine Idee wie man das zurücksetzen kann?


1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

Offline muc46

  • New Member
  • *
  • Beiträge: 3
Danke für den Chat, der mir sehr geholfen hat den Deye SUN600G3-EU-230 Wechselrichter in Betrieb zu nehmen. Der Hersteller bietet zusammen mit der App Solarman den Zugriff auf den Wechselrichter an. Bin nicht begeistert, dass in der App der Standort erfasst wird und dann in dem Wechselrichter noch das WLAN Passwort, um die Daten auf den Server zu übermitteln. Um die Kommunikation des Wechselrichters von meinem Netz zu trennen werde ich die Daten über den AP des Wechselrichters abrufen und in FHEM visualisieren. Dazu möchte ich vor dem Abrufen das WLAN meines RPis mit dem AP verbinden, die Daten abrufen und dann wieder die WLAN Verbindung trennen. Damit braucht der Wechselrichter keinen Zugang zu meinem privaten Netz.

Hat jemand Erfahrung, wie ich aus FHEM heraus eine spezifische WLAN Verbindung aufbauen und schließen kann?

Vielen Dank :)

Offline snx

  • Jr. Member
  • **
  • Beiträge: 56
@Hauswart:
Was genau möchtest du wissen?
Bzgl. deines Problems: Ich hatte auch Probleme die Einstellungen zu ändern, er hat von einem Feld die Einsatellung übernommenund von anderen nicht, daher könnte es bei dir auch sein, dass du nun eine Kombi aus admin/<dein-pw> oder <dein-user>/admin hast ?!

@muc46:
Ich denke es ist zu aufwändig den Weg zugehen, erst recht wenn der AP so instabil ist wie bei meinem.
Ich nutze die App ebenfalls gar nicht, der Wechselrichter hängt in meinem WLAN ohne Internetzugriff. Hier kurz meine Schritte der Umsetzung:
  • Zugang für neue Geräte ins Internet blockieren (z.B. bei meiner FritzBox im Profil Standard Internetzugriff verbieten)
  • Anmelden am AP des Wechselrichters und Benutzer/Passwort ändern und deine WLAN Daten eintragen (Ich musste schön ein Feld nach dem anderen ändern, sonst gingen Infos verloren :-/)
  • Im Router den Internet-Zuggriff für den jetzt bekannten Wechselrichter sperren, den Rest wieder freigeben
  • In FHEM via HTTP-Modul die Daten vom Wechselrichter holen (weiter oben beschrieben)
Wenn du auf Nummer sicher gehen möchtest, dass der Wechselrichter selbst bei Internetzugriff nicht nach Hause telefoniert kannst du auch der "versteckten" Seite des Wechselrichters (http://<its-ip>/config_hide.html) auch noch die Server rauslöschen oder abändern. So hatte ich die Kommunikationsversuche auf meinen Endpunkt umgeleitet um zu sehen ob man damit was anfangen kann, was aber zu keinem Ergebnis geführt hat (steht auch weiter oben).

Offline Hauswart

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 874
@Hauswart:
Was genau möchtest du wissen?
Bzgl. deines Problems: Ich hatte auch Probleme die Einstellungen zu ändern, er hat von einem Feld die Einsatellung übernommenund von anderen nicht, daher könnte es bei dir auch sein, dass du nun eine Kombi aus admin/<dein-pw> oder <dein-user>/admin hast ?!
Zeige doch mal deine UserReadings und DOIFs, dann muss ich es nicht neu erfinden.

Habe schon einige Kombinationen ausprobiert, aber leider scheinbar noch nicht die richtige gefunden... sehr ärgerlich.... kannst du nen Screenshot von der Seite nochmal reinstellen wo man Benutzername & Passwort ändern kann?
« Letzte Änderung: 05 August 2022, 12:53:44 von Hauswart »
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

Offline snx

  • Jr. Member
  • **
  • Beiträge: 56
Zeige doch mal deine UserReadings und DOIFs, dann muss ich es nicht neu erfinden.
ok, du hast es so gewollt...:p

Mein Stromzähler
define powermeter OBIS /dev/serial/by-id/usb-Silicon_Labs_CP2102.....@9600,8,N,1 SMLliefert die folgenden selbstsprechenden Readings:
  • power
  • power_L1
  • power_L2
  • power_L3
  • total_consumption
  • total_feed

Der Sensor liefert zwar jede Sekunde aktuelle Werte, ich habe mich FHEM-seitig für ein Interval von 5 Minuten entschieden (dies gilt für den Wechselrichter genauso). Beim Stromzähler erreiche ich das über:
attr powermeter pollingMode on
attr powermeter interval 300

Per Attribut userReadings erzeuge ich zudem weitere Readings, wo die PV-Werte (Device httpSolar) mit betrachtet werden:
power_combined:power.* {
  ## add solar power to main power (positiv or negative)
  ReadingsVal("httpSolar","current_power-1",0) +
  ReadingsVal($name,"power",0)
},
power_L3_combined:power_L3.* {
  ## add solar power to main power (positiv or negative)
  ReadingsVal("httpSolar","current_power-1",0) +
  ReadingsVal($name,"power_L3",0)
},
day_consume:day_(feed|consumption).* {
  ## calculate total consume (including produced solar power) on consumption or feed change
  (ReadingsVal("httpSolar","day_yield",0)*1000) +
  ReadingsVal($name,"day_consumption",0) -
  ReadingsVal($name,"day_feed",0)
}

Das letzte UserReading geht auf noch unbekannte day_* Readings. Diese erzeuge ich per DOIF, da der Trigger nicht das Device ist, ich mehrere Readings in einem befülle, oder ich einfach erst später über die Möglichkeit mit UserReadings gestoßen bin :D.

Zunächst initialisiere ich täglich ein paar Tageswerte (Verbrauch, Einspeisung, Max-Leistung), sowie für die Berechnung notwendige Tagesstartwerte (Gesamtverbrauch, Gesamteinspeisung)
([00:01])
  ## initialize daily Power consumption and feed values..
  (setreading powermeter day_start_total_consumption [powermeter:total_consumption],
    setreading powermeter day_start_total_feed [powermeter:total_feed],
    setreading powermeter day_consumption 0,
    setreading powermeter day_feed 0,
    setreading powermeter day_max_power 0)

Diese Tageswerte update ich dann mit 3 weiteren DOIFs:
([powermeter:power])
  ## update daily max power value if current is higher..
  (IF ([powermeter:day_max_power] < [powermeter:power])
    (setreading powermeter day_max_power [powermeter:power]))
([powermeter:total_feed])
  ## update daily feed value by calculation..
  {
    my $v = [powermeter:total_feed] - [powermeter:day_start_total_feed];
    $v = round($v,1);
    if ($v > [powermeter:day_feed]){
      fhem("setreading powermeter day_feed ${v}");
    }
  }
([powermeter:total_consumption])
  ## update daily consumption value by calculation..
  {
    my $v = [powermeter:total_consumption] - [powermeter:day_start_total_consumption];
    $v = round($v,1);
    if ($v > [powermeter:day_consumption]){
      fhem("setreading powermeter day_consumption ${v}");
    }
  }

Diese Tageswerte schreibe ich am Tagesende dann wiederum in weitere day_end_* Readings, die dann fürs die Tages-Logs herangezogen werden
([23:59])
  ## set day end values..
  (setreading powermeter day_end_consume [powermeter:day_consume],
    setreading powermeter day_end_consumption [powermeter:day_consumption],
    setreading powermeter day_end_feed [powermeter:day_feed],
    setreading powermeter day_end_max_power [powermeter:day_max_power])

Damit das Log übersichtlich bleibt und nur die wichtigen Daten gelogt werden, sind die Events per Attribut event-on-change-reading eingeschränkt:
(power.*|total_consumption|total_feed|day_consumption|day_feed|day_consume|day_end_.*)
Beim Wechselrichter
define httpSolar HTTPMOD http://<user>:<pw>@<ip/hostname>/status.html 300sieht es ähnlich aus. Die per Modul ausgelesenen Readings sind:
  • current_power-1
  • total_yield-1
  • yield_today-1

Mit dem yield_today-1 kann ich nichts anfangen, da es identisch zum total_yield-1 ist. Vermutlich weil mein Wechselrichter nicht nach Hause telefonieren darf und daher keine Information über Standort bzw. Zeitzone hat.

Demnach ermittel ich den Ertrag am Tag (und die max. Leistung am Tag) wiederum über diverse Readings per DOIFs.
Initialisierung:
([00:01])
  ## initialize daily Solar yield values..
  (setreading httpSolar day_start_total_yield [httpSolar:actual_total_yield],
    setreading httpSolar day_yield 0,
    setreading httpSolar day_max_power 0)
Update:
([httpSolar:total_yield-1])
  ## save total yield (cause it sometimes gives 0)
  ## and update daily yield value by calculation..
  {
    if ([httpSolar:total_yield-1] > 0){
      fhem("setreading httpSolar actual_total_yield [httpSolar:total_yield-1]");
      my $v = [httpSolar:total_yield-1] - [httpSolar:day_start_total_yield];
      $v = round($v,1);
      if ($v > [httpSolar:day_yield]){
        fhem("setreading httpSolar day_yield ${v}");
      }
    }
  }
([httpSolar:current_power-1])
  ## update daily max power value if current is higher..
  (IF ([httpSolar:day_max_power] < [httpSolar:current_power-1])
    (setreading httpSolar day_max_power [httpSolar:current_power-1]))
Tages-Endwerte:
([23:59])
  ## set day end values..
  (setreading httpSolar day_end_yield [httpSolar:day_yield], setreading httpSolar day_end_max_power [httpSolar:day_max_power])

Da der Wechselrichter nicht immer zuverlässig den aktuellen Wert im Web-Interface ausspuckt, ist der Update-Code etwas komplexer und ich speichere zusätzlich den aktuellen Wert in einem zusätzlichen Reading (actual_total_yield), da ich sonst u.U. 5 Minuten lang 0W angezeigt bekommen, was völlig falsch ist.

Abschließend sei noch erwähnt, dass ich das Setup im Nachhinein evt. etwas anders aufbauen würde. Bei einigen "meiner" Readings war ich mir unschlüssig ob an den Zähler oder eher an den Wechselrichter. Hatte schonmal überlegt alles selbstdefinierte und berechnete an ein oder zwei Dummies zu hängen, statt den Misch aus Modul- und Custom-Readings zu betreiben....

So, ich hoffe ich habe nichts wichtiges vergessen. Entschuldige bitte, dass ich nicht die kompletten Befehle hierein haue, das liegt einfach daran, dass ich alles über die Oberfläche mache und nicht in der riesen config-Datei rumspringe... und die Befehle zum posten zusammenzuschreiben ist mir zu aufwändig ;)
« Letzte Änderung: 05 August 2022, 17:04:30 von snx »

Offline snx

  • Jr. Member
  • **
  • Beiträge: 56
kannst du nen Screenshot von der Seite nochmal reinstellen wo man Benutzername & Passwort ändern kann?

weiß zwar nicht wofür, aber ja ;)

Offline Hauswart

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 874
Danke für deine Mühe, aber Dreh- und Angelpunkt bei mir ist, dass mein Stromzähler leider kein "total_feed" liefert. Daher muss ich mir überlegen, wie ich diesen Anhaltsmässig mir ermittle.

Mein Zähler gibt zwar Minuswerte bei Einspeisung "power" aus, jedoch speichert er es nicht, daher muss ich irgendwie über die Differenz und dem Timestamp mir die Einspeisung berechnen. Natürlich ist dies auch nur eine Annäherung, da ich nur jede Minute Daten vom Stromzähler auslese, aber besser wie nichts...
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

Offline Hauswart

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 874
weiß zwar nicht wofür, aber ja ;)

Danke dir!!! ICh komme wieder drauf, er speichert nur 15-Stellen vom Passwort und ich hatte 20 :) Daher war dein Screen Gold wert.
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline snx

  • Jr. Member
  • **
  • Beiträge: 56
Danke für deine Mühe, aber Dreh- und Angelpunkt bei mir ist, dass mein Stromzähler leider kein "total_feed" liefert.

Ich würd den Timestamp außen vor lassen, wenn du ja minütlich ausliest, würde ich das auf eine Minute hochrechnen und damit ein Custom Reading aufsummieren....

Offline MogRuith

  • New Member
  • *
  • Beiträge: 27
Hallo beisammen, hier meine aktuelle Lösung, die seit Anfang des Monats gut läuft:
define ga_sol HTTPMOD http://name:pass@xxx.xxx.xxx.xxx/status.html 60
attr ga_sol reading01Name current_output
attr ga_sol reading01Regex var webdata_now_p = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr ga_sol reading02Name output_today
attr ga_sol reading02Regex var webdata_today_e = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr ga_sol reading03Name output_total
attr ga_sol reading03Regex var webdata_total_e = "([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?"
attr ga_sol room Garten
attr ga_sol icon sani_solar
attr ga_sol stateFormat Aktuelle Leistung: current_output-1 W;; Tagesertrag: output_today-1 kWh;; Monatsertrag: output_month kWh;; Jahresertrag: output_year kWh;; Gesamtertrag: output_total-1 kWh
attr ga_sol userReadings output_month:output_today-1.* monotonic {ReadingsNum("ga_sol","output_today-1",0,2)}, output_year:output_today-1.* monotonic {ReadingsNum("ga_sol","output_today-1",0,2)}

define FileLog_ga_sol FileLog /opt/fhem/log/ga_sol_%Y.log ga_sol:(current_output-1).*
attr FileLog_ga_sol logtype text
attr FileLog_ga_sol room Logs

define SVG_FileLog_ga_sol_1 SVG FileLog_ga_sol:SVG_FileLog_ga_sol_1:CURRENT
attr SVG_FileLog_ga_sol_1 room Garten

define ga_sol_auto DOIF ([Tageslicht:twilight] >= 75)\
  (set ga_sol start) (set ga_sol reread)\
DOELSEIF \
([Tageslicht:twilight] <65) \
  (set ga_sol stop)
attr ga_sol_auto group Automatiken
attr ga_sol_auto room Garten

define ga_sol_output_month_reset at *00:00:01 {if ( $mday == 1 ) { fhem("deletereading ga_sol output_month") } }
attr ga_sol_output_month_reset room Garten

define ga_sol_output_year_reset at *00:00:01 {if ( $yday == 1 ) { fhem("deletereading ga_sol output_year") }}
attr ga_sol_output_year_reset room Garten

Sahnehäubchen wäre natürlich das Auslesen des Stromzählers, aber das wird wohl ein Projekt für Regentage. Bin schon gespannt, ob der ISKRA OBIS "spricht".

Besten Dank euch für die tollen Anregungen!!!

Gruß

Offline snx

  • Jr. Member
  • **
  • Beiträge: 56
Bin schon gespannt, ob der ISKRA OBIS "spricht".

Meiner ist auch ein ISKRA, ein MT175.... spricht SML was OBIS versteht ;)

 

decade-submarginal