[gelöst] OpenWeather State mit DOIF an KNX MDT Glastaster

Begonnen von S-Desire, 17 Mai 2020, 17:43:30

Vorheriges Thema - Nächstes Thema

S-Desire

Hi Leuts,

ich möchte gern folgendes realisieren:
Ich habe ein MDT Glastaster, MDT IP Interface und Fhem mit Open Weather, das ganze funktioniert auch ganz gut.
Meine Idee wäre es die Aktuellen Wetterdaten von OpenWeather (State) über KNX an den Glastaster als Statustext zu senden.
In Fehm hab ich ein KNX device definiert: defmod KNX_Aussentemperatur KNX 30/1/1:dpt16:Aktuelle_Aussentemperatur,
darüber kann ich auch etwas an den Glastaster schicken.
wenn ich in fhmen "get MyWeather state" eingebe bekomme ich ja alles was ich auf den Taster schicken möchte.

es müsste doch möglich sein mit DOIF bei Änderung der Werte dies an den Taster zu schicken, oder was meint ihr?
Hat jemand eine Idee?

amenomade

Ja, das ist bestimmt möglich. Mit DOIF oder mit notify
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

S-Desire

also mit notify hab ich es versucht,

defmod Aussentemp notify MyWeather:temperature:.* set KNX_Aussentemperatur Aktuelle_Aussentemperatur

was jedoch nicht klappt, ich hatte gelesen das man damit nur aktionen wie leuchten schalten kann.

Muss ich dies also doch mit DOIF machen?

MadMax-FHEM

#3
Wie hast du denn das notify definiert, also selbst "ausgedacht" oder per Eventmonitor erzeugen lassen!?

Zitat
defmod Aussentemp notify MyWeather:temperature:.*

EDIT: https://wiki.fhem.de/wiki/Event_monitor

Wird das ausgelöst!?
(selbes Problem hättest du bei DOIF genauso! Was nicht passt bzgl. RegEx triggert weder notify noch DOIF)

Und dieser Befehl macht was du willst!?

Zitat
set KNX_Aussentemperatur Aktuelle_Aussentemperatur

Ich behaupte mal: nein! ;)

Also evtl. wird der Text "Aktuelle_Aussentemperatur" im Display gesetzt (falls das sowas kann)...

Und erneut: wäre mit DOIF dasselbe!!

Also du musst erst mal einen Auslöser finden, der "passt" also auch "getriggert" wird!

Dann musst du den Befehl "finden" der dann "etwas" auf das Display schickt.

Es gibt im notify auch "vorbelegte" Variablen: $EVENT (das steht "der gesamte Event" drin) und dann eben noch bereits "gesplittete" Teile daraus: $EVTPART0, $EVTPART1, ...

Wenn der gewünschte Wert nicht mit dem Event mit kommt (wäre aber eigenartig ;) ), dann kannst du Werte auch abfragen:

ReadingsVal("Devicename","Readingname","Ersatzwert")

Dazu musst du aber nach Perl wechseln: 

define nPerl notify TriggerRegEx { hier kommt Perl rein }

EDIT: https://wiki.fhem.de/wiki/Klammerebenen

EDIT: am einfachsten für uns ist es, wenn du lists der beteiligten Devices postest und (in diesem Fall) auch Ausgaben vom EventMonitor betreffend der Wetteränderung auf die du bzw. das notify/DOIF reagieren soll... Und bitte: in "code-tags", das ist das '#' im "Menü"...

EDIT: und das hier
Zitatich hatte gelesen das man damit nur aktionen wie leuchten schalten kann.

Muss ich dies also doch mit DOIF machen?
ist kja wohl mal kompletter unfug! Wo hast du denn das gelesen!?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

S-Desire

ich hatte das über den event monitor gemacht, hatte mir das in der FHEMWiki zu notify nachgelesen.
Hab eben das noch versucht MyWeather:temperature:.* set KNX_Aussentemperatur Aktuelle_Aussentemperatur 'temperature'
dann steht im Glastaster 'temperature'.
ich müsste mir ja über "temperature" die temperatur vom der openWeather modul holen und sie dann in die KNX Gruppe schreiben und das einmal beim neustart von Fhem und bei Wertänderung.
hab auch schoneiniges an zeit gegoogelt, bzw im forum geschaut.

MadMax-FHEM

Meine Antwort hast du gelesen!?

Auch die Anmerkungen bzgl. $EVTPART!?

Wenn du (angefragte) Ausgaben gepostet hättest könnte man helfen...
So mal ins "Blaue":


define Aussentemp notify MyWeather:temperature:.* set KNX_Aussentemperatur Aktuelle_Aussentemperatur $EVTPART1


Und danke für's Posten in Code-Tags...
...liest sich total prima dein Post...

Vor allem die "Code-Schnipsel" sind ganz klar erkenn- und unterscheidbar...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

S-Desire

Oh bitte entschuldige vielmals, hab das mit dem # vergessen, wollte eben schnell antworten.
Ja, ich bin noch ziemlich neu in FHEM, ich denke jeder hat mal kleinangefangen und ist dankbar, wenn erfahrenen Leute Ihm helfen.
Ich finde die meisten Wikis sind schon für Anfänger ziemlich verwirrend geschrieben.

Naja wie dem auch sei.
Ich suche im Moment gerade die $EVTPART die du meinst, wenn ich auf das MyWeather modul klicke finde ich die liste mit den Readings, eine davon ist einfach temperature.

gebe ich oben in die FHEM Zeile get MyWeather temperature ein, bekomme ich die aktuelle Temperatur als reine Zahl ausgegeben

als KNX Device  hab ich defmod KNX_Aussentemperatur KNX 30/1/1:dpt16:Aktuelle_Aussentemperatur
attr KNX_Aussentemperatur IODev KNX


Ich möchte Dir aber schon meinen Dank aussprechen für deine Hilfe


MadMax-FHEM

#7
Hast du meinen Schnipsel mit $EVTPART1 mal getestet!?

Es kann auch ein anderer $EVTPART sein, also $EVTPART0 oder $EVTPART2 etc.

EDIT: kommt halt drauf an in welchem "Teil" des Events das für dich "Interessante" drin steht... Ausgaben kannst du auch machen:
define Aussentemp notify MyWeather:temperature:.* {Log3(undef,1,"Notify Temperatur Test    Event: $EVENT    EvtPart1: $EVTPART1")}
EDIT: so, also mit Logausgabe fange ich immer an, dann sieht man was beim Event mitkommt und ob man was davon brauchen kann und auch welchen Teil davon...

Wie geschrieben sind das sozusagen "System-Variablen", die werden eben "vom" notify "gefüllt".

Dort stehen eben Teile des Events (das was du im Eventmonitor siehst) drin und in $EVENT der gesamte Event.

Readings abfragen geht eben mittels ReadingsVal (wie ja oben schon genannt)...

Beispiel:

ReadingsVal("MyWeather", "temperature", "nix")

Du kannst das auch einfach mal in die FhemWeb-cmd eingeben:

{ReadingsVal("MyWeather", "temperature", "nix")}

Wenn es nur numerische Werte sind bzw. du nur den numerischen "Anteil" haben willst, dann statt ReadingsVal eben ReadingsNum...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

S-Desire

Ja du hattest recht mit:
define Aussentemp notify MyWeather:temperature:.* set KNX_Aussentemperatur Aktuelle_Aussentemperatur $EVTPART1

Es funktioniert!
Danke

Jetzt könnte ich nur noch versuchen ob ich ein Text vor die Zahl setzen kann, Sprich "Aussentemperatur" und evtl. ein C hinter die Zahl, aber denke das ist doch etwas umständlich, aber so ist es auch schon super.
Es steht jetzt die reine Zahl auf dem Display.

MadMax-FHEM

Naja, wenn das geht, dann könnte es so funktionieren:


define Aussentemp notify MyWeather:temperature:.* {fhem("set KNX_Aussentemperatur Aktuelle_Aussentemperatur" . "Aussentemperatur: " . $EVTPART1 . "°C")}


Wenn auch das dann geht, bitte noch ein [gelöst] vor den ersten Post, danke.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Da ist doch ein Eintrag "verschwunden"!?

Oder werd ich "irre"!? ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

amenomade

Vielleicht beide? :D

das eine schließt das andere nicht aus
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MadMax-FHEM

FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

S-Desire

#13
Nein, hatte den einen gelöscht. Wollte noch etwas hinzufügen.  :D

Nein, das klappt leider nicht.
Nun steht dort nur  "Aktuelle_Auss"
Hatte auch überlegt bzw. versucht statt
define Aussentemp notify MyWeather:temperature:.* set KNX_Aussentemperatur Aktuelle_Aussentemperatur $EVTPART1

define Aussentemp notify MyWeather:[b]state[/b]:.* set KNX_Aussentemperatur Aktuelle_Aussentemperatur $EVTPART1

zu nehmen, also das er aus der OpenWeather App alle Aktuellen Werte übernimmt so wie es in FHEM steht :
T: 24 °C F: 41 % W: 17 km/h P: 1024 hPa

das bekomme ich ja auch über
get MyWeather state

