[Gelöst]:Temperatur ausgeben auf OLED mit ESPEasy (Version147)

Begonnen von gonzo_6, 04 Februar 2017, 16:37:21

Vorheriges Thema - Nächstes Thema

gonzo_6

Hallo,
ich bin absolut neu in der Thematik fhem. Habe es inzwischen diverser Blog und Seiten immerhin geschaft den Server auf einem Raspberry (1) zu bekommen um meine Steckdosen zu schalten. Das klappt inzwischen gut. Nun wollte ich ein zusätzliches Gerät hinzufügen mit einem NodeMCU V? wo ein OLED Display und ein Taster dran hängt.
Taster ist eingerichtet in FHEM und steuert eine Steckdose. Funktionier echt Prima. Nun komme ich endlich zum Punkt.
Ich bekomme auf dem Display über die direkte Ausführung oder Eingabe von "set LCD_Display oled 1 1 Test"  auf dem Display etwas angezeigt. Die Verknüpfung mit dem Wetter bekome ich leider überhaupt nicht hin. Komme mit diesem REGex oder ähnlich nicht zurecht.
Ich habe das Gerät Wetter, OUT.Wetter darin ist in State die Temperatur die ich brauche auf dem Display. Ein "set LCD_Display oled 1 1 Out.Wetter state" gibt den Text aus :-(
Ich weiß das ich da ein Gedanken fehler mache sehe ihn aber noch nicht...

Kann mir vielleicht jemand auf die Sprünge helfen?

Liebe Grüße
aus Berlin Harry.

Danke fürs lesen, ich habe es dann himbekommen :-)

Thorsten Pferdekaemper

Zitat von: gonzo_6 am 04 Februar 2017, 16:37:21
Danke fürs lesen, ich habe es dann himbekommen :-)
Ich habe tatsächlich gerade etwas dazu schreiben wollen.
Es wäre nett, wenn Du uns Deine Lösung verraten würdest und auch noch ein [Gelöst] vor den Titel des Threads hängen könntest.
Gruß,
    Thorsten
FUIP

gonzo_6

Sorry hatte deinen Text nicht gelesen.
Also ich habe ein notify erstellt wo der Temperatur wert abgelegt wird, das schick ich dann mit set LCD_Display oled x y temp dahin.

my $temp = ReadingsVal("OUT.Wetter", "temp_c", "");
So lese ich es aus und dann lass ich es mir mit:
fhem("set teleBot message Aussentemperatur ist $temp C"); aufs Handy senden. Theoretisch könnte man anstatt set teleBot natürlich obiges Einsetzen.
set LCD_Display oled x y $temp

Ich hoffe ich hab es ein wenig veständlich erklären können, tue mich damit etwas schwer.

HRueck

Ich habe folgendes Problem:

wenn ich mit einem at +*00:05:00  {system("wget -p -O- 'http://.....} auf mein OLED schreibe, klappt alles prima.

sobald aber mein ESP nicht mehr am Netz ist, also z. B. warum auch immer ausgeschaltet ist, friert FHEM ein.

gibts dafür eine Lösung, mache ich was falsch?



Thorsten Pferdekaemper

Zitat von: HRueck am 20 April 2017, 11:50:54wenn ich mit einem at +*00:05:00  {system("wget -p -O- 'http://.....} auf mein OLED schreibe, klappt alles prima.
sobald aber mein ESP nicht mehr am Netz ist, also z. B. warum auch immer ausgeschaltet ist, friert FHEM ein.
Verwende entweder eine entsprechende Funktion aus HttpUtils (such mal im Wiki für Details), oder mach es so:

+*00:05:00  "wget -p -O- 'http://.....

Dann wird das ganze im Hintergrund ausgeführt und tut erstmal nicht mehr so weh. Das Problem an letzterer Lösung ist, dass die ganzen wget-Prozesse dann erstmal rumhängen.
In HttpUtils müsste es auch Funktionen geben, die das ganze im Hintergrund mit Timeout etc. machen.
Gruß,
   Thorsten

FUIP

HRueck

Danke erstmal für die Antworten!

Also das mit den HttpUtils ist (zumindest für mich) schon ganz nett heftig, da steige ich nicht so einfach durch!
Das gibt also eine extra Baustelle.

Wie ist das, wenn man für das ganze ESPEasy Device mit oled verwenden würde?
Gibt es dann die gleichen Probleme?
Mal abgesehen davon, dass es mir immer noch nicht gelungen ist, ein ReadingsVal("x","y","") zu senden.

dev0

Als Alternative zu eigenen httpUtils/curl/wget Aufrufen kann man auch das ESPEasy Modul verwenden. Ich habe gerade eine neue Version eingecheckt (ab morgen 8:00 Uhr per Update oder jetzt schon aus dem svn), die OLEDs oder LCDs korrekt handhaben sollte. Auf Wunsch wird der Displayinhalt vor und nach der Ausgabe auf der entsprechenden Zeil auch gelöscht. Somit erspart man sich ggf. das eine oder andere "oledcmd clear" und neuschreiben aller anderen Zeilen.

dev0

Zitat von: HRueck am 20 April 2017, 13:19:47
Mal abgesehen davon, dass es mir immer noch nicht gelungen ist, ein ReadingsVal("x","y","") zu senden.

Wenn Du das ESPEasy Modul verwendest, dann kannst Du beispielsweise folgende Kommandos verwenden:

set <esp> oled 1 1 Temperatur: [device:reading]C
set <esp> oled 1 1 Temperatur: {(ReadingsVal("device","reading",0)."C")}

<esp> mußt Du durch den FHEM Devicenamen des ESP ersetzen. device und reading, in dem Besipiel, müßtest Du ebenfalls durch Deine Device- u. Readingnamen ersetzen.

Ausgabe auf dem Display wäre:
Zitat
Temperatur: 10C

In der aktuellen Version des ESPEasy OLED Plugins sind nur 7bit ASCII Zeichen möglich, ein ° für Grad wird nicht korrekt dargestellt.

HRueck

Danke, die richtige Formatierung ist halt immer das Problem!

Nochmals zurück zum Ursprungsproblem:
Wie reagiert das ESPEasy Modul, wenn der ESP nicht erreichbar ist?

dev0

Mit einem Eintrag ins Log, ohne FHEM zu blockieren. Wenn das Attribut resendFailedCmd gesetzt ist, dann wird der Befehl auch wieder in die Command-Queue gestellt um ihn, bei Wiedererreichbarkeit, erneut zu senden.

Thorsten Pferdekaemper

Zitat von: HRueck am 20 April 2017, 13:19:47Mal abgesehen davon, dass es mir immer noch nicht gelungen ist, ein ReadingsVal("x","y","") zu senden.
Was hast Du denn versucht?
Gruß,
   Thorsten
FUIP

HRueck

Ich möchte die Ports eines PCF8574 teilweise als Input und teilweise als Output verwenden.
Beides funktioniert mit "pcfgpio" zunächst einmal einwandfrei.

Wenn ich aber:
-Input auf Masse durchschalte (Reading Switch geht von  "on" auf "off")
-Output einschalte (angeschlossene LED leuchtet)
-Input öffne: Reading geht nicht zurück auf "on" sondern bleibt auf "off"

Was läuft falsch?

Marekh


HRueck

Aber das Schalten funktioniert ja.
Und auch das Anzeigen des Inputs.

Nur eben nicht die Abfolge wie oben beschrieben