Daten von einer CCU3 auf eine andere übertragen

HMIP lokale Installation

Moderator: Co-Administratoren

Bembi
Beiträge: 56
Registriert: 04.02.2015, 02:15
System: CCU und Access Point
Hat sich bedankt: 7 Mal
Danksagung erhalten: 9 Mal

Daten von einer CCU3 auf eine andere übertragen

Beitrag von Bembi » 20.09.2022, 01:06

Moin Zusammen,

Ich habe zwei CCU3s mit unterschiedlichen Komponenten (im gleichen Netz, aber unterschiedliche Subnetze). Die Kernstati einzelner Komponenten lege ich in Variablen ab.
Nun würde ich gerne einzelne Variablenwerte der einen CCU auf die andere CCU übernehmen, damit ich sie dort weiter nutzen kann.

Hat da jemand für mich den gedanklichen Ansatz bzw. ein Besipiel?

rr745
Beiträge: 305
Registriert: 19.01.2021, 14:53
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 34 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von rr745 » 20.09.2022, 05:30

nur einmalig , oder permanent ?
man könnte die werte via http request übertragen.
Wenn etwas schiefgehen kann, dann geht es schief (Murphy)

Tyfys
Beiträge: 544
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 123 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von Tyfys » 20.09.2022, 09:23

Dort ging es um das gleiche Thema : viewtopic.php?f=26&t=68854&start=10
Gruß
Harry

Bembi
Beiträge: 56
Registriert: 04.02.2015, 02:15
System: CCU und Access Point
Hat sich bedankt: 7 Mal
Danksagung erhalten: 9 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von Bembi » 22.09.2022, 01:47

Moin,
habe das hier versucht...
Geht (sprich keine syslog Fehler), nur die Variable ist leer

string stdout;

string url ='http://ccu3-176.domain.tld:8181/test.ex ... me").Value()';
WriteLine(url);
system.Exec("wget --no-check-certificate -q -O - '"#url#"'");
WriteLine(stdout);

WriteLine("Hallo Welt!");

MichaelN
Beiträge: 9635
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1614 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von MichaelN » 22.09.2022, 07:00

Und unter Skript testen kommt "Hallo Welt"?Würde mich wundern. Das hier sollte einen Fehler werfen

Code: Alles auswählen

string url ='http://ccu3-176.domain.tld:8181/test.ex ... me").Value()';
Was soll die) und das Value?

Und dein wget hat zuviel "
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

rentier-s
Beiträge: 366
Registriert: 19.06.2017, 09:24
Hat sich bedankt: 20 Mal
Danksagung erhalten: 64 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von rentier-s » 22.09.2022, 09:05

Hast Du in der zweiten CCU in den Sicherheitseinstellungen die Umleitung auf HTTPS aktiv? Dann wäre https://ccu3-176.domain.tld:48181 richtig. Außerdem empfiehlt sich, den Remote-API Zugriff auf die IP-Adresse der sendenden CCU zu beschränken und mit Authentifizierung zu arbeiten.

Auflösen kann die CCU den Hostnamen hoffentlich, ggf. erstmal mit der IP-Adresse probieren. Außerdem muss die CCU den richtigen Gateway kennen.

Wenn Netzwerkseitig alles richtig eingestellt ist, klapp das hier auf jeden Fall, selbst im Einsatz:

Code: Alles auswählen

var x = dom.GetObject("meineSysVar").Value();
string url='https://192.168.x.y:48181/remote.exe?sv=dom.GetObject("dortigeSysVar").State('#x#')';
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget --no-check-certificate -q -O - --user ersteCCU --password Passwort '"#url#"'");
Ohne CUxD müsste das mit System.Exec() ähnlich funktionieren.

mademyday
Beiträge: 272
Registriert: 03.10.2014, 12:46
System: CCU
Wohnort: Enzkreis
Hat sich bedankt: 3 Mal
Danksagung erhalten: 43 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von mademyday » 22.09.2022, 16:10

ich nutze dafür ein Skript mit Bestandteilen hier aus dem Forum, s.u.

vielleicht helfen meine als Gedankenstütze dort notierten Kommentare?!
(via Port 8181, wie bei der ccu2, kommt bei meiner ccu3 nämlich "401 - Unauthorized")

Code: Alles auswählen

! --- auf ccu2 + ccu3: IP-Adressen für den eingeschränkten Zugriff: 172.20.1.0/24;
! --- auf ...... ccu3: Port-Freigabe: 8183;
! ---
! --- ccu2 --> ccu3: Port 8183 !
Skript:

Code: Alles auswählen

! --- Prog: pSystemvariable_zu_CCU3_spiegeln

! --- Systemvariable zu einer zweiten CCU senden
! --- https://homematic-forum.de/forum/viewtopic.php?f=19&t=74606&p=722724&hilit=8181#p722724

! --- Beispiel: curl "http://localhost:8181/run.exe?x=dom.GetObject(ID_SYSTEM_VARIABLES).Get('log').State('test');"

! --- auf ccu2 + ccu3: IP-Adressen für den eingeschränkten Zugriff: 172.20.1.0/24;
! --- auf ...... ccu3: Port-Freigabe: 8183;
! ---
! --- ccu2 --> ccu3: Port 8183 !
! --- s. https://homematic-forum.de/forum/viewtopic.php?f=65&t=72884&hilit=user+8181&start=20#p717791
! --- "direkt auf der Zentrale nicht via Port 8181 (welcher über lighttpd geht) sondern via Port 8183"
! --- [15:29] ~ # curl "http://172.20.1.30:8183/ccu2.exe?x=dom.GetObject(ID_SYSTEM_VARIABLES).Get('log').State('test');"
! --- <xml><_exec>/ccu2.exe</exec><sessionId></sessionId><httpUserAgent>User-Agent: curl/7.65.0</httpUserAgent><x>true</x></xml>
! --- [15:31] ~ # uname -a
! --- Linux homematic-ccu2 3.4.113.ccu2 #1 PREEMPT Wed Jan 20 16:21:07 CET 2021 armv5tejl GNU/Linux
! ---
! --- ccu3 --> ccu2: Port 8181 !
! --- [15:33] ~ # curl "http://172.20.1.60:8181/ccu3.exe?x=dom.GetObject(ID_SYSTEM_VARIABLES).Get('log').State('test');"
! --- <xml><_exec>/ccu3.exe</exec><sessionId></sessionId><httpUserAgent>User-Agent: curl/7.61.1</httpUserAgent><x>true</x></xml>
! --- [15:33] ~ # uname -a
! --- Linux ccu3-webui 4.14.34 #1 SMP PREEMPT Thu Jun 23 16:59:40 CEST 2022 armv7l GNU/Linux

! ---

! --- source_ccu: 'exe'-Name..............: http://<target_ccu>/<source_ccu>.exe?x=...
! --- target_ccu: IP-Adresse/Hostname+Port: http://<target_ccu>/<source_ccu>.exe?x=...
if( 1 ) {
  string target_ccu = "172.20.1.30:8183";
  string source_ccu = "ccu2";
} else {
  string target_ccu = "172.20.1.60:8181";
  string source_ccu = "ccu3";
}

if( dom.GetObject("$this$") ) {
  string prog = dom.GetObject("$this$").Name();
} else { string prog = "-not defined-"; }

! ---

if( (dom.GetObject("$src$")) && (dom.GetObject("$src$").IsTypeOf(OT_VARDP)) ) {
  string src_vardp = dom.GetObject("$src$").Name();
  var    src_val   = dom.GetObject(ID_SYSTEM_VARIABLES).Get(src_vardp).Value();

} else {
  string src_vardp = ""; 
  var    src_val   = "";
}

! ---

if( ( ! dom.GetObject("$this$") ) || ( ! dom.GetObject("$src$") ) ) {
  WriteLine( "DEBUG!" );
  src_vardp = "log";
  src_val   = "--- \"Gruss\" von der '" # source_ccu # "' (Prog: " # prog # ")! ---";
  ! src_val   = dom.GetObject(ID_SYSTEM_VARIABLES).Get('vWetter_aktuell').Value();
}

! ---
! ---
! ---

var src_type = src_val.Type();
if ( src_type == "string" ) {
  src_val = src_val.Replace( "'", "\\'" );
  src_val = "'" # src_val.UriEncode() # "'";
}

if( ! dom.GetObject("$this$") ) {
  WriteLine( "\nsrc_vardp: " # src_vardp );
! WriteLine( src_vardp # ": " # dom.GetObject(ID_SYSTEM_VARIABLES).Get(src_vardp).Value() );
  WriteLine( "src_type.: " # src_type );
  WriteLine( "src_val..: " # src_val # "\n" );
}

string log = "Prog: " # prog # " --- src_vardp: " # src_vardp # " (" # src_type # ") --- system.Exec() mit curl ...";
WriteLine(log); if(1||dom.GetObject("$this$")){dom.GetObject(ID_SYSTEM_VARIABLES).Get('log').State(log);}

! ---

! system.Exec( 
! WriteLine(
system.Exec(
  "curl --max-time 10 --retry 3 --retry-delay 20 --retry-max-time 60 \"http://" # target_ccu # "/" # source_ccu 
    # ".exe?x=dom.GetObject(ID_SYSTEM_VARIABLES).Get('" # src_vardp # "').State(" # src_val # ");\" -q &"
);

! ---

WriteLine("--- Ende ---");
Programm:
pSystemvariable_zu_CCU3_spiegeln.jpg
pSystemvariable_zu_CCU3_spiegeln

Bembi
Beiträge: 56
Registriert: 04.02.2015, 02:15
System: CCU und Access Point
Hat sich bedankt: 7 Mal
Danksagung erhalten: 9 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von Bembi » 27.09.2022, 01:26

Moin Zusammen,

danke für all die Vorschläge...
Wie ich sehe schreibt Ihr von der Quell CCU auf die Ziel CCU.
Geht natürlich auch....
Werde ich testen und berichten.

Ich hatte nur die Idee, dass sich die Ziel CCU den Wert von der Quell CCU holt (also lesen).
Das aus Lastverteilungsgründen.
Meine oben genanntes Beispiel funktioniert soweit (Hallo Welt kommt / kein Fehler).
Kommt eben nur kein Wert zurück.

Xel66
Beiträge: 14146
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 582 Mal
Danksagung erhalten: 1497 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von Xel66 » 27.09.2022, 06:33

Bembi hat geschrieben:
27.09.2022, 01:26
Ich hatte nur die Idee, dass sich die Ziel CCU den Wert von der Quell CCU holt (also lesen).
Das aus Lastverteilungsgründen.
Ganz schlechte Idee. Die schreibende CCU kann sowas nach dem Prinzip "fire and forget" absetzen. Eine auf eine Antwort wartende CCU (muss ja per Script gemacht werden), kann diese eben blockieren (zumindest bis zum hoffentlich angelegten Timeout). "Externe" Netzwerkkommunikationen sind immer mit einem aufmerksamen Auge zu betrachten. Und eine URL-Abfrage ist nicht wirklich eine Last für den aufrufenden Rechner. Es wird nur zum Problem, wenn er auf eine Antwort warten muss. Und der Zielrechner steckt es ganz locker weg.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

mademyday
Beiträge: 272
Registriert: 03.10.2014, 12:46
System: CCU
Wohnort: Enzkreis
Hat sich bedankt: 3 Mal
Danksagung erhalten: 43 Mal

Re: Daten von einer CCU3 auf eine andere übertragen

Beitrag von mademyday » 27.09.2022, 06:52

Bembi hat geschrieben:
27.09.2022, 01:26
Wie ich sehe schreibt Ihr von der Quell CCU auf die Ziel CCU.
da nur die Quell-CCU wissen kann, dass sich ein Wert geändert hat, macht das IMHO auch Sinn, dass diese das Spiegeln mit der Werte-Änderung/Aktualisierung triggert

Antworten

Zurück zu „HomeMatic IP mit CCU“