Neues Modul readingsGroup

Begonnen von Niko, 24 August 2013, 11:59:11

Vorheriges Thema - Nächstes Thema

peterk_de

ARGH du glaubst nicht wieviele Stunden meines Lebens ich daran bis eben vergeudet hatte... mindestens 2. DANKE!
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Elektrolurch

Hallo Andre,

ich habe eine Gruppe von dummys zur Rolladensteuerung und Programmierung der Öffnungs- und Schließzeiten nun in eine readingsGroup gepackt. Mit den einzelnen dummys klappte alles.
In der readingsGroup gibt es jetzt aber zwei Probleme:
1. Ich kann verschiedene werte einstellen und die dann mit "set" zu einer Aktion veranlassen.
Dazu habe ich folgendes command für die rg definiert:
attr Rolladen_rg commands {'RolladenOpenClose.Minuten' => 'Minuten:-,0,10,20', 'RolladenOpenClose.set' => 'set:set'...}

An dem RolladenOpenClose hängt ein notify, was einen Log-Eintrag generiert, wenn was eintrifft.
Werden die "Minuten" geändert, dann wird das notify getriggert. Beim Klick auf "set" in der readingsGroup kommt nichst, klicke ich auf das seperate dummy auf einer anderen room-Seite, kommt "set" als Event.
Was habe ich da in der rg falsch gemacht?
so habe ich es auch schon probiert: ...=> 'set:'
dann kommt aber auch nichts.
Auch im Eventmonitor ist nichts zu sehen.
2. Wird die Seite mit der Rolladensteuerung in der readingsGroup aufgerufen und ein Wert bspw. aus einem Klappmenü geändert, so kommen folgende Logeinträge:

Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.
Use of uninitialized value in hash element at ./FHEM/01_FHEMWEB.pm line 1214.
Use of uninitialized value in split at ./FHEM/01_FHEMWEB.pm line 1221.
Use of uninitialized value in hash element at ./FHEM/01_FHEMWEB.pm line 1214.
Use of uninitialized value in split at ./FHEM/01_FHEMWEB.pm line 1221.
Use of uninitialized value in hash element at ./FHEM/01_FHEMWEB.pm line 1214.
Use of uninitialized value in split at ./FHEM/01_FHEMWEB.pm line 1221.

Jetzt habe ich mal vor die line 580 in der readingsGroup eine Log-Zeile eingebaut.
Da sieht man wie nacheinander RolladenSelektor mit Menü Raum, den Knopf set und danach der RolladenWochentagSelektor und die dummy RolladenOpen und RolladenClose mit den readings ab,Sperrzeit,Minuten,mode und set-Knopf aufgerufen werden.
Könnte es sein, dass das set-reading keinen value hat und daher die Ausgaben im Log kommen?
Und daher auch der Link nicht funktioniert?

