NEWS
Absturz in fhem Adapter
-
Neustart FHEM Adapter?
Noch was: Du kannst setlist noch auf "on:noArg off:noArg mixed:noArg" ändern.
Damit bekommst du jeweils ein Objekt als button
-
Sorry, mein Fehler. Neustart vergessen!
Jetzt steht da 17.12.18.
Aber: Der Absturz bleibt der gleiche. :shock:
Der State scheint jetzt richtig gefüllt zu werden.
sonosSZenabled hat weiterhin die Rolle "text"
Das mit noArg hab ich noch nicht gemacht.
-
Wir kriegen das hin
Entweder fhem.0.info.Configurations.autoRole auf true setzen und Adapter wird automatisch neu gestartet
oder das Objekt Wecker löschen und Adapter neu starten
-
Ein Schritt weiter:
Das Objekt scheint jetzt richtig zu sein.
Habe beide Varianten probiert: autoRole auf true.
Sync abgewartet.
Wecker in fhem geändert.
-> Trotzdem Absturz.
Danach Objekt Wecker komplett gelöscht.
Sync abgewartet.
Wecker in fhem geändert.
-> Trotzdem Absturz.
:shock:
-
Mh….du änderst state in FEHM auf on oder off?
Kannst du das Script mal deaktivieren?
state in ioBroker ändern und Übertrag nach FHEM kontrollieren.
state in FHEM ändern und Übertrag nach ioBroker kontrollieren
-
Es hat also tatsächlich etwas mit dem Skript zu tun.
Wenn das Skript aus ist, passiert der Absturz nicht.
-
puh…..jetzt bin ich aber beruhigt.
Ok hilft dir nicht weiter
Wie sieht dein script aus?
Hat sich die Fehlermeldung eigentlich geändert?
Der Teil ist interessant: iobroker.fhem/main.js:206:25
-
Skript 1 wird über ein notify getriggert. Sobald an der Oberfläche "on" oder "off" geschaltet wird, läuft es los.
Abhängig vom "on" oder "off" werden 1 Sonos Wecker und 2 Hue Schedules ein- oder ausgeschaltet.
Hier werden noch aus Debug-Gründen Readings gesetzt.
sub toggleWakeupSchedules($) { my ($Value) = @_; my %hueToggle = ('status' => "undef"); my $sonosToggle = 1; if ("$Value" eq "on") { %hueToggle = ('status' => "enabled"); $sonosToggle = "enable"; } elsif ("$Value" eq "off") { %hueToggle = ('status' => "disabled"); $sonosToggle = "disable"; } else { return; } # Toggle Alarm No ID 1 at Sonos Beam SZ fhem "set Sonos_Schlafzimmer Alarm $sonosToggle 1"; # Create a user agent object my $ua = LWP::UserAgent->new; $ua->agent("MyApp/0.1"); my $jsonToggle = encode_json \%hueToggle; # Create a Hue request for Elke my $req1 = HTTP::Request->new(PUT => 'http://192.168.2.46/api/<xyz>/schedules/2'); $req1->content_type('application/json'); $req1->content($jsonToggle); # Create a Hue request for Alex my $req2 = HTTP::Request->new(PUT => 'http://192.168.2.46/api/<xyz>/schedules/4'); $req2->content_type('application/json'); $req2->content($jsonToggle); # Pass requests to the user agent and get a response back my $res1 = $ua->request($req1); my $res2 = $ua->request($req2); my $hash1 = decode_json $res1->content; my $hash2 = decode_json $res2->content; my $niceHash1 = Dumper $hash1; my $niceHash2 = Dumper $hash2; # Check the outcomes of the responses if ($res1->is_success) { fhem "setreading Wecker hueElkeLichtWeckerReturn $niceHash1"; } else { fhem "setreading Wecker hueElkeLichtWeckerReturn $res1->status_line"; } if ($res2->is_success) { fhem "setreading Wecker hueAlexLichtWeckerReturn $niceHash2"; } else { fhem "setreading Wecker hueAlexLichtWeckerReturn $res2->status_line"; } # Aufruf, den Hue Zustand und den Sonos-Zustand zu aktualisieren getWakeupSchedules(); }</xyz></xyz>
Am Ende wird das Skript getWakeupSchedules gestartet, das die Readings im Dummy-Device aktualisiert und daraus den konsolidierten State "on" oder "off" oder "mixed" setzt:
sub getWakeupSchedules { # Create a user agent object my $ua = LWP::UserAgent->new; $ua->agent("MyApp/0.1"); # Create a Hue request my $req = HTTP::Request->new(GET => 'http://192.168.2.46/api/<xyz>/schedules'); # Pass request to the user agent and get a response back my $res = $ua->request($req); my $elkeLichtWecker="undef"; my $alexLichtWecker="undef"; # Check the outcome of the Hue response if ($res->is_success) { my $hash = decode_json $res->content; my $niceHash = Dumper $hash; $elkeLichtWecker = $hash->{2}->{status}; $alexLichtWecker = $hash->{4}->{status}; # Set Hue Readings for Wecker fhem "setreading Wecker hueSchedulesList $niceHash"; fhem "setreading Wecker hueElkeLichtWecker $elkeLichtWecker"; fhem "setreading Wecker hueAlexLichtWecker $alexLichtWecker"; } else { fhem "setreading Wecker hueSchedulesList $res->status_line"; } my $sonosSZenabled = eval(ReadingsVal("Sonos_Schlafzimmer","AlarmList","{}"))->{1}->{Enabled}; fhem "setreading Wecker sonosSZenabled $sonosSZenabled"; if ( "$elkeLichtWecker" eq "enabled" && "$alexLichtWecker" eq "enabled" && $sonosSZenabled == 1 ) { fhem "setstate Wecker on"; } elsif ("$elkeLichtWecker" eq "disabled" && "$alexLichtWecker" eq "disabled" && $sonosSZenabled == 0) { fhem "setstate Wecker off"; } else { fhem "setstate Wecker mixed"; }</xyz>
Additive Info: die Sonos-Abfrage liefert derzeit an immer erstmal den falschen Wert, so dass grundsätzlich ein "mixed" entsteht. Das ist aber ein anderes Problem, dem ich auf den Grund zu gehen versuche. Startet man nämlich unmittelbar danach getWakeupSchedules() von Hand, oder löst die gleiche Aktion über die Oberfläche nochmal aus, stimmt es wieder. Kann mir aber nicht vorstellen, dass das was mit dem aktuellen Problem zu tun hat.
-
Ach du hast den script unter Perl/Fhem gemacht…dachte ioBroker JS
Ersetze im 2. script mal alle Zeilen mit fhem "setstate Wecker on"; in fhem "set Wecker on"
Zusätzlich noch fhem.1.info.Settings.logEventFHEMstate auf true. Damit werden alle state Änderungen ins Log von ioBroker geschrieben
-
Hat sich die Fehlermeldung eigentlich geändert?
Der Teil ist interessant: iobroker.fhem/main.js:206:25 `
Sorry, übersehen.
Ja, hat sich geändert:
at parseEvent (/opt/iobroker/node_modules/iobroker.fhem/main.js:212:25) at Telnet.telnetIn.on.data (/opt/iobroker/node_modules/iobroker.fhem/main.js:2146:33)
-
Ach du hast den script unter Perl/Fhem gemacht…dachte ioBroker JS
Ersetze im 2. script mal alle Zeilen mit fhem "setstate Wecker on"; in fhem "set Wecker on"
Zusätzlich noch fhem.1.info.Settings.logEventFHEMstate auf true. Damit werden alle state Änderungen ins Log von ioBroker geschrieben `
Das war bis vor 15 Minuten noch ein "set Wecker …".
Ich bin zwischenzeitlich mal auf die Idee gekommen, es auf "setstate Wecker ..." zu ändern. Der set löst ja wieder ein Event aus und schickt die Skripte nochmal in den Krieg, oder?
Die Änderung hat nix gebracht.
Ich hab dann zur Sicherheit auch noch das "event-on-change-reading .*" rausgenommen.
Keine Änderung.
-
Ok…passt
Mh FHEM muss aus irgendeinem Grund einen Event nur aus einem Wort generieren.
Könnte das im Adapter unterdrücken, aber jetz interessiert es mich schon
Mit fhem.0.info.Settings.logEventFHEM auf true bekommst du im Log ioBroker alle events aus FHEM angezeigt.
Nach einem event aus einem Wort muss Fehlermeldung kommen
-
Krieg ich leider nicht.
Sehe im iobroker Log keinerlei fhem Events.
Ich habe inzwischen mal rumgespielt und den getWakeupSchedules() Aufruf rausgenommen.
Effekt ist der gleiche: Absturz, wenn das Skript startet.
Dann habe ich mal in fhem { getWakeupSchedules() } manuell gestartet und mir dort die Events anzeigen lassen.
Die sehen so aus:
2018-12-30 01:36:00 dummy Wecker hueSchedulesList: { '1' => { 'created' => '2018-12-17T14:41:39', 'command' => { 'method' => 'PUT', 'body' => { 'status' => 0 }, 'address' => '/api/mIIFI0nT5fJDjWzXLJngqo7jporLBGfNK9DI7HRr/sensors/3/state' }, 'time' => 'PT00:00:10', 'starttime' => '2018-12-17T14:41:39', 'name' => 'Dimmer Switch 2 Reset', 'recycle' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ), 'status' => 'disabled', 'autodelete' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ), 'localtime' => 'PT00:00:10', 'description' => 'Resets dimmer switch scene cycler' }, '5' => { 'time' => 'PT00:01:00', 'created' => '2018-11-07T23:03:18', 'command' => { 'method' => 'PUT', 'body' => { 'scene' => 'rG7qkF-1HZ8nT9W' }, 'address' => '/api/r8X1c3wCpv8qMulPzRzSGV-OiN4QrHKq/groups/0/action' }, 'name' => 'L_04_njqbA', 'starttime' => '2018-12-27T05:29:00', 'recycle' => $VAR1->{'1'}{'recycle'}, 'status' => 'disabled', 'autodelete' => $VAR1->{'1'}{'autodelete'}, 'localtime' => 'PT00:01:00', 'description' => 'L_04_njqbA_trigger end scene' }, '3' => { 'status' => 'disabled', 'recycle' => $VAR1->{'1'}{'recycle'}, 'name' => 'L_04_A9Aeu', 'starttime' => '2018-12-27T04:50:00', 'time' => 'PT00:01:00', 'created' => '2018-11-05T05:49:50', 'command' => { 'address' => '/api/r8X1c3wCpv8qMulPzRzSGV-OiN4QrHKq/groups/0/action', 'body' => { 'scene' => 'V080xDoezs6QZjg' }, 'method' => 'PUT' }, 'description' => 'L_04_A9Aeu_trigger end scene', 'localtime' => 'PT00:01:00', 'autodelete' => $VAR1->{'1'}{'autodelete'} }, '4' => { 'localtime' => 'W124/T06:29:00', 'description' => 'L_04_njqbA_start wake up', 'created' => '2018-11-07T23:03:18', 'command' => { 'address' => '/api/r8X1c3wCpv8qMulPzRzSGV-OiN4QrHKq/sensors/5/state', 'body' => { 'flag' => $VAR1->{'1'}{'recycle'} }, 'method' => 'PUT' }, 'time' => 'W124/T05:29:00', 'name' => "Nat\x{fc}rlich Aufwachen Alex", 'status' => 'disabled', 'recycle' => $VAR1->{'1'}{'recycle'} }, '2' => { 'description' => 'L_04_A9Aeu_start wake up', 'localtime' => 'W124/T05:50:00', 'recycle' => $VAR1->{'1'}{'recycle'}, 'status' => 'disabled', 'name' => "Nat\x{fc}rlich Aufwachen Elke", 'time' => 'W124/T04:50:00', 'command' => { 'method' => 'PUT', 'address' => '/api/r8X1c3wCpv8qMulPzRzSGV-OiN4QrHKq/sensors/4/state', 'body' => { 'flag' => $VAR1->{'1'}{'recycle'} } }, 'created' => '2018-11-05T05:49:50' } } 2018-12-30 01:36:00 dummy Wecker hueElkeLichtWecker: disabled 2018-12-30 01:36:00 dummy Wecker hueAlexLichtWecker: disabled 2018-12-30 01:36:00 dummy Wecker sonosSZenabled: 0
Wenn nur toggleWakeupSchedules läuft, sieht es so aus:
2018-12-30 01:41:12 dummy Wecker on 2018-12-30 01:41:12 dummy Wecker hueElkeLichtWeckerReturn: [ { 'success' => { '/schedules/2/status' => 'enabled' } } ] 2018-12-30 01:41:12 dummy Wecker hueAlexLichtWeckerReturn: [ { 'success' => { '/schedules/4/status' => 'enabled' } } ] 2018-12-30 01:41:12 SONOSPLAYER Sonos_Schlafzimmer LastActionResult: SetAlarm: #1: Success!, 2018-12-30 01:41:12 SONOS Sonos LastProcessAnswer: 1546130472 2018-12-30 01:41:13 SONOSPLAYER Sonos_Schlafzimmer AlarmList: {'1' => {'Recurrence_Saturday' => 0,'Recurrence_Friday' => 1,'IncludeLinkedZones' => '0','Recurrence_Wednesday' => 1,'Recurrence_Monday' => 1,'Recurrence_Once' => 0,'Volume' => '13','Duration' => '01:40:00','StartTime' => '06:00:00','Recurrence_Tuesday' => 1,'ProgramMetaData' => 'Radio Gong 96.3object.item.audioItem.audioBroadcastSA_RINCON67591_','ProgramURI' => 'x-sonosapi-stream:STATION%3a41483?sid=264&flags=8224&sn=2','Repeat' => 1,'Recurrence_Sunday' => 0,'Enabled' => '1','Shuffle' => 1,'RoomUUID' => 'RINCON_949F3EC0DF0201400','Recurrence_Thursday' => 1}}
-
So. Wieder mein Fehler. Ist auch schon spät. :lol:
Nachdem ich den richtigen Parameter auf true gesetzt habe:
fhem.0 2018-12-30 01:46:53.502 info event (FHEM) "]" fhem.0 2018-12-30 01:46:53.502 info event (FHEM) " }" fhem.0 2018-12-30 01:46:53.502 info event (FHEM) " }" fhem.0 2018-12-30 01:46:53.502 info event (FHEM) " '/schedules/2/status' => 'disabled'" fhem.0 2018-12-30 01:46:53.502 info event (FHEM) " 'success' => {" fhem.0 2018-12-30 01:46:53.502 info event (FHEM) " {" fhem.0 2018-12-30 01:46:53.501 info event (FHEM) "dummy Wecker hueElkeLichtWeckerReturn: [" fhem.0 2018-12-30 01:46:53.501 info event FHEM(s) "dummy Wecker off" > fhem.0.Wecker.state off fhem.0 2018-12-30 01:46:53.501 info event (FHEM) "dummy Wecker off"
Das passiert in iobroker, wenn ich den Button betätige.
Ich glaube, jetzt kommen wir der Sache auf die Spur! Das ergibt zusammen mit den in fhem angezeigten Events ein Bild. :?
-
Dann muss das Problem ja im 1.script auftauchen….
Wenn du fhem.0.info.Settings.logEventFHEM auf true setzt bekommmst du keine events aus FHEM im Log von ioBroker?
-
Ja sit wirklich spät
Aber da sind die gesuchten events
Ich änder kurz was am Adapter…..
-
Dann muss das Problem ja im 1.script auftauchen….
Wenn du fhem.0.info.Settings.logEventFHEM auf true setzt bekommmst du keine events aus FHEM im Log von ioBroker? `
Siehe oben. Ich hatte versehentlich .logEventFHEMstate auf true gesetzt, statt .logEventFHEM. :roll: :lol:
-
Hihi….ja gar nicht so leicht um die Zeit
Ok wir machen noch eine schnelle Lösung zum Problem:
Unter fhem.0.info.Configurations.ignoreReadings trägst du mal alle deine Readings wie hueElkeLichtWeckerReturn usw mit Komma getrennt ein
Problem sind die "/n" = Zeilenumbruch in deinen Readings
-
Wenn du alles in FHEM machst könnte das ja für dich auch interessant sein
1. In FHEM wird automatisch ein dummy send2ioB im Raum ioB_System angelegt.
2. Mit "set send2ioB [Objekt in ioBroker] [Wert]" können states im ioBroker gesetzt werden.
zB set send2ioB alexa2.0.Echo-Devices.[deine id].Commands.speak FHEM lässt Alexa sprechen
3. Es erfolgt eine Prüfung ob Objekt vorhanden und Write=true ist
Was machst du mit ioBroker? VIS?
-
Wo muss das rein?
Unter "Wert"?
Oder unter "Name", wo schon "ignore Readings = currentTrackPositionSimulated,currentTrackPositionSimulatedSec + Wert" steht?
Ich habe jetzt unter "Wert" folgendes stehen:
hueAlexLichtWeckerReturn,hueElkeLichtWeckerReturn,hueSchedulesList
Leider werden die Readings nicht ignoriert und der Adapter stürzt weiterhin ab.