homebridge Geräte werden nicht angezeigt

Begonnen von martin2day, 25 Januar 2017, 21:38:14

Vorheriges Thema - Nächstes Thema

martin2day

Guten Abend zusammen,

ich habe erst begonnen mit Fhem zu arbeiten, aber es ist wirklich genial was damit alles geht.
Derzeit möchte ich über die homepridge per home.app auf Fhem zugreifen können.

Die Installation habe ich soweit hin bekommen, und ich sehe auch die Standart Homebridge im Telefon, aber meine Geräte werde nicht angezeigt. Leider scheitern alle Versuche. Wäre schön wenn jemand eine zündende Idee hat.

Wenn ich homepridge starte wird folgendes angezeigt:

[size=8pt]homebridge
*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node>
*** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister>
[2017-01-25 21:24:44] Loaded plugin: homebridge-fhem
homebridge API version: 2.1
this homebridge-fhem 0.2.70
[2017-01-25 21:24:44] Registering platform 'homebridge-fhem.FHEM'
[2017-01-25 21:24:44] ---
[2017-01-25 21:24:45] Loaded plugin: homebridge-punt
homebridge API version: 2.1
[2017-01-25 21:24:45] Registering platform 'homebridge-punt.punt'
[2017-01-25 21:24:45] ---
[2017-01-25 21:24:45] Loaded config.json with 0 accessories and 1 platforms.
[2017-01-25 21:24:45] ---
[2017-01-25 21:24:45] Loading 1 platforms...
[2017-01-25 21:24:45] [punt] Initializing punt platform...
[2017-01-25 21:24:45] [punt] homebridge-punt v0.4.4
[2017-01-25 21:24:45] [punt] Gateway is running, url http://127.0.0.1:8083
[2017-01-25 21:24:45] Loading 0 accessories...
Scan this code with your HomeKit App on your iOS device to pair with Homebridge:
                       
    ┌────────────┐     
    │ 031-45-154 │     
    └────────────┘     
                       
[2017-01-25 21:24:45] [punt] Plugin - DidFinishLaunching
/usr/local/lib/node_modules/homebridge-punt/index.js:154
    newsAccessory.reachable = true;
    ^

ReferenceError: newsAccessory is not defined
    at PuntPlatform.addAccessory (/usr/local/lib/node_modules/homebridge-punt/index.js:154:5)
    at PuntPlatform.addAccessories (/usr/local/lib/node_modules/homebridge-punt/index.js:141:12)
    at PuntPlatform.<anonymous> (/usr/local/lib/node_modules/homebridge-punt/index.js:96:12)
    at emitNone (events.js:67:13)
    at API.emit (events.js:166:7)
    at Server.run (/usr/local/lib/node_modules/homebridge/lib/server.js:93:13)
    at module.exports (/usr/local/lib/node_modules/homebridge/lib/cli.js:40:10)
    at Object.<anonymous> (/usr/local/lib/node_modules/homebridge/bin/homebridge:17:22)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)[/size]


meine config-punt.json sieht wie folgt aus:
[size=8pt]{
"gateway": {
"name": "fhem",
"url": "127.0.0.1",
"port": "8083",
"auth": {"user": "fhemUSER", "password": "fhemPASS"},
"run": true,
"longpoll": true
},
"puntview": {
    "run": true,
    "port": "4040"
  },

  "simulator": {
    "run": true,
    "port": "4080"
  },

  "monitor": {
    "run": true,
    "port": "8081"
},
"accessories": [
{
"name": "myLampe1",
"service": "light"
}
]
}[/size]


config.json
[size=8pt]{
"bridge": {
"name": "Homebridge",
"username": "CC:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-154"
},
"platforms": [
{
"platform": "punt",
"name": "punt"
}
],
"accessories": []
}[/size]

Vielen Dank für die Hilfe

Gruß Martin

DeeSPe

#1
Was ist punt und was hat es mit FHEM zu tun!?
Du benötigst eine config.json für homebridge-fhem unter ~/.homebridge

Gruß
Dan

EDIT: https://wiki.fhem.de/wiki/Homebridge_einrichten#Einstellungen_f.C3.BCr_homebridge
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

martin2day

Hallo Dan,

danke der schnellen Hilfe. Jetzt erhalte ich die gewünschten Geräte. :-)

