config.xml aus fb.switch zu config.json von Homebridge konvertieren – jetzt mit Aktionen

Macmissionar
Beiträge: 13
Registriert: Fr 25. Mai 2018, 22:33
Wohnort: Geldern
x 6

config.xml aus fb.switch zu config.json von Homebridge konvertieren – jetzt mit Aktionen

Ungelesener Beitrag von Macmissionar » Di 11. Sep 2018, 12:41

Für die, die einen Mac haben, kann folgendes kleines AppleScript verwendet werden, um seine config.xml von fb.switch in die benötigte config.json für Homebridge zu konvertieren. Einfach die XML in die Zwischenablage nehmen, das Script ausführen; der Code befindet sich wieder in der Zwischenablage und das ganze kann zum Beispiel sehr schnell über das Terminal und nano dann eingefügt werden.

Die Vorgehensweise ist also wie folgt:
1) Homebridge auf dem Pi stoppen: sudo /etc/init.d/homebridge stop
2) Die alte config.json löschen: sudo rm .homebridge/config.json
3) Die neue config.json (die gerade erzeugt wurde und in der Zwischenablage liegt) anlegen: sudo nano .homebridge/config.json
4) Im nano-Editor einfach die Zwischenablage mit Apfel+V einfügen. Dies kann ein wenig dauern, da die Textdatei Zeichen für Zeichen übermittelt wird …
5) Dann mit CTRL+O die Datei speichern und mit CTRL+X nano verlassen und mit sudo /etc/init.d/homebridge start Homebridge starten.

Einmal HomeKit aufrufen, damit die neuen Geräte eingelesen werden. Ab dann versteht Siri direkt alle Eure angelegten Aktionen! :D :D :D

Siri kann also die Aktion wie ein Gerät schalten – dank fb.switch. Es empfiehlt sich evtl., beliebige Ersetzungen vorzunehmen mit set dername to my austauschen("Drainagepumpe innen", "Drainagepumpe", dername), denn die echten Namen sind für Siri teilweise schwer zu verstehen.
So funktioniert meine Aktion "Pokerrunde 20 Minuten" gar nicht, da Siri immer der Meinung ist, er müßte seinen eigenen Timer stellen. Oder "Kinobeginn Stimmung" – da will er mir das städtische Kino empfehlen.

Code: Alles auswählen

########## Kleiner config.json-Konverter für FB.Switch und Homebridge, © 2017–2018 by Macmissionar
########## Nachfolgend die Werte innerhalb von "…" auf die eigene Umgebung anpassen
property grundpfad : "http://xxx.xxx.xxx.xxx/pfadzufb.switch/" # Grundpfad vom Server, z.B. Raspberry Pi Zero W
property milightip : "xxx.xxx.xxx.xxx" # IP-Adresse seiner Milight-Bridge
property fbbn : "bnfritzbox" # Benutzer-Name der FritzBox für die SmartHome-Funktionalität
property fbpw : "pwfritzbox" # Passwort der FritzBox für die SmartHome-Funktionalität
########## Ab hier nichts mehr ändern
property configjsonmuster : "{
	\"bridge\": {
		\"name\": \"Homebridge\",
		\"username\": \"CC:22:3D:E3:CE:30\",
		\"port\": 51826,
		\"pin\": \"031-45-154\"
	},
	\"platforms\": [###platforms###],
	\"accessories\": [###accessors###]
}"
property plattformen : "{
      \"platform\": \"Fritz!Box\",
      \"name\": \"FritzBox\",
      \"username\": \"" & fbbn & "\",
      \"password\": \"" & fbpw & "\",
      \"url\": \"http://fritz.box\",
      \"interval\": 60,
      \"options\": {
        \"strictSSL\": false
      }
    },    {
            \"platform\":\"MiLight\",
            \"name\":\"MiLight\",
            \"bridges\": [
              {
                \"ip_address\": \"" & milightip & "\",
                \"version\": \"v4\",
                \"lights\": {\"rgbw\": [\"Licht\"]},
                \"repeat\": 2,
                \"delay\": 33
              }
            ]
        }"

set configxml to get the clipboard # Zur Laufzeit also die komplette config.xml einfach in einem Texteditor öffnen, Apfel+A und Apfel+C …

