NEWS
Esphome: INPUT moeglichkeit? cron mit variable setzen?
-
Hallo IoBrokers,
ich habe mal mit ESPHOME mich beschaeftigt und suche eine Moeglichkeit ein Cron Timer variabel einzugeben.
Dh. ich wuerde gerne ueber MQTT / Webinterface einen Wert aendern (vorerst mal einen Cron Timer)Kann ich eine Variable dauerhaft speichern mit "jetzt in den Flash speichern"? oder geht das nur allgemein fuer eine Globale Variable automatisch?
restore from flash gibt es aber kein store to flash.Danke fuer Eure Hilfe,
-
@fred-freund said in Esphome: NPUT moeglichkeit? cron mit variable setzen?:
Kann ich eine Variable dauerhaft speichern mit "jetzt in den Flash speichern"?
Um bei esphome Daten im flash zu speichern ist es wichtig dein esp Modell zu wissen. Bei esp32 (mit nv-flash) ist "save to flash" standardmäßig aktiv. Bei esp82xx muss das dediziert aktiviert werden, siehe dazu
esp8266_restore_from_flash
restore from flash gibt es aber kein store to flash.
Es geht de facto um den restore nach dem start vom esp, also ob er die Daten aus dem flash abrufen soll oder "leer" starten soll. Wenn der
restore_value
auftrue
ist schreibt er natürlich auch die Werte in den flash (default max. alle 60s um den flash speicher zu schonen)Ich speichere z.B. manuelles Stromzähler ablesen auf meinem esp mit pzem004t v3 welcher über den Hausverbrauch Bescheid weiß:
# Example configuration entry number: - platform: template name: "Stromzähler Ablesung" optimistic: true min_value: 0 max_value: 100000 step: 1 restore_value: true # damit werden die Werte in den flash geschrieben, default max. jede 60s
https://esphome.io/components/number/template.html
Und um das "Schreibinterval" (default 60s) zu ändern sieh hier
https://esphome.io/components/esphome.html#adjusting-flash-writes
-
Danke fuer deine Hilfe, ich verwende einen esp32 wroom denke es ist ein DEV kit solte 4MB haben.
Ich dachte der stribt nach einigen 100 flash writes.Ich moechte ein automatischen Huehnerstalltuerl machen dh. das autmatisch schliesst und oeffnet .
Natuerlich soll es auch gleichzeitig Verschiedene Temperaturen Luftdruck Luftfeuchtigkeit BME 280 etc. also eine kleine Wetterstation sein. Helligkeit mit einem bh1750
und hat auch ein Display ssd1106.Eigentlich hoffte ich wenn mein Wlan nicht funktioniert das ich eine web page (auch wenn wlan emfpang ist) habe die mir die Moeglichkeit gibt Einstellungen vorzunehmen.
Dh. die Dunkelstufe wenn die Tuer schliesst und die Oeffnungszeit zu verstellen.Ich konnte noch nicht finden wie ich eingaben machen kann , dh. INPUT zu einer Variablen.
Ich schaetze das muss ich ueber Taster machen. fuer Stunde und Minute .Weiters ist die Frage ob man
# Cron syntax, trigger every 5 minutes - cron: '* /5 * * * *' then: - switch.toggle: my_switch
- cron: ' /5 * * * ' mit einer Variablen - cron: Variable modifizieren kann.
mit Lampda muss ich mich noch beschaeftigen:
Sollte jemand die Darstellung am ssd1106 interessieren hier mein code zur Verwendung auch ein Graph ist fuer den Luftdruck auf 2page im Display zu sehen die alle 5s umwechselt.
Also nettes BarometerSunSet und SunRise ist auch dabei .
esphome: name: chickencoop1 on_boot: then: # read the RTC time once when the system boots ds1307.read_time: platform: ESP32 board: nodemcu-32s # Enable logging logger: # level: VERY_VERBOSE level: INFO ota: password: !secret ota_password # Enable fallback hotspot (captive portal) in case wifi connection fails # ap: # ssid: "Chickencoop1 Fallback Hotspot" # password: "sZu8qgiRoBoL" #captive_portal: wifi: ssid: !secret wifi_ssid password: !secret wifi_password manual_ip: static_ip: x.x.x.x gateway: x.x.x.x subnet: x.x.x.x dns1: x.x.x.x font: - file: "arial.ttf" id: my_font size: 10 sun: latitude: 48.108956° longitude: 16.2853875° time: - platform: ds1307 # repeated synchronization is not necessary unless the external RTC # is much more accurate than the internal clock update_interval: never # instead try to synchronize via network repeatedly ... on_time_sync: then: # ... and update the RTC when the synchronization was successful ds1307.write_time: id: ds1307_time - platform: sntp id: sntp_time i2c: sda: 21 #pin15 scl: 22 #pin2 scan: true id: bus_a sensor: - platform: bh1750 name: "BH1750 Illuminance" address: 0x23 update_interval: 60s id: chickillum - platform: bme280 temperature: name: "BME280 Temperature" id: bme280_temperature pressure: name: "BME280 Pressure" id: bme280_pressure humidity: name: "BME280 Relative Humidity" id: bme280_humidity address: 0x76 update_interval: 15s - platform: template name: "Altitude" lambda: |- const float STANDARD_SEA_LEVEL_PRESSURE = 1013.25; //in hPa, see note return ((id(bme280_temperature).state + 273.15) / 0.0065) * (powf((STANDARD_SEA_LEVEL_PRESSURE / id(bme280_pressure).state), 0.190234) - 1); // in meter update_interval: 15s icon: 'mdi:signal' unit_of_measurement: 'm' - platform: template name: "Absolute Humidity" lambda: |- const float mw = 18.01534; // molar mass of water g/mol const float r = 8.31447215; // Universal gas constant J/mol/K return (6.112 * powf(2.718281828, (17.67 * id(bme280_temperature).state) / (id(bme280_temperature).state + 243.5)) * id(bme280_humidity).state * mw) / ((273.15 + id(bme280_temperature).state) * r); // in grams/m^3 accuracy_decimals: 2 update_interval: 15s icon: 'mdi:water' unit_of_measurement: 'g/m³' - platform: wifi_signal name: "WiFi Signal Sensor" unit_of_measurement: "dB" update_interval: 60s id: my_wifisignal mqtt: broker: !secret mqtt_broker username: !secret mqtt_user password: !secret mqtt_password discovery: true discovery_retain: true graph: # Show bare-minimum auto-ranged graph - id: single_pressure_graph sensor: bme280_pressure duration: 12h width: 128 height: 64 #display: # - platform: ssd1306_i2c # model: "SH1106 128x64" # address: 0x3C # id: my_display # pages # - id: page1 # lambda: |- # it.printf(0, 0, id(my_font),"Temp: %.1f°", id(bme280_temperature).state); # it.printf(64, 0, id(my_font), "Pres: %.1f", id(bme280_pressure).state); # it.printf(0, 15, id(my_font), "Hum: %.1f%", id(bme280_humidity).state); # it.printf(64, 15, id(my_font), "Ilum: %.1f", id(chickillum).state); # it.strftime(0, 45, id(my_font), "T: %H:%M", id(ds1307_time).now()); # it.printf(64, 45, id(my_font), "Wifi: %.1f", id(my_wifisignal).state); # it.printf(0, 30, id(my_font), "sr: %s", id(sunr).state.c_str()); # it.printf(64, 30, id(my_font), "ss: %s", id(suns).state.c_str()); # - id: page2 # lambda: |- # it.graph(0, 0, id(single_pressure_graph)); display: - platform: ssd1306_i2c model: "SH1106 128x64" address: 0x3C id: my_display pages: - id: page1 lambda: |- it.printf(0, 0, id(my_font),"Temp: %.1f°", id(bme280_temperature).state); it.printf(64, 0, id(my_font), "Pres: %.1f", id(bme280_pressure).state); it.printf(0, 15, id(my_font), "Hum: %.1f%", id(bme280_humidity).state); it.printf(64, 15, id(my_font), "Ilum: %.1f", id(chickillum).state); it.strftime(0, 45, id(my_font), "T: %H:%M", id(ds1307_time).now()); it.printf(64, 45, id(my_font), "Wifi: %.1f", id(my_wifisignal).state); it.printf(0, 30, id(my_font), "sr: %s", id(sunr).state.c_str()); it.printf(64, 30, id(my_font), "ss: %s", id(suns).state.c_str()); - id: page2 lambda: |- it.graph(0, 0, id(single_pressure_graph)); interval: - interval: 5s then: - display.page.show_next: my_display - component.update: my_display text_sensor: - platform: sun name: Sun Next Sunrise type: sunrise id: sunr - platform: sun name: Sun Next Sunset type: sunset id: suns
Es fehlt noch der Web server und dergleichen, die Variable und auch die Cron.
Relais hab ich schon aber noch nicht konfiguriert .Bin noch am ueberlegen ob ich den Dehumidifier nehmen soll oder einfach einen GPIO Ausgang definieren.
-
Also eigentlich muesste es mit eine Globalen Variablen funktionieren.
globals: - id: my_global_int type: int restore_value: no initial_value: '0' # Example for global string variable - id: my_global_string type: std::string restore_value: no # Strings cannot be saved/restored initial_value: '"hello world"'
sogar String laesst sich restoren.
Meine Frage ist auch kann mir jemand sagen wo ich infos ueber Attribute finden kann . oder Actions?
in der API reference?
zb. von Sun? https://beta.esphome.io/api/sun_8h.html)Ich komme noch aus der Zeit wo man Maschinenkode programmiert hat und Object oriented tu ich mir noch schwer.
-
@fred-freund said in Esphome: NPUT moeglichkeit? cron mit variable setzen?:
Ich dachte der stribt nach einigen 100 flash writes.
Also das 10 oder 100-fache deiner Schätzung sollte schon drin sein, aber das kann bei unkontrollierten Schreibvorgängen (welche ja durch ein default interval von maximal 60 Sekunden abgefedert werden) doch schneller passieren als ein lieb ist.
Das betrifft aber in erster Linie die esp82xx welche ohne nvs flash
dahergekommen! Deswegen muss hier dediziert eingestellt werden das states etc. in den flash geschrieben werden.
Eigentlich hoffte ich wenn mein Wlan nicht funktioniert das ich eine web page (auch wenn wlan emfpang ist) habe die mir die Moeglichkeit gibt Einstellungen vorzunehmen.
Dh. die Dunkelstufe wenn die Tuer schliesst und die Oeffnungszeit zu verstellen.Und das solle ohne weiteres möglich sein, genau dafür ist esphome ja da
Also eigentlich muesste es mit eine Globalen Variablen funktionieren.
korrekt, setze doch mal ganz frech:
restore_value: yes
Meine Frage ist auch kann mir jemand sagen wo ich infos ueber Attribute finden kann
Über welche Attribute reden wir? Die von Sensoren?
https://esphome.io/components/sensor/index.html
oder Actions?
https://esphome.io/guides/automations.html#all-actions
Ich moechte ein automatischen Huehnerstalltuerl machen dh. das autmatisch schliesst und oeffnet .
Natuerlich soll es auch gleichzeitig Verschiedene Temperaturen Luftdruck Luftfeuchtigkeit BME 280 etc.Dann kannst du übrigens hier ein bisschen spicken
https://community.home-assistant.io/t/my-project-chicken-coop-automation/329951
-
@opensourcenomad said in Esphome: NPUT moeglichkeit? cron mit variable setzen?:
Über welche Attribute reden wir? Die von Sensoren? https://esphome.io/components/sensor/index.html
Ja ueber die Werte von Sun zb. wollte diese am Diesplay ausgeben sunrise , wusste nicht ist das number string char
hab dann rumprobiert also stringwuesste auch gerne wie ich rausfinden kann das der cron durch eine varable ersetzt werden kann.
https://beta.esphome.io/api/sun_8cpp_source.html
Hier in Zeile 311 ist surise definiert und sunset als double
Auf meinem Display war es aber dann ein String.
it.printf(64, 30, id(my_font), "ss: %s", id(suns).state.c_str());
Daher wo kann ich die attribute finden.
-
also
# Cron syntax, trigger every 5 minutes - cron: (id(my_global_string).state)
mit der string global variable
- id: my_global_string type: std::string restore_value: no # Strings cannot be saved/restored initial_value: "'* /5 * * * *'"
funktioniert nicht ...
Ausserdem schreibt er mir bei web server das es keine version gibt , bekomme nur Version 1 zum laufen.
-
@fred-freund said in Esphome: INPUT moeglichkeit? cron mit variable setzen?:
Ausserdem schreibt er mir bei web server das es keine version gibt , bekomme nur Version 1 zum laufen.
das deutet darauf hin das eine veraltete esphome version installiert ist. Aktuell ist Jahr.Monat (2022.05) und den web_server v2 gibt es seit 2022.03, du wirst also was älteres am laufen haben
-
@opensourcenomad
Habe ein debian am laufenpip3 install --pre -U esphome
Requirement already satisfied, skipping upgrade: pyparsing!=3.0.5,>=2.0.2 in ./.local/lib/python3.7/site-packages (from packaging->marshmallow<4,>=2->platformio==5.2.5->esphome) (3.0.9)
hatte schon den verdacht, komisch
-
Geloest, hatte noch python2.7
-
also habe verschucht jetzt den cron variabel zu machen:
scheitere weiter daran:egal ob hier:
- cron: !lambda ‘return id(my_global_string).state;’ then: - logger.log: Time has been set and is valid!
oder hier:
# Every morning on weekdays - seconds: 0 minutes: 0 hours: !lambda ‘return id(my_global_hour1).state;’ days_of_week: MON-FRI then: - logger.log: Time has been set and is valid!
er meckert immer not templatable
kann mir jemand sagen wie dieses AC hier zusammengebastelt ist?
-
@fred-freund said in Esphome: INPUT moeglichkeit? cron mit variable setzen?:
also habe verschucht jetzt den cron variabel zu machen:
scheitere weiter daran:[...]
er meckert immer not templatable
Ich muss zugeben das ich bisher noch gar keinerlei cron Geschichten in esphome habe und das ich versuche auf lambda ebenfalls komplett zu verzichten.
Aber nachdem ich deine Frage (sind templatable cron jobs möglich) im esphome discord gestellt habe hatte ich 2 Minuten später die Antwort:
No as it converts the cron in python to the hours/mins/etc and then passes those through to c++.
The c++ has no concept of cronSprich esphome kompiliert das "statisch"
kann mir jemand sagen wie dieses AC hier zusammengebastelt ist?
Mit Sicherheit eine "fertige" climate component, wahrscheinlich bang-bang oder thermostat
https://esphome.io/index.html#climate-components
-
@opensourcenomad
Danke, es scheint die Verstellung muss man einfach im yaml machen und dann hochladen.meine Template Variable hat sich nicht mehr ins flash geschrieben wurde immer der Alte Wert ausgelesen , habe sie dann umbenannt dann ging es wieder.
Gibt es eine Moeglichkeit fuer einen Input einer Zahl und Text in einem Feld fuer eine Variable?
Danke das du das im Discord gefragt hast, habe schon einen account, aber ich haette lieber ein Forum , Discord so neumodisches Zeug muss ich erst probieren.
-
@fred-freund said in Esphome: INPUT moeglichkeit? cron mit variable setzen?:
Gibt es eine Moeglichkeit fuer einen Input einer Zahl und Text in einem Feld fuer eine Variable?
Beides gleichzeitig? Oder jeweils eines mit Zahl, am leichtesten wahrscheinlich einfach mit einer
number component
?https://esphome.io/#number-components
Und ein Text (vorausgewählt?) eventuell mit einerselect component
https://esphome.io/#select-components
Danke das du das im Discord gefragt hast, habe schon einen account, aber ich haette lieber ein Forum
Das "offizielle" esphome forum ist in der home assistant community zuhause
https://community.home-assistant.io/c/esphome/36
-
@opensourcenomad said in Esphome: INPUT moeglichkeit? cron mit variable setzen?:
Gibt es eine Moeglichkeit fuer einen Input einer Zahl und Text in einem Feld fuer eine Variable?
Also die select-components versehe ich nicht...was wird da definiert und for allem welches user/frontend meint er ..im HA?
anscheinend wenn ich mir die NOTE anschaue:mit der Number Template habe ich im Web Frontend nur einen Slider bekommen und kein Input field.
Das mit dem Slider ist ok, kann man auch fein genung mit den Pfeiltasten auswaehlen.Ich glaube ich habe es soweit verwendbar ..jeder andere Aufwand scheint x 100 zu steigen.
-
@fred-freund said in Esphome: INPUT moeglichkeit? cron mit variable setzen?:
Also die select-components versehe ich nicht...was wird da definiert und for allem welches user/frontend meint er ..im HA?
Sieht man auch im screenshot vom web server v2:
Sprich ein "simples" drop down menü. Die Dokumentation ist sehr home assistant lastig, da dies quasi die Referenzplattform darstellt und meines Wissens auch die einzige "Zentrale" die immer up2date mit allen (neuen) esphome Funktionen.
mit der Number Template habe ich im Web Frontend nur einen Slider bekommen und kein Input field.
Das mit dem Slider ist ok, kann man auch fein genung mit den Pfeiltasten auswaehlen.Komisch, im Screenshot ist ein Feld
...aber wenn's tut ist ja gut
Ich glaube ich habe es soweit verwendbar ..jeder andere Aufwand scheint x 100 zu steigen.
Ich bin auch jemand der es meistens save & simple hält mit seinen (bald 100) esphome nodes. Einzig will ich die lokale Steuerung aller Basisfunktion auch ohne WLAN/Zentrale garantiert haben. Zusätzlich berwerkstellige ich alle Automatismen die sich lokal umsetzen lassen auch direkt in esphome. Alles was danach kommt, sprich "die Kür" (oder das unendliche), ist mir dann meistens auch schon zu viel des guten
-
@opensourcenomad said in Esphome: INPUT moeglichkeit? cron mit variable setzen?:
Komisch, im Screenshot ist ein Feld ...aber wenn's tut ist ja gut
also der Discord ist cool:
info hab ich bekommen: add mode: box to your number config -
@fred-freund said in Esphome: INPUT moeglichkeit? cron mit variable setzen?:
also der Discord ist cool
Ich bin zugegebenermaßen auch mehr Freund eines guten alten Forums und weniger dieser schnelllebigen Chatgeschichten, aber die große Masse an Leuten (typischerweise sind immer einige tausend online) inklusive vieler Entwickler erlaubt es doch oft eine Frage in wenigen Minuten beantwortet zu bekommen
info hab ich bekommen: add mode: box to your number config
-
@opensourcenomad
ja keiner hat mehr Zeit und ich bin auch so geworden
Danke fuer deine Hilfe!Esphome ist ok aber das mit den Bloecken ist etwas schwierig, und zu finden was man wirklich braucht um etwas automatisch zum laufen zu bringen .
-
@fred-freund said in Esphome: INPUT moeglichkeit? cron mit variable setzen?:
mit den Bloecken ist etwas schwierig
Tatsächlich ist eine etwas steilerere Lernkurve nötig zu beginn. Ich muss selber zugeben das ich zwei Anläufe benötigte, beim ersten mal habe ich entnervt aufgeben weil ich die Dokumentation nicht verstanden habe. Beim zweiten mal ein paar Monate später habe ich mich kurz in YAML eingelesen und dann hat es auch ziemlich schnell "klick" gemacht mit esphome. Was ich einfach super daran finde ist, wenn man einmal versteht wie dies "Formatierung" funktioniert (Leerzeichen
) dann ist es egal welche Komponenten man verwendet weil man es in Kombination mit der super Dokumentation dann immer anwenden kann.
zu finden was man wirklich braucht um etwas automatisch zum laufen zu bringe
Oft muss man die Suchfunktion auf der esphome Seite verwenden, selbst wenn ich manchmal wusste wo etwas stand finde ich es oft auf Anhieb nicht wieder, manche Sachen stehen unter FAQ, andere in CORE und ganz vieles unter Automations (inklusive aller Triggers, Actions usw.
)