Smart Friends Bridge Addon

Alexa noch nicht integriert.
Welches add on für alexa
Position sehe ich in HA

Hi tom _smarthome
wennich mit alexa die rollo schließe dauert es lange bis ich die position sehe oder ich drücke eine taste auf meinem dashbord dann sind sie zeitnah da

wenni ch direkt im Ha die befehle auslöse sehe ich es sofort

Der SmartFriends-Hub sendet die Position nur, wenn die Rollläden angehalten haben.

Kann dies automatisiert werden
oder muss am ende der befehl über alexa rollo stop kommen

Wenn du das scan_interval einstellst, wird es automatisch aktualisiert.

Hi all,
perhaps someone has a tip for me.
I’ve a new installation HA on a Intel NUC , which is connected to a Fritzbox 7590.
I try to integrate my Smartfriends-Box into Homeassistant. I followed the installation steps from GimpArm and I can see the Smartfriends-Bridge in the Add-on list.
Smartfriends-Bridge is running. In the configuration the port 5001 is listed.
But the attempt to call http://homeassistant:5001/list “ fails due to “web site can’t be reached.
Any ideas to solve this issue?
Thanx in advance.

The url isn’t literally http://homeassistant:5001/list it is what ever your home assistant’s local address is with port 5001 and /list. Try the IP address if you don’t have local names assigned. The start up log of the HA server says how to access it. If you don’t know how to view that, then try to find it’s IP address in the list of devices under Network on your Fritzbox. So it might be like http://172.16.156.62:5001/list

Hi GimpArm, you‘re great.
This was the failure. Now it works, I can connect my shutters.
Thank you.

Hello together,
I’ve integrated now my Schellenberg shutter into HA via Smartfriends-Bridge.
In dashboard is a cover card with following content:

Its a running system. The buttons UP, DOWN and STOP work perfect.

Now the information of the position is missing in this card. A simple text information “0%”, “100%” for UP and DOWN status or a value between 0 and 100 would be fine.
(Next expert level would be an adaptetd symbol…)

The list command http://<IP_of_HA>:5001/list shows the cover data:

   {
        "id": 9843,
        "name": "Rolladen Büro",
        "room": "Philipp Büro",
        "gatewayDevice": "SmartFriendsBox",
        "kind": "RollingShutter",
        "manufacturer": "Alfred Schellenberg GmbH",
        "state": "Stop",
        "devices": {
            "rollingShutter": {
                "Id": 8317,
                "description": "SchellenbergRolloDrive",
                "commands": {
                    "Stop": 0,
                    "Up": 1,
                    "Down": 2
                },
                "currentValue": "Stop"
            },
            "position": {
                "Id": 5065,
                "description": "SchellenbergPosition",
                "max": 100,
                "min": 0,
                "precision": 0,
                "step": 1,
                "currentValue": 0
            }
        }
    },

Am I right that the “position” data is available?

In the configuration.yaml the shutter is defined as follows:

shell_command:
    shutter_up:        "curl http://192.168.188.200:5001/set/{{ device_id }}/rollingShutter/up"
    shutter_down:      "curl http://192.168.188.200:5001/set/{{ device_id }}/rollingShutter/down"
    shutter_stop:      "curl http://192.168.188.200:5001/set/{{ device_id }}/rollingShutter/stop"
    shutter_position:  "curl http://192.168.188.200:5001/get/{{ device_id }}/position" #/{{ 100 - position }}"
    switch_on:         "curl http://192.168.188.200:5001/set/{{ device_id }}/on"
    switch_off:        "curl http://192.168.188.200:5001/set/{{ device_id }}/off"
    switch_toggle:     "curl http://192.168.188.200:5001/set/{{ device_id }}/toggle"

sensor:
  - platform: command_line
    name: shutter_position
    command: "curl http://192.168.188.200:5001/get/{{ device_id }}/position"
    unit_of_measurement: "%"
    scan_interval: 5
    value_template: '{{ 100 - value_json.currentValue }}'