set zeilen to paragraphs of configxml
set zz to 0
set geraetehttp to {}
repeat until zz is (count items of zeilen)
	set zz to zz + 1
	if item zz of zeilen begins with "    <device" then if item (zz + 3) of zeilen is in {"      <vendor>brennenstuhl</vendor>", "      <vendor>intertechno</vendor>", "      <vendor>fbdect200</vendor>", "      <vendor>url</vendor>"} then
		set dasgeraet to text 11 thru -6 of item (zz + 1) of zeilen
		set dername to text 13 thru -8 of item (zz + 2) of zeilen
		# Nachfolgend beliebige Ersetzungen vornehmen, damit die in FB.Switch definierten Gerätenamen besser oder anders zu sprechen bzw. für Siri zu verstehen sind.
		set dername to my austauschen("Außenbeleuchtung Weg", "Aussenbeleuchtung", dername)
		set dername to my austauschen("Heizung DeLonghi", "Heizung Badezimmer", dername)
		set dername to my austauschen("Eßzimmerschrank", "Vitrine", dername)
		set dername to my austauschen("Kirschbaumbeleuchtung", "Kirschbaum", dername)
		set dername to my austauschen("LED-Licht Terrasse", "Terrassenlicht", dername)
		set dername to my austauschen("Schild LED Terrasse", "Terrassenschild", dername)
		set dername to my austauschen("Drainagepumpe innen", "Drainagepumpe", dername)
		set dername to my austauschen("LED-Licht Couch", "Couchlicht", dername)
		set dername to my austauschen("LED-Licht Leinwand", "Leinwandlicht", dername)
		set dername to my austauschen("Lasershow", "Laser Show", dername)
		set end of geraetehttp to "		{
			\"accessory\": \"Http\",
			\"name\": \"" & dername & "\",
			\"switchHandling\": \"yes\",
			\"http_method\": \"GET\",
			\"on_url\": \"" & grundpfad & "index.php?action=on&type=device&id=" & dasgeraet & "\",
			\"off_url\": \"" & grundpfad & "index.php?action=off&type=device&id=" & dasgeraet & "\",
			\"status_url\": \"" & grundpfad & "index.php?action=status&type=device&id=" & dasgeraet & "\",
			\"service\": \"Switch\",
			\"brightnessHandling\": \"no\",
			\"brightness_url\": \"\",
			\"brightnesslvl_url\": \"\",
			\"sendimmediately\": \"\",
			\"username\": \"\",
			\"password\": \"\"
		}"
		set zz to zz + 7
	end if
	if item zz of zeilen begins with "    <action " then
		set dasgeraet to text 11 thru -6 of item (zz + 1) of zeilen
		set dername to text 13 thru -8 of item (zz + 2) of zeilen
		set end of geraetehttp to "		{
			\"accessory\": \"Http\",
			\"name\": \"" & dername & "\",
			\"switchHandling\": \"no\",
			\"http_method\": \"GET\",
			\"on_url\": \"" & grundpfad & "index.php?type=action&action=run&id=" & dasgeraet & "&async=true\",
			\"off_url\": \"" & grundpfad & "index.php?type=action&action=run&id=" & dasgeraet & "&async=true\",
			\"status_url\": \"" & grundpfad & "index.php?type=status&action=status&id=" & dasgeraet & "&async=true\",
			\"service\": \"Switch\",
			\"brightnessHandling\": \"no\",
			\"brightness_url\": \"\",
			\"brightnesslvl_url\": \"\",
			\"sendimmediately\": \"\",
			\"username\": \"\",
			\"password\": \"\"
		}"
	end if
end repeat
set my text item delimiters to ", "
set geraetehttp to geraetehttp as string
set configjsonneu to my austauschen("###platforms###", plattformen, configjsonmuster)
set configjsonneu to my austauschen("###accessors###", geraetehttp, configjsonneu)

set the clipboard to configjsonneu

on austauschen(suchen, ersetzen, urtext)
	set my text item delimiters to (suchen)
	tell me to set theList to (every text item of urtext)
	set my text item delimiters to (ersetzen)
	return theList as string
end austauschen
1 x
A Mac is like a Wigwam: No Windows, no Gates, no Backdoors, Peace, Harmony – and an Apache inside.

Benutzeravatar
mrberni
Administrator
Beiträge: 126
Registriert: Di 15. Mai 2018, 17:25
Wohnort: City 17
x 23
Kontaktdaten:

Re: config.xml aus fb.switch zu config.json von Homebridge konvertieren – jetzt mit Aktionen

Ungelesener Beitrag von mrberni » Di 11. Sep 2018, 12:49

Geiles Ding, danke das du dir soviel Mühe machst!

Gruß
0 x
We Do What We Must, Because We Can.

Antworten