Weiterhin benötige ich Hilfe bei der Mapping Funktion.
Ich habe erfolgreich die Verbindung zu meine S7 aufgenommen.
Hier gibt es eine FEHM Variable die ich mit S7_DRead auslese: Licht.Flur.ist.ein - Zustand des Lichts abfragen
Des weiteren habe ich eine FHEM Variable die ich mit S7_DWrite schreibe: Licht.Flur.ein - Licht ein und aus schalten

Meine Überlegung war den Zustand Licht.Flur.ist zu nutzen und habe diesen in den Raum HomeKit eingetragen und dann habe ich noch den generisDeviceType light vergeben.

Wie sieht jetzt die Mappingfunktion aus um a: den Zustand Licht.Flur.ist.ein an Siri zu übergeben
                                                        und b: bei Drücken in der APP Licht.Flur.ein auf 1 zu setzen und damit an die SPS zu übergeben.

Gruß Martin

DeeSPe

Hmm, ich könnte beim Mapping helfen!

Aber: Ich kenne S7 überhaupt nicht! Deine Aussage/Anfrage verstehe ich ebenso wenig.
Was meinst Du mit "den Zustand Licht.Flur.ist.ein an Siri zu übergeben"? Geht es jetzt gerade um Siri oder HomeKit allgemein?
"bei Drücken in der APP Licht.Flur.ein auf 1 zu setzen und damit an die SPS zu übergeben" sagt mir leider auch nichts. Was soll mit auf "auf 1 setzen" erreicht werden und was ist SPS?

Ich denke die Hauptfrage Deines Themas ist auch beantwortet und die nachgeschobenen Fragen haben nichts mehr mit dem Thema "homebridge Geräte werden nicht angezeigt" zu tun.
Evtl. solltest Du Deine speziellen Fragen auch in den speziellen Unterforen stellen...

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

martin2day

Hallo Dan,

es geht rein um das Mapping.... :-)
Im Grunde muss du die S7 nicht kennen... wichtig war mir eigentlich nur zu erklären was gemacht werden soll.
Das habe ich aber anscheint nicht ganz richtig gemacht.

Ich versuche es noch einmal:

Die Logik ist bei mir in der SPS hinterlegt, dass soll auch so bleiben.
Von der SPS an FHEM bekomme ich ein Bit (State on/off) über den aktuellen Zustand des Lichtes im Flur. (Licht.Flur.ist.ein)
Ich kann von FHEM an die SPS ein Bit übertragen um das Licht einzuschalten. (Licht.Flur.ein)
Jetzt möchte ich über die Homebridge das Licht ein und ausschalten. Ich kann aber auch über einen Schalter das Licht verändern.

Mir ist jetzt am Ende nicht klar wie ich per Mapping Daten von FEHM an Home übergebe und wie ich Daten von Home an FEHM übergebe.
Zum anderen ist mir ebenfalls nicht klar welche Daten ich prinzipiell übergeben kann.

Um das auf das Beispiel zu übertragen.
Es soll der Inhalt der von der SPS kommenden Variable Licht.Flur.ist.ein:state (ON/OFF) von FHEM an home übergeben werden.
Weiterhin soll der Button von home für das Licht an die Variable Licht.Flur.ein:state (ON/OFF) an FHEM übergeben werden.

Gruß Martin

DeeSPe

Zitat von: martin2day am 26 Januar 2017, 16:09:11
Hallo Dan,

es geht rein um das Mapping.... :-)
Im Grunde muss du die S7 nicht kennen... wichtig war mir eigentlich nur zu erklären was gemacht werden soll.
Das habe ich aber anscheint nicht ganz richtig gemacht.

Ich versuche es noch einmal:

Die Logik ist bei mir in der SPS hinterlegt, dass soll auch so bleiben.
Von der SPS an FHEM bekomme ich ein Bit (State on/off) über den aktuellen Zustand des Lichtes im Flur. (Licht.Flur.ist.ein)
Ich kann von FHEM an die SPS ein Bit übertragen um das Licht einzuschalten. (Licht.Flur.ein)
Jetzt möchte ich über die Homebridge das Licht ein und ausschalten. Ich kann aber auch über einen Schalter das Licht verändern.

Mir ist jetzt am Ende nicht klar wie ich per Mapping Daten von FEHM an Home übergebe und wie ich Daten von Home an FEHM übergebe.
Zum anderen ist mir ebenfalls nicht klar welche Daten ich prinzipiell übergeben kann.

Um das auf das Beispiel zu übertragen.
Es soll der Inhalt der von der SPS kommenden Variable Licht.Flur.ist.ein:state (ON/OFF) von FHEM an home übergeben werden.
Weiterhin soll der Button von home für das Licht an die Variable Licht.Flur.ein:state (ON/OFF) an FHEM übergeben werden.

