Rolladen in SPS gestreut in FHEM und HomeKit integrieren

Begonnen von martin2day, 05 Februar 2017, 13:18:15

Vorheriges Thema - Nächstes Thema

martin2day

Hallo zusammen,

der Martin hat mal wieder :-) eine Problem wo er um Hilfe bittet.

Vorerst möchte ich kurz erklären was bereits umgesetzt ist:
Ich habe in der SPS die vollständige automatische Rolladen bzw. Raffstoresteuerung abgebildet.
Der Autoren an sich kennen nur auf und zu. Da mir dies aber zu wenig war, habe ich mittels definiertem zyklischen Aufruf eine Positionierung nachgebildet. Bei den Rolladen gib es so einen Istwert von 0-100%, bei den Raffstores gibt es ebenfalls eine Höhenangabe von 0-100% aber auch noch einen Neigung von derzeit 0-18 (90° bis -90°). Dies funktioniert wunderbar.
Die Grundfunktion war ein Öffnen und Schließen nach den Betriebsarten (Automatik, Haus leer, Schlafen)
Über die Zeit der CPU errechne ich Sonnenhöhe und Sonnenwinkel und weiß damit über die Lage des Hauses welches Fenster aktuell überhaupt im möglichen Bereich der Sonne liegt.
Weiterhin nutze ich die Innentempertaursensoren und den Außentemperatursensor sowie einen Helligkeitssensor um darüber auch mit der oben genannten Erkennungen die Beschattung bzw. im Winter das Heizen mit der Sonne zu manipulieren.
Auch dies funktioniert sehr gut.

Jetzt habe ich dank FHEM schon die ersten Optimierungen machen können. Derzeit habe ich eine gewissen Totzeit Programmiert um nicht sofort bei einer Wolke Hecktisch zu reagieren. Mit FHEM und der Wettervorhersage kann ich nun in die Zukunft sehen und weiß das es z.B. sehr warm wird und kann eher reagieren... :-)

Kommen wir nun zu der eigentliche Frage:
Nun möchte ich meine Rolladen und Raffstores auch in FHEM und natürlich in HomeKit abbilden.
Wichtigste Funktion wäre hier ein aktivieren bzw. verhindern der Automatik. Das ist kein Problem.
Natürlich möchte ich aber auch den aktuellen Ist-Wert visualisieren und bei Änderung in FHEM oder HomeKit auch umsetzen.

Hier beginnt es für mich schwer zu werden.
Wie mache ich das am Besten?
Ich bekomme von der SPS einzelne Istwerte/Istzustände und kann an die SPS Sollwerte/Sollzustände senden.
Diese liegen alle einzeln vor...

Ich würde gern herausfinden welche Characteristic jedes einzelne HomeKit genericDeviceTyp überhaupt anbietet.
Dazu möchte ich die Datei HomeKitTypes.js auslesen, aber ich bin zu d**f diese zu finden. :-)

Ich bin für Hilfe sehr dankbar.
Einen schönen Sonntag.

Gruß Martin

Thorsten Pferdekaemper

Hi,
zu dem ganzen HomeKit-Kram kann ich nichts sagen. Ich bin auch nicht gerade Apple-Freund, weil alles, was ich von denen bisher in die Finger bekommen habe, war für mich schlichtweg eine Katastrophe was die Bedienbarkeit angeht. Beim IPad muss ich immer meine Freundin fragen wie es weitergeht...
Mit FHEM kann Dir aber vielleicht geholfen werden. Du schreibst, dass da schon Istwerte gesendet werden. Wie sieht das aus? Gibt es da ein Device dazu in FHEM? ...und was genau willst Du damit machen?
(Wenn es nur um die HomeKit-Integration geht, dann hilft möglicherweise das hier: https://wiki.fhem.de/wiki/Homebridge_einrichten. Dort sind auch Foren-Threads verlinkt, die vielleicht den Weg ins richtige Unterforum weisen.)
Gruß,
   Thorsten
FUIP

martin2day

Thorsten vielen Dank für deine Antwort.
Ich habe begonnen ein Test-device anzulegen um erst einmal die hinterlegte Funktion von "blind" zu verstehen.
Ich habe dazu zwei dummy "soll" und "ist" angelegt und gespielt.
Als mapping habe ich verwendet: CurrentPosition=ist:state, TargetPosition=soll:state

Ich verändere auf dem iPad die Höhe und es wird an Fhem auch der soll - Wert verändert.
Der Rolladen schreibt öffnet/schließt. Wenn ich mittels Fhem den ist Wert auf den eingestellte Wert per set nachführe steht der Rolladen auf dem entsprechenden Wert. Das passt soweit.

Verändere ich den ist - Wert in Fhem, dann meldet der Rolladen auch das er verfahren wird.... wenn ich dann per Fhem auch noch den soll - Wert nachführe erhalte ich auch den gewünschten Wert. Das sollte mit meiner SPS Logik funktionieren.

Einzig was mich noch stört:
Der von HomeKit übertragen soll - Wert hat vor dem eigentlichen Wert immer ein pct stehen also z.B. pct 56.
Homebridge meldet hier auch einen Fehler:
[2/5/2017, 4:23:31 PM] [FHEM]   value: pct 40
[2/5/2017, 4:23:31 PM] [FHEM] soll-state not a number: pct 40
[2/5/2017, 4:23:31 PM] [FHEM]   value:


Wie muss man hier das mapping anpassen um nur die Ziffern zu erhalten?

Vielen Dank
Martin

Thorsten Pferdekaemper

Ok, das ist mir jetzt zu apfelig. Falls die Problematik ohne Apple darstellbar ist, bin ich wieder dabei. Ansonsten ist mir das zu speziell.
Gruß,
   Thorsten
FUIP

justme1968

wenn dein kommando nicht pct heisst musst du im mapping das tatsächliche kommando angeben cmd=<cmd>. wenn du nur den zahlenwert setzen willst ohne kommendo musst du cmd auf leer setzen: cmd=+

warum arbeitest du mit zwei dummys statt mit nur einem? das ist effizienter. statt state verwendest du dann zwei readings. neben setList solltest du dir dann auch noch readingList anschauen.

im wiki ist ein modul ROLLO beschrieben das dir vielleicht auch hilft.

wo HomeKitTypes.js zu findest ist steht im ersten betrag des homekit thread, im homekit-fhem readme, in diversen threads und auch google findet das file sofort.

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

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

martin2day

#5
Andre,

danke für deine Antwort.
Ich nutze derzeit zwei Dummys, weil ich ja dann später eh zwei Devices haben die von der SPS kommen bzw. an die SPS geschickt werden.
Das lässt sich nicht vermeiden.

So wie das ROLLO beschrieben, so in etwa habe ich das ganze in der SPS auch umgesetzt. Bei dem Raffstore war es noch eine Nummer schwerer, weil man ja hier den Öffnungswinkel noch mit beachten muss. Man hat aber auch nur einen Motor für hoch und runter...

Leider verstehe ich nicht ganz was du mit:
Zitatwenn dein kommando nicht pct heisst musst du im mapping das tatsächliche kommando angeben cmd=<cmd>. wenn du nur den zahlenwert setzen willst ohne kommendo musst du cmd auf leer setzen: cmd=+
meinst.

Ich habe als mapping:CurrentPosition=ist:state, TargetPosition=soll:state

Ich erhalte jetzt von der Apple App den Rückgabewert der in soll:state geschrieben wird von "pct 55".
Ich möchte hier aber nur eine 55 stehen haben.

Und natürlich habe ich zuerst Google zur HomeKitTypes.js befragt, aber:
https://github.com/KhaosT/HAP-NodeJS/blob/master/lib/gen/HomeKitTypes.js
Hier finde ich kein "blind".... :-(

Gruß Martin

justme1968

was genau ist nicht klar?

bitte lies noch mal was ich geschrieben habe:
Zitatwenn dein kommando nicht pct heisst musst du im mapping das tatsächliche kommando angeben cmd=<cmd>. wenn du nur den zahlenwert setzen willst ohne kommendo musst du cmd auf leer setzen: cmd=+

d.h. du musst in das mapping für TargetPosition noch ein cmd=+ einbauen.

gruss
  andre

ps: das komma am ende des mappings für CurrentPosition ist überflüssig.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

martin2day

Andre,

also ich habe mir das nun alles mehrfach durchgelesen und habe es immer noch nicht verstanden warum es jetzt funktioniert.
Ich habe auch deinen sehr guten Beitrag hier: https://forum.fhem.de/index.php/topic,48558.0.html gelesen.

Ich denke ich schlafe erst einmal darüber und schau mir das morgen früh noch einmal an.
Für alle denen es auch so geht hänge ich dennoch die Lösung mit an.
CurrentPosition=ist:state TargetPosition=soll:state,cmd=+,minStep=10

Gruß Martin

martin2day

Guten Abend,

wie Andre gesagt hat, habe ich nun ein Dummy erstellt um den Rolladen abzubilden.

genericDeviceType blind
homebridgeMapping clear CurrentPosition=ReadingsVal(Raffstore_Sofa,"state","") TargetPosition=ReadingsVal(Raffstore_Sofa,"soll",""),cmd=+,minStep=10
readingList state soll
room Beschattung,Homekit
setList state soll:slider,0,10,100
webCmd soll


Somit habe ich den Istwert als state festgelegt und kann über den Slider den Sollwert verändern.
Das Mapping funktioniert aber nicht. Kann mir bitte jemand sagen was ich hier falsch mache?

Gruß Martin

martin2day

Guten Morgen,

könnte mir bitte jemand erklären, wie ich mapping auf einen UserReading Wert zugreifen kann?
Ich verstehe die Syntax irgendwie leider nicht.

Ich habe ein Dummy angelegt. OK
Ich habe per readingList state soll hinzugefügt. OK
Mit setList state soll:slider,0,10,100 erhalte ich im DeviceOverview die Zahl für State und einen Silver für Soll. OK

Jetzt möchte ich für den Rolladen state auf die CurrentPosition und soll auf den TargetPostion mappen, aber alle Versuche enden darin, dass komischer Weiße immer der state Wert auf TargetPostion landet.
Wäre bitte einer so lieb und erklärt mir das mal bitte :-)
Mit der Suche für UserReading finde ich sehr viel, aber nur zur Definition... nicht wie ich es auslesen kann.
Ich habe hier eher ein Grundsätzliches Problem würde ich sagen. Irgend etwas habe ich nicht verstanden... ;-)

Mein Mapping schaut so aus:
CurrentPosition=userReadings Raffstore_Sofa:state TargetPosition=userReadings Raffstore_Sofa:soll

Gruß Martin

martin2day

Hallo,

da ich mit dem Teil UserReadings nicht wirklich weiter komme, sicher bin ich da einfach zu d**f zu, habe ich eine mir verständliche Lösung gesucht und auch gefunden. :-)
Für die Kommunikation mit der SPS gibt es 2 Device
- Raffstore_Sofa (S7_ARead) - aktueller Istwert vom Rolladen

genericDeviceType        blind
homebridgeMapping     CurrentPosition=Raffstore_Sofa:state TargetPosition=Raffstore_Sofa_soll:state, cmd=+, minStep=10


- S7Raffstore_Sofa_soll (S7_AWrite)  - Sollwert und Startbefehl zur SPS
Für die Funktion ist noch ein Dummy Raffstore_Sofa_soll erforderlich.

Als erstes wird per notify die aktuelle Lage auf den Sollwert geschrieben. Raffstore_Sofa set Raffstore_Sofa_soll $EVTPART0 Das benötige ich, wenn ich den Rolladen mit der SPS verfahre. So wird dies in homekit aktualisiert.

Für die Gegenrichtung gibt es ein weiteres notify.
Raffstore_Sofa_soll {
if ( Value("Raffstore_Sofa") eq Value("Raffstore_Sofa_soll") )
  { fhem ("set S7Raffstore_Sofa_soll 11") } else
  { fhem ("set S7Raffstore_Sofa_soll $EVENT; sleep 5; set S7Raffstore_Sofa_soll 0") }
}


Durch die Manipulation weiter oben erhalte ich so die gewünschte Arbeitsweiße.
Verfahre ich den Rolladen von der SPS in Automatik, dann wird Lagewert in 10% Schritten angezeigt.
Verändere ich den Sollwert in FHEM bzw. homekit dann wird der Sollwert für 5s an die SPS gesendet.

Gruß Martin