FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Grinsekatze am 21 Juni 2016, 19:11:31

Titel: ERLEDIGT: Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 21 Juni 2016, 19:11:31
Hallo ins Rund,

ich versuche zzt. FHEM2FHEM im RAW-Modus nutzbar zu machen, jedoch scheitere ich kläglich. Daher wende ich mich nun an die Community.

Ich habe zwei FHEM-Installationen. Auf meinem Raspberry Pi 2 läuft meine gesamte Automatisation (meine Zentrale).

Da der Pi 2 jedoch in einem anderen Raum steht, habe ich nun noch ein Pi 3 an meinem LG-TV angeschlossen (über USB-RS232-Adapter und HDMI-Kabel). Auf dem Pi 3 läuft soweit auch alles gut. Jedoch möchte ich auf diesen (und die FHEM-Installation) über meine Zentrale zugreifen können. Da kommt FHEM2FHEM ins Spiel.

Auf meinem TV-Rechner habe ich folgende Definitionen (das LGTV_RS232-Modul habe ich der Einfachheit erst mal außen vor gelassen und versuche nur hinzubekommen, dass der TV an und aus geht, über CEC):
define FernseherWohnzimmer dummy
attr FernseherWohnzimmer setList state:on,off
attr FernseherWohnzimmer webCmd on:off

define FernseherWohnzimmerOn notify FernseherWohnzimmer:on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}
define FernseherWohnzimmerOff notify FernseherWohnzimmer:off {system("echo 'standby 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}


Auf meiner Zentrale habe ich das folgende hinzugefügt, um den Dummy und die 2 Notifys des TV-Rechners steuern zu können:
define FernseherWohnzimmer dummy
attr FernseherWohnzimmer setList state:on,off
attr FernseherWohnzimmer webCmd on:off

define f2f FHEM2FHEM Wohnzimmer:7072 RAW:FernseherWohnzimmer

define FernseherWohnzimmerOn notify FernseherWohnzimmer:on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}
define FernseherWohnzimmerOff notify FernseherWohnzimmer:off {system("echo 'standby 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}


Schalte ich nun den Dummy auf der Zentrale, geht der TV nicht an / aus. f2f ist jedoch verbunden - daran liegt's also schonmal nicht.

Vermutlich ist da irgendwo ein Denkfehler, doch ich finde ihn nicht.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: kaihs am 21 Juni 2016, 20:56:42
Das von dir gewünschte Verhalten ist m. W. nicht das was FHEM2FHEM bietet, siehe commandref:

Zitat
RAW
Bei diesem Verbindungstyp werden unaufbereitete Ereignisse (raw messages) des remote FHEM-Geräts devicename genau so empfangen, als wäre das Gerät lokal verbunden.

D.h. FHEM2FHEM liefert dir nur Daten der Remoteinstanz.

Schau dir mal RFHEM (http://www.fhemwiki.de/wiki/RFHEM) an.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: item am 22 Juni 2016, 08:41:42
Ich hatte ein ähnliches Problem... für FHEM2FHEM war ich entweder zu ungeschickt oder...
deshalb habe ich es quasi über Telnet gelöst... socat musst du nachinstallieren (sudo apt-get install socat)
Vorteil ist, dass man kein inoffizielles Modul benötigt.
Würde in deinem Fall etwa so aussehen:

Zitatdefine FernseherWohnzimmer_on notify FernseherWohnzimmer:on {system("echo 'set FernseherWohnzimmerOn on' | /usr/bin/socat - TCP:192.168.0.19:7072")}
Zitatdefine FernseherWohnzimmer_off notify FernseherWohnzimmer:off {system("echo 'set FernseherWohnzimmerOff on' | /usr/bin/socat - TCP:192.168.0.19:7072")}

Die IP Adresse "192.168.0.19" muss natürlich angepasst werden... (Pi vom TV)

Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Otto123 am 22 Juni 2016, 09:18:29
Hallo Grinsekatze,

ich denke FHEM2FHEM ist schon der richtige Ansatz aber eben nicht im RAW Modus. Der RAW Modus dient zur Übertragung von Originalwerten aus Sensoren und IO Devices usw.
Was Du brauchst ist der Log Modus (http://www.fhemwiki.de/wiki/FHEM2FHEM#Weitergabe_von_Events).
Schau Dir das mal an, das sollte Dir helfen.

Gruß Otto
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 22 Juni 2016, 12:03:22
Danke, für eure schnelle Unterstützung!

Vom Prinzip her gehe ich auch davon aus, dass FHEM2FHEM mich hier glücklich machen kann. Zunächst dachte ich jedoch eben nicht im Log Modus, da ich ja nicht nur Daten logen will, sondern Schaltvorgänge am Remote-System über die Zentrale durchführen will.

Zum einen eben diese 2 Notifys und der 1 Dummy (s.o.) um mit dem am Remote-System angeschlossenem HDMI-Kabel (CEC) den TV an und aus zu machen.
Zusätzlich läuft auf dem Remote-System ebenfalls das Modul LGTV_RS232 (der TV ist hier zusätzlich per USB/RS232-Kabel mit dem Remote-System verbunden). Mit diesem Modul steuere ich den TV (Lautstärke, Eingang, Programmwahl usw.) und bekomme ebenfalls Statusmeldungen an FHEM (z.B. wie laut der TV zzt. ist, welcher Eingang gewählt ist, ob der TV überhaupt zzt. aktiv ist usw.).

Daher muss ich zumindest das TV-Modul und die beiden Notifys auf dem Remote-System ausführen und kann sie nicht auf der Zentrale laufen lassen (darum auch der Wunsch es über die Zentrale fernzusteuern).

Ich werde heute Abend mal den Log-Modus angucken. Doch das Modul verwirrt mich generell etwas.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Otto123 am 22 Juni 2016, 12:24:00
Zitat von: Grinsekatze am 22 Juni 2016, 12:03:22
Ich werde heute Abend mal den Log-Modus angucken. Doch das Modul verwirrt mich generell etwas.
Naja das ist vielleicht nicht ungewöhnlich.  ;) Deswegen noch die Hinweis:
- Mache keine Kreuzkopplung bevor Du nicht weißt was Du tust - also FHEM2FHEM erstmal nur auf einem System!
- Du musst wissen, das Modul kann einfach alle Events des Remote Systems auf das Eigene übertragen. Deshalb mit einem RegEx filtern und nicht LOG:.* in die DEF
- Schau Dir zum Verständnis erstmal in beiden Systemen mit dem Eventmonitor und ein paar Dummys an was genau passiert.
- Du kannst auch Befehle in das andere System übertragen, Du willst schalten? Dann schreibe set <aktor> on|off in einen Dummy und übertrage den Dummy über FHEM2FHEM. Der Befehl wird direkt ausgeführt.

Viel Erfolg

Gruß Otto
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 22 Juni 2016, 20:07:00
Ich habe noch mal von vorn begonnen. Zunächst binde ich nun das LGTV_RS232-Modul ein - das ist zum testen eventuell etwas leichter.

Wenn das klappt werde ich die beiden Notifys und den dazugehörigen Dummy (s.o.) hinzufügen. Die dienen eh nur dem An- und Ausschalten, da das nicht über USB klappt und somit per CEC laufen muss.

Ich habe nun mal auf dem Remote-System (dem Pi am Fernseher) folgendes hinzugefügt:
define FernseherWohnzimmer3 LGTV_RS232 /dev/ttyUSB0

Im Hauptsystem (von wo aus ich alles steuern will) folgten diese Neuerungen:
define f2f FHEM2FHEM Wohnzimmer:7072 LOG:.*(CommandAccepted|aspectRatio|input|power|presence|screenMute|videoOutMute|volume|volumeMute|state).*

define FernseherWohnzimmer3_r dummy

define FernseherWohnzimmer3_notify notify FernseherWohnzimmer3 { $EVENT=~s/://;;;; fhem("setreading FernseherWohnzimmer3_r $EVENT") ;;;;\
my $FernseherWohnzimmer3_CommandAccepted= ReadingsVal("FernseherWohnzimmer3_r","CommandAccepted","") ;;;;\
my $FernseherWohnzimmer3_aspectRatio= ReadingsVal("FernseherWohnzimmer3_r","aspectRatio","") ;;;;\
my $FernseherWohnzimmer3_input= ReadingsVal("FernseherWohnzimmer3_r","input","") ;;;;\
my $FernseherWohnzimmer3_power= ReadingsVal("FernseherWohnzimmer3_r","power","") ;;;;\
my $FernseherWohnzimmer3_presence= ReadingsVal("FernseherWohnzimmer3_r","presence","") ;;;;\
my $FernseherWohnzimmer3_screenMute= ReadingsVal("FernseherWohnzimmer3_r","screenMute","") ;;;;\
my $FernseherWohnzimmer3_state= ReadingsVal("FernseherWohnzimmer3_r","state","") ;;;;\
my $FernseherWohnzimmer3_videoOutMute= ReadingsVal("FernseherWohnzimmer3_r","videoOutMute","") ;;;;\
my $FernseherWohnzimmer3_volume= ReadingsVal("FernseherWohnzimmer3_r","volume","") ;;;;\
my $FernseherWohnzimmer3_volumeMute= ReadingsVal("FernseherWohnzimmer3_r","volumeMute","") ;;;;\
# fhem("setstate FernseherWohnzimmer3_r $FernseherWohnzimmer3_state") ;;;;\
fhem("setreading FernseherWohnzimmer3_r state $FernseherWohnzimmer3_state")\
}


Somit kann ich zumindest nun schon mal die Readings des Moduls vom Remote-System auch auf dem Hauptsystem sehen.
Zwei Einschränkungen sind nun jedoch noch da:

Ich möchte jedoch die folgenden Einstellungen von FernseherWohnzimmer3 am Remote-System über das Hauptsystem verändern können:

Zitat von: Otto123 am 22 Juni 2016, 12:24:00- Du kannst auch Befehle in das andere System übertragen, Du willst schalten? Dann schreibe set <aktor> on|off in einen Dummy und übertrage den Dummy über FHEM2FHEM. Der Befehl wird direkt ausgeführt.
Da komm ich jetzt nicht mit. Aber vielleicht liegt's heute auch am Wetter.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: bergadler am 22 Juni 2016, 21:26:38
Ist eigentlich überhaupt nicht kompliziert, wenn man einmal die Logik verstanden hat.

ZitatEinstellungen von FernseherWohnzimmer3 am Remote-System über das Hauptsystem verändern können:

Dafür braucht es am Remote Sytem ein:

define f2f FHEM2FHEM Wohnzimmer:7072 LOG:FernseherWohnzimmer3.*

Damit erscheinen sämtliche Events des Device "FernseherWohnzimmer3" des Zentrale-Pi
auch im Eventmonitor des  TV-Pi und können dort dann per notify, etc... ausgewertet werden.

Also die Zentrale gibt den Schaltbefehl (Event), der Remote erhält den Event und reagiert entsprechend.

Gruß

PS:
Und wie schon gesagt, definiere dabei NIEMALS auf beiden Systemen ein "LOG:.*".

Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 22 Juni 2016, 23:21:01
Zitat von: bergadler am 22 Juni 2016, 21:26:38Dafür braucht es am Remote Sytem ein:

define f2f FHEM2FHEM Wohnzimmer:7072 LOG:FernseherWohnzimmer3.*
? Das ist doch genau das, was ich auf dem Hauptsystem definiert habe. Sollte es dann nicht lieber define f2f FHEM2FHEM Zentrale:7072 LOG:FernseherWohnzimmer3_r.* heißen? Sonst definiere ich ja auf dem Remote-System eine Verbindung zum Remote-System.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: bergadler am 22 Juni 2016, 23:57:18
Sorry, habe ich doch glatt verdreht.  :o

Also ohne explizites Beispiel:
Man definiert auf dem Remote Sytem ein FHEM2FHEM zum Hauptsystem und
in dessen "LOG:", welche Events vom Hauptsystem auf dem Remote erscheinen sollen.

Gruß
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 23 Juni 2016, 08:59:22
So, ich habe inzwischen erste Erfolge - wenn auch noch nicht alles.

Nachdem ich etwas aufgeräumt habe, sieht es nun so aus:

Remote-System / TV-Pi:
define FernseherWohnzimmerPower dummy
attr FernseherWohnzimmerPower setList state:on,off
attr FernseherWohnzimmerPower webCmd on:off

define FernseherWohnzimmerPowerOn notify (FernseherWohnzimmerPower|FernseherWohnzimmerPower_remote):on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}

define FernseherWohnzimmerPowerOff notify (FernseherWohnzimmerPower|FernseherWohnzimmerPower_remote):off {fhem("set FernseherWohnzimmer power off")}

define FernseherWohnzimmerPower_remote2FernseherWohnzimmerPower FHEM2FHEM Smarthome:7072 LOG:FernseherWohnzimmerPower_remote


Zentrale:
define FernseherWohnzimmerPower_remote dummy
attr FernseherWohnzimmerPower_remote setList state:on,off
attr FernseherWohnzimmerPower_remote webCmd on:off
attr FernseherWohnzimmerPower_remote room Wohnzimmer

define FernseherWohnzimmerPower_notify notify FernseherWohnzimmerPower { $EVENT=~s/://;;;; fhem("setreading FernseherWohnzimmerPower_remote $EVENT") ;;;;\
my $FernseherWohnzimmerPower_state= ReadingsVal("FernseherWohnzimmerPower_remote","state","") ;;;;\
fhem("setreading FernseherWohnzimmerPower_remote state $FernseherWohnzimmerPower_state")\
}

define FernseherWohnzimmerPower2FernseherWohnzimmerPower_remote FHEM2FHEM Wohnzimmer:7072 LOG:FernseherWohnzimmerPower


Damit funktioniert nun das Ein- und Ausschalten des TV über beide Instanzen.
Ich werde jedoch noch eine Prüfung implementieren, um zu verhindern, dass der Dummy an ist, der TV jedoch nicht (und Vice Versa).


Was noch nicht klappt ist das Schalten des TV-Moduls. Es gibt auf der Zentrale zwar alles vom Remote-System aus, doch das Schalten von der Zentrale läuft ins Leere - gestern um 2 Uhr abends wollte ich nur nicht weiter testen ;)

Remote:
define FernseherWohnzimmer LGTV_RS232 /dev/ttyUSB0
#attr FernseherWohnzimmer event-on-change-reading .*

define FernseherWohnzimmer_remote2FernseherWohnzimmer FHEM2FHEM Smarthome:7072 LOG:FernseherWohnzimmer_remote


Zentrale:
define FernseherWohnzimmer_remote dummy
attr FernseherWohnzimmer_remote setList energy_saving:auto,max,off input:digitalTV,hdmi1,hdmi2,hdmi3,video1,video2 power:on,off screen_mute:on,off statusRequest volume:00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 volume_mute:on,off volume_step:down,up

define FernseherWohnzimmer_notify notify FernseherWohnzimmer { $EVENT=~s/://;;;; fhem("setreading FernseherWohnzimmer_remote $EVENT") ;;;;\
my $FernseherWohnzimmer_CommandAccepted= ReadingsVal("FernseherWohnzimmer_remote","CommandAccepted","") ;;;;\
my $FernseherWohnzimmer_aspectRatio= ReadingsVal("FernseherWohnzimmer_remote","aspectRatio","") ;;;;\
my $FernseherWohnzimmer_input= ReadingsVal("FernseherWohnzimmer_remote","input","") ;;;;\
my $FernseherWohnzimmer_power= ReadingsVal("FernseherWohnzimmer_remote","power","") ;;;;\
my $FernseherWohnzimmer_presence= ReadingsVal("FernseherWohnzimmer_remote","presence","") ;;;;\
my $FernseherWohnzimmer_screenMute= ReadingsVal("FernseherWohnzimmer_remote","screenMute","") ;;;;\
my $FernseherWohnzimmer_state= ReadingsVal("FernseherWohnzimmer_remote","state","") ;;;;\
my $FernseherWohnzimmer_videoOutMute= ReadingsVal("FernseherWohnzimmer_remote","videoOutMute","") ;;;;\
my $FernseherWohnzimmer_volume= ReadingsVal("FernseherWohnzimmer_remote","volume","") ;;;;\
my $FernseherWohnzimmer_volumeMute= ReadingsVal("FernseherWohnzimmer_remote","volumeMute","") ;;;;\
fhem("setreading FernseherWohnzimmer_remote state $FernseherWohnzimmer_state")\
}

define FernseherWohnzimmer2FernseherWohnzimmer_remote FHEM2FHEM Wohnzimmer:7072 LOG:FernseherWohnzimmer


Ich habe hier ein paar Versuche unternommen Mittels Notifys auf dem Remote-System auf das Schalten von FernseherWohnzimmer_remote zu reagieren und dann FernseherWohnzimmer den Zustand zu setzen, doch das klappt noch nicht.

Auch gefällt mir nicht, dass ich hier pro System 2 FHEM2FHEM-Instanzen verwende. Leider bin ich gestern jedoch zu doof gewesen, ein passenden RegEx zu finden, der sowohl FernseherWohnzimmer als auch FernseherWohnzimmerPower (bzw. auf dem anderen System FernseherWohnzimmer_remote und FernseherWohnzimmerPower_remote) bedient, NICHT jedoch die Notifys (FernseherWohnzimmerPowerOn, FernseherWohnzimmerPowerOff, FernseherWohnzimmerPower_notify, FernseherWohnzimmer_notify).
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Otto123 am 23 Juni 2016, 09:25:46
Zitat von: Grinsekatze am 22 Juni 2016, 20:07:00
Da komm ich jetzt nicht mit. Aber vielleicht liegt's heute auch am Wetter.
Ich will mal darauf noch etwas eingehen, Dein komplettes Konstrukt zu durchdenken habe ich wenig Lust bei der Wärme  8)
Ich habe ein Hauptsystem Raspib2 und ein Remotesystem Raspibplus. Remotesystem macht mit BT die Erkennung in Eingangsnähe.
Meine DEF für F2F auf dem Raspib2
raspibplus:7072 LOG:Datentransfer2Raspi.*
Dazu kommt ein notify mit folgender DEF
Datentransfer2Raspi {fhem "$EVENT"}
Und ein paar dummys mit Namen BT_xxx

Auf dem RaspiBPlus existiert ein dummy namens Datentransfer2Raspi.
Zusätzlich existiert ein notify mit dieser DEF
(BT_.*) set Datentransfer2Raspi set $NAME $EVENT
Die BT Erkennung erfolgt mit mehreren Presence Definitionen die alle mit BT_xxx beginnen.

Ändert sich die presence bei einem der BT_xxx Definitionen triggert das notify und über F2F wird auf dem Hauptsystem durch das dortige notify direkt der passende dummy gesetzt.

Das Ganze geht auf einen Artikel in MeinTechblog  (http://www.meintechblog.de/2013/11/zwei-fhem-server-verbinden-fritzbox-anwesenheitserkennung-auf-dem-raspberry-pi-nutzen/)zurück.

Gruß Otto
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 23 Juni 2016, 13:58:48
Den Artikel kenne ich - an anderer Stelle habe ich in dem Blog auch wiederholt Hilfestellungen gegeben (in den Kommentaren - etwa zum TV-Modul, SmartVisu und der generellen Einrichtung auf einem Pi ;) ).

Das "Problem" das ich habe: Ich muss am Remotesystem (dem Raspi 3 am TV) schalten. Das geht leider nicht vom Hauptsystem aus, da ich Befehle zum angeschlossenen TV schicken muss. Zum einen über das HDMI-Kabel (CEC für Power On) und zum anderen über das USB-RS232-Kabel (die restliche Steuerung des TV).
Dennoch möchte ich diese Befehle nicht vom Remotesystem absetzen, sondern mich nur auf dem Hauptsystem einloggen (um alles gebündelt an einem Ort zu haben). Dazu finde ich im Netz jedoch sehr wenig Informationen und Beispiele. Der Regelfall ist hier, wie von Dir beschrieben, dass auf Events des Remotesystems mit dem Hauptsystem reagiert wird (also eine 1-Weg-Schaltung).

Daher benötige ich zum einen eine Abbildung der Module und Dummys des Remotesystems auf dem Hauptsystem (um dort schalten zu können). Aber eben auch auf dem Remotesystem Notifys und ggf. weiteres um die Schaltvorgänge des Hauptsystems erkennen und umsetzen zu können. Es ist also eine Art 2-Wege-Schaltung.

Zumindest das Ein- und Ausschalten klappt ja inzwischen auch.

Ich muss jetzt lediglich (vermutlich am Beispiel der bereits funktionierenden Teile) noch die restliche Steuerung des TV über das LGTV_RS232-Modul umsetzen und zusätzlich noch ein passenden RegExp. für f2f finden, damit ich es nicht 2 Mal pro System definieren muss (für den An/Aus-Dummy und das LGTV_RS232-Modul). Jedoch möchte ich ungern von meiner Namenskonvention abweichen - was mir jedoch das Finden dieses RegExp. schwerer macht. :D

Wenn das gesamte Konstrukt funktioniert, werde ich es hier auch posten.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Otto123 am 23 Juni 2016, 14:50:16
Naja Du musst den umgekehrten Weg zum Remotesystem auch machen. Du musst bloß aufpassen, dass es keine Endlosschleife wird!

Das was ich Dir gezeigt habe ist doch eigentlich bloß ein (eins pro Schaltaktion eventuell) notify auf dem Hauptsystem (Schalte etwas auf dem Remotesystem) und der Übertragungsweg F2F. Auf dem remotesystem ist ja alles definiert Du kannst ja einfach den kompletten Schaltbefehl wie er auf dem remotesystem aussehen müsste in dem notify absetzen. da schreibst Du eben den kompletten String pro Aktion ohne Variablen. Ist doch egal.

Ich habe ganz zeitig gelernt bei meiner Namensgebung an regEx zu denken.  8) (set Rollo.* xx - ist mein liebstes Beispiel)
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 23 Juni 2016, 16:59:25
Hehe, bis jetzt ist meine Konvention auch RegEx-kompatibel gewesen (z.B. RolloWohnzimmerLinks, HeizungSchlafzimmer ...). Jetzt ist nur das PRoblem, dass ich vermutlich die Notifys umbenennen muss, damit diese nicht mit einfließen in die f2f-Definition. :D

