DoorPi-Projekt

Begonnen von Syntaxterror, 25 Februar 2016, 18:39:59

Vorheriges Thema - Nächstes Thema

Joker

Danke. Nun werde die Snapshots angezeigt. Ich hatte an den Pfaden was gedreht, damit die Dateien im home-Verzeichnis liegen und den "www =" Eintrag in der [DoorPiWeb] Sektion aber so gelassen wie er war.

Aber ganz ehrlich: Logisch erscheint mir das immer noch nicht. Von der Benennung her habe ich gedacht dass dieser Eintrag was mit den html-Seiten vom DoorPi zu tun hat, und daher habe ich den auch absichtlich so gelassen. Warum dieser Eintrag auf das records-Verzeichnis zeigen muss, erschließt sich mir nicht. Vielleicht mag mich jemand aufklären  :) Jedenfalls gehen nur dann die Bilder.

Zitat von: Wzut am 05 Juli 2017, 07:12:32
Denkfehler :) pah hat das Modul so geschrieben das es quasi überall laufen kann und nicht zwingend direkt auf dem DoorPi. Daher zeigen die Links auch direkt auf ein Ziel innerhalb des DoorPi interenen Webservers und NICHT auf einen FHEM Web Pfad :)
Denkfehler..? Verstehe ich jetzt nicht. Dass das Modul (also damit dann FHEM) nicht auf dem DoorPi laufen muss ist mir klar (ist auch bei mir nicht so). Ich hatte ja nur nicht verstanden wie dieser Pfad überhaupt zusammengesetzt wird.

Zitatlege deine Screens und Records ruhig nach DoorPi Standart ab und checke die Bilder und Sounds direkt in der DoorPi Webseite. Das muss zuerst alles stimmen, erst dann kommt das FHEM Modul von pah ins Spiel.
Mach ich prinzipiell so. Aber: Mir war gar nicht bewußt dass man die Snapshots auf der DoorPi Webseite anschauen kann. Von daher bin ich auch nicht auf die Idee gekommen das zu überprüfen  ;)

Das Verhalten ist bei mir auch ehrlich gesagt ein wenig ulkig- Es gehen ja jetzt wie gesagt die Bilder im FHEM-Modul, aber direkt auf der DoorPi Webseite werde die trotzdem nicht angezeigt. Das liegt daran dass dort die Links folgendermaßen aussehen:
al/etc/DoorPi/records/2017-07-04_00-28-36.jpg

Als wäre der vordere Teil abgeschnitten worden. Der Aufruf von status?module=history_snapshot liefert ebensolche Ergebnisse:
{
    "history_snapshot": [
        "al/etc/DoorPi/records/2017-07-04_00-28-35.wav",
        "al/etc/DoorPi/records/2017-07-04_00-28-36.jpg",
        "al/etc/DoorPi/records/2017-07-04_00-32-25.wav",
        "al/etc/DoorPi/records/2017-07-04_00-32-26.jpg",
        "al/etc/DoorPi/records/2017-07-04_00-33-07.jpg",
        "al/etc/DoorPi/records/2017-07-04_00-42-30.jpg",
        "al/etc/DoorPi/records/2017-07-05_18-46-26.jpg",
        "al/etc/DoorPi/records/2017-07-05_18-46-27.jpg",
        "al/etc/DoorPi/records/2017-07-05_18-46-32.jpg",
        "al/etc/DoorPi/records/2017-07-05_19-15-57.jpg",
        "al/etc/DoorPi/records/2017-07-05_19-16-56.jpg",
        "al/etc/DoorPi/records/2017-07-05_19-50-33.jpg",
        "al/etc/DoorPi/records/2017-07-05_19-53-07.jpg",
        "al/etc/DoorPi/records/2017-07-05_19-55-56.jpg",
        "al/etc/DoorPi/records/2017-07-05_19-55-55.wav"
    ]
}