Gruß Martin

Wie das Mapping richtig zu handhaben ist steht auf github und auch hier im entsprechenden Forenbeitrag.

Ohne weitere Informationen zum Device (list) kann ich nur raten:
attr Licht.Flur.ein genericDeviceType switch
attr Licht.Flur.ein homebridgeMapping On=state,valueOn=1,cmdOn=state+1,cmdOff=state+0


Etwa so...

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

martin2day

Hallo Dan,

das habe ich mir schon mehrfach durchgelesen, aber leider nicht richtig verstanden :-)
Mit deinem Code erhalte ich schon mal mehr Funktion aber noch nicht 100% das was ich möchte.

[1/26/2017, 4:44:45 PM] [FHEM] Licht.Flur.ein-state valueOn/valueOff: value on mapped to 0
[1/26/2017, 4:44:45 PM] [FHEM]     caching: On: false (as boolean; from 'on')
  2017-01-26 16:44:47 caching: Licht.Flur.ein-state: off
[1/26/2017, 4:44:47 PM] [FHEM] Licht.Flur.ein-state valueOn/valueOff: value off mapped to 0
[1/26/2017, 4:44:47 PM] [FHEM]     caching: On: false (as boolean; from 'off')
[1/26/2017, 4:44:57 PM] [FHEM] Licht.Flur.ein: executing set cmd for On with value 1
[1/26/2017, 4:44:57 PM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20Licht.Flur.ein%20state%201&XHR=1
[1/26/2017, 4:44:59 PM] [FHEM] Licht.Flur.ein: executing set cmd for On with value 0
[1/26/2017, 4:44:59 PM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20Licht.Flur.ein%20state%200&XHR=1


Bei den ersten beiden Einträgen habe ich das Licht mit dem Schalter von der SPS eingeschaltet und wieder ausgeschlatet. In FHEM hat sich dadurch das Device Licht.Flur.ist.ein auf on verändert, aber in der Homeapp blieb das Symbol noch immer aus.

Bei den letzten beiden Einträgen habe ich den Knopf in der Homeapp an und wieder ausgemacht... FHEM erhält zumindest ein Telegramm. Das Device wird aber nicht verändert, kann es ja eigentlich auch nicht, weil es ja von der SPS ein anderes Signal bekommt. Ich vermute das du noch nicht ganz verstanden hast was ich umzusetzen versuche. ;-)

Ich versuche noch einmal zu erklären.
Ich möchte in der home.app nur ein Symbol haben.
Dieses Symbol soll den aktuellen Zustand der Lampe anzeigen und beim betätigen ändern.

Es muss von FHEM zu Homebridge das Device Licht.Flur.ist.ein übertragen werden.
Wenn die Lampe aus ist, dann muss der Button in der home.app das Licht einschalten. --> senden von on an das Device Licht.Flur.ein
Wenn die Lampe an ist, dann muss der Button in der home.app das Licht ausschalten. --> senden von off an das Device Licht.Flur.ein

Deshalb von mir die Frage wie ich von FHEM an homebridge sende und wie ich von homepridge an Fhem sende, weil ich hier ja mit unterschiedlichen Device arbeite...

Gruß Martin


DeeSPe

Warum machst Du es Dir so kompliziert über zwei Geräte zu gehen! Klar, geht auch.

Ich würde an Deiner Stelle ein dummy Device anlegen mit "setList state:on,off". Dieses dummy Device steuert dann per notify/DOIF die beiden "echten" Devices.
Dann wäre das homebridgeMapping für den dummy so:
attr <dummy> homebridgeMapping On=state,valueOn=on,cmdOn=state+on,cmdOff=state+off

Zur Info:
Die cmd Attribute (cmdOn,cmdOff,...) im Mapping sind HomeKit->FHEM Richtung.
Die value Attribute (valueOn,valueOff) sind FHEM->HomeKit Richtung.

Gruß
Dan

P.S. Bitte gar nicht erst angewöhnen hier alles in Screenshots zeigen zu wollen. Darin kann man so schlecht suchen und kopieren!
Bitte wie in den angepinnten Beiträgen erwähnt die entsprechenden list(s) der Device liefern.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

justme1968

für characteristics die den aktuellen und gewünschten zustand kombinieren kann man auch über das mapping keine getrennten devices konfigurieren. das geht nur wenn es für beides auch getrennte charakteristics gibt.

in deinem fall würde ich die beiden s7 devices über einen readingsProxy zusammenfassen und diesen dann in homebridge verwenden.

am besten legst du den readingsProxy auf das read device an und konfigurierst dir die set kommandos auf das write device über die setFn dazu.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

martin2day

Hallo,

@Dan: Ich muss das so machen, S7 kann man nur Lesen oder Schreiben. Von daher entstehe automatisch zwei Devices.
@André: Phu... das muss ich erst mal verdauen. :-) Das geht mir alles viel zu schnell. So schnell begreife ich das alles nicht.
Ich schau mir deinen Hinweiß genau an, auch wenn ich bisher nur die Hälfte verstanden habe... :-)

Gruß Martin der bisher nur PHP und S7 programmiert hat.

martin2day

#10
Guten Abend,

@Dan: Mit deiner Lösung erhalte ich erst einmal eine Kopplung die zw. FHEM und Home funktioniert. Man kann von beiden Seiten das Licht ein und ausschalten. Ich überlege gerade wie und ob man jetzt die Logik mittels notify übertragen kann...

@André: Ich habe mittels
define proxy readingsProxy Licht.Flur.ist.ein:state
ein Proxy angelegt. Wenn ich das Licht über den normalen Schalter ein und ausschalte dann macht das Proxy die Zustände nach.
Als nächstes wollte ich dieses Verhalten auf den home per Mapping übertaten, sozusagen um zu sehen das der Hinkanal funktioniert.
Dies bekomme ich aber nicht hin. Ich habe es wie bei der oben beschriebenen Lösung versucht.
So sieht der Code vom Proxy aus:
Internals:
   CFGFN
   DEF        Licht.Flur.ist.ein:state
   DEVICE     Licht.Flur.ist.ein
   NAME       proxy
   NOTIFYDEV  Licht.Flur.ist.ein,global
   NR         820
   NTFY_ORDER 50-proxy
   READING    state
   STATE      on
   TYPE       readingsProxy
   Content:
     Licht.Flur.ist.ein 1
   Readings:
     2017-01-26 20:27:26   state           on
Attributes:
   genericDeviceType light
   homebridgeMapping On=state,valueOn=on
   room       Homekit


Bis zum Punkt setFn bin ich gar nicht gekommen... :-)

Gruß Martin

justme1968

damit die nötigen events erzeugt werden musst du im readingsProxy device noch event-on-change-reading auf state setzen.

der readingsProxy braucht noch eine setList mit on und off.

als setFn sollte etwas in der art funktionieren: { if( $CMD eq 'on' ) {fhem('set ...')} else {fhem('set ...') }; return undef }

gruss
  andre

ps: noch eine variante wäre das homebridgeMapping direkt im read device und je ein cmdalias zum ein- und ausschalten der das kommando dann auf das zugehörige write device umlenkt. das wäre dann effizienter wenn es viele schalter sind.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

martin2day

Guten Abend,

ich die gewünschte Funktion umsetzen können.
Folgende Lösung habe ich gefunden.
Ich habe ein Dummy erstellt:
Internals:
   NAME       Licht
   NR         28
   STATE      off
   TYPE       dummy
   Readings:
     2017-01-27 19:09:44   state           off
Attributes:
   genericDeviceType light
   homebridgeMapping On=state,valueOn=on,cmdOn=on,cmdOff=off
   room       Homekit
   setList    state:on,off
   webCmd     on : off


Dieser ist wie zu erkennen mit der Homebridge gekoppelt.

Per notify Licht.Flur.ist.ein set Licht $EVENT schreibe ich den Zustand vom Licht auf den Dummy und damit wird dieser auch im homeapp sofort übertragen.
Wenn ich jetzt im homeapp den Kopf drücke, wird der Dummy zunächst verändert, dann aber von dem notify wieder überschrieben.

Diesen Sachverhalt habe ich mir dann einfach zu nutzen gemacht.
Mit dem notify Licht {
fhem ("set Licht.Flur.ein on") if ((Value("Licht.Flur.ist.ein") eq "off" and Value("Licht") eq "on") or (Value("Licht.Flur.ist.ein") eq "on" and Value("Licht") eq "off"));;
fhem ("set Licht.Flur.ein off") if ((Value("Licht.Flur.ist.ein") eq "off" and Value("Licht") eq "off") or (Value("Licht.Flur.ist.ein") eq "on" and Value("Licht") eq "on"));;
}

sende ich dann das Signal an die SPS um das Licht zu ändern.

Funktioniert super.
Dankeschön an die Helfer.

Gruß Martin