Hallo zusammen,
ich habe schon viele Sache ausprobiert aber sich schaffe es nicht wenn ich auf das Lampen-Icon klicke ein notify auszuführen. Wichtig ich will nur nach dem Klick das notify aktivieren nicht der Zustand selbst.
Getestet habe ich es mit eventMap dort schaffe ich ein klickbares Icon aber kein Ausführen des notify bei "eventMap on:on:an_aus off:off:an_aus" bei "eventMap on:an_aus off:an_aus" schaltet das Licht durch den zustand durchgängig.
Vll kann mir hier jemand sagen was ich falsch mache, bzw. einen anderen Lösungsweg zeigen.
Gruß Adrian
Anbei noch der Code:
define Deckenlicht_Linda dummy
setuuid Deckenlicht_Linda 5cac6383-f33f-f8e2-4d94-5e7a7a33600728ed
attr Deckenlicht_Linda devStateIcon on:FS20.on off:FS20.off an_aus:fts_shutter_1w_0
attr Deckenlicht_Linda eventMap on:on:an_aus off:off:an_aus
attr Deckenlicht_Linda room Linda
attr Deckenlicht_Linda webCmd an_aus
define an_aus_Deckenlicht_Linda notify Deckenlicht_Linda:an_aus set myI2C writeByte 5 1;; Sleep 0.5;; set myI2C writeByte 5 0
define a_I2C_0x05 at +*00:00:02 {my $val = fhem("get myI2C read 5");;\
$val = substr($val,10,length($val)-29);;\
my $wert32 = ($val & 32) > 0 ? "on":"off";;\
my $wert16 = ($val & 16) > 0 ? "on":"off";;\
my $wert8 = ($val & 8) > 0 ? "on":"off";;\
my $wert4 = ($val & 4) > 0 ? "on":"off";;\
my $wert2 = ($val & 2) > 0 ? "on":"off";;\
my $wert1 = ($val & 1) > 0 ? "on":"off";;\
fhem("set Deckenlicht_Linda $wert1");;\
fhem("set Treppenhaus $wert2");;\
fhem("set Deckenlicht_WC $wert4");;\
fhem("set Flur $wert8");;\
fhem("set Garagen_Licht $wert16");;\
fhem("set Wohnzimmerlicht $wert32")}
Folgender dummy (wenn es unbedingt einer sein muss) als RawDef:
defmod dmDeckenlicht_Linda dummy
attr dmDeckenlicht_Linda room Linda
attr dmDeckenlicht_Linda setList on off
Damit sollte er (sofern einmal geklickt) ein Lampensymbol haben, welches du klicken kannst.
Wenn dich die "WebCommands" stören, du also nur das Icon willst:
attr dmDeckenlicht_Linda webCmd :
Dann den Eventmonitor auf, den dummy klicken, Event wählen und notify anlegen lassen. Anpassen:fertig...
https://wiki.fhem.de/wiki/Event_monitor
Bzw. könnte das notify wie folgt sein:
define n_an_aus_Deckenlicht_Linda notify dmDeckenlicht_Linda:on set myI2C writeByte 5 1;; Sleep 0.5;; set myI2C writeByte 5 0
Oder wenn bei an/aus DASSELBE passieren soll (also kurz hintereinander die beiden Kommandos), dann evtl.:
define n_an_aus_Deckenlicht_Linda notify dmDeckenlicht_Linda:on|dmDeckenlicht_Linda:off set myI2C writeByte 5 1;; Sleep 0.5;; set myI2C writeByte 5 0
Gruß, Joachim
Das "dummy-Geschubse" ist immer mit Nebenwirkungen behaftet.
Vielleicht ein etwas anderer Ansatz: Versuche das ganze mal mit readingsProxy zu lösen. Damit sollten die dummy+notify entfallen können, man würde aber eine komplexere Auswertung für die Value-fn benötigen. Das at für die Aktualisierung des "Stammdevices" braucht man aber wohl weiter.
(neulich gab's was ähnliches mit einer Logo-SPS).
Durch die aktuelle Variante erzeugst du vermutlich sehr viel mehr Events als tatsächlich erforderlich sind, da sollte im mindesten Falle noch jeweils eine Prüfung auf Änderung rein.
Ansonsten sieht mir das so aus, als wäre was zwischen eventMap und devStateIcon durcheinandergeraten.
Hallo,
ich glaube ich habe mich zu ungenau ausgedrückt. Ich habe mir eine Steuerung für das Licht selbst gebaut. Über I2C werden Relais angesteuert die das jeweilige Licht schalten. In dem Haus sind Stromstoßrelais und Taster verbaut. Das heißt der gleiche impuls schaltet das Licht ein und auch wieder aus.
Gleichzeitig wird der Strom der Lampe gemessen und damit registriert ob die Lampe angeschalten ist und über I2C dann wieder zurückgemeldet.
Der Dummy ist also mit dem an_aus zum schalten genutzt und das Icon zum anzeigen ob die Lampe an ist.
Ich würde jetzt einfach gerne noch mit dem Icon den gleichen Befehl an_aus triggern.
Ich hoffe es ist jetzt klarer und ich habe euch nicht missverstanden.
Vielen Dank für die Hilfe
Zitat von: Adrian08642 am 17 Januar 2022, 11:00:53
ich glaube ich habe mich zu ungenau ausgedrückt.
Genau von diesem Szenarium war ich ausgegangen, und rund um diesen Beitrag sollten eigentlich ein paar Bausteine zu finden sein, um das ganze jeweils zu einem readingsProxy zusammenzubasteln: https://forum.fhem.de/index.php/topic,124240.msg1190483.html#msg1190483 (https://forum.fhem.de/index.php/topic,124240.msg1190483.html#msg1190483)
Wäre nett, wenn es dann wenigstens hier eine Rückmeldung mit der funktionierenden Lösung gäbe ;) .
EDIT: Mal "ins blaue", wie das in etwa aussehen könnte:
defmod rp_Deckenlicht_Linda readingsProxy myI2C:5
attr rp_Deckenlicht_Linda event-on-change-reading state
attr rp_Deckenlicht_Linda timestamp-on-change-reading state
attr rp_Deckenlicht_Linda setFn { fhem('set myI2C writeByte 5 1;; Sleep 0.5;; set myI2C writeByte 5 0')}
attr rp_Deckenlicht_Linda setList on off
attr rp_Deckenlicht_Linda valueFn { my $val = substr($VALUE,10,length($VALUE)-29);; $val & 1 ? 'on':'off' }
Weil das eigentliche Hauptdevice nicht gezeigt ist und vermutlich auch schlecht zu simulieren, habe ich es mit einem dummy getestet, scheint zu funktionieren:
defmod myI2C dummy
setstate myI2C 2022-01-17 11:02:39 5 123456789012345678901234567890123456789
Danke für den Vorschlag ich habe gerade leider nicht die Möglichkeit das auszuprobieren aber ich werde das auf jeden Fall mal testen.
Mit readingProxy habe ich zwar noch nichts gemacht aber wenn das klappt wäre es natürlich super.
Was meinst du damit?
ZitatWeil das eigentliche Hauptdevice nicht gezeigt ist und vermutlich auch schlecht zu simulieren
Zitat von: Adrian08642 am 17 Januar 2022, 14:12:03
Was meinst du damit?
Du hattest kein list von "myI2C" gezeigt. Ich kenne also noch nicht mal den TYPE, obwohl anscheinend praktisch die ganze Kommunikation darüber läuft. Da das FHEM-Device aber vermutlich so oder so Hardware braucht, damit man damit interagieren kann, hätte ich zwar ggf. die Readings gesehen und in der commandref lesen können, welche get-Befehle es gibt bzw. was die denn liefern, aber ob ich daraus schlau geworden wäre, ist eine weitere Frage...
Hallo Beta-User,
ich bin gerade dein Vorschlag zu testen.
ZitatDu hattest kein list von "myI2C" gezeigt.
Da ist nicht mehr viel:
define myI2C RPII2C 1
setuuid myI2C 5c8a7011-f33f-f8e2-bd9c-dd5d275c7abc8195
attr myI2C verbose 5
Der Rest ist auf anderen Microcontroller gelöst. Ich schicke über I2C einfach 6-Bit und jeweils eine 1 heißt die Lampe ist an, 0 aus. Also z.B 000001 wäre das Deckenlicht_Linda ist an und alle anderen sind aus. Ich hoffe das ist klar geworden.
Zu deinem
ZitatMal "ins blaue", wie das in etwa aussehen könnte:
das habe ich getestet und das Licht an und auszuschalten funktioniert tadellos (natürlich kann man mit on auch das licht ausschalten). Ich habe das mal angepasst und es sieht gerade so aus:
define rp_Deckenlicht_Linda readingsProxy myI2C:5
setuuid rp_Deckenlicht_Linda 61ec531c-f33f-3611-387e-3744bd134b175999
attr rp_Deckenlicht_Linda devStateIcon on:FS20.on off:FS20.off
attr rp_Deckenlicht_Linda event-on-change-reading state
attr rp_Deckenlicht_Linda room Linda
attr rp_Deckenlicht_Linda setFn { fhem('set myI2C writeByte 5 1;; Sleep 0.5;; set myI2C writeByte 5 0')}
attr rp_Deckenlicht_Linda setList an_aus
attr rp_Deckenlicht_Linda timestamp-on-change-reading state
attr rp_Deckenlicht_Linda valueFn { my $val = substr($VALUE,10,length($VALUE)-29);; $val & 1 ? 'on':'off' }
attr rp_Deckenlicht_Linda webCmd an_aus
Leider funktioniert die Anzeige ob das Licht an ist nicht. Ich schätze das mit valueFn läuft gerade noch nicht.
Ich weiß solche Ferndiagnosen sind schwierig gerade wenn man kein Einblick in das Gesamtsystem hat, aber hast du vll eine Idee woran es liegen könnte. Leider erinnere ich mir nicht mehr warum ich das Modul a_I2C_0x05 so geschrieben habe wie es gerade ist.
Vielen Dank für deine Hilfe
Gruß Adrian
Zitat von: Beta-User am 16 Januar 2022, 09:11:28
Das "dummy-Geschubse" ist immer mit Nebenwirkungen behaftet.
Vielleicht ein etwas anderer Ansatz: Versuche das ganze mal mit readingsProxy zu lösen. Damit sollten die dummy+notify entfallen können, man würde aber eine komplexere Auswertung für die Value-fn benötigen. Das at für die Aktualisierung des "Stammdevices" braucht man aber wohl weiter.
(neulich gab's was ähnliches mit einer Logo-SPS).
lol ... gerade von einem anderen FHEM Guru folgendes gehört:
"im ganzen Leben hab ich noch kein readingsProxy verwendet... extra für Dich..."https://forum.fhem.de/index.php/topic,65048.msg1202754.html#msg1202754
Good Luck !
Zitat von: ak323 am 22 Januar 2022, 20:54:15
lol ... gerade von einem anderen FHEM Guru folgendes gehört:
lol... kommt aber auch immer drauf an, was man so an Hardware rumliegen hat...
(Ganz sicher macht betateilchen aber für sowas auch kein "dummy-Geschubse" (sondern hätte das vermutlich schon auf der Hardware-Seite anders angegangen)...)
Zitat von: Adrian08642 am 22 Januar 2022, 20:32:32
ich bin gerade dein Vorschlag zu testen. Da ist nicht mehr viel:
define myI2C RPII2C 1
setuuid myI2C 5c8a7011-f33f-f8e2-bd9c-dd5d275c7abc8195
attr myI2C verbose 5
Das ist kein "list", sondern eher ein Indikator, dass du zu den cfg-Editierern gehörst => no-go zone!
Ich will die Readings sehen, und bitte wenn möglich auch Events. Wie es grundsätzlich funktioniert, ist mir schon klar, aber eben nicht, was GENAU zurückkommt bzw. wie der Rücklesevorgang genau aussieht (braucht man das/ein at?)...
Dto. wäre das ggf. für den readingsProxy interessant. define aus der cfg ist "Totholz".
ZitatIch habe das mal angepasst und es sieht gerade so aus:
attr rp_Deckenlicht_Linda setList an_aus
attr rp_Deckenlicht_Linda webCmd an_aus
Dieses an_aus irritiert mich hochgradig. Für was braucht man das? Es ist ein toggle, oder?
Da das genausogut über das devStateIcon ausgelöst wird, wäre mein Ansatz, das ganz wegzulassen:
attr rp_Deckenlicht_Linda setList on off
attr rp_Deckenlicht_Linda webCmd :
ZitatLeider funktioniert die Anzeige ob das Licht an ist nicht. Ich schätze das mit valueFn läuft gerade noch nicht.
Genau. Daher: ein list vom "Gerät in Aktion" bzw. Events von dem, wie der Status zurückkommt (=>Event-Monitor). Dann kann man simulieren, ohne muss ich raten, und das macht keinen großen Spaß...
Also mit
get myI2C read 5
bekommt man
received : 1 | transmission: Ok
das zurück (die 1 ist für das eingeschaltene Licht (Deckenlicht_Linda).
ZitatDas ist kein "list", sondern eher ein Indikator, dass du zu den cfg-Editierern gehörst => no-go zone!
Nur zur Code rauskopieren.
ZitatDieses an_aus irritiert mich hochgradig. Für was braucht man das? Es ist ein toggle, oder?
Ok dann lassen wir das erstmal bei on off
Zitatwie der Status zurückkommt (=>Event-Monitor)
Das wird dir denke ich nicht helfen weil ja schon die Werte angepasst wurden. Trotzdem die Werte von a_I2C_0x05:
2022-01-22 22:03:28 dummy Deckenlicht_Linda on
2022-01-22 22:03:28 dummy Treppenhaus off
2022-01-22 22:03:28 dummy Deckenlicht_WC off
2022-01-22 22:03:28 dummy Flur off
2022-01-22 22:03:28 dummy Garagen_Licht off
2022-01-22 22:03:28 dummy Wohnzimmerlicht off
2022-01-22 22:03:28 at a_I2C_0x05 Next: 22:03:30
Danke für deine Hilfe :)
Spricht irgendwas dagegen, dass du einfach zeigst, was
list myI2C
liefert?
(Mit dem gezeigten Ergebnis kann ich jetzt zumindest ahnen, wie der Wert codiert wurde).
Vermutlich steht im Reading "5" von myI2C einfach nur (z.B.) eine "1"...?
EDIT:
Dann könnte sowas ausreichen:
attr rp_Deckenlicht_Linda valueFn { $VALUE & 1 ? 'on':'off' }
Tut mir leid ich kenn mich noch nicht so aus...
ZitatSpricht irgendwas dagegen, dass du einfach zeigst, was list myI2C liefert?
Natürlich nicht. ich kannte den Befehl nicht.
Internals:
DEF 1
DeviceName /dev/i2c-1
FUUID 5c8a7011-f33f-f8e2-bd9c-dd5d275c7abc8195
NAME myI2C
NOTIFYDEV global
NR 15
NTFY_ORDER 50-myI2C
STATE Ok
TYPE RPII2C
ioctl_ph_exists 1
Attributes:
verbose 5
Danke für deine Hilfe
OK, überzeugt... Das geht in der Tat mit der Methode readingsProxy nicht...
(Wer denkt sich den sowas aus? Im Prinzip ist es ein reines Interface-Modul...)
Dann bleibt in der Tat nur die Option, das Ding händisch auszulesen, und ggf. dann die Infos zu verteilen. Da das Schalten funktioniert, könntest du (z.B.) ein "setreading <readingsProxy> state on" ausführen, um den ausgelesenen Status jeweils zu übertragen, allerdings würde ich zum einen empfehlen, das nur zu machen, wenn der Status nicht sowieso schon auf dem Zielwert ist, (das ist einfach) und zum anderen könnte man versuchen, das in eine einzige fhem-Anweisung einzupacken (ist aber schwieriger).
Zitat(Wer denkt sich den sowas aus? Im Prinzip ist es ein reines Interface-Modul...)
Ich ;D wenn man keine Ahnung von FHEM hat sondern nur ein bisschen Hardware und C Wissen.
Ok hört sich so an als würde es sich nicht wirklich rentieren, nur damit das dummy und das notify ersetzt wurden.
Ich denke ich gebe das mit dem klickbarem Icon einfach auf, dachte nicht das es so schwierig ist...
Trotzdem danke für deine Mühen :)
Zitat von: Adrian08642 am 22 Januar 2022, 22:52:31
Ich ;D wenn man keine Ahnung von FHEM hat sondern nur ein bisschen Hardware und C Wissen.
Bist du der Maintainer von diesem Modul? Dann bau' doch ein passendes Client-Modul. Ist nicht so schwierig...
Zitat
Ok hört sich so an als würde es sich nicht wirklich rentieren, nur damit das dummy und das notify ersetzt wurden.
readingsProxy ist jedenfalls mAn. besser wie dummy+notify, selbst wenn der "Rückweg" im Moment fehlt. Schalten geht ja.
Testweise mal:
define a_I2C_0x05 at +*00:00:02 {my $val = fhem("get myI2C read 5");;\
$val = substr($val,10,length($val)-29);;\
my $wert32 = ($val & 32) > 0 ? "on":"off";;\
my $wert16 = ($val & 16) > 0 ? "on":"off";;\
my $wert8 = ($val & > 0 ? "on":"off";;\
my $wert4 = ($val & 4) > 0 ? "on":"off";;\
my $wert2 = ($val & 2) > 0 ? "on":"off";;\
my $wert1 = ($val & 1) > 0 ? "on":"off";;\
fhem("setreading rp_Deckenlicht_Linda state $wert1") if ReadingsVal('rp_Deckenlicht_Linda','state','unknown') ne $wert1;;\
fhem("set Treppenhaus $wert2");;\
fhem("set Deckenlicht_WC $wert4");;\
fhem("set Flur $wert8");;\
fhem("set Garagen_Licht $wert16");;\
fhem("set Wohnzimmerlicht $wert32")}
Ok das hab ich falsch verstanden. Ich dachte du meinst warum ich das Modul überhaupt verwende.
ZitatBist du der Maintainer von diesem Modul? Dann bau' doch ein passendes Client-Modul. Ist nicht so schwierig...
Wie gesagt leider keine Ahnung von FHEM also natürlich auch nicht der Maintainer von dem RPII2C Modul.
ZitatreadingsProxy ist jedenfalls mAn. besser wie dummy+notify, selbst wenn der "Rückweg" im Moment fehlt. Schalten geht ja.
Da hast du vermutlich recht aber gerade sieht das ganze gut aus und funktioniert einwandfrei (das einzige was fehlt ist die Zusatzfunktion mit dem klickbaren Icon).
ZitatTestweise mal:
Hab ich leider steht immer noch "Initialized" als state da. Wenn dich das ganze interessiert kannst ich dir das ganze auch per Zoom (oder Teamspeak, Discord, ...) zeigen. Das würde schneller gehen und du siehst vll sofort wo das problem ist.
Gruß Adrian
Zitat von: Adrian08642 am 22 Januar 2022, 23:11:35
Wie gesagt leider keine Ahnung von FHEM
Es ist immer schwierig, sich in die Grundlagen von FHEM anhand eines "speziellen" Devices einarbeiten zu wollen/müssen.
Du solltest (wegen dem anderen Thread) dringend den Wiki-Artikel über EventMonitor lesen, und dann mal die commandref zu FHEM-Kommandos. Schließlich musst du mal ins log sehen, warum ggf. unser Test schief ging, da sollte eigentlich was zu finden sein...
ZitatWenn dich das ganze interessiert kannst ich dir das ganze auch per Zoom (oder Teamspeak, Discord, ...) zeigen. Das würde schneller gehen und du siehst vll sofort wo das problem ist.
Mir geht es nicht vorrangig darum, dass ein einzelner eine Lösung hat, sondern dass auch andere den Lösungsweg nachvollziehen können. Daher: no.
Zitat
Hab ich leider steht immer noch "Initialized" als state da.
Bitte - auch wenn das lästig erscheinen mag - immer ein list von dem Gerät zeigen, um das es geht. Ich nehme an, es geht um "rp_Deckenlicht_Linda"?
Also mal folgende Teilaspekte nacheinander durchspielen (FHEM-Kommandofeld):
setreading rp_Deckenlicht_Linda state off
=> wie sieht rp_Deckenlicht_Linda dann aus?
{fhem("setreading rp_Deckenlicht_Linda state on") if ReadingsVal('rp_Deckenlicht_Linda','state','unknown') ne 'on';}
Damit sollte klar sein, dass ein "kaputter" readingsProxy, der auf ein nicht vorhandenes Reading zeigt doch dazu genutzt werden könnte, dein Ziel mit dem klickbaren Icon umzusetzen...
Der Rest ist Doku lesen und Fehlerbereinigung ;) .