Warum auch immer.
Das heißt jedenfalls, im FHEM Modul geht es, aber auf der DoorPi-Webseite nicht - von daher wäre es eh schwierig gewesen erst auf der DoorPi-Webseite alles zu überprüfen und dann erst mit dem FHEM Modul weiter zu machen.

Prof. Dr. Peter Henning

Nö, das ist gar nicht schwierig. Die Pfade werden durch einen Bug in der DoorPi-Software abgeschnitten. Wenn man sie in der Browser-Adresszeile richtig einträgt, geht das wunderbar.

Und natürlich werden die Bilder nur angezeigt, wenn sie im Pfad des Webservers liegen.

pah

Christian Uhlmann

Hallo zusammen,

da ich nun die Platine und vor allem ein bisschen Zeit habe, wird es bei mir nun auch immer konkreter.
Ich habe auch mittlerweile die Ausbaustufe ein bisschen erhöht so das es jetzt doch der Vollausbau der alten Anlage wird, wie ich mir das gewünscht hatte.

Jetzt bin ich aber zusammen mit meiner Frau auf der Suche nach Klingel- bzw. Lichtknöpfen.

Im Wiki (https://wiki.fhem.de/wiki/DoorPi_und_FHEM#Sensoren) steht dieser hier als Referenz https://smile.amazon.de/dp/B01DKTHDXE (aber Achtung der Link aus dem Wiki ging bei mir nicht)

Da wir sowohl Licht- als auch Klingelknopf ersetzen müssen dendiere ich dazu einen mit Dauerbeleuchtung für das Licht und einen für die Klingel wie im Wiki beschrieben.

Bei dem von Amazon steht folgendes in der Beschreibung:
Zitat6 Anschluss-Pins LED-Spannung 6V bis 24V AC / DC Schaltleistung max : 5 A - 250 V Einbau Ø25mm Außen Ø28mm Länge 36mm
Dabei ist mir dann Aufgefallen, was brauche ich denn wirklich und wieso sind die LED's ab 6V, woher kommen die 6V
Kann mich da jemand aufklären?

Gerne nehme ich auch andere Varianten als Vorschlag entgegen, wir suchen momentan aber könnten da noch ein bissel Erfahrung von Euch gebrauchen.


Danke und Grüße

Christian
Host: Debian Buster als VM / XCP-NG
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, HMLan, HM-USB 2, LaCrosseGateway
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, ESPEasy, Sonoff mit Tasmota

Wzut

Zitat von: Christian Uhlmann am 11 Juli 2017, 14:26:56
wieso sind die LED's ab 6V, woher kommen die 6V
die Spannung für die eingebaute LED kommt von deinem Klingeltrafo und da es hier einen großen Zoo der verwendeten Spannungen und zu allem Überfluss noch Gleich und Wechselspannung Varianten gibt, ist der von dir ausgesuchte Taster gut aufgestellt mit dem Spektrum 6 - 24V AC / DC. D.h der sollte wirklich an fast jedem Klingeltrafo hell werden :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Prof. Dr. Peter Henning

Und vor allem läuft er auch bei 5V. Bei mir wird er übrigens parallel zur Display-Helligkeit gesteuert.

LG

pah

Per

Die mindestens "6V" werden durch Reihenschaltung der LED mit einer Konstantstromquelle im Inneren des Tasters zustande kommen. Wo du sie in deiner Installation herbekommst, hängt natürlich von deinen Möglichkeiten ab. Zu Not mittels StepUp Wandler aus den 5V, mit denen du den RP betreibst.

mcbo

Ich bin auf der suche nach einem Lieferanten, für den Kameradom.

Der von farion aufgführte China ebay-Händler, hat keine 2 Zoll Varianten mehr.
Meine Bestellung von letzter Woche, hat er mir heute gecancelt.  :o

Kennt jemand einen anderen Lieferanten?


Gruß

Marcel




Franz Tenbrock

für 12,50 bekommt man aber eine ganze IP Kamera incl Versand, und nach 3 Tagen ist das Teil da
etwas  Nacharbeit und die picam passt da optimal rein und man spart da Kameradome.

https://www.doorpi.org/forum/thread/809-franz-und-sein-doorpi-trotz-vieler-stolpersteine-ein-happy-end/?postID=6813#post6813
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Christian Uhlmann

Hallo zusammen,

ich habe mir vor einiger Zeit schon die iButton Reader aus Fernost bestellt, wie unter
https://wiki.fhem.de/wiki/DoorPi_und_FHEM#iButton-Subsystem
beschrieben, leider funktioniert der Link nicht mehr, aber es waren solche hier:
https://de.aliexpress.com/item/TM-probe-DS9092-Zinc-Alloy-probe-iButton-probe-reader-with-LED-M98/32630537941.html

Ja, ist kein Tri-Color LED sondern nur eine LED aber mir stellt sich die Frage, welches Kabel welche Funktion hat?

Es gibt, rot, weiß, schwarz und grün (in dieser Reihenfolge, mit einem Stecker dran)

Leider bin ich zu blöd, dafür eine Belegung zu finden.

Ist da schon jemand fündig geworden oder kann mir sagen welche Belegung diese Kabel haben?


Danke und Grüße

Christian
Host: Debian Buster als VM / XCP-NG
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, HMLan, HM-USB 2, LaCrosseGateway
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, ESPEasy, Sonoff mit Tasmota

Bastian0302

#565
Guten Tag zusammen.

Ich habe doorpi soweit installiert.
Ich wollte erstmal klein anfangen und über FHEM und Doorpi jeweils den stream starten und stoppen..
Über fhem geht das auch, allerdings sendet doorpi keine Daten an fhem...

Ich denke mal es liegt an der Authentifizierung des Doorpis..
FhemHelper.sh
# /bin/sh

FHEMDP="Tuersprechanlage"
FHEMIP="192.168.178.34"
FHEMPORT="8088"
FHEMHTTPS="false"
curlprog="curl"
curlargs="-k "

HOME="/home/doorpi"
default_target="yyyyyy"

### FHEM path ###
if [ $FHEMHTTPS = "true" ]; then
FHEM="https://$FHEMIP:$FHEMPORT/fhem?XHR=1&cmd.$FHEMDP"
else
FHEM="http://$FHEMIP:$FHEMPORT/fhem?XHR=1&cmd.$FHEMDP"
fi



case $1 in

init) #-- send current target to FHEM
       target=`cat $HOME/calltarget`
       $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20call_target%20$target" &
       #-- send state of mjpg_streamer to FHEM
       streampid=`pidof mjpg_streamer`
       if [ -z "$streampid" ]; then
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20stream%20off" &
       else
         $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20stream%20on" &
       fi
       ;;

##Pin 3 löst eine nachricht an fhem aus das stream auf on ist
doorbutton)
       $curlprog $curlargs "$FHEM=setreading%20$FHEMDP%20stream%20on" &
       ;;
esac

Doorpi.ini
Das wichtige steht ab Virtuell Keyboard wo ich testweise ein Taster am raspberry angeschlossen habe.
Er startet auch den stream.
Aber fhem bekommt keine Meldung darüber
[DoorPi]
base_path = /usr/local/etc/DoorPi
snapshot_path = /home/doorpi/records
number_of_snapshots = 10
eventlog = /home/doorpi/log/eventlog.db
is_alive_led = blinking_led
last_snapshot =

[DoorPiWeb]
indexfile = index.html
loginfile = login.html
online_fallback = http://motom001.github.io/DoorPiWeb
port = 80
public = AREA_public
www = /home/doorpi/records

[AREA_public]
.*

[AREA_config]
/control/config_value_get
/control/config_value_set
/control/config_value_delete
/control/config_save
/control/config_get_configfile

[AREA_dashboard]
/dashboard/pages/.*html

[AREA_status]
/status
/mirror

[AREA_control]
.*

[User]
admin = admin
visitor = visitor

[Group]
administrators = admin
guests = visitor

[WritePermission]
administrators = dashboard,status,config

[ReadPermission]
guests = dashboard

