Inoffizielles LIVISI Gateway

  • Hallo LIVIS Community,


    in den vergangenen zwei Wochen habe ich an einem Gateway zum Fortbestand nach dem Abschalten der LIVIS Server (direkt aus dem Internet verfügbar) gearbeitet. Es ermöglicht im Gegensatz zur bestehenden SmartHome Zentrale die Möglichkeit dieses unabhängig zu erweitern, z.B. Apps, neue Authentifizierungsmethoden etc.


    Da ich eine Smarthome Zentrale 1 verwende, ist diese doch relativ langsam, daher habe ich einen Cache eingebaut, der einen sehr schnellen Abruf von Daten ermöglicht.


    Außerdem habe ich die Möglichkeit von Basic Authentifizierung, d.h., mittels Nutzernamen und Passwort, sowie OAuth2.0 hinzugefügt. OAuth2.0 bzw. OIDC ermöglicht es sich an der Oberfläche mittels Google, Auth0 oder Keycloak als Selfhosted Variante anzumelden.


    Falls ihr mehr erfahren wollt, könnt ihr gerne hier das Projekt abchecken. Die Installation ist sehr einfach und kann mittels Docker Compose vorgenommen werden. Das Docker-Compose findet ihr direkt im Readme.


    Schönes Wochenende

    Samuel


    P.S.: Ich habe leider immer noch keine vernünftige API Dokumentation von LIVISI erhalten, d.h., ich habe keine Ahnung, wie die anderen Geräte schnittstellentechnisch aussehen. Falls ihr helfen wollt, könnt ihr mich auf GitHub oder hier direkt kontaktieren.

  • Danke. Das habe ich schon gesehen. Das Problem ist, dass das für die Online Dienste von LIVISI gilt. Während der Implementierung bin ich einige Male über Lokale API vs. Online API gestolpert. Z.B. gibt es für /status online ein gateway:{}. In der lokalen Variante wurde das ausgespart. Man wird auch teilweise nicht wirklich schlau, was "das Objekt rekursiv bedeutet" oder welche Geräte gibt es noch und wie sind die Key Value Pairs im XML für Gen Z :D.

  • Vielen Dank erst einmal SamTV . Ich versuche gerade über Portainer über Stacks das ganze einzubinden.


    Die Zwei Container werden erstellt, allerdings habe ich das Problem das der Container "gateway" nicht gestartet wird:


    Doing db initialization

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: NotPresent', src/utils/connection.rs:21:44

    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace


  • Code
    2024-01-29T10:31:49.879835352Z Doing db initialization
    
    2024-01-29T10:31:50.766469075Z thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("invalid type: null, expected a string", line: 1, column: 265) }', src/api_lib/device.rs:93:14

    Ich komme leider nicht weiter. Passwort scheint laut Doku von der LIVISI API mein selbst erstelltes Passwort zu sein, das habe ich geändert. Ich komme aber leider nicht weiter. SamTV

  • Code
    2024-01-29T10:31:49.879835352Z Doing db initialization
    
    2024-01-29T10:31:50.766469075Z thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("invalid type: null, expected a string", line: 1, column: 265) }', src/api_lib/device.rs:93:14

    Ich komme leider nicht weiter. Passwort scheint laut Doku von der LIVISI API mein selbst erstelltes Passwort zu sein, das habe ich geändert. Ich komme aber leider nicht weiter. SamTV

    Hi. Das Problem sollte behoben sein. Es gab wohl mal wieder Änderungen an der API, die ich nicht mitbekommen habe und das Feld Name ist jetzt optional. Ebenfalls wurde der Websocket Port geändert. Beides ist jetzt hoffentlich behoben.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!