Mit dem Notify werde ich es auch so machen, wie Du es beschrieben hast - dazu bin ich gestern gegen 2 Uhr nachts aber wohl nicht mehr in der Lage gewesen :D
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 23 Juni 2016, 19:41:04
So, ich habe jetzt eine Version fertig, die bereits alles tut, jedoch noch etwas Optimierung bedarf.


Remote-System (Pi 3 am TV):
define FernseherWohnzimmerPower dummy
attr FernseherWohnzimmerPower setList state:on,off
attr FernseherWohnzimmerPower webCmd on:off
attr FernseherWohnzimmerPower room Wohnzimmer
attr FernseherWohnzimmerPower comment Dummy um den Wohnzimmer-Fernseher ein- oder auszuschalten

define Notify_FernseherWohnzimmerPowerOn notify (FernseherWohnzimmerPower|FernseherWohnzimmerPower_remote):on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}
define Notify_FernseherWohnzimmerPowerOff notify (FernseherWohnzimmerPower|FernseherWohnzimmerPower_remote):off {fhem("set FernseherWohnzimmer power off")}
#define Notify_FernseherWohnzimmerPower notify (FernseherWohnzimmerPower|FernseherWohnzimmerPower_remote) {\
#    if ((ReadingsVal("FernseherWohnzimmerPower", "state", "undefined") eq "on") && (ReadingsVal("FernseherWohnzimmerPower_remote", "state", "undefined") eq "on")) {\
#     system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")\
# }\
# elsif ((ReadingsVal("FernseherWohnzimmerPower", "state", "undefined") eq "off") && (ReadingsVal("FernseherWohnzimmerPower_remote", "state", "undefined") eq "off")) {\
#     fhem("set FernseherWohnzimmer power off")\
# }\
#}
#attr Notify_FernseherWohnzimmerPower comment Notify um den Wohnzimmer-Fernseher ein- oder auszuschalten

define FernseherWohnzimmer LGTV_RS232 /dev/ttyUSB0
attr FernseherWohnzimmer event-on-change-reading .*
attr FernseherWohnzimmer room Wohnzimmer
attr FernseherWohnzimmer comment LG 55 Zoll TV im Wohnzimmer

define Notify_FernseherWohnzimmer notify FernseherWohnzimmer_remote set FernseherWohnzimmer $EVENT
attr Notify_FernseherWohnzimmer comment Notify um den Wohnzimmer-Fernseher fernzusteuern

define FernseherWohnzimmerPower_remote2FernseherWohnzimmerPower FHEM2FHEM Smarthome:7072 LOG:FernseherWohnzimmerPower_remote
attr Notify_FernseherWohnzimmer comment Verbinden der zwei Dummys vom Remote- und Hauptsystem um den Wohnzimmer-Fernseher ein- oder auszuschalten

define FernseherWohnzimmer_remote2FernseherWohnzimmer FHEM2FHEM Smarthome:7072 LOG:FernseherWohnzimmer_remote
attr Notify_FernseherWohnzimmer comment Verbinden des TV-Moduls und Dummys vom Remote- und Hauptsystem um den Wohnzimmer-Fernseher fernzusteuern


Hauptsystem (Pi 2 der das gesamte Smarthome steuert):
define FernseherWohnzimmerPower_remote dummy
attr FernseherWohnzimmerPower_remote room Wohnzimmer
attr FernseherWohnzimmerPower_remote setList state:on,off
attr FernseherWohnzimmerPower_remote webCmd on:off
attr FernseherWohnzimmerPower_remote comment Dummy um den Wohnzimmer-Fernseher ein- oder auszuschalten


define FernseherWohnzimmerPower2FernseherWohnzimmerPower_remote FHEM2FHEM Wohnzimmer:7072 LOG:FernseherWohnzimmerPower
define FernseherWohnzimmer2FernseherWohnzimmer_remote FHEM2FHEM Wohnzimmer:7072 LOG:FernseherWohnzimmer


define FernseherWohnzimmer_remote dummy
attr FernseherWohnzimmer_remote event-on-change-reading .*
attr FernseherWohnzimmer_remote room Wohnzimmer
attr FernseherWohnzimmer_remote setList energy_saving:auto,max,off input:digitalTV,hdmi1,hdmi2,hdmi3,video1,video2 power:on,off screen_mute:on,off statusRequest volume:00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 volume_mute:on,off volume_step:down,up
attr FernseherWohnzimmer_remote comment Dummy um den Wohnzimmer-Fernseher fernzusteuern


define Notify_FernseherWohnzimmer_remote notify FernseherWohnzimmer { $EVENT=~s/://;;;; fhem("setreading FernseherWohnzimmer_remote $EVENT") ;;;;\
    my $FernseherWohnzimmer_CommandAccepted= ReadingsVal("FernseherWohnzimmer_remote","CommandAccepted","") ;;;;\
    my $FernseherWohnzimmer_aspectRatio= ReadingsVal("FernseherWohnzimmer_remote","aspectRatio","") ;;;;\
    my $FernseherWohnzimmer_input= ReadingsVal("FernseherWohnzimmer_remote","input","") ;;;;\
    my $FernseherWohnzimmer_power= ReadingsVal("FernseherWohnzimmer_remote","power","") ;;;;\
    my $FernseherWohnzimmer_presence= ReadingsVal("FernseherWohnzimmer_remote","presence","") ;;;;\
    my $FernseherWohnzimmer_screenMute= ReadingsVal("FernseherWohnzimmer_remote","screenMute","") ;;;;\
    my $FernseherWohnzimmer_state= ReadingsVal("FernseherWohnzimmer_remote","state","") ;;;;\
    my $FernseherWohnzimmer_videoOutMute= ReadingsVal("FernseherWohnzimmer_remote","videoOutMute","") ;;;;\
    my $FernseherWohnzimmer_volume= ReadingsVal("FernseherWohnzimmer_remote","volume","") ;;;;\
    my $FernseherWohnzimmer_volumeMute= ReadingsVal("FernseherWohnzimmer_remote","volumeMute","") ;;;;\
#    fhem("setreading FernseherWohnzimmer_remote state $FernseherWohnzimmer_state")\
}
attr Notify_FernseherWohnzimmer_remote comment Notify, notwendig um die Werte des Original-Moduls auf dem Remote-Dummy abzulegen, um den Wohnzimmer-Fernseher fernzusteuern


define Notify_FernseherWohnzimmerPower_remote notify FernseherWohnzimmerPower { $EVENT=~s/://;;;; fhem("setreading FernseherWohnzimmerPower_remote $EVENT") ;;;;\
    my $FernseherWohnzimmerPower_state= ReadingsVal("FernseherWohnzimmerPower_remote","state","") ;;;;\
    fhem("setreading FernseherWohnzimmerPower_remote state $FernseherWohnzimmerPower_state")\
}
attr Notify_FernseherWohnzimmerPower_remote comment Notify, notwendig um die Werte des Original-Dummys auf dem Remote-Dummy abzulegen, um den Wohnzimmer-Fernseher ein- oder auszuschalten



Edit:
Um die Dummys zu synchronisieren kann folgendes eingetragen werden:
Remotesystem:
define Notify_FernseherWohnzimmerPowerSync notify FernseherWohnzimmerPower_remote set FernseherWohnzimmerPower $EVENT

Hauptsystem:
define Notify_FernseherWohnzimmerPowerSync_remote notify FernseherWohnzimmerPower set FernseherWohnzimmerPower_remote $EVENT
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: bergadler am 23 Juni 2016, 21:55:37
Also wenn ich jetzt nicht wieder was verdrehe, sollte der Empfang nur dieser beiden Eventtypen

define FernseherWohnzimmerPower_remote2FernseherWohnzimmerPower FHEM2FHEM Smarthome:7072 LOG:FernseherWohnzimmerPower_remote
define FernseherWohnzimmer_remote2FernseherWohnzimmer FHEM2FHEM Smarthome:7072 LOG:FernseherWohnzimmer_remote


auf dem Remote so funktionieren:

define remote_Smarthome FHEM2FHEM Smarthome:7072 LOG:(FernseherWohnzimmerPower_remote.*|FernseherWohnzimmer_remote.*)

Die Gegenrichtung dann nach dem gleichen Schema.

Gruß
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 24 Juni 2016, 01:08:03
LOL, daran hab ich an dieser Stelle überhauptnicht gedacht. So mach ich es schon länger etwa bei Notifys. Irgendwie hatte ich was wie FernseherWohnzimmer.* im Kopf.

Da ist es gut, wenn auch mal Jemand mit etwas Abstand draufguckt.

Danke!
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: marvin78 am 24 Juni 2016, 11:54:48
Warum wurde der RFHEM Hinweis oben eigentlich konstant ignoriert?
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 24 Juni 2016, 19:38:48
Zitat von: marvin78 am 24 Juni 2016, 11:54:48Warum wurde der RFHEM Hinweis oben eigentlich konstant ignoriert?

Zufall. Ich habe mit FHEM2FHEM begonnen, daher habe ich gehofft, damit auch erste Resultate zu bekommen. Ich werde mir RFHEM aber auch mal ansehen - vielleicht geht's ja leichter.

Ein PRoblem habe ich zzt. mit FHEM2FHEM: Es liest nicht den state (weder Internals noch Readings) aus. Gibt's da irgendwie ein Tipp?
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: bergadler am 24 Juni 2016, 20:58:47
Zitat...  Es liest nicht den state (weder Internals noch Readings) aus.
FHEM2FHEM schickt eben "nur" Events weiter.

Also z.B. mittels Dummy ein entsprechendes Event generieren und dies auf dem Remote per Log:xy auswerten.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 25 Juni 2016, 01:44:49
Ich habe nun alles, wie im Wiki beschrieben umgesetzt (spez. den Notify um den Dummy mit Werten zu füllen). Dabei ist mir jedoch etwas merkwürdiges aufgefallen:

Sobald ich am Modul ein Wert ändere, z.B. die Lautstärke, wird es auch im Dummy übernommen ABER danach das Reading sekündlich neu im Dummy geschrieben (immer mit dem selben Wert). Das Obwohl ich zusätzlich ein event-on-change im Modul und Dummy hinterlegt habe.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: marvin78 am 25 Juni 2016, 08:10:17
Es ist doch im Grunde ganz einfach. Statt mit notifies etc. zu arbeiten, verwenden man einfach FHEM2FHEM (ggf. in Kombination mit cloneDummy) für die ankommenden Events und RFHEM um auf einem Remote-System etwas zu schalten. Ganz so schwer ist das nicht.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 26 Juni 2016, 12:20:59
Naja, ich probiere gerade mal die Umsetzung mit cloneDummy und RFHEM (auch wenn ich lieber offizielle Module verwende). Dabei habe ich auch einige negative Aspekte bemerkt:
- Der State wird von cloneDummy verfremdet: So ist er defined/active. Es ist also erstmal nicht erkennbar, ob der Clone z.B. on oder off ist.
- Ich kann den Clone nicht direkt schalten, da u.a. kein setList definiert werden kann.

Daher denke ich, ist die cloneDummy-Lösung nicht wirklich brauchbarer - da ich dann eh zusätzliche Notifys und weitere Dummys anlegen muss. Das macht es dann unübersichtlich.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: marvin78 am 26 Juni 2016, 22:35:07
Wofür sollen denn die weiteren dummyS sein? Maximal einer reicht. Den Rest versteckt man dann ggf. im hiddenroom und nichts ist unübersichtich. Ein wenig Phantasie ist natürlich schon notwendig. Eine fertige Lösung wird dir keiner bauen.
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 26 Juni 2016, 22:54:06
Die Unübersichtlichkeit entsteht eher dadurch, dass ich dann mehrere Dummys benötige um 1 Gerät zu bedienen (geklonte Dummys vom Modul und PowerOn/Off, da diese dann aber nicht bedienbar sind für jedes noch je ein weiterer Dummy zum bedienen - etwa mittels RFHEM). Da ich auf dem Host jedoch sowohl die aktuellen zustände sehen, als auch die Bedienung durchführen möchte hilft es nicht, die Dummys zu verstecken.