[AdminNumbers]
**621 = active

[DTMF]
"#" = out:door,1,0,3

####################### SIP phone #######################
[SIP-Phone]
identity = DoorPi
local_port = 5060
firewallpolicy = PolicyNoFirewall
#
sipphonetyp = linphone
sipserver_password = xxxxxxxxxxxxx
sipserver_realm = fritz.box
sipserver_server = yyyyyyyyyyyy
sipserver_username = 620
stun_server =
#
max_call_time = 300
call_timeout = 60
ua.max_calls = 2
#
capture_device = ALSA: USB PnP Sound Device
playback_device = ALSA: USB PnP Sound Device
audio_codecs = PCMA,PCMU
record_while_dialing = False
records = /home/doorpi/records/%Y-%m-%d_%H-%M-%S.wav
#
dialtone = /home/doorpi/sounds/ShortDialTone.wav
dialtone_renew_every_start = False
dialtone_volume = 35
echo_cancellation_enabled = False
#
video_codecs = VP8
video_device = StaticImage: Static picture
video_display_enabled = False
video_size = vga



####################### Events #######################

[EVENT_OnCallStateDisconnect]
10 = os_execute:/home/doorpi/FHEMHelper.sh call end

[EVENT_OnCallStateDismissed]
10 = os_execute:/home/doorpi/FHEMHelper.sh call dismissed

[EVENT_OnCallStateReject]
10 = os_execute:/home/doorpi/FHEMHelper.sh call rejected

[EVENT_OnTimeMinuteEvery5]
10=statuswatchdog:/tmp/doorpi.watchdog



####################### Keyboards ##############################
[keyboards]
webservice = filesystem
onboardpins = gpio



####################### Virtual keyboard #######################
[webservice_keyboard]
base_path_input = /home/doorpi/keyboard/inputs/
base_path_output = /home/doorpi/keyboard/outputs/
reset_input=false

[webservice_InputPins]
streamon        = sleep:0
streamoff       = sleep:0


#-- start video stream
[EVENT_OnKeyPressed_webservice.streamon]
10 = os_execute:/etc/init.d/mjpg_streamer start

#-- stop video stream
[EVENT_OnKeyPressed_webservice.streamoff]
10 = os_execute:/etc/init.d/mjpg_streamer stop





####################### Real keyboard #######################
[onboardpins_keyboard]
pull_up_down = PUD_UP
bouncetime = 200

[onboardpins_InputPins]
3 = sleep:0

#-- doorbutton on Raspi
[EVENT_OnKeyPressed_onboardpins.3]
10 = os_execute:/etc/init.d/mjpg_streamer start
20 = os_execute:/home/doorpi/FHEMHelper.sh call doorbutton



WEBapi
defmod WEBapi FHEMWEB 8088 global
attr WEBapi HTTPS 0
attr WEBapi allowfrom 192.168.178.35
attr WEBapi csrfToken none
attr WEBapi room System

Das ganze soll wegen der Token Problematik über die WEBapi geleitet werden Port 8088.wie Es auch in der Helper Datei steht.

Ich habe schon einige Varianten Probiert aber kein erfolg damit gehabt.

Ich hab zudem auch nirgends gelesen wie ich das Signal des Mikrofons an Fhem zur weiterleitung und das Signal des Lautsprecher zum Doorpi schicke...

Für Tipps wäre ich sehr dankbar.


Nachtrag Fehler gefunden:  Falsche Formatierung der .ini und .sh Datei. Lösung mit Notepad++ richtig formatiert. 
Raspbarry Pi 3, Panstamp NRG 2, Cul 433Mhz Sender/Empfänger, Mcp23017 Ein/Ausgabebaugruppe, TabletUi, Doorpi mit Nextion/RFID und Integration in Fhem, Sonos

Sailor

#566
Ein herzerfischendes "Moin" vom "hintern-Deich" vorweg

Ich weiss, dass es fuer dieses Anliegen hier nicht das richtige Forum ist, ich waere aber fuer Eure Hilfe sehr dankbar.

