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?
Ja, das ist bestimmt möglich. Mit DOIF oder mit notify
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?
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
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.
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
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
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
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.
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
Da ist doch ein Eintrag "verschwunden"!?
Oder werd ich "irre"!? ;)
Gruß, Joachim
Vielleicht beide? :D
das eine schließt das andere nicht aus
Zitat von: amenomade am 22 Juni 2020, 18:25:58
Vielleicht beide? :D
Haha, ja bestimmt (bald) ;)
Gruß, Joachim
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
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
Was das hier tut ist folgendes:
{fhem("set KNX_Aussentemperatur Aktuelle_Aussentemperatur" . "Aussentemperatur: " . $EVTPART1 . "°C")}
{ -> Perl
fhem("fhem-Befehl") -> zurück nach fhem
Der Punkt "verbindet" Zeichenketten, sollte also eigentlich folgendes machen: "Aussentemperatur: GRADZAHL°C" also Text "generieren"...
(Also die 3 "Teilstrings" zusammenfügen. GRADZAHL eben aus $EVTPART1 )
} -> Perl "verlassen"...
EDIT: vermutlich geht sogar ohne die Punkte, also {fhem("set KNX_Aussentemperatur Aktuelle_Aussentemperatur Aussentemperatur: $EVTPART1 °C")}
EDIT: wenn zum Setzen eine Zeichenkette benötigt wird, dann evtl. sowas:{fhem("set KNX_Aussentemperatur Aktuelle_Aussentemperatur \"Aussentemperatur: $EVTPART1 °C\"")}
Gruß, Joachim
Es wird ja über den KNX Bus auf einen MDT Glastaster Smart II angezeigt, wieviel stellen der genau anzeigen kann weiß ich auf die schnelle nicht, jedoch soll er auch Lauftexte realisieren können. Die sachen Laufen ja über bei dem Glastaster als Meldungstext in ASCII auf.
Mit dem Notify muss ich mir echt nochmal einiges nachlesen und suchen im Netz.
Es Funktioniert mit dem Befehl:
set KNX_Aussentemperatur Aktuelle_Aussentemperatur WERT
KNX_Aussentemperatur = KNX Device
Aktuelle_Aussentemperatur = KNX Gruppenadresse in die der Wert im ASCII (dbt16) geschickt wird.
Ich kann z.B. in Fehm direkt mit set KNX_Aussentemperatur Aktuelle_Aussentemperatur °C Test 12345 Test
auf den Taster schicken.
Ich werd gleich mal deinen Letzten Post ausprobieren und berichten.
Hmmm, also im Prinzip müsste das dann eigentlich gegangen sein...
...bzw. sollte irgendeine der Varianten tun ;)
Halt ein wenig probieren und evtl. ein wenig bzgl. Perl-Programmierung lesen...
Und wie geschrieben: wenn du "in" Perl bist und dann aber darin fhem-Kommandos aufrufen willst/musst, dann hilft eben die "fhem-Funktion" (ist eine Perl-Funktion), d.h. fhem("HIER DANN DER FHEM-BEFEHL")
Wenn du es geschafft hast (kann eigentlich nichts großes mehr sein!?) wäre es nett hier das Ergebnis zu posten und wie geschrieben, dann vor den ersten Post ein [gelöst] zu setzen.
Bitte den Thread NICHT schließen!
Viel Erfolg, Joachim
Also ich hab beide Varianten versucht, will nicht, bei der letzten kam eben:
2020-06-22 19:17:13 KNX KNX_Aussentemperatur Aktuelle_Aussentemperatur-set: "Aussentemper
2020-06-22 19:17:13 KNX KNX_Aussentemperatur "Aussentemper
2020-06-22 19:17:13 KNX KNX_Aussentemperatur last-sender: fhem
ich werd nochmal etwas ausprobieren und versuchuchen.
Ja, werd es dann posten, denke das suchen einige bzw. hilft einigen..
Ich danke dir vielmals für deine Mühe.
Ich muss sagen für Anfänger ist FHEM nicht einfach, aber auch diverse andere Systeme haben es in sich...
Aller Anfang ist schwer... ;D
Ich hatte eben mal versucht die " durch ' zu ersetzen.. er zeigt aber die Zeichen immer mit an, weglassen geht ja nicht.
Was mir schleierhaft ist, warum genau bei "Aussentemper" abgeschnitten wird...
Drum ja die Frage nach einem Limit!?
Gibt es evtl. ein Limit pro "Wort"/"Wert"!?
Also mal versuchen:
define Aussentemp notify MyWeather:temperature:.* {fhem("set KNX_Aussentemperatur Aktuelle_Aussentemperatur Temp " . $EVTPART1 . "°C")}
Weil es ja kein Sonderzeichen etc. in "Aussentemperatur" gibt...
Eigenartig...
...und ich denke das hier ist kein fhem Problem (max. bzgl. fhem und das verwendete Display ;) ) sondern "irgendwas anderes"...
EDIT: es kann schon sein, dass das Display (theoretisch) durchlaufenden Text kann. ABER: vielleicht nicht mit fhem oder man muss beim set noch was zusätzlich angeben!? Oder ein Attribut setzen!? So wie es aussieht, ist einfach genau DA "Aussentemper" der Text zu Ende...
Gruß, Joachim
Ja, die Fehlerquellen können viele sein... ;D
hab schon überlegt ob bei FHEM etwas fehlt, bezüglich Perl...
was auch erklären würde warum die reibungslose Steuerung des PiCorePlayer (Squeezbox/Logitech) über KNX und umgekehrt nicht ganz reibungslos funktioniert.
Oder ich muss in dere ETS nochmal rein.
Wenn was fehlen würde, also Perl-Module etc. dann würde das fhem-Modul erst gar nicht geladen worden sein ;)
Das fhem Logfile hilft bei der Fehlersuche!
Evtl. den "verbose Level" erhöhen, kann man "global" und pro Modul/Device machen...
Schon mal eine "kürzere" Version getestet!?
Ich glaube wirklich es ist die Textlänge!
Gruß, Joachim
Die letzte Variante ist super.
Jetzt sind die " auch weg.
denke dann ist es damit gelöst.
define Aussentemp notify MyWeather:temperature:.* {fhem("set KNX_Aussentemperatur Aktuelle_Aussentemperatur Temp " . $EVTPART1 . "°C")}
Mit der Textlänge muss ich dann evtl. nochmal in ETS die Parameter des Tasters ändern....
aber so sieht es doch gut aus.
Das Display ist KNX!?
Du kannst ja mal im passenden Unterforum (gibt bestimmt was zu KNX) bzgl. dieses Displays in einem separaten Thread fragen...
...oder selber probieren...
Und nat. solange mit dem Text rumspielen, bis halt die Zeile voll ist...
Evtl. geht ja statt "Temp" auch "Temp: " oder gerade noch "Out-Temp:" ;)
Viel Erfolg!
Achja, du kannst ja hier schon mal ein [gelöst] davor packen...
...es geht ja prinzipiell, nur halt irgendwas mit Textlänge und das muss an "was anderem" liegen ;)
Gruß, Joachim
Jip mache ich, ich danke dir vielmals für deine Super Hilfe, kann sich so manch einer eine Scheibe abschneiden.