Ich habe (oder besser hatte!) nun jedoch eine schöne Lösung gefunden:

Ich leg auf dem zu steuernden System / Remotesystem (TV-Pi) das Modul an, ein Dummy für Power On/Off (da dort nur mittels CEC angeschaltet werden kann und nicht über das Modul) und je ein Notify, für On, Off und um den Zustand des States vom Dummy und Modul zu synchronisieren (falls z.B. mal Jemand mit der Fernbedienung an oder aus macht).

Auf dem Hauptsystem habe/hatte ich dann 2 Dummys um Modul und Dummy des Remotesystems zu klonen. F2F, RFHEM und je ein Notify um die beiden Dummys mit Werten vom Remotesystem zu füllen sowie auf das Schalten des der beiden Dummys zu reagieren (mit RFHEM).

Leider musste ich jedoch gerade feststellen, dass mir gut 100 Zeilen Code aus der fhem.cfg abhanden gekommen sind. Nachdem ich sie dann ein zweites Mal vom Webfrontend geöffnet habe waren es bereits 500 Zeilen! Es ist also alles das, was ich auf dem Hauptsystem generiert habe weg, sowie ein paar weitere Sachen auch.  >:(
Das muss ich jetzt erstmal lösen, danach poste ich mal meine Lösung (ich hoffe nur, ich bekomm es wieder so hübsch zusammen).


Edit:
So, wie es aussieht, hat es meinen Pi2 zerchossen - keine Ahnung warum, doch er ist tot. Bei Strom leuchten zwar alle Lampen (rot & grün), doch weder der WLAN-Stick leuchtet blau, noch kann ich mich via SSH einwähllen, ist er im Netzwerk angezeigt, funktioniert die USB-Tastatur oder bekomme ich ein Signal am HDMI-Port. ... also ein neuen kaufen ...  :'(
Titel: Antw:Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 07 Juli 2016, 16:08:53
So, der neue Pi ist da und das System wieder aufgesetzt.

Ich habe noch einmal mein letzten Versuch überarbeitet und nun eine sehr schlanke Lösung gefunden.

Benötigt werden ein HDMI-Kabel (für die CEC-Steuerung, da mein LG Fernseher sich nicht über RS232 aufwecken lässt), Ein RS232-USB-Adapter (es sind eigentlich 2 Kabel, zur Steuerung des TV) und ein zweiten Pi.

Auf dem Remotesystem (dem 2. Pi, der am TV angeschlossen ist) wird ein cec-client benötigt. Ich verwende als Betriebssystem OSMC, da ist der gleich mit installiert. Wird ein anderes Betriebssystem benutzt, dann muss ggf. auch der Pfad in der fhem.cfg zum Client angepasst werden, hier /usr/osmc/bin/cec-client!

In FHEM ist es dann so abgebildet (ggf. den Pfad zum Remotesystem, hier Wohnzimmer, anpassen):
Remotesystem:
define FernseherWohnzimmer LGTV_RS232 /dev/ttyUSB0
attr FernseherWohnzimmer comment LG 55 Zoll TV im Wohnzimmer
attr FernseherWohnzimmer event-on-change-reading .*
attr FernseherWohnzimmer room Wohnzimmer
attr FernseherWohnzimmer webCmd power

define Notify_FernseherWohnzimmerOn notify FernseherWohnzimmer:power.on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}


Hauptsystem:
define FernseherWohnzimmer_reomote dummy
attr FernseherWohnzimmer_reomote comment Dummy um den Wohnzimmer-Fernseher fernzusteuern
attr FernseherWohnzimmer_reomote event-on-change-reading .*
attr FernseherWohnzimmer_reomote room Wohnzimmer
attr FernseherWohnzimmer_reomote setList energy_saving:auto,max,off input:digitalTV,hdmi1,hdmi2,hdmi3,video1,video2 power:on,off screen_mute:on,off statusRequest volume:00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 volume_mute:on,off volume_step:down,up
attr FernseherWohnzimmer_reomote userReadings FernseherWohnzimmer:CommandAccepted.*, FernseherWohnzimmer:aspectRatio.*, FernseherWohnzimmer:input.*, FernseherWohnzimmer:power.*, FernseherWohnzimmer:presence.*, FernseherWohnzimmer:screenMute.*, FernseherWohnzimmer:videoOutMute.*, FernseherWohnzimmer:volume.*, FernseherWohnzimmer:volumeMute.*
attr FernseherWohnzimmer_reomote DbLogExclude .*

define RemoteWohnzimmerLog FHEM2FHEM wohnzimmer:7072 LOG:(FernseherWohnzimmer.*)
attr RemoteWohnzimmerLog comment Verbindung zum Wohnzimmer-Computer, um die für die TV-Fernsteuerung nötigen Daten auszulesen

define RemoteWohnzimmer RFHEM wohnzimmer:7072
attr RemoteWohnzimmer comment Verbindung zum Wohnzimmer-Computer, um den Fernseher fernzusteuern