Mein ausfuehrliches Hilfegesuch findet Ihr hier: https://www.doorpi.org/forum/thread/854-nur-einseitige-sip-phone-kommunikation-mit-usb-soundkarte/

Gerne koennt ihr mir auch per PM oder hier im Forum antworten, wenn ihr keinen Account fuer das Parallel-Forum habt.

Erfahrungsgemaess sind die Foristen in diesem Forum irgendwie gespraechiger.  ;D

Danke - wie immer!

Nachtrag 06.08.2017: Problem geloest. Ich habe alle Telefone und die Tuerstation aus der FritzBox geloescht und neu engelegt. Und schon funktioniert es mit der bidirektionalen Kommunikation.

Gruss
    Sailor
******************************
Man wird immer besser...

Sailor

Hallo pah

Ich habe mich mal an das Problem gemacht, dass mein Snapshot immer eine Sekunde früher aufgezeichnet wurde als die Sprachdatei.
Denn Fall, dass der Snapshot eine Sekunde später aufgezeichnet wurde, hast Du ja schon abgefangen.

Anbei der Code, ab Zeile 992, der nun auch "#-- maybe we have to look at a second earlier ?" abfängt.

Magst Du dass in deine 70_DoorPi.pm implementieren?

Gruss
    Sailor


        #-- workaround for buggy DoorPi
        my $record    = sprintf("%d-%02d-%02d_%02d-%02d-%02d.wav", $year,($month+1),$day,$hour, $min, $sec);

        #-- this is the snapshot file if taken at the same time
        my $snapshot  = sprintf("%d-%02d-%02d_%02d-%02d-%02d.jpg", $year,($month+1),$day,$hour, $min, $sec);
       
       
#-- maybe we have to look at a second later ?
        ($sec, $min, $hour, $day,$month,$year,$wday) = (localtime($callstime+1))[0,1,2,3,4,5,6];
        $year += 1900;
        $monthn = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")[$month];
        $wday  = ("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa")[$wday];
               
        #-- this is the filename without extension if taken a second later
        my $later = sprintf("%d-%02d-%02d_%02d-%02d-%02d", $year,($month+1),$day,$hour, $min, $sec);


#-- maybe we have to look at a second earlier ?
        ($sec, $min, $hour, $day,$month,$year,$wday) = (localtime($callstime-1))[0,1,2,3,4,5,6];
        $year += 1900;
        $monthn = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")[$month];
        $wday  = ("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa")[$wday];
               
        #-- this is the filename without extension if taken a second earlier
        my $earlier = sprintf("%d-%02d-%02d_%02d-%02d-%02d", $year,($month+1),$day,$hour, $min, $sec);


        my $found = 0;
        for( my $i=0; $i<@history_snapshot; $i++){
          if( index($history_snapshot[$i],$snapshot) > -1){
             $found = 1;
             last;
          }
        }   
        #-- if not, look for a file made a second later
        if( $found == 0 ){
           #-- this is the snapshot file if taken a second later
           $snapshot  = sprintf("%s.jpg", $later);
           #-- check if it is present in the list of snapshots
           for( my $i=0; $i<@history_snapshot; $i++){
              if( index($history_snapshot[$i],$snapshot) > -1){
                 $found = 1;
                 last;
              }
           }
           if( $found == 0 ){
              Log3 $name, 1,"[DoorPi_GetHistory] No snapshot found with $snapshot a second later";
           }
        }
        #-- if not, look for a file made a second earlier
        if( $found == 0 ){
           #-- this is the snapshot file if taken a second later
           $snapshot  = sprintf("%s.jpg", $earlier);
           #-- check if it is present in the list of snapshots
           for( my $i=0; $i<@history_snapshot; $i++){
              if( index($history_snapshot[$i],$snapshot) > -1){
                 $found = 1;
                 last;
              }
           }
           if( $found == 0 ){
              Log3 $name, 1,"[DoorPi_GetHistory] No snapshot found with $snapshot a second earlier";
           }
        }

        $found = 0;
        for( my $i=0; $i<@history_snapshot; $i++){
          if( index($history_snapshot[$i],$record) > -1){
             $found = 1;
             last;
          }   
        }
        #-- if not, look for a file made a second later
        if( $found == 0 ){
           #-- this is the record file if taken a second later
           $record  = sprintf("%s.wav", $later);
           #-- check if it is present in the list of snapshots
           for( my $i=0; $i<@history_snapshot; $i++){
              if( index($history_snapshot[$i],$record) > -1){
                 $found = 1;
                 last;
              }
           }
           if( $found == 0 ){
              Log3 $name, 1,"[DoorPi_GetHistory] No record found with $record a second later";
           }
        }
        #-- if not, look for a file made a second earlier
        if( $found == 0 ){
           #-- this is the record file if taken a second later
           $record  = sprintf("%s.wav", $earlier);
           #-- check if it is present in the list of snapshots
           for( my $i=0; $i<@history_snapshot; $i++){
              if( index($history_snapshot[$i],$record) > -1){
                 $found = 1;
                 last;
              }
           }
           if( $found == 0 ){
              Log3 $name, 1,"[DoorPi_GetHistory] No record found with $record a second earlier";
           }
        }

        #Log3 $name, 1,"$snapshot $record";
