Und noch eine Müllabfuhr-Visualisierung :)

Begonnen von hexenmeister, 18 Januar 2015, 17:01:15

Vorheriges Thema - Nächstes Thema

hexenmeister

Das ist kein PerlCode, das ist FHEMBefehl.
Um so etwas aus Perl aufzurufen existiert Befehl fhem: {fhem("get abfallkalendar days 2")}

bumbumb

Hallo ,
meine fhem.cfg sieht so aus

define abfallkalender holiday
define rgAbfallkalender readingsGroup abfallkalender:!title\
abfallkalender:!day|0,!Restabfall|0,!Leichtverpackungen|0,!Papier|0,!Bioabfall|0,!O-Tonne|0,!Tannenbaum|0\
abfallkalender:!day|1,!Restabfall|1,!Leichtverpackungen|1,!Papier|1,!Bioabfall|1,!O-Tonne|1,!Tannenbaum|1\
abfallkalender:!day|2,!Restabfall|2,!Leichtverpackungen|2,!Papier|2,!Bioabfall|2,!O-Tonne|2,!Tannenbaum|2\
abfallkalender:!day|3,!Restabfall|3,!Leichtverpackungen|3,!Papier|3,!Bioabfall|3,!O-Tonne|3,!Tannenbaum|3\
abfallkalender:!day|4,!Restabfall|4,!Leichtverpackungen|4,!Papier|4,!Bioabfall|4,!O-Tonne|4,!Tannenbaum|4\
abfallkalender:!day|5,!Restabfall|5,!Leichtverpackungen|5,!Papier|5,!Bioabfall|5,!O-Tonne|5,!Tannenbaum|5\
abfallkalender:!day|6,!Restabfall|6,!Leichtverpackungen|6,!Papier|6,!Bioabfall|6,!O-Tonne|6,!Tannenbaum|6\
abfallkalender:!day|7,!Restabfall|7,!Leichtverpackungen|7,!Papier|7,!Bioabfall|7,!O-Tonne|7,!Tannenbaum|7\
abfallkalender:!day|8,!Restabfall|8,!Leichtverpackungen|8,!Papier|8,!Bioabfall|8,!O-Tonne|8,!Tannenbaum|8\
abfallkalender:!day|9,!Restabfall|9,!Leichtverpackungen|9,!Papier|9,!Bioabfall|9,!O-Tonne|9,!Tannenbaum|9\
abfallkalender:!day|10,!Restabfall|10,!Leichtverpackungen|10,!Papier|10,!Bioabfall|10,!O-Tonne|10,!Tannenbaum|10\
abfallkalender:!day|11,!Restabfall|11,!Leichtverpackungen|11,!Papier|11,!Bioabfall|11,!O-Tonne|11,!Tannenbaum|11\
abfallkalender:!day|12,!Restabfall|12,!Leichtverpackungen|12,!Papier|12,!Bioabfall|12,!O-Tonne|12,!Tannenbaum|12\
abfallkalender:!day|13,!Restabfall|13,!Leichtverpackungen|13,!Papier|13,!Bioabfall|13,!O-Tonne|13,!Tannenbaum|13\
abfallkalender:!day|14,!Restabfall|14,!Leichtverpackungen|14,!Papier|14,!Bioabfall|14,!O-Tonne|14,!Tannenbaum|14
attr rgAbfallkalender alias Müllabfuhr
attr rgAbfallkalender nonames 1
attr rgAbfallkalender room Information
attr rgAbfallkalender valueColumns { title => 'colspan="7"' }
attr rgAbfallkalender valueFormat {if($READING eq 'title'){$VALUE="recycling"}else{my($r,$d)=split(/\|/,$READING);;;;my $v=fhem("get abfallkalender days $d",1);;;;if($v eq "none"){$VALUE=undef}else{if($r eq 'day'){if($d==0){$VALUE="Heute"}elsif($d==1){$VALUE="Morgen"}else{$VALUE="in $d Tagen"}}else{if($v=~m/$r/){$VALUE=1}else{$VALUE=' '}}}}}
attr rgAbfallkalender valueIcon {if($VALUE eq 'recycling'){$VALUE}elsif($VALUE eq 1){if($READING=~m/Restabfall/){$VALUE='bag'}elsif($READING=~m/Leichtverpackungen/){$VALUE='bag@FFFF00'}elsif($READING=~m/Papier/){$VALUE='bag@01A3F5'}elsif($READING=~m/Bioabfall/){$VALUE='bag@04D921'}elsif($READING=~m/O-Tonne/){$VALUE='dustbin@FF6D00'}elsif($READING=~m/Tannenbaum/){$VALUE='christmas_tree@2B6B17'}}else{$VALUE=''}}

Aber es kommt nur ein Link mit Müllabfuhr, aber keine Icons und keine Texte etc. was kann es sein ? Ich habe es wie auf seite 1 gemacht. Bitte helft mir danke

bumbumb

dazu kommt diese Fehlermeldung

ERROR:
rgAbfallkalender: unknown attribute cellStyle. Type 'attr rgAbfallkalender ?' for a detailed list. rgAbfallkalender: unknown attribute valueSuffix. Type 'attr rgAbfallkalender ?' for a detailed list.

hexenmeister

Hast Du auch die Datei abfallkalender.holiday erstellt? Dort stehen die entsprechenden Termine.

hexenmeister

Zitat von: bumbumb am 07 März 2015, 23:10:11
dazu kommt diese Fehlermeldung

ERROR:
rgAbfallkalender: unknown attribute cellStyle. Type 'attr rgAbfallkalender ?' for a detailed list. rgAbfallkalender: unknown attribute valueSuffix. Type 'attr rgAbfallkalender ?' for a detailed list.

Da bin ich verwirrt. cellStyle und valueSuffix sind gar nicht unter dem, was Du als Inhalt von deiner fhem.cfg beschreibst. Sollte aber.

Lege die holiday-Datei an. Lege das entsprechende Device an. Teste es. Dann erstelle das ReadingsGroup. Und füge nach und nach die Attribute hinzu. Am besten zeilenweise aus dem Webfrontend.

bumbumb

kannst du es etwas genauer beschreiben ist neuland für mich danke

hexenmeister

Zitat von: bumbumb am 07 März 2015, 23:38:49
kannst du es etwas genauer beschreiben ist neuland für mich danke
Genau deswegen wäre anzuraten, zuerst die Einsteiger-PDF zu lesen und sich mit den Gründsätzen von FHEM vertraut zu machen. Dann beschäftige Dich mit dem Holiday-Modul. Alles relevante steht im Commandref. Lies dort auch Grundlagen zum ReadingsGroup. Das bringt Dich wesentlich weiter.
Ansonsten kann ich wirklich nicht noch detaillierter beschreiben, als ich in diesem Thread bereit getan habe. Sorry.

Grüße,

Alexander


Von-XS1-Nach-FHEM

Der Kalender lauft habe allerdings noch diese Fehler im Log:

Was kann das sein?

Zitat
2015.03.15 07:34:25 1: PERL WARNING: Use of uninitialized value $lookup in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 339.
2015.03.15 07:34:26 1: Wochentag: 0,2

2015.03.14 18:56:06 1: PERL WARNING: Use of uninitialized value $lookup in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 339.
2015.03.14 18:56:07 1: Wochentag: 6,3

swinni

Hallo zusammen,

ich habe die Visualisierung per holiday-Datei seit einigen Wochen erfolgreich am Laufen und habe lediglich noch einen kleinen Schönheitsfehler in der Smallscreen-Ansicht, siehe Screenshots.
Die entsprechende Tonne wird immer nur in Schwarz angezeigt, alle anderen Farbdefinitionen der SVG per @ erscheinen nicht. Das Anzeigeproblem besteht wie erwähnt nur bei Smallscreen, bei anderen wie default oder Touch erscheint es wie es sein soll, siehe zweiter Screenshot.

Die Definition erfolgt im DEF folgendermaßen:

{if($VALUE eq 'recycling'){$VALUE}elsif($VALUE eq 1){if($READING=~m/Restmüll/){$VALUE='message_garbage@000000'}elsif($READING=~m/Wertstoff/){$VALUE='message_garbage@006400'}elsif($READING=~m/Papier/){$VALUE='message_garbage@0000FF'}}else{$VALUE=''}}

Kann mir jemand sagen was ich falsch mache bzw. ändern muss?

Danke im Voraus und viele Grüße,
Sven
RasPi 1 B+ mit HMLan: 3x HM-SEC-SD,  5x HM-SEC-SCo, 1x HM-SEC-SC-2 und mit CUL433 Clone für IT-Steckdosen sowie ein Surfstick für SMS-Benachrichtigung per gammu.
Frontend im Einsatz: TabletUI für Wandtablet und zusätzlichen Anpassungen für Smartphones

DanHard

Hallo Zusammen

Danke erstmal für die super Visualisierung der Müllabfuhr. Konnte alles erfolgreich einrichten.
Nun wollte ich noch eine kleine Änderung machen und zwar die Funktion mit
elsif($d>1 and $d<7){$VALUE=DayName($d)

Leider zeigt die ReadingsGroup nach der Änderung keine Daten mehr an.
Hier die komplette Konfig:

Internals:
   CFGFN
   DEF        kalender:!title\ kalender:!day|0,!Altpapier|0,!Karton|0,!Waschtag|0\ kalender:!day|1,!Altpapier|1,!Karton|1,!Waschtag|1\ kalender:!day|2,!Altpapier|2,!Karton|2,!Waschtag|2\ kalender:!day|3,!Altpapier|3,!Karton|3,!Waschtag|3\ kalender:!day|4,!Altpapier|4,!Karton|4,!Waschtag|4\ kalender:!day|5,!Altpapier|5,!Karton|5,!Waschtag|5\ kalender:!day|6,!Altpapier|6,!Karton|6,!Waschtag|6\ kalender:!day|7,!Altpapier|7,!Karton|7,!Waschtag|7\ kalender:!day|8,!Altpapier|8,!Karton|8,!Waschtag|8\ kalender:!day|9,!Altpapier|9,!Karton|9,!Waschtag|9\ kalender:!day|10,!Altpapier|10,!Karton|10,!Waschtag|10\ kalender:!day|11,!Altpapier|11,!Karton|11,!Waschtag|11\ kalender:!day|12,!Altpapier|12,!Karton|12,!Waschtag|12\ kalender:!day|13,!Altpapier|13,!Karton|13,!Waschtag|13\ kalender:!day|14,!Altpapier|14,!Karton|14,!Waschtag|14\ kalender:!day|15,!Altpapier|15,!Karton|15,!Waschtag|15
   NAME       rgKalender
   NR         25
   NTFY_ORDER 50-rgKalender
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   Content:
     kalender   1
   Content2:
   DEVICES:
     ARRAY(0x293f978)
     ARRAY(0x2930038)
     ARRAY(0x29567a0)
     ARRAY(0x2795f18)
     ARRAY(0x292c738)
     ARRAY(0x2795cf0)
     ARRAY(0x2968148)
     ARRAY(0x292c7c8)
     ARRAY(0x2796098)
     ARRAY(0x27960b0)
     ARRAY(0x2795d20)
     ARRAY(0x29e7008)
     ARRAY(0x293f9d8)
     ARRAY(0x2967a40)
     ARRAY(0x29ed530)
     ARRAY(0x29edba8)
     ARRAY(0x29edb90)
   Fhem:
     lastDefChange 5
     last_update 1427317306.31374
   Helper:
     DEF
     valueFormat {if($READING eq 'title'){$VALUE="recycling"}else{my($r,$d)=split(/\|/,$READING);;my $v=fhem("get kalender days $d",1);;if($v eq "none"){$VALUE=undef}else{if($r eq 'day'){if($d==0){$VALUE="Heute"}elsif($d==1){$VALUE="Morgen"}elsif($d>1 and $d<7){$VALUE=DayName($d)}else{if($v=~m/$r/){$VALUE=1}else{$VALUE=''}}}}}
     valueIcon  {if($VALUE eq 'recycling'){$VALUE}elsif($VALUE eq 1){if($READING=~m/Altpapier/){$VALUE='bag@FFFFFF'}elsif($READING=~m/Karton/){$VALUE='bag@CD661D'}elsif($READING=~m/Waschtag/){$VALUE='scene_laundry_room@7FFF00'}}else{$VALUE=''}}
     Cellstyle:
       c:1        style="font-weight:bold;text-align:right;padding-left:28pt;"
       r:1        style="font-weight:bold;font-size:16px"
     Valuecolumns:
       title      colspan="4"
Attributes:
   alias      Kalender
   cellStyle  { "r:1"=>'style="font-weight:bold;font-size:16px"',"c:1"=>'style="font-weight:bold;text-align:right;padding-left:28pt;"'}
   nonames    1
   room       Informationen
   valueColumns { title => 'colspan="4"' }
   valueFormat {if($READING eq 'title'){$VALUE="recycling"}else{my($r,$d)=split(/\|/,$READING);;my $v=fhem("get kalender days $d",1);;if($v eq "none"){$VALUE=undef}else{if($r eq 'day'){if($d==0){$VALUE="Heute"}elsif($d==1){$VALUE="Morgen"}elsif($d>1 and $d<7){$VALUE=DayName($d)}else{if($v=~m/$r/){$VALUE=1}else{$VALUE=''}}}}}
   valueIcon  {if($VALUE eq 'recycling'){$VALUE}elsif($VALUE eq 1){if($READING=~m/Altpapier/){$VALUE='bag@FFFFFF'}elsif($READING=~m/Karton/){$VALUE='bag@CD661D'}elsif($READING=~m/Waschtag/){$VALUE='scene_laundry_room@7FFF00'}}else{$VALUE=''}}


Weiss jemand was ich falsch gemacht habe?

Hier meine 99_myUtils.pm:

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Funktion ermittelt den Tagesnamen als String ausgehend von Heute plus einem Tagesoffset
# Aufruf : z.B. DayName(3) ermittel den Tagesnamen in 3 Tagen Sonntag->Mittwoch
#########################################################################################
sub DayName
{
  my $DayOffset = shift;

  my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
      $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
 
  my @Wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");

  return $Wochentage[($Wochentag + $DayOffset) %7];
}


1;


Danke vielmals für eure Hilfe.
Gruss

selfarian

Danke! Finde die Lösung soweit gut, wobei ich mir noch nicht sicher bin, ob sie für mich dauerhaft praktikabel ist. Ich weiß nicht, wie es bei euch ist, bei uns gibt es keinen wirklichen Kalender sondern nur die Aussage:
Biomüll wird jeden Mittwoch abgeholt

Papier wird Mittwochs in geraden KWs abgeholt
Plastik wird Donnerstags in geraden KWs abgeholt
Restmüll wird Freitags in geraden KWs abgeholt

Wenn dann z.B. der Freitag ein Feiertag ist, verschiebt sich der Abholtermin nach vorne.
Also vielleicht wäre in meinem Fall ne Perl-Funktion anstelle eines Kalenders besser?!
RasPi mit HMLAN, 5x HM-SEC-SC, HM LED16 als Alarmanlagendisplay, HM-TC-IT-WM-W-EU, 4x HM-CC-RT-DN, 1x HM PBU, 1x HM PBI-4

DanHard


Zitat von: DanHard am 26 März 2015, 20:01:25
Hallo Zusammen

Danke erstmal für die super Visualisierung der Müllabfuhr. Konnte alles erfolgreich einrichten.
Nun wollte ich noch eine kleine Änderung machen und zwar die Funktion mit
elsif($d>1 and $d<7){$VALUE=DayName($d)

Leider zeigt die ReadingsGroup nach der Änderung keine Daten mehr an.
Hier die komplette Konfig:

Internals:
   CFGFN
   DEF        kalender:!title\ kalender:!day|0,!Altpapier|0,!Karton|0,!Waschtag|0\ kalender:!day|1,!Altpapier|1,!Karton|1,!Waschtag|1\ kalender:!day|2,!Altpapier|2,!Karton|2,!Waschtag|2\ kalender:!day|3,!Altpapier|3,!Karton|3,!Waschtag|3\ kalender:!day|4,!Altpapier|4,!Karton|4,!Waschtag|4\ kalender:!day|5,!Altpapier|5,!Karton|5,!Waschtag|5\ kalender:!day|6,!Altpapier|6,!Karton|6,!Waschtag|6\ kalender:!day|7,!Altpapier|7,!Karton|7,!Waschtag|7\ kalender:!day|8,!Altpapier|8,!Karton|8,!Waschtag|8\ kalender:!day|9,!Altpapier|9,!Karton|9,!Waschtag|9\ kalender:!day|10,!Altpapier|10,!Karton|10,!Waschtag|10\ kalender:!day|11,!Altpapier|11,!Karton|11,!Waschtag|11\ kalender:!day|12,!Altpapier|12,!Karton|12,!Waschtag|12\ kalender:!day|13,!Altpapier|13,!Karton|13,!Waschtag|13\ kalender:!day|14,!Altpapier|14,!Karton|14,!Waschtag|14\ kalender:!day|15,!Altpapier|15,!Karton|15,!Waschtag|15
   NAME       rgKalender
   NR         25
   NTFY_ORDER 50-rgKalender
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   Content:
     kalender   1
   Content2:
   DEVICES:
     ARRAY(0x293f978)
     ARRAY(0x2930038)
     ARRAY(0x29567a0)
     ARRAY(0x2795f18)
     ARRAY(0x292c738)
     ARRAY(0x2795cf0)
     ARRAY(0x2968148)
     ARRAY(0x292c7c8)
     ARRAY(0x2796098)
     ARRAY(0x27960b0)
     ARRAY(0x2795d20)
     ARRAY(0x29e7008)
     ARRAY(0x293f9d8)
     ARRAY(0x2967a40)
     ARRAY(0x29ed530)
     ARRAY(0x29edba8)
     ARRAY(0x29edb90)
   Fhem:
     lastDefChange 5
     last_update 1427317306.31374
   Helper:
     DEF
     valueFormat {if($READING eq 'title'){$VALUE="recycling"}else{my($r,$d)=split(/\|/,$READING);;my $v=fhem("get kalender days $d",1);;if($v eq "none"){$VALUE=undef}else{if($r eq 'day'){if($d==0){$VALUE="Heute"}elsif($d==1){$VALUE="Morgen"}elsif($d>1 and $d<7){$VALUE=DayName($d)}else{if($v=~m/$r/){$VALUE=1}else{$VALUE=''}}}}}
     valueIcon  {if($VALUE eq 'recycling'){$VALUE}elsif($VALUE eq 1){if($READING=~m/Altpapier/){$VALUE='bag@FFFFFF'}elsif($READING=~m/Karton/){$VALUE='bag@CD661D'}elsif($READING=~m/Waschtag/){$VALUE='scene_laundry_room@7FFF00'}}else{$VALUE=''}}
     Cellstyle:
       c:1        style="font-weight:bold;text-align:right;padding-left:28pt;"
       r:1        style="font-weight:bold;font-size:16px"
     Valuecolumns:
       title      colspan="4"
Attributes:
   alias      Kalender
   cellStyle  { "r:1"=>'style="font-weight:bold;font-size:16px"',"c:1"=>'style="font-weight:bold;text-align:right;padding-left:28pt;"'}
   nonames    1
   room       Informationen
   valueColumns { title => 'colspan="4"' }
   valueFormat {if($READING eq 'title'){$VALUE="recycling"}else{my($r,$d)=split(/\|/,$READING);;my $v=fhem("get kalender days $d",1);;if($v eq "none"){$VALUE=undef}else{if($r eq 'day'){if($d==0){$VALUE="Heute"}elsif($d==1){$VALUE="Morgen"}elsif($d>1 and $d<7){$VALUE=DayName($d)}else{if($v=~m/$r/){$VALUE=1}else{$VALUE=''}}}}}
   valueIcon  {if($VALUE eq 'recycling'){$VALUE}elsif($VALUE eq 1){if($READING=~m/Altpapier/){$VALUE='bag@FFFFFF'}elsif($READING=~m/Karton/){$VALUE='bag@CD661D'}elsif($READING=~m/Waschtag/){$VALUE='scene_laundry_room@7FFF00'}}else{$VALUE=''}}


Weiss jemand was ich falsch gemacht habe?

Hier meine 99_myUtils.pm:

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Funktion ermittelt den Tagesnamen als String ausgehend von Heute plus einem Tagesoffset
# Aufruf : z.B. DayName(3) ermittel den Tagesnamen in 3 Tagen Sonntag->Mittwoch
#########################################################################################
sub DayName
{
  my $DayOffset = shift;

  my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
      $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
 
  my @Wochentage = ("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");

  return $Wochentage[($Wochentag + $DayOffset) %7];
}


1;


Danke vielmals für eure Hilfe.
Gruss

Hat niemand eine Idee? Stehe voll auf dem Schlauch!

justme1968

es muss && heissen und nicht and.

es reicht übrigens auf <7 zu prüfen. 0 und 1 sind vorher schon raus gefallen.

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

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

hexenmeister

Meeeensch! Die Leute hier haben keine Glaskugel, zumindest keine, die ich kenne. Und kilometerlange Listings zu zerlegen, hat selten jemand Lust. Bitte beim nächsten Fall das Problem auf das nötigste Eingrenzen aber auch wirklich wichtige Informationen nicht unterschlagen. Was heist, es geht nicht? Was sagt Log dazu? hast Du Probiert, die Teile einzeln zu testen, Stück nach Stück einzubauen. usw.

Und in Deinem Fall fehlt schon mal eine Klammer.

Nichts für ungut.

LG

Alexander

hexenmeister

Zitat von: selfarian am 27 März 2015, 12:06:32
Biomüll wird jeden Mittwoch abgeholt
Papier wird Mittwochs in geraden KWs abgeholt
Plastik wird Donnerstags in geraden KWs abgeholt
Restmüll wird Freitags in geraden KWs abgeholt
Was für ein fröhliches Rätselraten ;)

Zitat von: selfarian am 27 März 2015, 12:06:32
Wenn dann z.B. der Freitag ein Feiertag ist, verschiebt sich der Abholtermin nach vorne.
Also vielleicht wäre in meinem Fall ne Perl-Funktion anstelle eines Kalenders besser?!
Ich würde dennoch einen Kalender anlegen, ist einfacher, als eine Funktion mit berücksichitgung aller Feiertage etc. auszuprogrammieren.