Daten von einer CCU3 auf eine andere übertragen
Moderator: Co-Administratoren
-
- Beiträge: 92
- Registriert: 04.02.2015, 02:15
- System: CCU und Access Point
- Wohnort: Bochum
- Hat sich bedankt: 7 Mal
- Danksagung erhalten: 14 Mal
Daten von einer CCU3 auf eine andere übertragen
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?
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?
1 x CCU3 mit aktuell 36 Geräten (HM, HmIP, HmIPW)
1 x CCU3 mit aktuell 66 Geräten (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen
1 x CCU3 mit aktuell 66 Geräten (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen
-
- Beiträge: 306
- Registriert: 19.01.2021, 14:53
- System: CCU
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 34 Mal
Re: Daten von einer CCU3 auf eine andere übertragen
nur einmalig , oder permanent ?
man könnte die werte via http request übertragen.
man könnte die werte via http request übertragen.
Wenn etwas schiefgehen kann, dann geht es schief (Murphy)
-
- Beiträge: 576
- Registriert: 17.04.2021, 17:12
- System: CCU
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 133 Mal
Re: Daten von einer CCU3 auf eine andere übertragen
Dort ging es um das gleiche Thema : viewtopic.php?f=26&t=68854&start=10
Gruß
Harry
Harry
-
- Beiträge: 92
- Registriert: 04.02.2015, 02:15
- System: CCU und Access Point
- Wohnort: Bochum
- Hat sich bedankt: 7 Mal
- Danksagung erhalten: 14 Mal
Re: Daten von einer CCU3 auf eine andere übertragen
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!");
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!");
1 x CCU3 mit aktuell 36 Geräten (HM, HmIP, HmIPW)
1 x CCU3 mit aktuell 66 Geräten (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen
1 x CCU3 mit aktuell 66 Geräten (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen
-
- Beiträge: 9750
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 706 Mal
- Danksagung erhalten: 1645 Mal
Re: Daten von einer CCU3 auf eine andere übertragen
Und unter Skript testen kommt "Hallo Welt"?Würde mich wundern. Das hier sollte einen Fehler werfen
Was soll die) und das Value?
Und dein wget hat zuviel "
Code: Alles auswählen
string url ='http://ccu3-176.domain.tld:8181/test.ex ... me").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 +++
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 +++
-
- Beiträge: 385
- Registriert: 19.06.2017, 09:24
- Hat sich bedankt: 20 Mal
- Danksagung erhalten: 67 Mal
Re: Daten von einer CCU3 auf eine andere übertragen
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:
Ohne CUxD müsste das mit System.Exec() ähnlich funktionieren.
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#"'");
-
- Beiträge: 276
- 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
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")
Skript:
Programm:
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 !
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 ---");
-
- Beiträge: 92
- Registriert: 04.02.2015, 02:15
- System: CCU und Access Point
- Wohnort: Bochum
- Hat sich bedankt: 7 Mal
- Danksagung erhalten: 14 Mal
Re: Daten von einer CCU3 auf eine andere übertragen
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.
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.
1 x CCU3 mit aktuell 36 Geräten (HM, HmIP, HmIPW)
1 x CCU3 mit aktuell 66 Geräten (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen
1 x CCU3 mit aktuell 66 Geräten (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen
-
- Beiträge: 14230
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 593 Mal
- Danksagung erhalten: 1513 Mal
Re: Daten von einer CCU3 auf eine andere übertragen
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
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
-
- Beiträge: 276
- 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
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