csv-Datei automatisch erstellen

Hallo,
für meine Immobilien-Verwaltung in hellohousing würde ich gerne meine Zählerstände monatlich oder wöchentlich von HA automatisiert in eine csv-Datei schreiben und an eine Mail-Adresse senden lassen.

Ist sowas (vielleicht sogar mit Boardmitteln) machbar? Und wie müsste ich vorgehen?

Danke für etwaige Ideen!

Mir fällt nur ein wie du den aktuellen Wert per Mail senden kannst.
Email Integrieren:

Und dann eine Automation wo du den Dienst der Mail ausführst:

service: notify.wohnung_mail
data:
  title: Monatlicher Stromverbrauch
  message: |
    Der Aktuelle Zählerstand ist {{states("sensor.stromzahler")}}kWh Stand {{now().strftime('%e.%m.%Y %H:%M')}}

image
(im Bild fehlt noch ein Leerzeichen der ist im Code schon mit drin)

LG
Tobi

Das mit dem Mail senden hab ich schon implementiert. Mir geht’s speziell darum, die Datei im csv-Format zu erstellen.

Danke trotzdem erstmal. Vielleicht hat noch jemand eine Idee dazu

Da habe ich keine Idee man kann jetzt über die History ne .csv herunterladen, habe aber kein Dienst gefunden der das auch kann.

LG

Okay, macht nix.
Hab doch tatsächlich im (vergessenen) Forum von HA einen Beitrag dazu gefunden, mit dem ich das mal probieren könnte:
https://community.home-assistant.io/t/automation-saving-sensor-value-in-csv/603184

Gruß

So, eine csv-Datei kann ich automatisiert erstellen lassen. Jetzt wäre natürlich noch interessant, wie ich diese Datei aus HA automatisch an eine bestimmte eMail-Adresse als Dateianhang senden kann. Vielleicht hat jemand eine Idee dazu oder einen Link zu einer Anleitung. Wäre das mit Node-Red möglich? Hab zwar schon was gefunden, aber es klappt noch nicht.

