Jump to content

seppl2025

Members
  • Gesamte Inhalte

    32
  • Benutzer seit

  • Letzter Besuch

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeit.

seppl2025's Achievements

Apprentice

Apprentice (3/14)

  • One Month Later
  • Week One Done
  • Collaborator Rare
  • Conversation Starter
  • First Post

Recent Badges

0

Reputation in der Community

  1. Heute ist ein sonniger Tag der den Ladeverlauf schön zeigt. Die 10 Sekunden-Frage ist meiner Ansicht nach nicht kritisch. Die PV Überschuss-Einstellung habe ich ohnehin auf konservativ eingestellt.
  2. Mit v0.0.4 und konservativer Einstellung -200 Watt ist das PV-Laden jetzt schon deutlich präziser möglich. Die Frequenz wird jetzt durch die teleperiod am Tasmota Lesegerät bestimmt https://tasmota.github.io/docs/Commands/#mqtt TelePeriod See current value and force publish STATE and SENSOR message 0 = disable telemetry messages 1 = reset telemetry period to firmware default (TELE_PERIOD) 10..3600 = set telemetry period in seconds (default = 300) Die untere Grenze liegt dort bei 10 Sekunden.
  3. v0.0.4 müsste das jetzt richtig machen. Ich probier das morgen aus. def calcPower(self, payload) -> float: """ Calculate power from payload using MeterReading class. Args: payload: The decoded JSON payload from MQTT message Returns: float: Calculated power in watts """ # get the timestamp timestamp_str = payload.get(self.time_field) # Get the data from the payload data = payload.get(self.power_tag, {}) # Extract values e_in = data.get(self.in_field) e_out = data.get(self.out_field) power_magnitude = data.get(self.power_field) # Create current reading current = MeterReading(kWh_in=e_in, kWh_out=e_out, time_stamp=timestamp_str) # If we don't have a previous reading, store this one and return fallback power if not hasattr(self, "_last_reading"): active_power = None else: # calc power roughly from meter reading active_power = current.active_power(self._last_reading) # if we have a precise power magnitude we will use it: if power_magnitude: delta_in = e_in - self._last_reading.kWh_in delta_out = e_out - self._last_reading.kWh_out sign = 1 if delta_in >= delta_out else -1 active_power=sign*power_magnitude active_power=round(active_power) # Update stored reading self._last_reading = current return active_power Das Vorzeichen wird über die in/out Zähler bestimmt. Wirkleistung kommt vom Power2 Wert, der aber immer positiv ist. Die Anzeige in der warp UI sieht jetzt richtig aus das MQTT Intervall habe ich auf 10 Sekunden gestellt der aktuelle Wert wird dann einfach jede Sekunde gesendet. Das müsste deutlich besser funktionieren.
  4. Sehr gute Fragen. Kann man das auch erhöhen? Die Wallbox möchte gerne Werte im Sekundentakt haben, oder alternativ maximal alle zwei Sekunden, damit PV-Überschussladen gut funktioniert. Ja - die Konfiguration sieht das ja bereits vor. Ich hatt es nur noch nicht umgesetzt. https://github.com/WolfgangFahl/WarpMQTT2Api/issues/4 hat den Fix. Warum macht der Leistungswert eigentlich Sprünge von genau 360 W? Das ist ziemlich ungenau. Ich hätte erwartet, dass der Tasmota-Sensor die Momentanleistung mit Watt-Genauigkeit ausliest. Natürlich, das Power2 Feld hat die Leistung. Ich habe aber bewusst erstmal die Zählerwerte mit Timestamp umgerechnet. Wegen der Rundung und dem 10 Sekunden Takt gibt das eine Ungenauigkeit. Ich habe jetzt auf 20 Sekunden MQTT Takt gedrosselt, dann ist es schon mal genauer. Ansonsten muss ich mir das Vorzeichen des Power-Werts noch angucken. Das ganze ist ja eh nur eine Work-Around bis MQTT-Zähler möglich sind. Gibt es dazu schon ein offizielle Feature-Request im github?
  5. In dem Beitrag: ist ja bereits diskutiert worden, wie ein Tasmota-Stromzähler seine Werte an die Warp3 liefern kann. Die Lösung dort sendet direkt per Post-API die Werte. Das funktioniert aber nicht so wie gewünscht, weil der Power Wert z.B. bei eHZ Zählern immer positiv ist, die Wallbox aber ein korrektes Vorzeichen erwartet. Zudem finde ich persönlich den Weg über MQTT zukunftssicherer. MQTT ermöglicht eine saubere "Separation of Concerns". Als Lösungsvorschlag habe ich ein python basiertes Middlewareprojekt gestartet - siehe https://github.com/WolfgangFahl/WarpMQTT2Api Bei mir läuft die Software auf einem raspberry PI. Einfach von pypi oder direkt vom github repository aus installieren. Dann gibt es ein warp3 Kommandozeilen-Werkzeug: warp3 -h usage: warp3 [-h] [--config-path CONFIG_PATH] [--mqtt-broker MQTT_BROKER] [--mqtt-port MQTT_PORT] [--mqtt-topic MQTT_TOPIC] [--mqtt-username MQTT_USERNAME] [--mqtt-password MQTT_PASSWORD] [--update-interval UPDATE_INTERVAL] [--dry-run] [--wallbox-host WALLBOX_HOST] [--power-tag POWER_TAG] [--in-field IN_FIELD] [--out-field OUT_FIELD] [--time-field TIME_FIELD] [--meter-id METER_ID] [--debug] MQTT to Warp3 Wallbox Middleware options: -h, --help show this help message and exit --config-path CONFIG_PATH Path to YAML configuration file --mqtt-broker MQTT_BROKER MQTT broker address --mqtt-port MQTT_PORT MQTT broker port --mqtt-topic MQTT_TOPIC MQTT topic to subscribe to --mqtt-username MQTT_USERNAME MQTT username --mqtt-password MQTT_PASSWORD MQTT password --update-interval UPDATE_INTERVAL Minimum update interval in seconds --dry-run Run without updating the wallbox --wallbox-host WALLBOX_HOST Wallbox host URL --power-tag POWER_TAG Tag in MQTT data containing power information --in-field IN_FIELD Field name in MQTT data containing energy input --out-field OUT_FIELD Field name in MQTT data containing energy output --time-field TIME_FIELD Field name in MQTT data containing timestamp --meter-id METER_ID Meter ID to use --debug Enable debug logging Ausgangspunkt ist ein tasmota-Zähler, der mit MQTT Nachrichten sendet. Siehe z.B. https://docs.bitshake.de/script/ Bei mir sehen diese Nachrichten so aus: {"Time":"2025-05-10T08:24:13","eHZ":{"E_in":67299.845,"E_out":50268.783,"Power":0,"Power2":4111}} Zunächst wird ein Stromzähler als API - Zähler für den Netzanschluss eingerichtet. Die ID des Zähler kommt dann in die Konfigurationsdatei zur Beschreibung des Zählers und der MQTT Verbindung: # WF 2025-09-05 # warp3 middleware configs # Wallbox wallbox_host: "http://wallbox.bitplan.com" # Zähler meter_id: 2 # Update Frequenz in Sekunden - 1 bis 2 Sekunden sind sinnvoll update_interval: 1 # Beschreibung der MQTT Nachricht time_field: "Time" power_tag: "eHZ" # Genaue Wirkleistung power_field: "Power2" # Zählerwerte zur Abschätzung und Vorzeichenberechnung in_field: "E_in" out_field: "E_out" # MQTT Kommunikationseinstellungen mqtt_broker: "mqtt.bitplan.com" mqtt_port: 1883 mqtt_topic: "tele/tasmota_****/SENSOR" mqtt_username: "****" mqtt_password: "****" update_interval: 1 # - every second dry_run: false Ein start script: #!/bin/bash # WF 2025-05-10 # Start Warp3 with nohup and log to /var/log/warp3 LOGDIR="/var/log/warp3" LOGFILE="$LOGDIR/warp3.log" APP="warp3" OPTIONS="--config-path /home/wf/.warp3/config.yaml" sudo mkdir -p "$LOGDIR" sudo chmod 755 "$LOGDIR" sudo chown wf:wf $LOGDIR timestamp=$(date '+%F %T') echo "$timestamp - INFO - 🚀 Starting warp3" >> "$LOGFILE" nohup "$APP" $OPTIONS >> "$LOGFILE" 2>&1 & crontab eintrag: # run warp3 on reboot @reboot /home/wf/bin/warp3start dann erscheint im Log 2025-05-10 08:13:27 - INFO - 🚀 Starting warp3 2025-05-10 08:13:28,476 - INFO - Starting MQTT to Warp3 middleware 2025-05-10 08:13:28,476 - INFO - MQTT broker: mqtt.bitplan.com 2025-05-10 08:13:28,476 - INFO - MQTT topic: tele/tasmota_B13330/SENSOR 2025-05-10 08:13:28,477 - INFO - Wallbox host: http://wallbox.bitplan.com 2025-05-10 08:13:28,477 - INFO - Power tag: eHZ 2025-05-10 08:13:28,477 - INFO - Meter ID: 2 2025-05-10 08:13:28,503 - INFO - ✅ Connected to Warp3 - Firmware version: 2.8.0+6810d7c9 2025-05-10 08:13:28,523 - INFO - ✅ Meter 'Hausanschluss' at location 4 measures: 74: Summe der Phasenwirkleistungen (Bezug - Einspeisung) 2025-05-10 08:13:28,528 - INFO - Starting MQTT loop 2025-05-10 08:13:28,529 - INFO - Connected to MQTT broker at mqtt.bitplan.com 2025-05-10 08:13:28,529 - INFO - Subscribed to tele/tasmota_B13330/SENSOR 2025-05-10 08:13:43,751 - INFO - Power value: -3600W 2025-05-10 08:13:43,777 - INFO - ✅ -3600 Watt set 2025-05-10 08:13:53,754 - INFO - Power value: -3960W 2025-05-10 08:13:53,777 - INFO - ✅ -3960 Watt set 2025-05-10 08:14:03,761 - INFO - Power value: -3960W 2025-05-10 08:14:03,786 - INFO - ✅ -3960 Watt set Nun ist der Zähler mit der eingestellten Tasmota-Sende Frequenz für die wallbox sichtbar.
  6. Source code at https://github.com/WolfgangFahl/WarpMQTT2Api warp3 --config-path $HOME/.warp3/config.yaml 2025-05-09 16:33:33,286 - INFO - Starting MQTT to Warp3 middleware 2025-05-09 16:33:33,286 - INFO - MQTT broker: mqtt.bitplan.com 2025-05-09 16:33:33,286 - INFO - MQTT topic: tele/tasmota_B13330/SENSOR 2025-05-09 16:33:33,286 - INFO - Wallbox host: http://wallbox.bitplan.com 2025-05-09 16:33:33,286 - INFO - Power tag: eHZ 2025-05-09 16:33:33,286 - INFO - Meter ID: 2 2025-05-09 16:33:33,303 - INFO - ✅ Connected to Warp3 - Firmware version: 2.8.0+6810d7c9 2025-05-09 16:33:33,312 - INFO - ✅ Meter 2 configured successfully 2025-05-09 16:33:33,315 - INFO - Starting MQTT loop 2025-05-09 16:33:33,316 - INFO - Connected to MQTT broker at mqtt.bitplan.com 2025-05-09 16:33:33,316 - INFO - Subscribed to tele/tasmota_B13330/SENSOR 2025-05-09 16:33:43,423 - INFO - Power value: -360W 2025-05-09 16:33:43,433 - INFO - ✅ -360 Watt set Config Beispiel: yaml file # WF 2025-09-05 # warp3 middleware configs # Wallbox wallbox_host: "http://wallbox.bitplan.com" power_tag: "eHZ" in_field: "E_in" out_field: "E_out" time_field: "Time" meter_id: 2 # MQTT mqtt_broker: "mqtt.bitplan.com" mqtt_port: 1883 mqtt_topic: "tele/tasmota_******/SENSOR" mqtt_username: "*****" mqtt_password: "*******" update_interval: 1 # - every second dry_run: false
  7. Pro Nachrüstung ist erfolgt. @dataclass class MeterReading: kWh_in: float kWh_out: float time_stamp: str @property def time(self) -> datetime: """Convert timestamp string to datetime object""" return datetime.strptime(self.time_stamp, "%Y-%m-%dT%H:%M:%S") @property def active_power(self,prev:"MeterReading")->float: """ calculate the active power """ # Time difference in hours time_delta = (self.time - prev.time).total_seconds() / 3600 # Energy change (kWh) energy_delta = (self.kWh_in - prev.kWh_in) - (self.kWh_out - prev.kWh_out) # Power in watts active_power= (energy_delta * 1000) / time_delta return active_power
  8. Habe die Wallbox schliesslich eingesendet und geprüft wieder zurück erhalten. Ist jetzt sogar ein Pro Typenschild drauf. Funktioniert klaglos. Vielen Dank!
  9. Zumindestens kann ich jetzt erstmal wieder laden und mich über die PV-Überschuss-Einrichtung kümmern, was mein nächtes Ziel ist.
  10. Die Box läuft zumindest wieder. Allerdings gibt es ein paar Folgeprobleme: Die Aktionen für die NFC-Karten waren nicht mehr gespeichert. Außerdem blinkt die Box beim Einschalten gelb, und die NFC-Karten scheinen nicht mehr zu funktionieren. Das überrascht mich nicht, denn die NFC-Elektronik war ja genau das Hindernis beim mechanisch einfachen Einbau. Es würde mich daher nicht wundern, wenn da jetzt etwas nicht mehr so funktioniert wie es soll.
  11. Es ist etwas knapp bemessen. Professionell ginge das sicher besser. Ich überlege deshalb, die Box wieder einzuschicken, damit die Arbeit ordentlich abgeschlossen werden kann.
  12. Alles wieder anschliessen.
  13. Der Zusammenbau gestaltet sich leider nicht ganz frustrationsfrei. Die NFC-Elektronik ist verklebt, und dem Gehäuse fehlen einige Millimeter in der Breite, um den fertigen Block problemlos einzubauen. Hilfe war nötig (meine Frau war so freundlich): gegebenenfalls Sekundenkleber, damit die Scheibe nicht von der Schraube fällt, ein Magnet, um die Schraube an ihren Platz zu bringen (falls man nicht vorher daran gedacht hatte), sowie viel Geduld und Fingerspitzengefühl. Aufgrund dieser scheinbar einfachen mechanischen Hürde, die letztlich viel Zeit und Nerven gekostet hat, würde ich beim aktuellen Design der Wallbox den Zusammenbau nicht noch einmal selbst versuchen. Meine Selbstbaubox für meinen Peugeot Ion aus dem Jahr 2017 hatte da deutlich mehr Platz
  14. Mit ausgebauter Hutschiene ist auch die Rückseite gut erreichbar. Nun können die Anschlüsse entsprechend Stromlaufplan und den dokumentierten Zuständen vorher/nachher systematisch verändert werden.
×
×
  • Neu erstellen...