2014.05.13 15:42:04 1: readingsGroup line 580 html_text <td colspan='2'><form method="post"><input type="hidden" name="arg.RolladenSelektor" value="Aktion"/><input type="hidden" name="dev.RolladenSelektor" value="RolladenSelektor"/><input type="hidden" name="room" value="Rolladen"/>Aktion&nbsp;<select onchange="submit()" id="RolladenSelektor-Aktion" informId="RolladenSelektor-Aktion" name="val.RolladenSelektor" class="dropdown"><option value='offen'>offen</option>
<option selected="selected" value='Sonnenschutz'>Sonnenschutz</option>
<option value='Dämmerung'>Dämmerung</option>
<option value='gesperrt'>gesperrt</option>
<option value='geschlossen'>geschlossen</option>
</select><input type="hidden" name="cmd.RolladenSelektor" value="set"/></form></td>
Use of uninitialized value $htmlTxt in concatenation (.) or string at ./FHEM/33_readingsGroup.pm line 579.
2014.05.13 15:42:04 1: readingsGroup line 580 html_text
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.
2014.05.13 15:42:04 1: readingsGroup line 580 html_text <td colspan='2'><form method="post"><input type="hidden" name="arg.RolladenWochentagSelektor" value="state"/><input type="hidden" name="dev.RolladenWochentagSelektor" value="RolladenWochentagSelektor"/><input type="hidden" name="room" value="Rolladen"/><select onchange="submit()" id="RolladenWochentagSelektor-state" informId="RolladenWochentagSelektor-state" name="val.RolladenWochentagSelektor" class="dropdown"><option value='Montag'>Montag</option>
<option value='Dienstag'>Dienstag</option>
<option value='Mittwoch'>Mittwoch</option>
<option value='Donnerstag'>Donnerstag</option>
<option value='Freitag'>Freitag</option>
<option value='Samstag'>Samstag</option>
<option value='Sonntag'>Sonntag</option>
<option value='Alle'>Alle</option>
<option selected="selected" value='Werktage'>Werktage</option>
<option value='Wochenende'>Wochenende</option>
</select><input type="hidden" name="cmd.RolladenWochentagSelektor" value="set"/></form></td>
2014.05.13 15:42:04 1: readingsGroup line 580 html_text <td colspan='2'><form method="post"><input type="hidden" name="arg.RolladenOpen" value="ab"/><input type="hidden" name="dev.RolladenOpen" value="RolladenOpen"/><input type="hidden" name="room" value="Rolladen"/>ab&nbsp;<select onchange="submit()" id="RolladenOpen-ab" informId="RolladenOpen-ab" name="val.RolladenOpen" class="dropdown"><option value='aus'>aus</option>
<option value='Uhrzeit'>Uhrzeit</option>
<option selected="selected" value='Sonnenaufgang'>Sonnenaufgang</option>
</select><input type="hidden" name="cmd.RolladenOpen" value="set"/></form></td>
Use of uninitialized value $htmlTxt in concatenation (.) or string at ./FHEM/33_readingsGroup.pm line 579.
2014.05.13 15:42:04 1: readingsGroup line 580 html_text
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.
2014.05.13 15:42:04 1: readingsGroup line 580 html_text <td colspan='2'><form method="post"><input type="hidden" name="arg.RolladenOpen" value="Minuten"/><input type="hidden" name="dev.RolladenOpen" value="RolladenOpen"/><input type="hidden" name="room" value="Rolladen"/>Minuten&nbsp;<select onchange="submit()" id="RolladenOpen-Minuten" informId="RolladenOpen-Minuten" name="val.RolladenOpen" class="dropdown"><option value='-'>-</option>
<option value='0'>0</option>
<option value='15'>15</option>
<option value='30'>30</option>
<option value='45'>45</option>
<option value='60'>60</option>
</select><input type="hidden" name="cmd.RolladenOpen" value="set"/></form></td>
2014.05.13 15:42:04 1: readingsGroup line 580 html_text <td colspan='2'><form method="post"><input type="hidden" name="arg.RolladenOpen" value="mode"/><input type="hidden" name="dev.RolladenOpen" value="RolladenOpen"/><input type="hidden" name="room" value="Rolladen"/>mode&nbsp;<select onchange="submit()" id="RolladenOpen-mode" informId="RolladenOpen-mode" name="val.RolladenOpen" class="dropdown"><option value='-'>-</option>
<option selected="selected" value='normal'>normal</option>
<option value='soft'>soft</option>
</select><input type="hidden" name="cmd.RolladenOpen" value="set"/></form></td>
Use of uninitialized value $htmlTxt in concatenation (.) or string at ./FHEM/33_readingsGroup.pm line 579.
2014.05.13 15:42:04 1: readingsGroup line 580 html_text
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.
2014.05.13 15:42:04 1: readingsGroup line 580 html_text <td colspan='2'><form method="post"><input type="hidden" name="arg.RolladenClose" value="ab"/><input type="hidden" name="dev.RolladenClose" value="RolladenClose"/><input type="hidden" name="room" value="Rolladen"/>ab&nbsp;<select onchange="submit()" id="RolladenClose-ab" informId="RolladenClose-ab" name="val.RolladenClose" class="dropdown"><option value='aus'>aus</option>
<option value='Uhrzeit'>Uhrzeit</option>
<option selected="selected" value='Sonnenuntergang'>Sonnenuntergang</option>
</select><input type="hidden" name="cmd.RolladenClose" value="set"/></form></td>
Use of uninitialized value $htmlTxt in concatenation (.) or string at ./FHEM/33_readingsGroup.pm line 579.


Wird die Seite mit den einzelnen dummys aufgerufen und dort ein Wert geändert, so kommen keine Log-Einträge.
Die darzustellenden Werte sind auch alle definiert.
Keine Ahnung, was da falsch ist.

Das dritte Problem ist die "0" in einer Aufklappliste. Das gehört wahrscheinlich hier nicht hin, aber ev. weißt Du ja, an wen ich das adressieren kann.

Beispiel:

define td dummy
attr td room td
attr td setList Minuten:-,0,1,2
attr td webCmd Minuten

Setzt man das reading auf 2, so ist auch das Klappmenü vorselektiert auf 2.
Setzt man das reading auf 0, so kommt der oberste Eintrag "-" stattdessen.
Der oberste Eintrag kommt immer dann, wenn das reading einen Wert hat, den es im Menü nicht finden kann.
In dem Fall "0" ist aber der Wert in der Menüliste, wird trotzdem aber nicht angezeigt.


Den "-" benötige ich, wenn ich von mehreren devices gleiche readings einsammele und die nicht vom Wert identisch sind, z.B. die Minuten nach Sonnenuntergang, wenn die Rolladen schließen sollen.
Dann kann man einen Wert auswählen und den auf allen devices dann identisch setzen.

Da ist bestimmt irgendwo in der fhemweb eine Abrage auf if(!$value... und da müsste wahrscheinlich ein If(!defined($value ... hinein?

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

Hallo Andre,

zu meinem obigen post:

Könnte es sein, dass ich beim Modifier "set:" kein Event bekomme, weil es von der readingsGroup als Kommando der Form "set <devicename> <wert>" interpretiert wird?

wird der dummy solo, also ohne Einbindung in die rg angeklickt, dann kommt ja das Event an, nur nicht, wernn der dummy in einer Zeile in der rg steht.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

das set wird intern genau so weiter gereicht wie ein set aus devStateIcon oder aus webCmd. auf fhem seite wird es genau so abgearbeitet wie ein set das per telnet oder in der command box eingegeben wird.

siehst du irgendetwas im event Monitor?

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

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

Elektrolurch

Hallo Andre,

an dem dummy hängt ein notify. Klicke ich auf den "set" link des dummys (das ist ein reading, dass "set" heißt) so kommt das Event im notify an. In der Zeile der readingsGroup, wo das dummy eingebaut ist, gibt es für den "set" Link weder im notify noch im Eventmonitor irgendein Ereignis. Alle anderen Readings des dummys, wie z.B. Minuten und Uhrzeit (beides sind Auswahlmenüs), funktionieren sowol direkt am dummy, als auch in der ReadingsGroup einwandfrei. Nur halt das "set" nicht.
Daher meine Vermutung, dass attr commands rg {'RolladenSelektor.set' => 'set:'}
wegen dem Schlüsselwort "set" nicht als readings - Name, sondern als set - Befehl interpretiert werden könnte.

Gruß
Elektrolurch
configDB und Windows befreite Zone!

justme1968

jetzt verstehe ich was du meinst. das hängt unter umständen davon ab wie genau es konfiguriert ist.

kannst du bitte mal ein komplettes beispiel machen das das problem zeigt. ich schaue es mir dann an.

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

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

Elektrolurch

Hallo Andre,

ich hänge Dir mal die 00-utilsRolladen.cfg und die zwei Perl-Module dazu an.
Da das über dummys und einem FS20 funktioniert, sollte man das so testen können.
Die dummys RolladenSelektor,RolladenOpen,RolladenClose haben jeweils einen "set" - Knopf um die Daten der Zeitprogrammierung bei den Rolladen zu hinterlegen, bzw. den ausgewählten Rolladen direkt zu verfahren.
An den drei dummys hängen notifys und da werden die verschiedenen Einstellmöglichkeiten weiterverarbeitet (z.B. Die Uhrzeit mit ":", welches rg derzeit noch nicht mag -> kein Menü :-))

Unten in der cfg-Datei ist dann die rg definiert.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

Hallo Andre,

nochmal an einem ganz primitiven Beispiel, in der readingsGroup wird definitiv nicht der link von "set" aufgerufen,´beim dummy schon.

define td dummy
attr td room td
attr td setList Minuten:-,0,1,2,3
attr td webCmd Minuten:set

define td_rg readingsGroup <meinDummy> td:Minuten,set
attr td_rg commands {'Minuten' => 'Minuten:-,0,1,2,3,4', 'set' => 'set:'}
attr td_rg room td
define td_not notify td:.* {td_not($NAME,$EVENT);;}

# und die Sub dazu



sub td_not($$)
{
my ($name,$event) = @_;
Log(3,"td_not: name: $name event $event");
my $hash = $defs{$name};

my ($rd,$val) = split(' ',$event);
($rd) = split(':',$rd);
if($rd eq 'Minuten')
{
readingsSingleUpdate($hash,$rd,$val,1);
}
elsif($rd eq 'set')
{
readingsSingleUpdate($hash,'set','set',1);
}

} # end sub td_not
###################

Wenn man in der ReadingsGroup bei dem dummy td auf "set" klickt, kommen statt dem Event folgende Fehlermeldungen:

Use of uninitialized value $values in pattern match (m//) at ./FHEM/01_FHEMWEB.pm line 2419.
Use of uninitialized value $values in pattern match (m//) at ./FHEM/01_FHEMWEB.pm line 2394.
Use of uninitialized value $values in pattern match (m//) at ./FHEM/01_FHEMWEB.pm line 2483.
Use of uninitialized value $values in string ne at ./FHEM/01_FHEMWEB.pm line 2428.
Use of uninitialized value $values in split at ./FHEM/01_FHEMWEB.pm line 2446.
Use of uninitialized value $htmlTxt in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 580.


Bei Auswahl von "Minuten" aus dem Menü steht korrekt im Log:

2014.05.26 10:49:48 3: td_not: name: td event Minuten 3

Bitte kläre mich auf, aber ich kann da bei mir keinen Fehler erkennen....
Außerdem: versuche mal in dem Beispiel den Wert "0" für Minuten auszuwählen, dann kommt nicht "0" in der Anzeige, sondern der erste Menüeintrag, alsos "-".
Obwohl im Log korrekt steht und per singleUpdate das Reading auf 0 gesetzt wird:
2014.05.26 11:06:07 3: td_not: name: td event Minuten 0
2014.05.26 11:06:07 3: td_not return value: Minuten: 0

Irgendwie können die Menülisten nicht korrekt mit dem Wert "0" umgehen.


Und könntest Du das bei Gelegenheit mit dem ":" fixen, damit so was auch geht:

..comands {'uhrzeit' => 'Uhrzeit:19:00:20:00:21:00'}
Mit der ersatzweisen Verwendung von "\x03a.. ist nicht so schön, da dann die Definitionen unlesbar wären.

Gruß


Elektrolurch

 
configDB und Windows befreite Zone!

justme1968

ich dachte ich hatte das problem verstanden aber ich glaube es wird mir erst jetzt mit dem kurzen beispiel klar...

ich muss noch mal fragen was das set denn genau machen soll. der dummy kann damit nichts anfangen. als webCmd ist es unvollständig und als 'set...' kommando auch.

wenn ich es richtig verstehe soll einfach nur ein event generiert werden. dafür brauchst du in deinem commands doch nur ein mapping 'set' => "trigger $DEVICE set"damit wird dein event getriggert.

zu der sache mit dem doppelpunkt: ich weiss jetzt woran es liegt. hab es aber noch nicht repariert. kommt heute oder morgen mit einem kleinen update.

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

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

Elektrolurch

Genau, ich will ein Event Triggern, was set heißt. Mit attr td webCmd Minuten:set funktioniert es ja genau so und da Du geschrieben hast, dass die Events nur einfach "durchgereicht" werden, habe ich mich schon stark gewundert.
Aber warum funktioniert es dann mit dem Menü "Minuten"?

Das da:
'set' => "trigger $DEVICE set"
ist mir völlig neu.
Meine Bitte: Könntest Du das in die commandref mit aufnehmen, dann wäre es perfekt...
Danke.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

das das set bei den webCmds funktioniert ist zufall. es ist so als würdest du 'set <device>' eingeben. ohne parameter. auf der commandozeile wird das mit einer fehlermeldung abgefangen.

das set: funktioniert nicht weil du in der setList kein zugehöriges set definiert hast sondern nur die Minuten. und das set dort kannst du nicht konfigurieren weil es eben keine parameter hat.

in der command ref sind zwei möglichkeiten für das commands mapping beschrieben:
- ein beliebiges fhem kommando wie du es auch auf der kommando zeile scheinen würdest
- die version die ein dropdown menü oder slider oder anderes widget zur auswahl des parameters einblendet.

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

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

justme1968

das mit dem : bei den uhrzeiten ist repariert.

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

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

Elektrolurch

Perfekt und vielen Dank.
Jetzt fehlt mir nur noch die MMöglichkeit, die erste Spalte individuell zu gestalten oder zumindest komplett auszublenden.
Ich habe ja rg's im Einsatz, in dem ich zu ein und demselben device in verschiedenen Zeilen jeweils mehrere Werte anzeigen möchte und da macht es keinen Sinn, dass in der ersten Spalte immer der device-Namen oder das alias steht. Ich würde da gerne so individuelle Worte wie:
Puffertemperatur .. und dann kommen akt,min,max
Kollektortemperatur ... akt,min,max
voranstellen.

Leider kann man mit:
attr meinerg mapping <{undef}> oder  durch Löschen des Attributes "mapping" die erste Spalte nicht verschwinden lassen.
Mit ..maping<&nbsp;> steht zwar dann da kein Text mehr da, aber die Spalte bleibt trotzdem da.
Ich habe schon alles mögliche ausprobiert, aber ohne Erfolg.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Haecksler

Hallo zusammen,
gibt es auch die Möglichkeit ein Icon größer Darzustellen, wie man das z.B. mit dem Text machen kann?

Ich würde gerne den Füllstand meiner Zisterne visualiseren, sprich ein Icon mit Behälterzeichnung und unterschiedlichem Füllstand.

Das mit den unterschiedlichen Icons in Abhängigkeit vom Füllstand bekomme ich (vermutlich 8)) hin, stellt sich nur noch die Frage wie ich die Icons größer bekomme.

Hat jemand eine Idee?

Gruß,
Stefan

justme1968

die größe der icons wird über die stylesheets bestimmt. du kannst versuchen die relevanten parameter über die unterschiedlichen style attribute zu ändern.

den füllstsand kann man ausser mit icons auch noch mit direktem html code darstellen. vielleicht ist das ja auch etwas für dich. schau mal hier für ein beispiel: http://forum.fhem.de/index.php/topic,11609.msg68591.html#msg68591

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

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