cover:
  - platform: template
    covers:
      shutter_buero:
        friendly_name: "Rolladen Büro"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 9843
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 9843
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 9843
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 5065
            position: "{{ position }}"

This configuration is working fine to control the shutter.
But I’ve no idea, how to add the position information into the dashboard card.

Has someone a similar example?

Greetings

The device ID is always the main ID on the fist level of the json object. so for set_cover_position the ID is still 9843 like the others.

The rest sensor for fetching the current shutter position is also wrong. You cannot make these as templates which is why you need to name them individually. Your command needs to include the actual device ID so it should be
command: "curl http://192.168.188.200:5001/get/9843/position"
The reason for this is because these are web requests that pull the data at and interval which is set by the scan_interval in your case it will check every 5 seconds.

FYI, I know it seems like it’s a lot to setup but the MQTT implementation is easier (for covers since I did all the hard work for you) and it reacts faster to changes.

As for display, I think the current way HA displays cover position in the entities card isn’t very good. I like to pair it with the HACS slider-entity-row GitHub - thomasloven/lovelace-slider-entity-row: 🔹 Add sliders to entity cards So mine looks like this
image

type: entities
entities:
  - entity: cover.livingroom_blinds_window
    name: Window Blinds
  - type: custom:slider-entity-row
    entity: cover.livingroom_blinds_window
    name: ''
    full_row: true
    step: 1
  - entity: cover.livingroom_blinds_door
    name: Door Blinds
  - type: custom:slider-entity-row
    entity: cover.livingroom_blinds_door
    name: ''
    full_row: true
    step: 1

Hi GimpArm,
thanks for correction the mistakes.
Meanwhile I tried to change the control to MQTT.
MQTT broker is installed, also MQTT Explorer and basically Smartfriends-Bridge.
Now I tried to integrate my Schellenberg Rollodrive 65 Premium shutters.
Did I understand right, that you have a running configuration for this shutter type via MQTT?
I can find deviceMap.json and typeTemplate.json in smartfriends2mqtt. I edited all these files, but nothing happens. I also can’t see a signal in MQTT Explorer.
It seems, I’m lost.

The default template file is probably all you need and I don’t recommend editing it unless you know what you’re doing. You just need to list the device Ids and their type like in the example documentation. After editing the files you need to restart the add-on.

{
  "Id": 13103,
  "Type": "cover",
  "Class": "shutter"
}

The reason for the file editing is because I have no capacity or interest in making a config UI but something has to map the devices to their HA type. I could guess on their types based on some rules and probably get the most common devices right like the Rolladen but again it’s not that hard to edit json files.

Hi GimpArm,
after deleting and rewriting the device-file, the MQTT signals now arrive. The controls now work. However, I noticed that the position states are not quite reliable. Sometimes one or the other shutter is forgotten and only updates itself later. But basically the control works.

Hallo zusammen,

ich bin neu und kenne mich mit Home Assistant noch nicht wirklich aus.
Aber ich will meine Rolläden (die aktuell mit der SmartFriendsBox verbunden sind und darüber auch gesteuert werden) auch in Home Assistant anzeigen und diese steuern.

Jedenfalls komme ich hier mit der Anleitung relativ gut zurecht. Ich habe mir den Codeschnipsel von oben kopiert und für mein System angepasst. Dabei gibt es folgende Fehlermeldung: (siehe screenshot)

Diese Meldung kommt bei allen “shell_Command…” Zeilen. Was habe ich falsch gemacht, bzw. haben sich die Befehle geändert? (ich kann HA nicht neustarten, da “Konfiguration prüfen” unter “Entwirklerwerkzeuge” nicht aufhört zu laden…)

Hallo @Vitaminc184,

deine Konfiguration schaut soweit gut aus. Hast du in deiner configuration.yaml auch die verschiedenen shell-commands definiert? Das ist natürlich notwendig, damit du diese aufrufen kannst.
Ich habe dir mal ein Screenshot mit einem Beispiel aus meiner Konfiguration angehangen (ohne Positionssensoren).

Ich hoffe ich konnte dir weiterhelfen!

# Configuration für die Smart Friends Box (Schellenberg Rolläden)
shell_command:
  shutter_up: "curl http://192.168.1.200:5001/set/{{ device_id }}/rollingShutter/up"
  shutter_down: "curl http://192.168.1.200:5001/set/{{ device_id }}/rollingShutter/down"
  shutter_stop: "curl http://192.168.1.200:5001/set/{{ device_id }}/rollingShutter/stop"
  shutter_position: "curl http://192.168.1.200:5001/set/{{ device_id }}/position/{{ 100 - position }}"

command_line:
  - sensor:
      name: shutter_position_rollo1
      command: "curl http://192.168.1.200:5001/get/18214/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo2
      command: "curl http://192.168.1.200:5001/get/17316/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo3
      command: "curl http://192.168.1.200:5001/get/14784/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo4
      command: "curl http://192.168.1.200:5001/get/445/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo5
      command: "curl http://192.168.1.200:5001/get/8655/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo6
      command: "curl http://192.168.1.200:5001/get/13891/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo7
      command: "curl http://192.168.1.200:5001/get/15337/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo8
      command: "curl http://192.168.1.200:5001/get/11749/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo9
      command: "curl http://192.168.1.200:5001/get/932/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"
  - sensor:
      name: shutter_position_rollo10
      command: "curl http://192.168.1.200:5001/get/19584/position"
      unit_of_measurement: "%"
      scan_interval: 5
      value_template: "{{ 100 - value_json.currentValue }}"

cover:
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Rollo Kinderzimmer"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo1') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 18214
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 18214
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 18214
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 18214
            position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Rollo Bad"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo2') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 17316
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 17316
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 17316
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 17316
            position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Rollo Ankleide"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo3') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 14784
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 14784
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 14784
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 14784
            position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Rollo Schlafzimmer"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo4') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 445
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 445
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 445
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 445
            position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Rollo Garten"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo5') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 8655
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 8655
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 8655
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 8655
            position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Rollo Fenster"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo6') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 13891
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 13891
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 13891
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 13891
            position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Rollo Esszimmer"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo7') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 15337
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 15337
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 15337
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 15337
            position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
      friendly_name: "Rollo Küche"
      device_class: shutter
      position_template: "{{ states('sensor.shutter_position_rollo8') }}"
      open_cover:
        service: shell_command.shutter_up
        data:
          device_id: 11749
      close_cover:
        service: shell_command.shutter_down
        data:
          device_id: 11749
      stop_cover:
        service: shell_command.shutter_stop
        data:
          device_id: 11749
      set_cover_position:
        service: shell_command.shutter_position
        data_template:
          device_id: 11749
          position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Markise"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo9') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 932
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 932
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 932
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 932
            position: "{{ position }}"
  - platform: template
    covers:
      shutter_office:
        friendly_name: "Rollo Flur"
        device_class: shutter
        position_template: "{{ states('sensor.shutter_position_rollo10') }}"
        open_cover:
          service: shell_command.shutter_up
          data:
            device_id: 19584
        close_cover:
          service: shell_command.shutter_down
          data:
            device_id: 19584
        stop_cover:
          service: shell_command.shutter_stop
          data:
            device_id: 19584
        set_cover_position:
          service: shell_command.shutter_position
          data_template:
            device_id: 19584
            position: "{{ position }}"

Das ist der ganze Code (ja, ich habe das oben auch so definiert).

Ich habe vorhin meine Smart Friends Box umgestellt (und dabei für ca. 2 Minuten vom Strom getrennt).
Wenn ich die Box jetzt wieder in Strom anstecke passiert nix. Bei der Box blinken oder leuchten keine Lichter mehr - hat das was mit meinen Einstellungen zu tun? - wie kann ich die wieder zum laufen bringen? (Die bleibt aus - der Router sagt dass die Box aus ist und in der App kann ich auch nicht mehr auf die Box zugreifen)

@Vitaminc184 Das sollte erstmal nichts mit den Einstellungen zu tun haben. Kannst ja mal probieren das Netzteil zu wechseln…
Es schaut so aus, als wäre deine Box aus irgendeinem Grund kaputtgegangen.

Deine Konfiguration unterscheidet sich nur von meiner, indem du für jedes Rollo einen neues Template erstellt hast. Das könntest du noch versuchen zu ändern…

Neues (Original) Netzteil bestellt - und dann gingen die Lichter an der Smart Friends Box wieder an :smiley:

Aber wenn ich den oben geschriebenen Code in Configuration.yaml im Home Assistent reinstelle und auf “Konfiguration Prüfen” klicke (was ja vor einem Neustart wichtig ist), dann prüft er ewig (und wird selbst nach 30 Minuten nicht fertig!) So sieht es aus:

Sobald ich diesen Code rausnehme aus der Configuration.yaml, dann funktioniert das wieder ohne Probleme und folgendes Ergebnis wird in unter einer Sekunde angezeigt, dass alles ok ist und ein Neustart ohne Probleme durchgeführt werden kann.

Was hält also in meinem oberen Code die Configuration.yaml ab zu prüfen?
(Kann ich diesen Code auch in eine Seperate Datei speichern (z.B. “Schellenberg.yaml”) und in der Configuration.yaml darauf verweisen, dass er sich die codes aus “Schellenberg.yaml” holen soll?)

Da es bei mir immer noch nicht geht (siehe vorhergehender Post), habe ich mich mal etwas eingearbeitet und wollte die Aktionen manuel testen.
Ich habe mir ein Rollo rausgesucht und habe es mal versucht über den Browser zu steuern bzw. abzufragen:
Ich habe beim beschlossenen Rollo folgende Anfrage gestellt:
[LinkdesHomeassistant]/get/13891/position
Als Antwort habe ich die Daten bekommen, u.A. dass das Rollo bei 100 ist (currentValue).

Dann habe ich das Rollo mit der Smart Friends APP auf dem Smartphone auf 90% gefahren. Das Rollo ging ein stück nach oben. In der App wird mir angezeigt, dass das Rollo bei 90% ist.
Auf der Seite ([LinkdesHomeassistant]/get/13891/position) wird immernoch 100 angezeigt!
Dann habe ich folgenden Befehl im Browser eingegeben:

[LinkdesHomeassistant]/set/13891/position/60
Als Bestätigung kam da auf dem Browser: “true”.
Im Protokoll im HA im Addon (SmartFriends Bridge) wird folgendes angezeigt:
Info: SmartFriends.Host.Controllers.SmartFriendsController[0]
Set: 13891: 60
[LinkdesHomeassistant]/get/13891/position zeigt auch an, dass “currentValue:” bei 60 ist.
Nur das Rollo ist weiterhin bei 90 % (hat sich garnicht bewegt). Auch in der App wird angezeigt, dass das Rollo bei 90% ist.

Dann habe ich das Rollo mit der App auf 100% geschlossen. Das Rollo bewegt sich und schließt auch physikalisch. Jetzt wird in der App angezeigt, dass das Rollo bei 100% ist.

[LinkdesHomeassistant]/get/13891/position sagt aber, dass es immernoch auf 60 ist!

Ich habe es mal die Nacht über so stehen lassen und gesehen, dass sich auch bei der erneuten Abfrage am nächsten Morgen nichts geändert hat!
Erst als ich in Homeassistant das AddOn “SmartFriends Bridge” neugestartet habe, hat sich auch der Wert bei [LinkdesHomeassistant]/get/13891/position auf 100 aktualisiert!

Woran liegt das bzw. warum kann ich die Rollos nicht über den Browser steuern bzw. es werden keine Werte (z.B. Zustand der Rollos) aktualisiert (erst nach Neustart)? (Ich habe die neueren Rolläden “Bidirektional”)
(Zugriff auf die SFB 1 sollte ich ja haben [Zugangsdaten wohl richtig in der Konfiguration?!], sonst würde ich ja nix sehen!)

[LinkdesHomeassistant] beinhaltet die IP des HomeAssistant + “:5001”