State abfragen und setzen bei Timer (at)

Begonnen von Funsailor, 03 September 2024, 15:30:40

Vorheriges Thema - Nächstes Thema

Funsailor

Hallo,
ich möchte den Status eines Timers in SmartVisu anzeigen und ändern.
Den Timer habe ich schlicht und einfach in Fhem definiert:
define GartenWasserAutomatikMorgens at *13:30 set GartenWasserAutomatikOn  On
Ist der Timer aktive wird im Status der nächste Start angezeigt:
state Next: 13:30:00 2024-09-03 14:58:45bzw. inaktive:
state inactive 2024-09-03 14:59:56
Hier der List des Timers:
Internals:
   COMMAND    set GartenWasserAutomatikOn  On
   DEF        *13:30 set GartenWasserAutomatikOn  On
   FUUID      5c5b3835-f33f-088a-b15a-3971b38ef9c4e7ae
   NAME       GartenWasserAutomatikMorgens
   NR         363
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      inactive
   TIMESPEC   13:30
   TRIGGERTIME 1725449400
   TRIGGERTIME_FMT 2024-09-04 13:30:00
   TYPE       at
   eventCount 56
   READINGS:
     2024-09-03 14:59:56   state           inactive

In Smartvisu habe ich folgende Zeile eingefügt:
                 {{ basic.stateswitch('AutomatikMorgens', 'AutomatikMorgens.sw', 'icon', ['0', '1'],    icon0~'sani_irrigation_automatic.svg') }}                                 

Im GAD Editor habe ich folgendes Eingetragen:
      "AutomatikMorgens.sw" : {
         "set" : "state",
         "reading" : "state",
         "converter" : "DirectSetReading",
         "type" : "item",
         "device" : "GartenWasserAutomatikMorgens"
      }

unter Verwendung der Routine DirectSetReading vom fhainz:
https://forum.fhem.de/index.php?topic=33231.270

Allerdings bekomme ich von Smartvisu aus den Status lediglich von "0 -> 1" bzw. "1 - > 0" gesetzt.
Ändere ich in FHEM den Status von "inactive" auf "active" wird das von Smartvisu umgesetzt, die Änderung von "inactive" auf "active" ignoriert Smartvisu :-\

Ändere ich im GAD Editor das cmd set auf "modifyTimeSpec" bekomme ich die Fehlermeldung
set GartenWasserAutomatikMorgens modifyTimeSpec  : Wrong timespec : either HH:MM:SS or {perlcode}
Hat jemand dazu eine Idee?



- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Zitat von: Funsailor am 03 September 2024, 15:30:40Ändere ich in FHEM den Status von "inactive" auf "active" wird das von Smartvisu umgesetzt, die Änderung von "inactive" auf "active" ignoriert Smartvisu :-\
Welche Richtung funktioniert nicht? Das kommt hier nicht klar heraus. SmartVISU reagiert auf jede Änderung zwischen den Werten 0 und 1, die über den Websocket empfangen wird. Ob ein Wert von fronthem geschickt wird, kannst Du in der Konsole sehen, wenn Du im Treiber ./driver/io_fhem.js den Loglevel auf 2 stellst.

Gruß
Wolfram

Funsailor

Hallo Wolfram,
danke für die schnelle Antwort.
Es stimmt, wenn ich in Smartvisu den Button betätige, wird der state in FHEM von 0 auf 1 (bzw. umgekehrt) gesetzt.
Setze ich in FHEM den Status von inactive auf active, wird folgendes gesendet:
[io.fhem]: socket.onmessage: data= {"cmd":"item","items":["AutomatikMorgens.sw","Next: 13:30:00"]}und das Symbol in Smartvisu wird grün
Ändere ich den Status in FHEM von active auf inactive, wird [io.fhem]: socket.onmessage: data= {"cmd":"item","items":["AutomatikMorgens.sw","inactive"]}gesendet, aber das Symbole in Smartvisu zeigt weiterhin active an.

Was mir jetzt noch aufgefallen ist:
Mache ich in Smartvisu ein Update der Seite (z.B.: Strg F5) wird die AutomatikMorgens immer als inactive angezeigt, auch wenn der Timer active ist!
Es wird immer folgendes gesendet:
[io.fhem]: socket.onmessage: data= {"cmd":"item","items":["AutomatikMorgens.sw",null]} io_fhem.js:158:15

- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Okay, ich hatte das so interpretiert, dass das item "AutomatikMorgens.sw" nur die Werte 0 und 1 annehmen kann, während "GartenWasserAutomatikMorgens" die Werte "Next: 13:30:00" und "inactive" annimmt. Da aber "AutomatikMorgens.sw" die letztgenannten Werte annimmt, musst Du den Aufruf des Stateswitch anders formulieren:
{{ basic.stateswitch('AutomatikMorgens', 'AutomatikMorgens.sw', 'icon', ['inactive', 'irgendwas'],    icon0~'sani_irrigation_automatic.svg') }}Hier kommt eine Besonderheit des Widgets zum Tragen: alle icons für die Werte aus der Werteliste sind bereits auf der Seite angelegt und werden versteckt. Beim Update des items durchsucht das Widget die Werteliste und zeigt bei der ersten Übereinstimmung das zugehörige icon an. Falls kein passender Wert gefunden wird, wird das letzte icon angezeigt. Das passt in Deinem Fall ganz gut, weil sich die Zeitangabe hinter "Next:" ja auch ändern kann. Insofern kannst Du tatsächlich "irgendwas" reinschreiben.

Gruß
Wolfram

Funsailor

#4
Hallo Wolfram,
prima, das funktioniert nun in beide Richtungen.
Das Problem mit dem Update in SmartVisu bliebt allerdings bestehen.
Aus irgendeinem Grund sendet FHEM eine "null"

[io.fhem]: socket.onmessage: data= {"items":["AutomatikMorgens.sw",null],"cmd":"item"}
Grüße

Michael

Edit:

Ich denke es liegt am Converter, der macht wahrscheinlich hier Mist:
  if ($param->{cmd} eq 'get')
  {
    $event = ($reading eq 'state')?main::Value($device):main::ReadingsVal($device, $reading, '');
    $param->{cmd} = 'send';
  }

Ich würde mir da gerne ein paar Werte ansehen, allerdings klappt das irgendwie nicht.
Bisher habe ich dann mit Log 1 "...." gearbeitet, allerdings geht das im Namespace von fronthem nicht, da dort eine Funktion Log gibt... die meckert dann an, das er den String 1 nicht verwenden kann.

error doing $result = fronthem::DirectSetReading($param); Can't use string ("1") as a HASH ref while "strict refs" in use at ./FHEM/99_fronthemUtils.pm line 616.Ich habe auch einen eigene Log-Funktion gebastelt, die macht aber auch nicht....
###############################################################################
#
# MyDebugLog
#
###############################################################################
##package main;
package fronthem;
use strict;
use warnings;

sub MyDebugLog($) {
  print
  my ($myState) = @_;

    my $fileName = '/opt/fhem/log/MyLog.log';

    print " Test ";
    print ($fileName );

    if(open (DATEI, ">> $fileName")) {
    print (DATEI Zeitstempel().$myState."\n");
    close (DATEI);
       }
      else
      {
       return "Can't open $fileName: $!";
      }
}

Da passiert überhaupt nix....