******************************
Man wird immer besser...

Sailor

Hallo pah

anbei noch ein Codeschnipsel fuer die 70_DoorPi.pm
Diese stellen das Reading für "postbox" und "sabotage" ein, sobald die entsprehcenden Taster betätigt wurden.

In "sub DoorPi_Set ($@)"

#-- sabotage
elsif( $value eq "sabotage" )
{
readingsSingleUpdate($hash,"sabotage","alert",1);
}

#-- PostBox Trap (NewMail)
elsif( $value eq "postboxtrap" )
{
readingsSingleUpdate($hash,"postbox","NewMail",1);
}

#-- PostBox Door (Post Box emptied)
elsif( $value eq "postboxdoor" )
{
readingsSingleUpdate($hash,"postbox","NoMail",1);
}



In /home/doorpi/fhemhelper

postboxtrap)
       $curlprog $curlargs "$FHEM=set%20$FHEMDP%20call%20postboxtrap" &
       ;;

postboxdoor)
       $curlprog $curlargs "$FHEM=set%20$FHEMDP%20call%20postboxdoor" &
       ;;


In /usr/local/etc/DoorPi/conf/doorpi.ini

#-- Cleared the mail in postbox
[EVENT_OnKeyPressed_onboardpins.2]
10 = os_execute:/home/doorpi/FHEMHelper.sh postboxdoor

#-- Got new mail in postbox
[EVENT_OnKeyPressed_onboardpins.3]
10 = os_execute:/home/doorpi/FHEMHelper.sh postboxtrap


Zur freien Verfügung zwecks Implementierung oder Verwerfung.

Gruss
    Sailor
******************************
Man wird immer besser...

Markus

Hallo

Ich versuche mich auch schon seit Tagen an dem Projekt.
aber ich schaffe es nicht das doorpi einen Anruf tätigt.
Kann mir bitte einer helfen.

das steht im log

2017-09-04 23:30:40,732 [ERROR]  [doorpi.action.handler] [GOX3MN] error while fire action OutAction with args () and kwargs {'log_output': True, 'value': '1', 'pin': 'irlight'} for event_name BeforeSipPhoneMakeCall
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/doorpi/action/handler.py", line 311, in fire_event_synchron
    if not silent: self.db.insert_action_log(event_fire_id, action.name, start_time, result)
  File "/usr/local/lib/python2.7/dist-packages/doorpi/action/handler.py", line 171, in insert_action_log
    self.execute_sql(sql_statement)
  File "/usr/local/lib/python2.7/dist-packages/doorpi/action/handler.py", line 141, in execute_sql
    return self._db.execute(sql)
OperationalError: cannot start a transaction within a transaction



Gruß Markus
Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa