[10_SOMFY.pm] Rolling Code Verlust bei FHEM Neustart ohne aktuelle fhem.save

Begonnen von Ellert, 12 Juli 2018, 16:13:42

Vorheriges Thema - Nächstes Thema

Ellert

Wenn der FHEM-Server gestartet wird und die fhem.save Datei nicht aktuell ist, dann kann es sein, dass ein veralteter Rolling Code in einem SOMFY Device gespeichert wird. Ein veralteter Rolling Code führt dazu, dass die Somfy Hardware die empfangenen Befehle nicht ausführt, siehe auch https://wiki.fhem.de/wiki/SOMFY#Bekannte_Probleme

FHEM stellt PERL-Funktionen bereit (setKeyValue, getKeyValue), die es ermöglichen einzelne Werte in einer separaten Datei zu speichern und zu lesen.
Das folgende DOIF nutzt diese Funktionen, um bei jeder Statusänderung eines SOMFY Devices den aktuellen Rolling Code zu speichern.
Bei jedem Neustart des FHEM Servers werden die gespeicherten Rolling Codes in die SOMFY Devices zurück geschrieben.

Im nachstehenden Code müssen statt der spitzen Klammern, eigene Gerätenamen angegeben werden. Erst dann sollte der Code über Raw definition importiert werden.
Dieser Hinweis betrifft diese Zeilen
Zitat
(["^(<device name 1>|<device name 2>|<usw.>)$:^state"])

my @d = qw(<device name 1> <device name 2> <usw.>);;


defmod rwRollingCode DOIF ## 1 setkeyValue\
(["^(<device name 1>|<device name 2>|<usw.>)$:^state"]) \
{\
  my $rc = ReadingsVal("$DEVICE","rolling_code","0000");;\
  my $rc1 = substr(sprintf("%04X",1 + hex $rc),-4);;\
  my $err = setKeyValue("$DEVICE_rolling_code",$rc1);;\
  Log 1, "$SELF:  setKeyValue $DEVICE rolling_code ($rc) $rc1 with $err" if($err);;\
}\
## 2 getkeyValue\
DOELSEIF (["^global$:^INITIALIZED$"])\
{\
  my @d = qw(<device name 1> <device name 2> <usw.>);;\
  my $err = "";;\
  my $val = "";;\
  foreach my $key (@d) {\
    ($err,$val) = getKeyValue($key."_rolling_code");;\
    if (!$err and $val ne "0000") {\
      fhem("setreading $key rolling_code $val",1);;\
    } else {\
      Log 1, "$SELF: getKeyValue for $key, error is $err, value is $val";;\
    }\
  }\
}\

attr rwRollingCode addStateEvent 1
attr rwRollingCode do always


FHEM16

Hi Ellert,

vielen Dank für das DOIF & Deine Idee.
Ich speichere die Konfiguration automatisiert ab und habe über einen cron ein extra Backup am laufen, welches mir die fhem.cfg und fhem.save extra sichert ... würde aber gerne Deine Lösung mit einbinden.
Da ich mir nicht sicher bin, wollte ich Dich vorher folgendes fragen:

1. Ich meine es reicht nicht aus nur den rolling_code zu sichern und es müsste auch der enc_key gesichert werden
2. Kann es möglich sein, dass der rolling_code/enc_key noch der alte Wert sein könnte, wenn sich state geändert hat und wäre es nicht besser Änderungen direkt über den rolling_code/enc_key zu erkennen?

Viele Grüße
Fhem16

Ellert

Es reicht der Rolling Code, https://forum.fhem.de/index.php/topic,53319.msg786652.html#msg786652

Es ist der alte Wert, daher addiere ich 1. Um zu sagen, ob Dein Vorschlag besser ist oder nur anders, fehlt mir eine Bewertungssystematik.

Dev

Hallo Ellert

ich bin ein absoluter Rookie auf PERL und FHEM. Kannst du mir bitte sagen (vielleicht Schritt für Schritt) wo und wie ich dein Skript anlegen kann damit ich in Zukunft den Rolling Code nicht verliere. Das ist derzeit mein Problem mit meinen Somfy Rollos.
Auch habe ich bei einer Rollo vollkommen im offset. Wie muss ich das mit dem at Befehl machen, damit sich der Rolling Code wieder auf einem höheren Niveau ist....
Vielen Dank für dein Verständnis und Hilfe.

Grüße Dev

Ellert

Zitat von: Dev am 29 September 2018, 18:19:26
Kannst du mir bitte sagen (vielleicht Schritt für Schritt) wo und wie ich dein Skript anlegen kann
ZitatIm nachstehenden Code müssen statt der spitzen Klammern, eigene Gerätenamen angegeben werden(1). Erst dann sollte der Code über Raw definition importiert werden(2).
Es sind nur diese 2 Schritte notwendig.
ZitatRolling Code wieder auf einem höheren Niveau ist
Du kannst einfach in der Definition des Rolladen einen höheren Wert angeben.



Dev

Danke hab's verstanden. Danke fürs direkt darauf Hinweisen.... manchmal sind meine Gedankenwege zu kompliziert

Jedoch bekomme ich noch folgende Error-Meldung:

Unrecognized character \xE2; marked by <-- HERE after ([<-- HERE near column 3 at ./FHEM/99_myUtils.pm


Kann damit nichts anfangen.

Das mit dem höheren Wert für den Rolling Code hat leider noch nicht funktioniert.... werde mich einfach weiter spielen.

Danke fürs Erste.
DEV

Ellert

Ein Zeichen wird nicht erkannt.

Der Code ist nicht für die 99_myUtils, sondern für Raw definition.


RonnyRJM

Hallo,

Ich habe den Code per RAW Definition eingefügt, bekomme jedoch eine ähnliche Fehlermeldung bei der Ausführung wie Dev:

ERROR evaluating {   my $rc = ReadingsVal("Terassenrollo","rolling_code","0000");   my $rc1 = substr(sprintf("%04X",1 + hex $rc),-4);   my $err = setKeyValue("Terassenrollo_rolling_code",$rc1);   Log 1, "rwRollingCode:  setKeyValue Terassenrollo rolling_code ($rc) $rc1 with $err" if($err); }: Unrecognized character \xC2; marked by <-- HERE after { <-- HERE near column 3 at (eval 297469) line 1.


Was mache ich falsch?

Ellert

Zitat von: RonnyRJM am 21 November 2018, 15:32:18
Hallo,

Ich habe den Code per RAW Definition eingefügt, bekomme jedoch eine ähnliche Fehlermeldung bei der Ausführung wie Dev:

ERROR evaluating {   my $rc = ReadingsVal("Terassenrollo","rolling_code","0000");   my $rc1 = substr(sprintf("%04X",1 + hex $rc),-4);   my $err = setKeyValue("Terassenrollo_rolling_code",$rc1);   Log 1, "rwRollingCode:  setKeyValue Terassenrollo rolling_code ($rc) $rc1 with $err" if($err); }: Unrecognized character \xC2; marked by <-- HERE after { <-- HERE near column 3 at (eval 297469) line 1.


Was mache ich falsch?
Wenn Du den Code nur eingefügt hast, dann hast Du die Anleitung nicht richtig befolgt und wenn Du sie befolgt hast, dann hat sich ein Fehler eingeschlichen. Gibt es Probleme beim Lesen und Verstehen der Fehlermeldung?

Siehe auch https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche

mycroft2k

gibt es eine möglichkeit das das sofort gespeichert wird?

aktuell funktoniert es nur bei einen shutdown / reboot das die daten gespeichert werden
bei strom ausfall sind die daten leider weg.

Ellert

Zitat von: mycroft2k am 11 Juni 2019, 15:47:52
gibt es eine möglichkeit das das sofort gespeichert wird?

aktuell funktoniert es nur bei einen shutdown / reboot das die daten gespeichert werden
bei strom ausfall sind die daten leider weg.

Entweder Du rufst die Funktion WriteStateFile() des FHEM-Servers bei jeder Änderung eines Rollingcodes auf oder Du nutzt den Vorschlag aus diesem Beitrag https://forum.fhem.de/index.php/topic,89337.0.html

Dia81

Zitat von: Ellert am 12 Juli 2018, 16:13:42
Wenn der FHEM-Server gestartet wird und die fhem.save Datei nicht aktuell ist, dann kann es sein, dass ein veralteter Rolling Code in einem SOMFY Device gespeichert wird. Ein veralteter Rolling Code führt dazu, dass die Somfy Hardware die empfangenen Befehle nicht ausführt, siehe auch https://wiki.fhem.de/wiki/SOMFY#Bekannte_Probleme

FHEM stellt PERL-Funktionen bereit (setKeyValue, getKeyValue), die es ermöglichen einzelne Werte in einer separaten Datei zu speichern und zu lesen.
Das folgende DOIF nutzt diese Funktionen, um bei jeder Statusänderung eines SOMFY Devices den aktuellen Rolling Code zu speichern.
Bei jedem Neustart des FHEM Servers werden die gespeicherten Rolling Codes in die SOMFY Devices zurück geschrieben.

Im nachstehenden Code müssen statt der spitzen Klammern, eigene Gerätenamen angegeben werden. Erst dann sollte der Code über Raw definition importiert werden.
Dieser Hinweis betrifft diese Zeilen

defmod rwRollingCode DOIF ## 1 setkeyValue\
(["^(<device name 1>|<device name 2>|<usw.>)$:^state"]) \
{\
  my $rc = ReadingsVal("$DEVICE","rolling_code","0000");;\
  my $rc1 = substr(sprintf("%04X",1 + hex $rc),-4);;\
  my $err = setKeyValue("$DEVICE_rolling_code",$rc1);;\
  Log 1, "$SELF:  setKeyValue $DEVICE rolling_code ($rc) $rc1 with $err" if($err);;\
}\
## 2 getkeyValue\
DOELSEIF (["^global$:^INITIALIZED$"])\
{\
  my @d = qw(<device name 1> <device name 2> <usw.>);;\
  my $err = "";;\
  my $val = "";;\
  foreach my $key (@d) {\
    ($err,$val) = getKeyValue($key."_rolling_code");;\
    if (!$err and $val ne "0000") {\
      fhem("setreading $key rolling_code $val",1);;\
    } else {\
      Log 1, "$SELF: getKeyValue for $key, error is $err, value is $val";;\
    }\
  }\
}\

attr rwRollingCode addStateEvent 1
attr rwRollingCode do always


Hi,

hatte auch das Problem 2er Abstürze und langem Probieren den Code wieder abzustimmen. Leider konnte ich die Absturzursache nicht finden die wohl nicht in FHEM liegt oder lag daher wollte ich meine Rollingcodes gerne "speichern" falls es zu solchen Problemen nochmal kommt.

Habe dein Code eingefügt, bin aber noch zu minderbemittelt im Code und verstehe nicht was nun genau passiert. Es scheint in soweit zu gehen, dass wenn ich ein Rollo schalte das CMD1 ausgeführt wird und beim Wiederherstellen durch FHEM neustart das CMD2. Soweit so gut. Kann ich denn die Codes jetzt in einer Art Datei sehen? Nur um zu kapieren was hier passiert :> Wenn ich erst cmd1 das speichern ausführe und dann das 2. werden auf jedenfall die Rollingcodes in das Device geschrieben, zumindest schein ich alles richtig gemacht zu haben :>

Ellert

Die Daten werden in die Datei uniqueID geschrieben. Bei einer Standartinstallation unter /opt/fhem/FHEM/FhemUtils.

Steigerbalett

Ist ab heute im Modul enthalten.
Vielen Dank Ellert für die Arbeit.

https://forum.fhem.de/index.php/topic,53319.msg1045614.html#msg1045614

einfach in den Devices das Attribut autoStoreRollingCode auf 1 setzen.

attr TYPE=SOMFY autoStoreRollingCode 1

Spook112

Hi,
kurze Frage.
Gibt es eine Möglichkeit den aktuellen Rolling Code eines Rollladens auszulesen?
Raspberry PI / RaZberry ZWAVE Modul / RFXTRX433E / 13 Fibaro FGS-222-EN-A-v1.00 / 17 VISION ZD2102-5 / 10 Somfy RTS / 4 Greenwave GWRENS310-F / Gardena Sileno City / 3 Gardena Gartensteckdosen / 2 devolo Home Control Funkschalter / 8 FIBARO System FGSD002 Smoke Sensoren

Dev

Ja kannst du.

enc_key und rolling_code, beides unter Readings, ist der gesamte Code:

z.b.: A3 (enc_key) 0246 (rolling_code) --> A3 0246

zusätzlich ist im Bereich DEF (Internal) der Code mit der Adresse angeführt

z.B.: 012345 A3 0246

andies

Ich habe mir hier ein anderes DOIF geschrieben, wobei meine fhem.save immer nach extern kopiert wird (bei jeder Änderung der Datei):
defmod Rolladen_Code_Sicherung_DOIF DOIF (["Rolladen.*"])  ({WriteStatefile()}, {system("cp /opt/fhem/log/fhem.save /media/")})

Jetzt überlege ich, ob dieser Zugang hier nicht besser ist. Allerdings überblicke ich das nicht. Kann mir jemand da helfen, ob mein Weg genügt oder wo ich etwas übersehen haben könnte?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Spook112

Danke für die Info - das heisst in FHEM ist der letzte bekannte Stand "sichtbar".

Meine Frage zielte allerdings mehr in Richtung des eigentlichen Gerätes - also des Rollladens.

Folgendes Problem:
Meine FHEM Instanz bzw. die gesamte SD-Karte des Raspberry ist defekt und nicht mehr lesbar.
Und ich Idiot habe natürlich keine Sicherung. Ja, so blöd kann man sein.

Also alles neu aufgesetzt - und jetzt stehe ich vor dem Problem.

Wie kriege ich raus, welchen Rolling Code haben meine Rollläden intern abgespeichert.
Kann man die Codes dort auch auslesen?
Raspberry PI / RaZberry ZWAVE Modul / RFXTRX433E / 13 Fibaro FGS-222-EN-A-v1.00 / 17 VISION ZD2102-5 / 10 Somfy RTS / 4 Greenwave GWRENS310-F / Gardena Sileno City / 3 Gardena Gartensteckdosen / 2 devolo Home Control Funkschalter / 8 FIBARO System FGSD002 Smoke Sensoren

andies

Ziemlich genau das ist mir passiert. Glücklicherweise konnte ich nach mehreren Tagen doch noch meine Karte auslesen, aber das darf nie wieder passieren.

Deswegen die Idee: nach jeder Rolladanbewegung fhem.save sichern (das speichert ja alle readings aller Devices, also erst recht den encryption code der Rolladen) und dann wird diese Datei noch auf einem externen Server gespeichert (/media ist bei in Wirklichkeit eine externe Festplatte). Insofern habe ich das auf einer anderen Festplatte gesichert.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

fdfhem

Hallo, als blutiger Anfaenger nutze ich seit ein Paar Wochen FHEM exklusiv zur Steuerung eines Somfy Rolladenmotors, was im grossen und ganzen sehr gut funktioniert. Nach einem Raspi-Neustart (wenn dieser sich zB aufgehaengt hat) scheint der Rolling Code jedoch oft nicht mehr synchronisiert zu sein. Ich kann dann durch manuelles Erhoehen des Rolling Codes in DEF (d.h. mehrfaches schrittweise Erhoehung der letzten 4 Ziffern) durch Try and Error wieder eine Synchronisation herstellen. Dies nervt natuerlich auf Dauer. Wahrscheinlich mache ich etwas falsch, komme aber trotz langer Forumlektuere nicht dahinter, wie es richtig geht. Hat hier jemand Erfahrung und koennte mir helfen, dies zuverlaessig zum Laufen zu bringen? Ich bin wie gesagt ein Anfaenger und kein IT Profi, d.h. je anschaulicher die Tipps sind, desto besser.

Einige weitere Punkte zu meiner Konfiguration:
-Setup ist Raspi 3B mit NanoCUL
-Meine FHEM-Version ist laut Befehl "version" die "Latest Revision: 22495", ich habe FHEM gelegentlich via "update" upgedated, aber ansonsten nichts aus github odgl manuell installiert
-Die Option "autoStoreRollingCode" ist auf 1 gesetzt, wie verschiedentlich im Forum besprochen
-Wenn die Synchronisation zwischen FHEM und dem Rollo nicht funktioniert und ich keine Zeit fuer die o.g. "Try and Error" Loesung habe, verwende ich manchmal die beim Rolladen mitgelieferte Fernbedienung, welche weiterhin ohne Probleme funktioniert. Mir ist unklar, ob dies das Synchronisationsproblem weiter verschlimmert (etwa dass die Rolling Codes weiterlaufen)

andies

Anscheinend speicherst du die neuen Codes (stehen in den Readings) nicht in fhem.save. Dort stehen die aktuellen Codes drin. Wenn diese Datei fhem.save nicht up-to-date ist, dann arbeitest du mit alten Codes - was nicht geht. Du brauchst ein speichern nach jeder Bedienung des Somfy Geräts. Schau mal zwei Zeilen drüber, da stehen die Details, wie das gehen kann.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

fdfhem

Andies, danke fuer die schnelle Antwort.

Ich gehe davon aus, dass Du Dich auf
defmod Rolladen_Code_Sicherung_DOIF DOIF (["Rolladen.*"])  ({WriteStatefile()}, {system("cp /opt/fhem/log/fhem.save /media/")})

beziehst.

Ich habe "Rolladen" an den Namen meines Rolladens in FHEM angepasst.

Leider funktioniert zumindest das Kopieren nicht (state ist "cmd_1",  error ist "{system("cp /opt/fhem/log/fhem.save /media/")}: -1 ", und nichts wird in das Verzeichnis Media kopiert (habe es auch mit sudo cp versucht, auch kein Erfolg).

Was mache ich falsch?

andies

gib doch mal
{system("cp /opt/fhem/log/fhem.save /media/")}
in das Fenster oben in FHEM ein. Hast Du Zugriff auf das Verzeichnis (hier bei mir /media)? Und gibt es das? Im Zweifel kopierst du erstmal mit der Hand die Datei dorthin und gibst ihr die Rechte, also
sudo chmod 666 fhem.save
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

fdfhem

Danke:

1) Der Befehl
{system("cp /opt/fhem/log/fhem.save /media/")}
gibt mir in FHEM -1 zurueck

2) Das Verzeichnis media existiert

3) Ich habe fhem.save mit Putty/SSH manuell nach /media/ kopiert und dann "sudo chmod 666 fhem.save" sowohl im Verzeichnis /media/, alsauch im Verzeichnis /opt/fhem/log/ ausgefuehrt.

Leider immer noch das gleiche wie in Antwort #22.

Wenn ich {system("cp /opt/fhem/log/fhem.save /media/")} danach erneut ausfuehre, gibt mir FHEM wieder -1 zurueck   

rudolfkoenig

Ich wuerde entweder "cp /opt/fhem/log/fhem.save /media/" eingeben (mit "), dann landen die Fehlermeldungen in FHEM Log, oder { `cp /opt/fhem/log/fhem.save /media/ 2>&1` }, dann kriegt man die Fehlermeldung direkt als Rueckgabewert.

fdfhem

@rudolfkoenig: im log file finde ich

cp: cannot create regular file '/media/fhem.save': Permission denied
2020.09.15 12:52:14 2: LCS_Code_Sicherung_DOIF: {system("cp /opt/fhem/log/fhem.save /media/")}: -1

Die Berechtigungen fuer fhem.save in /media/ sind laut putty/SSH:

-rw-rw-rw- 1 root root 1781 Sep 15 13:25 fhem.save

viegener

Ein Hinweis:

Es gibt das Attribut "autoStoreRollingCode" um zumindest das Speichern in den Statefile automatisch zu speichern - dies muss allerdings epxlizit gesetzt werden.

Zitat von: fdfhem am 15 September 2020, 10:26:12
Hallo, als blutiger Anfaenger nutze ich seit ein Paar Wochen FHEM exklusiv zur Steuerung eines Somfy Rolladenmotors, was im grossen und ganzen sehr gut funktioniert. Nach einem Raspi-Neustart (wenn dieser sich zB aufgehaengt hat) scheint der Rolling Code jedoch oft nicht mehr synchronisiert zu sein. Ich kann dann durch manuelles Erhoehen des Rolling Codes in DEF (d.h. mehrfaches schrittweise Erhoehung der letzten 4 Ziffern) durch Try and Error wieder eine Synchronisation herstellen. Dies nervt natuerlich auf Dauer. Wahrscheinlich mache ich etwas falsch, komme aber trotz langer Forumlektuere nicht dahinter, wie es richtig geht. Hat hier jemand Erfahrung und koennte mir helfen, dies zuverlaessig zum Laufen zu bringen? Ich bin wie gesagt ein Anfaenger und kein IT Profi, d.h. je anschaulicher die Tipps sind, desto besser.

Einige weitere Punkte zu meiner Konfiguration:
-Setup ist Raspi 3B mit NanoCUL
-Meine FHEM-Version ist laut Befehl "version" die "Latest Revision: 22495", ich habe FHEM gelegentlich via "update" upgedated, aber ansonsten nichts aus github odgl manuell installiert
-Die Option "autoStoreRollingCode" ist auf 1 gesetzt, wie verschiedentlich im Forum besprochen
-Wenn die Synchronisation zwischen FHEM und dem Rollo nicht funktioniert und ich keine Zeit fuer die o.g. "Try and Error" Loesung habe, verwende ich manchmal die beim Rolladen mitgelieferte Fernbedienung, welche weiterhin ohne Probleme funktioniert. Mir ist unklar, ob dies das Synchronisationsproblem weiter verschlimmert (etwa dass die Rolling Codes weiterlaufen)

Das Attribut "autoStoreRollingCode" speichert den Rollingcode NICHT im statefile, sondern in der uniqueID- Datei. Wenn also fhemsave gesichert wird, sollte das Attribut auf 0 gesetzt werden.

Wenn trotz aktuellem fhem.save ujnd aktuellem uniqueID beim Neustart die Rollingcodes fehlerhaft sind, würde ich dem gerne weiter nachgehen.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

fdfhem

@viegener: Danke:

Das Attribut "autoStoreRollingCode" ist als 1 gesetzt und erscheint so in der Device-Ansicht des Rollos. Es scheint auch den jeweils korrekten Rolling Code in das file FHEM/FhemUtils/uniqueID zu speichern: Der Rolling Code dort (zB 00E2) entspricht, was ich in der Device-Ansicht in FHEM unter DEF sehe und der Rollo funktioniert. Wenn ich nun aber den Stecker von meinem Raspi ziehe und in dann wieder einstecke und re-boote, dann ist der Rolling Code unter DEF ein anderer (zB 00D0), ich kann ihn aber manuell unter DEF auf den ehemaligen uniqueID Code 00E2 setzen und dann geht wieder alles. 

Ich weiss nicht, ob FHEM beim Reboot den Rolling Code faelschlicherweise aus der Datei uniqueID nicht wieder einliest sondern irgendwo einen anderen veralteten Code findet. Gibt es eine Moeglichkeit, diesen Wieder-Einleseprozess genauer zu analysieren?

Was mir aufgefallen ist, ist dass die Namen in uniqueID nicht mit dem Namen in FHEM uebereinstimmen (kann sein, dass ich die Device in FHEM mal umbenannt hatte):
--Zeile in uniqueID: SOMFY_000002_rollingcode:00E2
--Name in FHEM: LibraryCinescreen

PS: Mir ist es wichtiger, dass der Rolling Code beim Reboot des Raspis funktioniert (auch und gerade wenn dieser sich aufgehaengt hat). Falls die SD-Karte im Raspi wirklich mal kaputt geht, kann ich den Rollo im Notfall auch neu anlernen (hoere dies geht bei Somfy maximal 12 Mal, also habe ich noch 10-11 "Versuche" :-). Deshalb ist das Speichern in einer anderen Datei (ausserhalb der SD-Karte etc) momentan von untergeordneter Bedeutung fuer mich

PPS: Super Forums-Community hier, Antworten von 3 erfahrenen Mitgliedern nach nicht mal einem halben Tag!

viegener

Zitat von: fdfhem am 15 September 2020, 17:13:30
@viegener: Danke:

Das Attribut "autoStoreRollingCode" ist als 1 gesetzt und erscheint so in der Device-Ansicht des Rollos. Es scheint auch den jeweils korrekten Rolling Code in das file FHEM/FhemUtils/uniqueID zu speichern: Der Rolling Code dort (zB 00E2) entspricht, was ich in der Device-Ansicht in FHEM unter DEF sehe und der Rollo funktioniert. Wenn ich nun aber den Stecker von meinem Raspi ziehe und in dann wieder einstecke und re-boote, dann ist der Rolling Code unter DEF ein anderer (zB 00D0), ich kann ihn aber manuell unter DEF auf den ehemaligen uniqueID Code 00E2 setzen und dann geht wieder alles. 

Ich weiss nicht, ob FHEM beim Reboot den Rolling Code faelschlicherweise aus der Datei uniqueID nicht wieder einliest sondern irgendwo einen anderen veralteten Code findet. Gibt es eine Moeglichkeit, diesen Wieder-Einleseprozess genauer zu analysieren?

Was mir aufgefallen ist, ist dass die Namen in uniqueID nicht mit dem Namen in FHEM uebereinstimmen (kann sein, dass ich die Device in FHEM mal umbenannt hatte):
--Zeile in uniqueID: SOMFY_000002_rollingcode:00E2
--Name in FHEM: LibraryCinescreen

PS: Mir ist es wichtiger, dass der Rolling Code beim Reboot des Raspis funktioniert (auch und gerade wenn dieser sich aufgehaengt hat). Falls die SD-Karte im Raspi wirklich mal kaputt geht, kann ich den Rollo im Notfall auch neu anlernen (hoere dies geht bei Somfy maximal 12 Mal, also habe ich noch 10-11 "Versuche" :-). Deshalb ist das Speichern in einer anderen Datei (ausserhalb der SD-Karte etc) momentan von untergeordneter Bedeutung fuer mich

PPS: Super Forums-Community hier, Antworten von 3 erfahrenen Mitgliedern nach nicht mal einem halben Tag!

Der Rollingcode wird nicht beim Neustart aus uniqueId wiederhergestellt, sondern erst beim nächsten Befehl, der gesendet wird.
Hast Du mal ausprobiert, ob das bei Dir nicht funktioniert?

In der uniqueid wird der Eintrag nicht aus dem Namen des devices gebildet, sondern aus der SOMFY-Adresse insofern ist der von Dir zitierte Eintrag für einen Rolladen mit der Adresse 000002. Der Name kann sich ja ändern, nicht nur bei Dir.

Bezüglich neu anlernen, gibt es ja normalerweise noch die Möglichkeit vorhandene Fernbedienungen auch aus dem Rollo  selbst zu löschen und dann gibt es auch mehr Möglichkeiten.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

fdfhem

@viegener: Danke, nunmehr scheint es interessanterweise zu funktionieren, genau wie Du es beschreibst. Ich muss es also weiter beobachten. Einstweilen erstmal vielen herzlichen Dank.

LastOne

Hi,

ich klinke mich hier einmal mit ein. Meinen das AutoStoreRolling Code habe ich auf 1 gesetzt. Wenn ich nun aber einen Stromaufall habe, sind die Rollingcodes veraltet. Wenn ich diese über RAW anpasse, geht es direkt wieder. Ansonsten muss ich ein paar mal hoch und runter fahren bis er reagiert. Ursprünglich hat ein Cobee2 im USB Port daneben das Problem scheinbar verschlimmert, den hab ich nun aber erst mal entfernt.

Was kann ich nun tun, um gegen diese Problem bei Stromausfällen gewappnet zu sein? Der weiter oben gepustete Code sicher die Fhem.save ja nach extern / in ein anderes Verzeichnis. Das allein bringt mir ja noch nichts. Oder übersehe ich was? Wann und wo wird die Datei überhaupt im Standart gesichert.

Ich hatte hier schone einen thread eröffnet, dort findet ihre meine Ursprungsbeschreibung und Daten. Ich liefern euch gern mehr, was immer ihr braucht.  https://forum.fhem.de/index.php/topic,114366.0.html

viegener

Zitat von: LastOne am 21 September 2020, 19:02:48
Hi,

ich klinke mich hier einmal mit ein. Meinen das AutoStoreRolling Code habe ich auf 1 gesetzt. Wenn ich nun aber einen Stromaufall habe, sind die Rollingcodes veraltet. Wenn ich diese über RAW anpasse, geht es direkt wieder. Ansonsten muss ich ein paar mal hoch und runter fahren bis er reagiert. Ursprünglich hat ein Cobee2 im USB Port daneben das Problem scheinbar verschlimmert, den hab ich nun aber erst mal entfernt.

Was kann ich nun tun, um gegen diese Problem bei Stromausfällen gewappnet zu sein? Der weiter oben gepustete Code sicher die Fhem.save ja nach extern / in ein anderes Verzeichnis. Das allein bringt mir ja noch nichts. Oder übersehe ich was? Wann und wo wird die Datei überhaupt im Standart gesichert.

Ich hatte hier schone einen thread eröffnet, dort findet ihre meine Ursprungsbeschreibung und Daten. Ich liefern euch gern mehr, was immer ihr braucht.  https://forum.fhem.de/index.php/topic,114366.0.html

Ich muss zugeben ich verstehe nicht welches Problem Du hast - im anderen Thread steht etwas von Problemen die ursprünglich da waren jetzt aber nicht und die Beschreibung hier scheint auch nichts mit ROlling Codes zu tun zu haben (sonst hätte ja wohl das Umstecken von Hardware hier keinen Einfluss gehabt).

Ich antworte auch noch im anderen Thread, denn ich vermute es hat nichts mit diesem Thema hier zu tun
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

eazy_isi

Hallo zusammen,

stehe auch gerade vor dem Problem mit dem Rolling Code.
Wenn ich versuche das attr TYPE=SOMFY autoStoreRollingCode 1 zu setzen, bekomme ich folgende Fehlermeldung:

Rolladen_BAD_OG: unknown attribute autoStoreRollingCode. Type 'attr Rolladen_BAD_OG ?' for a detailed list.

FHEM ist auf dem aktuellsten Stand und die 10_Somfy.pm ist auch aktuell.

Hier meine Definition eines Rolladens:

defmod Rolladen_BAD_OG SOMFY 54321A AD 000D
attr Rolladen_BAD_OG userattr associated-devices
attr Rolladen_BAD_OG IODev SIGNALduino
attr Rolladen_BAD_OG associated-devices Rolladen_BAD_OG_FB
attr Rolladen_BAD_OG devStateIcon open:fts_shutter_10 10:fts_shutter_10 20:fts_shutter_20 30:fts_shutter_30 40:fts_shutter_40 50:fts_shutter_50 60:fts_shutter_60 70:fts_shutter_70 80:fts_shutter_80 90:fts_shutter_90 down:fts_shutter_100 closed:fts_shutter_100
attr Rolladen_BAD_OG drive-down-time-to-100 19
attr Rolladen_BAD_OG drive-down-time-to-close 23
attr Rolladen_BAD_OG drive-up-time-to-100 5
attr Rolladen_BAD_OG drive-up-time-to-open 23
attr Rolladen_BAD_OG eventMap on:down stop:stop off:up
attr Rolladen_BAD_OG model somfyshutter
attr Rolladen_BAD_OG mqttName Rolladen_BAD_OG
attr Rolladen_BAD_OG mqttRoom OG_Bad
attr Rolladen_BAD_OG room OG_Bad
attr Rolladen_BAD_OG verbose 5
attr Rolladen_BAD_OG webCmd down:stop:up


Jemand eine Idee, warum das attribut unbekannt sein soll ?

Bin über jeden Tipp dankbar.

Grüße
Thomas


viegener

Zitat von: eazy_isi am 01 Januar 2021, 15:32:13
Hallo zusammen,

stehe auch gerade vor dem Problem mit dem Rolling Code.
Wenn ich versuche das attr TYPE=SOMFY autoStoreRollingCode 1 zu setzen, bekomme ich folgende Fehlermeldung:

Rolladen_BAD_OG: unknown attribute autoStoreRollingCode. Type 'attr Rolladen_BAD_OG ?' for a detailed list.

FHEM ist auf dem aktuellsten Stand und die 10_Somfy.pm ist auch aktuell.

Hier meine Definition eines Rolladens:

defmod Rolladen_BAD_OG SOMFY 54321A AD 000D
attr Rolladen_BAD_OG userattr associated-devices
attr Rolladen_BAD_OG IODev SIGNALduino
attr Rolladen_BAD_OG associated-devices Rolladen_BAD_OG_FB
attr Rolladen_BAD_OG devStateIcon open:fts_shutter_10 10:fts_shutter_10 20:fts_shutter_20 30:fts_shutter_30 40:fts_shutter_40 50:fts_shutter_50 60:fts_shutter_60 70:fts_shutter_70 80:fts_shutter_80 90:fts_shutter_90 down:fts_shutter_100 closed:fts_shutter_100
attr Rolladen_BAD_OG drive-down-time-to-100 19
attr Rolladen_BAD_OG drive-down-time-to-close 23
attr Rolladen_BAD_OG drive-up-time-to-100 5
attr Rolladen_BAD_OG drive-up-time-to-open 23
attr Rolladen_BAD_OG eventMap on:down stop:stop off:up
attr Rolladen_BAD_OG model somfyshutter
attr Rolladen_BAD_OG mqttName Rolladen_BAD_OG
attr Rolladen_BAD_OG mqttRoom OG_Bad
attr Rolladen_BAD_OG room OG_Bad
attr Rolladen_BAD_OG verbose 5
attr Rolladen_BAD_OG webCmd down:stop:up


Jemand eine Idee, warum das attribut unbekannt sein soll ?

Bin über jeden Tipp dankbar.

Grüße
Thomas

Ist das Dein einziger Somfy-Device?
Kannst Du es auch in der Oberflächen nicht ausführen ?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

LastOne

So, nachdem lange alles gut lief hat meine SD Karte gestern bei nem Stromaufall was abbekommen. Homebridge will nicht mehr, FHEM läuft aber noch. Ich hab vor Wochen ein BackUp der Karte gemacht. Nun passen aber leider auf dem Backup die Rolling Codes nicht. Da ich lang nichts in FHEM gemacht habe, weiß ich leider nicht mehr wie ich die Rolling Codes überschreiben kann   :-[

Habe daher nun erstmal die Fhem.save von einer auf die andere sd kopiert. Leider hat Fhem immer noch die alten Codes drin. Kann ich die Fhem.save irgendwie einlesen? Oder was tu ich nun? Ich bekomm es grad nicht hin weil hinlangst her.

KölnSolar

ZitatKann ich die Fhem.save irgendwie einlesen?
Kannst Du Dir mit jedem editor ansehen, nach der entsprechenden Zeile suchen und im laufenden FHEM sollte ein setreading für dieses reading mit dem Wert aus der fhem.save zum Ziel führen.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

andies

Drücke doch ständig auf die Öffnen-Befehle. Dann werde die erhöht (wenn du das alte backup zurückgespielt hast, sind sie ja zu niedrig) und irgendwann klappt es wieder.

Ich habe das bei mir so gemacht (alle devices mit Somfy heißen bei mir Rolladen_irgendwas):
defmod Rolladen_Code_Sicherung notify Rolladen.* {WriteStatefile()}; {fhemsaveInMediaKopieren()}
und der Befehle selber ist in 99_myUtils.pm definiert
sub fhemsaveInMediaKopieren(){
my $neuer_zeitpunkt = POSIX::strftime("%Y-%m-%dT%H:%M:%S",localtime(time+5));
    fhem("defmod fhemsaveSichern at ".$neuer_zeitpunkt." {system('cp /opt/fhem/log/fhem.save /media')} ");
}

5 Sekunden nach dem Sendebefehl an Somfy wird dann die Datei "/opt/fhem/log/fhem.save" in das Verzeichnis "/media" kopiert und dort ist meine Synology gemounted. Also wird das Ding extern gesichert.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

rudolfkoenig

Zitatdefmod Rolladen_Code_Sicherung Rolladen.* {WriteStatefile()}; {fhemsaveInMediaKopieren()}
Da fehlt sowas wie notify. Verzoegern geht auch einfacher. Vorschlag:

define Rolladen_Code_Sicherung notify Rolladen.* { WriteStatefile()} ;; sleep 5;; "cp /opt/fhem/log/fhem.save /media"

LastOne

Zitat von: KölnSolar am 29 November 2022, 19:09:41
Kannst Du Dir mit jedem editor ansehen, nach der entsprechenden Zeile suchen und im laufenden FHEM sollte ein setreading für dieses reading mit dem Wert aus der fhem.save zum Ziel führen.

Ja, öffnen der Datei hab ich hinbekommen. Das setreading hab ich gesucht. Könntest du ein Beispiel nennen. Bin noch unsicher was ichveingeben muss genau.

@andies hab ich probiert mit drücken mehrfach. Keine Reaktion. War dann unsicher wie weit es auseinander gelaufen sein kann und hab ne bessere Lösung gesucht.

andies

Nenn mal den Namen eines Rolladens, dann kann ich das hineinschreiben. Die Codes werden hexadezimal gezählt, also auf 9 kommt A bis F.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

KölnSolar

Ich hab und kenn Somfy rolling code ja nicht. Folglich auch nicht das/die reading(s). Für ein blind gewähltes Beispiel-reading steht in der fhem.savesetstate zaehler 2022-11-30 09:17:06 Leistung_W1 83.7Für dieses würde der Befehl dann setreading zaehler Leistung_W1 83.7lauten.

Ich hab aber das Gefühl, dass andies Vorschlag der bessere Weg ist....
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

LastOne

Zitat von: andies am 30 November 2022, 07:05:10
Nenn mal den Namen eines Rolladens, dann kann ich das hineinschreiben. Die Codes werden hexadezimal gezählt, also auf 9 kommt A bis F.

defmod Rollo_Schlafzimmer SOMFY FF4A05
attr Rollo_Schlafzimmer IODev dunio
attr Rollo_Schlafzimmer alias Schlafzimmer
attr Rollo_Schlafzimmer autoStoreRollingCode 1
attr Rollo_Schlafzimmer devStateIcon closed:fts_shutter_100 open:fts_shutter_10 my:fts_shutter_50
attr Rollo_Schlafzimmer eventMap on:ab off:auf go-my:my on:close off:open
attr Rollo_Schlafzimmer genericDeviceType blind
attr Rollo_Schlafzimmer group Rolladen,
attr Rollo_Schlafzimmer homebridgeMapping clear CurrentPosition=userposition,minValue=0,maxValue=100,minStep=50 TargetPosition=userposition,minValue=0,maxValue=100,minStep=50,cmds=0:close;;;;50:my;;;;100:open
attr Rollo_Schlafzimmer model somfyshutter
attr Rollo_Schlafzimmer positionInverse 1
attr Rollo_Schlafzimmer room Alexa,Homekit,Schlafzimmer,Somfy
attr Rollo_Schlafzimmer userReadings userposition {(ReadingsVal($NAME,"state","open") eq "open")?100:(ReadingsVal($NAME,"state","open") eq "go-my")?50:0}
attr Rollo_Schlafzimmer webCmd auf:my:ab

setstate Rollo_Schlafzimmer open
setstate Rollo_Schlafzimmer 2022-11-29 17:02:03 IODev dunio
setstate Rollo_Schlafzimmer 2022-11-30 06:07:05 enc_key A3
setstate Rollo_Schlafzimmer 2022-11-30 06:07:05 exact 0
setstate Rollo_Schlafzimmer 2022-11-30 06:07:05 position 0
setstate Rollo_Schlafzimmer 2022-11-30 06:07:05 rolling_code 0D0A
setstate Rollo_Schlafzimmer 2022-11-30 06:07:05 state open
setstate Rollo_Schlafzimmer 2022-11-30 06:07:05 userposition 100



Anbei einmal der Code. Falls du mehr als den Namen brauchst.

andies

setreading Rollo_Schlafzimmer rolling_code 0D0A
und der Code wäre dann in absteigender Reihenfolge
Zitat
0D09
0D08
...
0D01
0D00
0CFF
0CFE
...
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

LastOne


BergMuel

Hallo Forum,

Ich vermute/hoffe, dass ich ein Problem habe, das genau in dieses Forum passen könnte...
Alles Durchlesen hat mir allerdings bislang nicht weiter geholfen.

Situation: Ich habe seit rund 2 Jahren eine SOMFY Markise die über einen CUL einwandfrei funktioniert hat. Nun ist aber offenbar der CUL gestorben und ich habe einen neuen besorgt. Der Handsender funktioniert (immer noch). Und auch den neuen CUL konnte ich konfigurieren und über "prog" neu anlernen. die Markise hat jedenfalls als Bestätigung gezuckt. Aus meiner Sicht alles bestens.
Nun aber nimmt die Markise trotzdem keinen Befehl von FHEM entgegen. Nach einer Woche erfolglosen Versuchen bin ich ziemlich überzeugt, dass ich ein Problem habe mit enc_key und rolling_code. Ich müsste wissen welche Werte meine Markise erwartet. Da hilft mir auch kein Backup und aktuell gespeicherter Code aus FHEM. Ich müsste den Code aus der Markise wissen.

Deshalb meine Frage: gibt es eine einfache Anleitung dazu, wie ich in diesem Fall die Werte in meinem FHEM wieder mit den erwarteten Werten der Markise angleichen kann, so dass meine FHEM Ansteuerung wieder funktioniert?

Vielen Dank bereits im Voraus für Eure Hilfestellung!

viegener

Möglicherweise geht Deine Frage hier unter, ein eigener Thread würde vermutlich Sinn machen.

Ein paar Hinweise:

Wenn Du nur den CUL wechselst muss dieser nicht neu angelernt werden, denn die Adresse steckt im FHEM device nicht im CUL.

Ich habe zwei Vermutungen:
1) In der Zeit in der Dein CUL kaputt war hat sicher der ROllingcode zu weit von dem in der Markise entfernt und damit reagiert die Markise nicht mehr
2) Durch die Versuche bei der "Programmierung" wurde der bisherige Device aus der Kopplung mit der Markise entfernt

In beiden Fällen wäre mein Ratschlag: Lege in FHEM einen neuen Somfy Device mit einer neuen Adresse an und lerne diesen zusätzlich an der Markise an. Wenn das gut funktioniert, kannst Du die Daten aus dem neuen Device (also rolling code / Adresse etc) in den alten Device übertragen. Danach den neuen Device löschen.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

diver

Hallo zusammen,

Eur Hilfe wird noch einmal benötigt. Ich verstehe nicht was ich falsch mache, bzw. habe jetzt lange nachgelesen und bin irgendwie verwirrt.

Ich steuere meine Somfy RTS über FHEM. Kürzlich ist das System wegen Unterspannug abgestürzt. Nun funktionieren die Rollos nicht mehr. Also ein Problem mit den Rolling Codes.

Einen Rolladen habe ich komplett neu angelernt. Funktioniert.
Also müsste ich bei den anderen Rollos nur den gültigen Rolling Code zum Zeitpunkt des Absturzes wiederfinden.
So weit die Theorie.
Bloß wo steht der letzte gültige? Die AutoSave Funktion über das Modul habe ich leider nicht aktiv.

Was ich verstanden habe, ist das in der /opt/fhem/log/fhem.save die letzten Rolling Codes stehen.
Diesen würde ich als Ausgangspunkt nehmen.

Wenn dort also steht:
setstate Rollo.EG.Schlafen 2023-10-13 11:09:23 rolling_code 008C
dann ziehe ich da mal Hexadezimal 10 ab. Lande also bei hex 82. Weil seit dem Absturz FHEM vermutlich 10 mal einen Befehl gesendet hat.
Das setze ich mit setreading Rollo.EG.Schlafen rolling_code 0082 neu.
Nun sende ich 10x mit FHEM einen Befehl an das Rollo und würde erwarten dass es sich dann bewegt.

Tut es aber nicht. Wo ist der Gedankenfehler?

In den Rollodevices weichen die aktuellen Readings des Rollos und der Wert in der RAW DEF voneinander ab.
In der RAW DEF z.B. 0035 und im reading 008C.
Der Wert 008C steht auch in der fhem.save

Bei dem neu angelegten Rollo sind die Werte in Sync.
Oder müsste ich den Wert aus der RAW DEF als Ausgangswert für den letzt gültigen Rolling Code nehmen?

Danke!

Gruß Andre

Ellert

Wenn ich mich recht erinnere muss der zu sendende RC über dem zuletzt Empfangenen liegen.

Diese Probleme lassen sich mit dem Attribut autoStoreRollingCode vermeiden.