klappte aber nicht. Hab es auch noch nicht genau gefunden wo die $EEVTPART'S aufgelistet werden.
Im EventMonitor zeigt er mir nach shutdown restart kurz alles von der MyWetaher App an.

2020-06-22 18:27:14 KNX KNX_Aussentemperatur Aktuelle_Aussentemperatur-set: Aktuelle_Auss
2020-06-22 18:27:14 KNX KNX_Aussentemperatur Aktuelle_Auss
2020-06-22 18:27:14 KNX KNX_Aussentemperatur last-sender: fhem
2020-06-22 18:27:14 Weather MyWeather lastError:
2020-06-22 18:27:14 Weather MyWeather apiMaintainer: Leon Gaultier (<a href=https://forum.fhem.de/index.php?action=profile;u=13684>CoolTux</a>)
2020-06-22 18:27:14 Weather MyWeather status: ok
2020-06-22 18:27:14 Weather MyWeather country: DE
2020-06-22 18:27:14 Weather MyWeather long:
2020-06-22 18:27:14 Weather MyWeather current_date_time: Mo, 22 Jun 2020 18:27
2020-06-22 18:27:14 Weather MyWeather apiVersion: v1.0.2
2020-06-22 18:27:14 Weather MyWeather validity: up-to-date
2020-06-22 18:27:14 Weather MyWeather lat:
2020-06-22 18:27:14 Weather MyWeather city: Wagenfeld
2020-06-22 18:27:14 Weather MyWeather low_c: 23
2020-06-22 18:27:14 Weather MyWeather wind_speed: 17
2020-06-22 18:27:14 Weather MyWeather sunriseTime: Mo, 22 Jun 2020 05:02
2020-06-22 18:27:14 Weather MyWeather tempHigh: 24
2020-06-22 18:27:14 Weather MyWeather wind_direction: 310
2020-06-22 18:27:14 Weather MyWeather code: 26
2020-06-22 18:27:14 Weather MyWeather pubDate: Mo, 22 Jun 2020 18:26
2020-06-22 18:27:14 Weather MyWeather humidity: 41
2020-06-22 18:27:14 Weather MyWeather tempFeelsLike_c: 20
2020-06-22 18:27:14 Weather MyWeather cloudCover: 40
2020-06-22 18:27:14 Weather MyWeather wind: 17
2020-06-22 18:27:14 Weather MyWeather pressure: 1024
2020-06-22 18:27:14 Weather MyWeather temperature: 23
2020-06-22 18:27:14 Weather MyWeather visibility: 10000
2020-06-22 18:27:14 Weather MyWeather iconAPI: 03d
2020-06-22 18:27:14 Weather MyWeather condition: Mäßig bewölkt
2020-06-22 18:27:14 Weather MyWeather high_c: 24
2020-06-22 18:27:14 Weather MyWeather tempLow: 23
2020-06-22 18:27:14 Weather MyWeather temp_c: 23
2020-06-22 18:27:14 Weather MyWeather sunsetTime: Mo, 22 Jun 2020 21:52
2020-06-22 18:27:14 Weather MyWeather icon: cloudy
2020-06-22 18:27:14 Weather MyWeather wind_condition: Wind: NW 17 km/h
2020-06-22 18:27:14 Weather MyWeather T: 23 °C F: 41 % W: 17 km/h P: 1024 hPa

MadMax-FHEM

#14
Du musst erst noch mal bzgl. Notify lesen!

Was du verändert hast ist die RegEx auf die das Notify triggert!

Das hat nicht wirklich was mit den Werten (bzw. nur "indirekt") zu tun, die in Event/Evtpart stehen.

Die Werte werden nirgends gelistet, weil sie immer erst beim Triggern des Notify entstehen je nachdem WAS eben im Notify "steht"/"kommt"...

Und wenn du wissen willst was für Werte kommen, dann eben Loggen.
Habe dir ja einen Code-Schnipsel dafür gepostet...


Was mich aber wundert ist, dass das hier drin stehen soll: "Aktuelle_Auss"

Wenn das hier define Aussentemp notify MyWeather:temperature:.* set KNX_Aussentemperatur Aktuelle_Aussentemperatur $EVTPART1 tatsächlich NUR die Gradzahl als Zahl ins Display schreibt!

Bzw. wie sieht denn der set-Befehl aus, der NUR EINEN WERT ins Display schreibt!?

set KNX_Aussentemperatur WERT

oder

set KNX_Aussentemperatur Aktuelle_Aussentemperatur WERT

Wie viele Stellen hat denn das Display!?

EDIT: muss das was gesetzt werden soll (also WERT) ein "String" sein!?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)