Kategoriarkiv: Okategoriserade

Healthchecks.io

Healtcheck.io kan användas för att kontrollera olika processer. Jag använder det för att kontrollera att homassistant är igång. Får notis om homeassistant inte skickat en check med förbestämt intervall. Notiser kan skickas via sms, whatsapp, signal etc.

tmux

Används för att skapa en terminalmultiplexer med möjlighet att ha flera sessioner igång samtidigt och som körs i bakgrunden. Du kan sedan koppla upp dig mot en session som körs i bakgrunden via terminalen.

Stara en ny session med sifferidentifikator:

$ tmux

eller med sessionsnamn:

$ tmux new -s session_name

Återanslut

Lista aktiva sessioner

$ tmux ls

Återanslut:

tmux attach-session -t 0

Kommandon:

Ctrl+b d -Koppla lös från session

  • Ctrl+b c Create a new window (with shell)
  • Ctrl+b w Choose window from a list
  • Ctrl+b 0 Switch to window 0 (by number )
  • Ctrl+b , Rename the current window
  • Ctrl+b % Split current pane horizontally into two panes
  • Ctrl+b " Split current pane vertically into two panes
  • Ctrl+b o Go to the next pane
  • Ctrl+b ; Toggle between the current and previous pane
  • Ctrl+b x Close the current pane

EspHome

Idag använder jag Home Assistant för hemautomationer. En av de automationer som är mest andvändbar just nu är forserad ventilation via fuktsensorer i våtutrymmen.

Initialt skrev jag ett program till en ESP8266 som via MQTT interagerade med Home Assistant. Problemet var dock att SSID och lösenord till Wifi var hårdkodat i ESP:n. När routern startades om tappade ESP:n kontakten och ville inte automatiskt koppla upp igen, utan jag var tvungen att bryta strömmen till den.

För att underlätta testade jag Tasmota som kunde köra via MQTT. Det är lätt att Flasha firmware via programmet Tazmotizer.

Nyligen snubblade jag över HomeEsp som interagerar direkt med Homeassistant. Det går då också att konfigurea om och ladda upp en ny firmware via wifi. Den skapar dessutom en rescue SSID om det är så att den tappar kontakten med wifi.

För att komma igång krävs att esphome-firmware laddas upp till enheten. Detta kan göras via webverktyget esphome dashboard. Webgränssnittet kan inte laddas i en annan sida ”embedded” utan måste köras direkt i webläsarens primära fönster eftersom den kommer att söka kontakt med serialinterfacet via usb. För att kommandon skall kunna köras behövs direkt kontakt. Skriv in serverns ip:6052

För mitt senaste nyförvärv S2-mini (ett esp 32 kort) finns dock en bugg som gör att webinterfacet klarar att koppla upp. Istället har jag använt adafruits esp tool: Adafruit ESPTool

Ta sig förbi lösenordsskydd Excel macro

Written by Mathieu Guindon

found on

https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project

You can try this direct VBA approach which doesn’t require HEX editing. It will work for any files (*.xls, *.xlsm, *.xlam …).

Tested and works on

Excel 2007
Excel 2010
Excel 2013 – 32 bit version.
Excel 2016 – 32 bit version.

Looking for 64 bit version? See https://stackoverflow.com/a/31005696/4342479

how it works

I will try my best to explain how it works – please excuse my english.

  1. The VBE will call a system function to create the password dialog box.
  2. If user enters the right password and click OK, this function returns 1. If user enters the wrong password or click Cancel, this function returns 0.
  3. After the dialog box is closed, the VBE checks the returned value of the system function
  4. if this value is 1, the VBE will ”think” that the password is right, hence the locked VBA project will be opened.
  5. The code below swaps the memory of the original function used to display the password dialog with a user defined function that will always return 1 when being called.

using the code

  1. Open the file(s) that contain your locked VBA Projects
  2. Create a new xlsm file and store this code in Module1

    code credited to Siwtom (nick name), a Vietnamese developer

    Option Explicit
    
    Private Const PAGE_EXECUTE_READWRITE = &H40
    
    Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
            (Destination As Long, Source As Long, ByVal Length As Long)
    
    Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Long, _
            ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
    
    Private Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As Long
    
    Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _
            ByVal lpProcName As String) As Long
    
    Private Declare Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As Long, _
            ByVal pTemplateName As Long, ByVal hWndParent As Long, _
            ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
    
    Dim HookBytes(0 To 5) As Byte
    Dim OriginBytes(0 To 5) As Byte
    Dim pFunc As Long
    Dim Flag As Boolean
    
    Private Function GetPtr(ByVal Value As Long) As Long
        GetPtr = Value
    End Function
    
    Public Sub RecoverBytes()
        If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
    End Sub
    
    Public Function Hook() As Boolean
        Dim TmpBytes(0 To 5) As Byte
        Dim p As Long
        Dim OriginProtect As Long
    
        Hook = False
    
        pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")
    
    
        If VirtualProtect(ByVal pFunc, 6, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then
    
            MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
            If TmpBytes(0) <> &H68 Then
    
                MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
    
                p = GetPtr(AddressOf MyDialogBoxParam)
    
                HookBytes(0) = &H68
                MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
                HookBytes(5) = &HC3
    
                MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
                Flag = True
                Hook = True
            End If
        End If
    End Function
    
    Private Function MyDialogBoxParam(ByVal hInstance As Long, _
            ByVal pTemplateName As Long, ByVal hWndParent As Long, _
            ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer
        If pTemplateName = 4070 Then
            MyDialogBoxParam = 1
        Else
            RecoverBytes
            MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
                               hWndParent, lpDialogFunc, dwInitParam)
            Hook
        End If
    End Function
  3. Paste this code in Module2 and run it
    Sub unprotected()
        If Hook Then
            MsgBox "VBA Project is unprotected!", vbInformation, "*****"
        End If
    End Sub
  4. Come back to your VBA Projects and enjoy.

ESP8266 wifi-adapter flash

För att flasha firmware till ESP8266 måste den först kopplas upp mot ex en USB-Uart. RX-TR, TR-RX, GND-GND, 3,3v till spänningskälla (arduino är för klen), samt RST till 3,3v.

Denna uppkoppling sätter ESP8266 i körläge. För att flasha ny firmware måste GPIO0 kopplas till GND och enheten startas om. Då försätts den i programmeringsläge.

För att flasha en .bin-fil eller firmware som kör AT-kommandon använde jag esptools som jag laddade hem från: https://github.com/espressif/esptool. Jag följde sedan README filen för att installera detta. Gjorde alla .py-filer körbara genom ”sudo chmod +x *.py”. Därefter flashade jag enheten med

”./esptool.py –port /dev/ttyUSB1 write_flash 0x00000 Firmware.bin”

Kolla först vilken port som USB-Uart är kopplad till och byt ut det mot lämplig port.

För att flasha en egen firmware via Arduini-IDE följ denna guid som borde fungera bra:

http://www.whatimade.today/esp8266-easiest-way-to-program-so-far/

Översättningsutrustning #4

För att få till SSL tillsammans med Icecast följ stengen nedan:

https://jksinton.com/articles/rpi-compiling-icecast-support-openssl

Jag lyckades dock inte med att duplicera .git då configure-filen inte fanns. Laddade istället ner den från icecast hemsida och packade upp med tar -xvf…

 

 

Översättningsserver #2

Prövar mig fram på en raspberry pi med Rasbian installerat

  • Installerar Apache2. Lägger inte till något ytterligare webservermässigt, då detta inte kommer att behövas
  • Installarad dnsmasq som dns-tjänst

I konfigurationsfilen /etc/dnsmasq.conf letar jag upp ”address” och lägger till ”address=/#/192.168.42.27   #IP-numret jag använder. Startar sedan om dns-servern med ”sudo service dnsmasq restart”. Nu pekar DNS-servern på 192.168.42.27 vid alla förfrågningar.

Översättningsserver #3

Efter att DNS:en på routern pekar på IceCast-servern önskar jag att byta port från 8000 till 80 för att den skall kunna komma upp som standardsida i webläsaren:

Icecast körs som standard med:

user: icecast2

group: icecast

Denna användare har inte rättighet att öppna port 80. Ice-Cast måste således köras med Root-privilegier.

Detta kan göras genom att ändra

/etc/default/icecast2 och ända user/group till root

Samt:
/etc/icecast2/icecast.xml och avkommentera <changeowner> och sätta user/group till icecast2/icecast.

Projekt översättningsserver #1

Förutsättningar:

Vi har en kyrklokal med flertalet medlemmar som inte talar svenska. Vi har en befintlig översättningsutrustning med ett antal IR-lurar. Problemet är att dessa måste laddas och underhållas, samt att det är ett begränsat antal.

För att komma runt problemet planerar jag att sätta upp en server med lokal ”internetradio” där man kan koppla upp sig mot rätt kanal och således lyssna på sitt  språk.

Fördelarna är:

  • Alla med en mobiltelefon och hörlurar kan lyssna.
  • Man ser själv till att mobilen är laddad och fungerar
  • Flera språk kan sändas simultant
  • Antalet lyssnare är inte begränsat på samma sätt

Nakdelarna är:

  • Krävs att man vet hur man skall hitta strömmen
  • Eftersom systemet måste buffra kommer det att finnas en delay i systemet

Lösning

  • Linuxserver med Ubuntuserver installerad
  • Apache2 webserver där vi lägger ut tillgängliga språk med länkar till
  • En egen trådlös router utan internettillgång som alla kan koppla upp sig mot.
  • dnsmasq som dns-server som routern är kopplad till. Detta ger en catch-all som alltid pekar på översättningsservern oavsett vad du skriver in i adressfältet
  • Icecast som webradioprogra
  • Ex CoolMic för att sända (android)