[{"id":"31a11cd26641ee15","type":"tab","label":"Send CSV zaehlerdaten","disabled":false,"info":"","env":[]},{"id":"a348a4a07df0da9b","type":"e-mail","z":"31a11cd26641ee15","server":"smtp.gmail.com","port":"465","authtype":"BASIC","saslformat":true,"token":"oauth2Response.access_token","secure":true,"tls":true,"name":"juergen.goller@mail.de","dname":"gmail-sender","x":710,"y":320,"wires":[]},{"id":"04478f146606f3cd","type":"inject","z":"31a11cd26641ee15","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"},{"p":"filename","v":"path: '/config/www/CSV/zaehlerdaten.csv'","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"mail from nodered erbweg","payload":"nodered email working","payloadType":"str","x":440,"y":320,"wires":[["a348a4a07df0da9b"]]}]

Ich weiß nicht, was ich für einen Pfad zur Datei angeben müsste. Die Datei liegt unter www/CSV/zaehlerdaten.csv
nodered flow1
nodered inject1

Hat da jemand ne Idee dazu??

Versuch es msl mit local/CSV/zaehlerdaten.csv

werd ich versuchen, weißt du auch, wie ich es eingeben muss? Satzzeichen und so?

Mit Node-RED kenne ich mich nicht aus.

habs gelöst, sende später den Lösungsweg!

@paprmakr78

Das klingt gut, wäre an den Code/Flow auch interessiert. :grinning:

zu Beginn in Node-Red in der Palette “node-red-node-email” istallieren!

Hier ist erstmal ein Bild vom Flow:

der Flow-Code:

[{"id":"31a11cd26641ee15","type":"tab","label":"Send CSV zaehlerdaten","disabled":false,"info":"","env":[]},{"id":"a3a4af0da9b","type":"e-mail","z":"31a11cd26ee15","server":"smtp.gmail.com","port":"465","authtype":"BASIC","saslformat":true,"token":"oauth2Response.access_token","secure":true,"tls":true,"name":"j.r@l.de","dname":"gmail-sender","x":830,"y":580,"wires":[]},{"id":"e7ba86de5847b25e","type":"watch","z":"31a11cd26641ee15","name":"zaehlerdaten","files":"/homeassistant/www/CSV/zaehlerdaten.csv","recursive":"","x":310,"y":620,"wires":[["7f372dd4.9ac984"]]},{"id":"7f372dd4.9ac984","type":"file in","z":"31a11cd26641ee15","name":"get file","filename":"/homeassistant/www/CSV/zaehlerdaten.csv","filenameType":"str","format":"","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":470,"y":580,"wires":[["892f85fd.ddf898"]]},{"id":"892f85fd.ddf898","type":"function","z":"31a11cd26641ee15","name":"write email","func":"const file = msg.filename;    // create local file variable for convenient reference\nvar d = new Date();     // create current date object for the time string\nvar tstring = d.toString().substring(0,4) + d.toString().substring(15,21);\n\nmsg.attachments =\n     { filename : file.substring(file.lastIndexOf('/')+1,file.length),\n        content : msg.payload };    // content should be a file binary buffer\n        \nmsg.topic = \"Zählerdaten am \" + tstring; // email subject\n\nmsg.payload = \"im Anhang: `\" + msg.attachments.filename + \"`\"; // email body\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":630,"y":580,"wires":[["a348a4a07df0da9b"]]},{"id":"5fb69172.b3471","type":"inject","z":"31a11cd26641ee15","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":320,"y":540,"wires":[["7f372dd4.9ac984"]]}]

natürlich auf die eigenen Bedürfnisse anpassen.
Ich hab vorher per Automation die CSV-Datei erstellen lassen. Diese liegt im www-Unterverzeichniss “CSV” und heisst “zaehlerdaten.csv”. Der Pfad, den ich angegeben habe, kann man im File Editor nach dem Aufruf der Datei oben ablesen. Der node “zaehlerdaten” am Anfang löst bei einer Änderung der Datei den Flow aus.

Probier mal, ob es bei dir so funktioniert.

Funktioniert bei mir. Danke!

Diese Lösung hatte ich bei Google auch schon gefunden.
Ich dachte, es geht wie bei einer telegram-Bot-Nachricht einfacher in einer Node:

image

[{"id":"8a14c59290d3ba2d","type":"api-call-service","z":"9389c3c63e90a9d2","name":"Watchman-Report","server":"a1aba8eb.bfd618","version":5,"debugenabled":false,"domain":"telegram_bot","service":"send_document","areaId":[],"deviceId":[],"entityId":[],"data":"{\t   \"file\":\"/config/watchman_report.txt\"\t}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":967.3333282470703,"y":4861.6665333509445,"wires":[[]]},{"id":"a1aba8eb.bfd618","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

Kannst Du einmal beschreiben, wie Du die Werte in die csv bekommst?
Ich habe es versucht, leider klappt das bei mir nicht.
Per Email die Werte versenden funktioniert bei mir ohne Probleme.

Ok ich nutz auch gern und intensiv node-red aber doch nicht für sowas.
Das geht in HA nun wirklich einfach Werte in eine CSV zu schreiben.

Mit der File Integration einen “wunschname.csv” erstellen z.B. im /config Ordner. Den logischerweise für Zugriff freigeben.

Und dann halt in einer Automation die gewünschten Werte durch Komma getrennt reinschreiben und fertig.

Mach ich so nachts um 00:00:05 mit meinen PV Werten

triggers:
  - trigger: time_pattern
    hours: 0
    minutes: 0
    seconds: 5
conditions: []
actions:
  - action: notify.send_message
    metadata: {}
    data:
      entity_id: notify.file
      message: >
        {% set t = now().timestamp() | timestamp_custom('%d.%b.%Y %H:%M:%S') %}
        {% set t = t + "," %}
        {% set t = t + states('sensor.total_power_photovoltaics') | float | round(2) | string
        %}
        {% set t = t + "," %}
        {% set t = t +   states('sensor.total_power_battery_discharging') | float | round(2)|
        string %}
        {% set t = t + "," %}
        {% set t = t + states('sensor.smart_meter_ts_65a_3_energy_real_consumed') | float |
        round(2) | string %}
        {% set t = t + "," %}
        {% set t = t + states('sensor.total_power_battery_charging') | float | round(2) |
        string %}
        {% set t = t + "," %} {% set t = t + states('sensor.smart_meter_ts_65a_3_energy_real_produced') | float |
        round(2) | string %}
        {{ t }}
mode: single