define Notify_FernseherWohnzimmer notify FernseherWohnzimmer.* {\
    $EVENT=~s/://;;;;\
    fhem("setreading FernseherWohnzimmer_reomote $EVENT") ;;;;\
    my $FernseherWohnzimmer_CommandAccepted= ReadingsVal("FernseherWohnzimmer_reomote","CommandAccepted","undefined") ;;;;\
    my $FernseherWohnzimmer_aspectRatio= ReadingsVal("FernseherWohnzimmer_reomote","aspectRatio","undefined") ;;;;\
    my $FernseherWohnzimmer_input= ReadingsVal("FernseherWohnzimmer_reomote","input","undefined") ;;;;\
    my $FernseherWohnzimmer_power= ReadingsVal("FernseherWohnzimmer_reomote","power","undefined") ;;;;\
    my $FernseherWohnzimmer_presence= ReadingsVal("FernseherWohnzimmer_reomote","presence","undefined") ;;;;\
    my $FernseherWohnzimmer_screenMute= ReadingsVal("FernseherWohnzimmer_reomote","screenMute","undefined") ;;;;\
    my $FernseherWohnzimmer_videoOutMute= ReadingsVal("FernseherWohnzimmer_reomote","videoOutMute","undefined") ;;;;\
    my $FernseherWohnzimmer_volume= ReadingsVal("FernseherWohnzimmer_reomote","volume","undefined") ;;;;\
    my $FernseherWohnzimmer_volumeMute= ReadingsVal("FernseherWohnzimmer_reomote","volumeMute","undefined") ;;;;\
    fhem("setreading FernseherWohnzimmer_reomote state $FernseherWohnzimmer_power") ;;;;\
}
attr Notify_FernseherWohnzimmer comment Notify, notwendig um die Readings des Original-Module auf den Remote-Dummys abzulegen, um den Wohnzimmer-Fernseher fernzusteuern

define Notify_FernseherWohnzimmerPower notify FernseherWohnzimmer:(on|off) {\
    fhem("setreading FernseherWohnzimmer_remote state $EVENT ;; setreading FernseherWohnzimmer_remote power $EVENT")\
}
attr Notify_FernseherWohnzimmerPower comment Notify, um den Betriebszustand des Dummys korrekt zu setzen, wenn der Wohnzimmer-Fernseher mittels Fernbedienung an- oder abgeschaltet wird

define Notify_FernseherWohnzimmer_remote notify FernseherWohnzimmer_reomote.*:(energy_saving|input|power|screen_mute|statusRequest|volume|volume_mute|volume_step).* {\
    fhem ("set RemoteWohnzimmer cmd set FernseherWohnzimmer $EVENT")\
}
attr Notify_FernseherWohnzimmer_remote comment Notify, notwendig um den Wohnzimmer-Fernseher fernzusteuern

Titel: Antw:ERLEDIGT: Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: osid-timo am 20 November 2016, 18:12:29
Hallo,
mir ist bekannt, dass euer Thema erledigt ist, aber:

wie definiert Ihr eure Namen/dummy um
define RemoteWohnzimmerLog FHEM2FHEM [color=red][i][b]wohnzimmer[/b][/i][/color]:7072 LOG:(FernseherWohnzimmer.*)

nutzen zu können?
mir gelingt es nicht
wenn ich einen dummy nutzen will, den ich je nach Umgebung produktiv/test umschalten will
habe ich immer ein disconnected für mein FHEM2FHEM

define Raspi1.Remote FHEM2FHEM 192.168.178.31 LOG:.*
funktioniert wunderbar

define Raspi1IP dummy
set Raspi1IP 192.168.178.31
define Raspi1.Remote FHEM2FHEM Raspi1IP LOG:.*
bringt immer disconnected

ich benötige einen Tipp

Gruß osid-timo
Titel: Antw:ERLEDIGT: Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: Grinsekatze am 20 November 2016, 18:38:29
Du musst in der F2F Definition den Hostnamen oder dessen IP angeben (s. auch in der Commandref).

Das erste klappt, weil F2F unter 192.168.178.31 das Remotesystem findet.

Das zweite finde ich etwas verwirrend. Zum einen kann ich nichts mit dem Set anfangen - ist das so zulässig?
Zum anderen hast Du sichergestellt, dass der Host-Name von 192.168.178.31  auch tatsächlich Raspi1IP ist? Ich gehe bei der angegebenen IP-Adresse davon aus, dass Du eine Fritzbox benutzt. Dort kann man die IP-Adressen und Host-Namen ganz einfach im Webfrontend sehen.

Du musst ebenso den Dummy Raspi1IP noch mit Werten füllen. Zzt. ist er einfach nur da und bleibt leer. Das ist im Wiki gut beschrieben.


Edit:
Mir drängt sich das Gefühl auf, dass Du die Funktionsweise von F2F noch nicht so recht verstanden hast?
Mit der F2F-Definition stellst Du erst mal nur eine Verbindung herzwischen Remote- und Hauptsystem. Ausgehend von deiner Definition willst Du auf dem Hauptsystem auf alles vom Remotesystem "zugreifen" (.*)?
Die Dummys benötigst Du, um die Werte des Remotesystm auf dem Hauptsystm (den Dummys) zu spiegeln. Das mus aber z.B. mit einem Notify o.ä. erfolgen und passiert nicht von selbst.

Edit2:
Ausgehend von meinem von Dir genannten Beispiel ist "wohnzimmer" der Name des Remote-Systems, so wie ich ihn im Netzwerk angegeben habe. Das hat nichts mit FHEM zutun. Alternativ hätte ich auch die IP des Systems hinschreiben können.
Titel: Antw:ERLEDIGT: Fehler bei FHEM2FHEM RAW - Umsetzung / benötige Hilfe
Beitrag von: osid-timo am 20 November 2016, 20:15:18
Hallo
Danke für den schnellen Tipp
Ich will nicht auf alle Informationen im Remote System zugreifen, war nur eine schnelle Kopie
Dass ich nur den Hostnamen nehmen kann habe ich nicht erkannt

Meine Idee war eine einfache Umschaltung der IPAdressen mittels Dummy Belegung um ohne Code Änderungen zwischen produktiv/test wechseln kann, geht damit nicht!

Gruß Oswald