Aufruf:
MyDebugLog ($param);
MyDebugLog ("Geht da was?");
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Da ich von fhem so gut wie keine Ahnung habe, kann ich Dir nicht wirklich weiter helfen. Dennoch ein Hinweis zur Funktionsweise von smartVISU:
Beim Laden einer Seite wird eine Liste aller auf der Seite verwendeten items erstellt und mit dem Kommando "monitor" an das Backend geschickt. Ab dann reagiert der Treiber von smartVISU nur noch auf events mit eingehenden Daten vom Websocket. Das ist das, was Du in der Konsole als "socket.onmessage" siehst.
Das Backend muss jetzt zwei Aufgaben erfüllen:
  • den aktuellen Wert jedes angefragten items ermitteln und übertragen -> das funktioniert bei Deinem item nicht
  • jedes item für die Übertragung von updates registrieren, so dass ein event ausgelöst wird, wenn das item ein update erfährt -> das funktioniert bei Deinem item
Den Verdacht, dass die get-Methode im Konverter dafür verantwortlich ist, kann ich nachvollziehen. Du kannst ja in der fhem-Konsole mal prüfen, was main::Value('GartenWasserAutomatikMorgens') im Vergleich zu main::ReadingsVal('GartenWasserAutomatikMorgens', 'state', '') liefert.

Gruß
Wolfram

Funsailor

Hallo Wolfram,
beide Abfragen liefern das selbe Ergebnis zurück

Next: 13:30:00
Im "Monitor" Kommando werden sehr viele Einstellungen angefordert, das funktioniert schon mal richtig  ;) Ich habe die Anfrage sehr stark gekürzt.

send() data: {"cmd":"monitor","items":["AlarmAnlage.sw","BueroDrucker.sw","UGHeizungsKellerFeuchte.sw","Pumpe.sw","RegnerVorgarten.sw","RegnerGartenRechts.sw","RegnerGartenLinks.sw","RegnerRasen.sw","AutomatikMorgens.sw","UGHobbyRaumLichtStatus.sw","UGHobbyRaumTuerStatus.sw",
Jetzt muss ich nur noch herausfinden was an dem Konverter nicht richtig läuft
Grüße
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

alkazaa

#7
Zitat von: Funsailor am 04 September 2024, 13:14:35Ich habe auch einen eigene Log-Funktion gebastelt, die macht aber auch nicht....
Ich arbeite arbeite bei solchen Fehlersuchaktionen gerne mit main::Debug(), an den passenden Stellen in FHEM/fhconverter.pm eingeschoben.

Funsailor

#8
Hallo alkazaa,
prima, jetzt sehe ich endlich etwas in der Log Datei....
Ich hätte das wegen der Übersichtlichkeit lieber in einer eigenen Datei, aber ich bin jetzt erstmal zufrieden O:-)

Gruß
Michael

Ich habe jetzt mit
main::FileWrite({ FileName=>"/opt/fhem/MyLog.log"},ForceType=>"file", NoNL => 0},'testtest');
etwas in eine estra Datei schreiben können, allerdings wird immer nur eine Zeile erzeugt bzw. Jedesmal wenn ich die Funktion antriggere wird eine neue Datei erzeugt... Ich kenne das mit "append"
Wo finde ich dazu ein Beispiel bzw. Erklärung?
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

wvhn

Zitat von: Funsailor am 05 September 2024, 15:18:35beide Abfragen liefern das selbe Ergebnis zurück

Next: 13:30:00
Das müsstest Du nochmal direkt nach einem Neuladen der Visu-Seite testen. Hintergrund: beim Seitenwechsel oder Neuladen werden alle bisherigen Abonnements von items gelöscht und die ,,neuen" items werden abonniert. Vielleicht löst das Löschen der Abonnements ja im Koverter das unerwünschte Verhalten aus.

Gruß
Wolfram

Funsailor

Hallo Wolfram,
ich arbeite ja in der "99_myUtils.pm" und habe dort die Änderungen gemacht.
Ich habe auch immer brav ein "reload 99_myUtils.pm" in der Kommandozeile durchgeführt.
Heute habe ich zusätzlich ein Restart FHEM durchgeführt .... Seitdem funktionuiert alles wie es soll. Keine Ahnung warum....

Vielen Danke für deine Hilfe
Gruß

Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -