FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: dkreutz am 19 Oktober 2019, 17:23:45

Titel: Wordclock build-yours.de alternative "Treibersoftware"
Beitrag von: dkreutz am 19 Oktober 2019, 17:23:45
Hallo,

Ich habe von build-yours.de die Wordclock. Deren ESP8266 ist mit einer propietären Software geflasht. Die zwar tut was sie soll, ist aber nicht sonderlich flexibel und funkt anscheinend auch "nach Hause" zum Hersteller. Deshalb habe ich auf Grundlage von Pythonf's Codeschnipsel für Wortuhr/QLOCKTWO (https://forum.fhem.de/index.php/topic,91529.0.html) meine Variante für die Wordclock von build-yours.de erstellt:

Der ESP8266 wird mit ESPeasy (mega-20190607) geflasht, in ESPeasy dann:
1) Config -> Unit name: "ESP-Wortuhr"
1) einen Controller "FHEM HTTP" einrichten und mit der IP des FHEM-Servers konfigurieren, ggfs. in FHEM ein EspBridge Device einrichten.
2) ein Device "Output - Neopixel (basic)",  Name "WordClock", LED-Count "110", GPI "GPIO-12 (D6)" und Strip Type "GRB" einrichten.

Wenn in FHEM die EspBridge richtig konfiguriert ist, müsste es ein neues Device "ESPEasy_ESP_Wortuhr_UHR" geben, so heißt es zumindest bei mir...

Code für das at-Device in FHEM:

+*00:05:00 {
my @COLOR1 = ("34 167 240",
              "44 62 80",
              "140 224 254",
              "64 219 176",
              "253 158 102",
              "254 226 85",
              "91 105 132",
              "255 255 255",
              "241 243 244",
              "189 195 199");

fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 1 110 0 0 0");

my ($hour, $min, $sec) = split(':',$hms);
#my ($hour, $min, $sec) = split(':',"15:59:00");

$hour += 0; #Um führende Null zu entfernen

#Es/ist
{fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 109 110 $COLOR1[rand(10)]");}
{fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 105 107 $COLOR1[rand(10)]");}

#Alle 5 min
$hour += 1; #Zur Vollen Stunde aufrunden
if ( $min >= 5 and $min < 10){
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 100 103 $COLOR1[rand(10)]"); #5
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 69 72 $COLOR1[rand(10)]"); #Nach
$hour -=1;
}

if ( $min >= 10 and $min < 15){
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 89 92 $COLOR1[rand(10)]"); #10
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 69 72 $COLOR1[rand(10)]"); #Nach
$hour -=1;
}

if ( $min >= 20 and $min < 25){
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 93 99 $COLOR1[rand(10)]"); #20
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 69 72 $COLOR1[rand(10)]"); #Nach
$hour -=1;
}

if ( $min >= 25 and $min < 30){
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 100 103 $COLOR1[rand(10)]"); #5
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 73 75 $COLOR1[rand(10)]"); #Vor
}

if ( $min >= 35 and $min < 40){
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 100 103 $COLOR1[rand(10)]"); #5
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 69 72 $COLOR1[rand(10)]"); #Nach
}

if ( $min >= 40 and $min < 45){
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 93 99 $COLOR1[rand(10)]"); #20
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 73 75 $COLOR1[rand(10)]"); #vor
}

if ( $min >= 50 and $min < 55){
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 89 92 $COLOR1[rand(10)]"); #10
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 73 75 $COLOR1[rand(10)]"); #Vor
}

if ( $min >= 55){
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 100 103 $COLOR1[rand(10)]"); #5
fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 73 75 $COLOR1[rand(10)]"); #Vor
}


if( $min >= 15 and $min < 20){
   fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 78 84 $COLOR1[rand(10)]"); #viertel
   fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 69 72 $COLOR1[rand(10)]"); #Nach
   $hour -=1;
}
if( $min >= 25 and $min < 40){
   fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 63 66 $COLOR1[rand(10)]"); #halb
}
if( $min > 44 and $min < 50){
   fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 78 84 $COLOR1[rand(10)]"); #viertel
   fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 73 75 $COLOR1[rand(10)]"); #Vor
}

if( $min > 59 or  $min < 5){$hour -=1;}
if($hour > "12"){$hour -= 12}; #12 h statt 24

#Volle Stunden
if( $hour eq "0" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 57 61 $COLOR1[rand(10)]");}
if( $hour eq "1" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 47 50 $COLOR1[rand(10)]");}
if( $hour eq "2" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 45 48 $COLOR1[rand(10)]");}
if( $hour eq "3" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 40 43 $COLOR1[rand(10)]");}
if( $hour eq "4" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 30 33 $COLOR1[rand(10)]");}
if( $hour eq "5" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 34 37 $COLOR1[rand(10)]");}
if( $hour eq "6" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 2 6 $COLOR1[rand(10)]");}
if( $hour eq "7" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 50 55 $COLOR1[rand(10)]");}
if( $hour eq "8" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 18 21 $COLOR1[rand(10)]");}
if( $hour eq "9" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 26 29 $COLOR1[rand(10)]");}
if( $hour eq "10" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 14 17 $COLOR1[rand(10)]");}
if( $hour eq "11" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 23 25 $COLOR1[rand(10)]");}
if( $hour eq "12" ){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 57 61 $COLOR1[rand(10)]");}

#Sonderfälle
if( $min < 5 and $hour eq "1"){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixel 50 0 0 0");}

#UHR
if( $min > 59 or  $min < 5){fhem("set ESPEasy_ESP_Wortuhr_UHR neopixelline 9 11 $COLOR1[rand(10)]");}


}


COLOR1 ist ein Array mit RGB-Werten, bei jeder "Wortausgabe" wird per rand(10) einer der Werte ausgewählt, so dass die Anzeige schön bunt wird. Wem das zu bunt ist, kann alle Arrayeinträge auf den gleichen Wert z.B. "255 255 255" ändern...

Das "Buchstabenschema" bei der Wordclock ist:

E S B I S T U F Ü N F
Z E H N Z W A N Z I G
D R E I V I E R T E L
T D N A C H V O R Y O
H A L B R Z W Ö L F S
Z W E I N S I E B E N
U D R E I R S F Ü N F
E L F N E U N V I E R
R A C H T Z E H N R S
B S E C H S D E U H R

LED Nr. 1 ist unten links, oben rechts ist LED Nr. 110. Der Verlauf ist dann von unten nach oben immer alternierend links->rechts, rechts->links, links->rechts, usw.
Titel: Antw:Wordclock build-yours.de alternative "Treibersoftware"
Beitrag von: Pauli29 am 10 November 2019, 18:19:36
Das Projekt gefällt mir und ich möchte es daher gerne nachbauen  :)
Wieviel MB hat der verwendete ESP (für die richtige bin)?
Titel: Antw:Wordclock build-yours.de alternative "Treibersoftware"
Beitrag von: hauiproductions am 26 Februar 2020, 11:51:11
Hallo zusammen,

in den letzten Wochen kam es immer mal wieder zu Ausfällen der Wordclick, weil die Herstellerseite down war. Da sieht man wieder wie wichtig eine gewisse Unabhängigkeit vom Hersteller ist. Hinterher machen die noch ein Abomodell draus.... :-)

Wäre es möglich hier eine detailliertere Anleitung zur Inbetriebnahme mit FHEM / Flashen des Microcontrollers, usw.. aufzubauen ?

Gern kann ich auch unterstützen, so wie meine Möglichkeiten ausreichen..... Danke Euch schonmal !

Gruß
Markus
Titel: Antw:Wordclock build-yours.de alternative "Treibersoftware"
Beitrag von: dkreutz am 26 Februar 2020, 13:00:56
Zitat von: Pauli29 am 10 November 2019, 18:19:36
Das Projekt gefällt mir und ich möchte es daher gerne nachbauen  :)
Wieviel MB hat der verwendete ESP (für die richtige bin)?
Das ist ein ganz normaler Wemos D1 mini (http://"https://docs.wemos.cc/en/latest/d1/d1_mini.html") (ESP8266 mit 4MB Flash Memory)
Titel: Antw:Wordclock build-yours.de alternative "Treibersoftware"
Beitrag von: dkreutz am 26 Februar 2020, 13:06:15
Zitat von: Haui am 26 Februar 2020, 11:51:11
Wäre es möglich hier eine detailliertere Anleitung zur Inbetriebnahme mit FHEM / Flashen des Microcontrollers, usw.. aufzubauen?

Das passt dann aber nicht mehr ganz für die Rubrik "Codeschnipsel", aber hier ein paar Einstiegspunkte
FHEM Commandref ESPEASY (http://"https://fhem.de/commandref.html#ESPEasy")
FHEM Wiki ESPEASY (http://"https://wiki.fhem.de/wiki/ESPEasy")
FHEM Forumsthread zum Modul ESPEASY (http://"https://forum.fhem.de/index.php?topic=55728.0")